├── .github
├── FUNDING.yml
└── workflows
│ ├── build_android.yml
│ ├── prerelease_android.yml
│ └── prerelease_ios.yml
├── .gitignore
├── .metadata
├── .run
└── release.run.xml
├── CONTRIBUTING.md
├── COPYING
├── LICENSE
├── README.md
├── analysis_options.yaml
├── android
├── .gitignore
├── Gemfile
├── Gemfile.lock
├── app
│ ├── build.gradle
│ ├── gradle
│ │ └── wrapper
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── proguard-rules.pro
│ └── src
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── kotlin
│ │ │ └── chat
│ │ │ │ └── saga
│ │ │ │ └── voice_outliner
│ │ │ │ └── MainActivity.kt
│ │ └── res
│ │ │ ├── drawable-v21
│ │ │ └── launch_background.xml
│ │ │ ├── drawable
│ │ │ └── launch_background.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── launcher_icon.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── launcher_icon.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── launcher_icon.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── launcher_icon.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── launcher_icon.png
│ │ │ ├── values-night
│ │ │ └── styles.xml
│ │ │ └── values
│ │ │ └── styles.xml
│ │ └── profile
│ │ └── AndroidManifest.xml
├── build.gradle
├── fastlane
│ ├── Appfile
│ ├── Fastfile
│ └── README.md
├── gradle.properties
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
└── settings.gradle
├── assets
├── icon
│ └── icon.png
├── onboarding
│ ├── 1.png
│ ├── 2.png
│ ├── 3.png
│ ├── 4.png
│ └── 5.png
└── screenshots
│ ├── 1.png
│ ├── 2.png
│ ├── 3.png
│ ├── 5inch-iPhone
│ ├── 1.png
│ ├── 2.png
│ └── 3.png
│ ├── android
│ ├── 1.png
│ ├── 2.png
│ ├── 3.png
│ └── 4.png
│ └── ipad
│ ├── 1.png
│ ├── 2.png
│ └── 3.png
├── deploy_android.sh
├── deploy_ios.sh
├── fonts
├── WorkSans-Medium.ttf
├── WorkSans-Regular.ttf
└── WorkSans-SemiBold.ttf
├── ios
├── .gitignore
├── Flutter
│ ├── AppFrameworkInfo.plist
│ ├── Debug.xcconfig
│ └── Release.xcconfig
├── Gemfile
├── Gemfile.lock
├── Podfile
├── Podfile.lock
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
├── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ ├── Icon-App-20x20@1x.png
│ │ │ ├── Icon-App-20x20@2x.png
│ │ │ ├── Icon-App-20x20@3x.png
│ │ │ ├── Icon-App-29x29@1x.png
│ │ │ ├── Icon-App-29x29@2x.png
│ │ │ ├── Icon-App-29x29@3x.png
│ │ │ ├── Icon-App-40x40@1x.png
│ │ │ ├── Icon-App-40x40@2x.png
│ │ │ ├── Icon-App-40x40@3x.png
│ │ │ ├── Icon-App-60x60@2x.png
│ │ │ ├── Icon-App-60x60@3x.png
│ │ │ ├── Icon-App-76x76@1x.png
│ │ │ ├── Icon-App-76x76@2x.png
│ │ │ └── Icon-App-83.5x83.5@2x.png
│ │ └── LaunchImage.imageset
│ │ │ ├── Contents.json
│ │ │ ├── LaunchImage.png
│ │ │ ├── LaunchImage@2x.png
│ │ │ ├── LaunchImage@3x.png
│ │ │ └── README.md
│ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ ├── GoogleService-Info.plist
│ ├── Info.plist
│ ├── Runner-Bridging-Header.h
│ └── Runner.entitlements
└── fastlane
│ ├── Appfile
│ ├── Fastfile
│ ├── Matchfile
│ ├── README.md
│ ├── metadata
│ ├── copyright.txt
│ ├── en-US
│ │ ├── apple_tv_privacy_policy.txt
│ │ ├── description.txt
│ │ ├── keywords.txt
│ │ ├── marketing_url.txt
│ │ ├── name.txt
│ │ ├── privacy_url.txt
│ │ ├── promotional_text.txt
│ │ ├── release_notes.txt
│ │ ├── subtitle.txt
│ │ └── support_url.txt
│ ├── primary_category.txt
│ ├── primary_first_sub_category.txt
│ ├── primary_second_sub_category.txt
│ ├── review_information
│ │ ├── demo_password.txt
│ │ ├── demo_user.txt
│ │ ├── email_address.txt
│ │ ├── first_name.txt
│ │ ├── last_name.txt
│ │ ├── notes.txt
│ │ └── phone_number.txt
│ ├── secondary_category.txt
│ ├── secondary_first_sub_category.txt
│ └── secondary_second_sub_category.txt
│ └── screenshots
│ └── en-US
│ ├── 0_APP_IPAD_PRO_129_0.png
│ ├── 0_APP_IPAD_PRO_3GEN_129_0.png
│ ├── 0_APP_IPHONE_55_0.png
│ ├── 0_APP_IPHONE_65_0.png
│ ├── 1_APP_IPAD_PRO_129_1.png
│ ├── 1_APP_IPAD_PRO_3GEN_129_1.png
│ ├── 1_APP_IPHONE_55_1.png
│ ├── 1_APP_IPHONE_65_1.png
│ ├── 2_APP_IPAD_PRO_129_2.png
│ ├── 2_APP_IPAD_PRO_3GEN_129_2.png
│ ├── 2_APP_IPHONE_55_2.png
│ └── 2_APP_IPHONE_65_2.png
├── lib
├── consts.dart
├── data
│ ├── note.dart
│ └── outline.dart
├── globals.dart
├── main.dart
├── repositories
│ ├── db_repository.dart
│ ├── drive_backup.dart
│ ├── ios_speech_recognizer.dart
│ └── vosk_speech_recognizer.dart
├── state
│ ├── notes_state.dart
│ ├── outline_state.dart
│ └── player_state.dart
├── views
│ ├── drive_settings_view.dart
│ ├── ios_transcription_setup_view.dart
│ ├── map_view.dart
│ ├── notes_view.dart
│ ├── onboarding_view.dart
│ ├── outlines_view.dart
│ ├── settings_view.dart
│ ├── timeline_view.dart
│ └── vosk_transcription_setup_view.dart
└── widgets
│ ├── ios_locale_selector.dart
│ ├── markdown_exporter.dart
│ ├── note_item.dart
│ ├── note_wizard.dart
│ ├── outline_wizard.dart
│ ├── outlines_list.dart
│ ├── record_button.dart
│ ├── result_note.dart
│ └── search_results_list.dart
├── pubspec.lock
├── pubspec.yaml
├── submit_ios.sh
└── website
├── .gitignore
├── .parcelrc
├── README.md
├── package.json
├── src
├── 1.png
├── 2.png
├── 3.png
├── app_store.svg
├── apple-app-store-badge.svg
├── icon-w.png
├── icon.png
├── index.css
├── index.html
└── play_store.svg
├── static
├── android-chrome-192x192.png
├── android-chrome-512x512.png
├── apple-touch-icon.png
├── card.png
├── favicon-16x16.png
├── favicon-32x32.png
├── favicon.ico
├── favicon.png
└── site.webmanifest
└── yarn.lock
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | github: maxkrieger
2 |
--------------------------------------------------------------------------------
/.github/workflows/build_android.yml:
--------------------------------------------------------------------------------
1 | name: build_android
2 |
3 | on:
4 | push:
5 | branches:
6 | - main
7 |
8 | jobs:
9 | build_android:
10 | runs-on: ubuntu-latest
11 | steps:
12 | - uses: actions/checkout@v2
13 |
14 | - name: Setup ruby
15 | uses: ruby/setup-ruby@v1
16 | with:
17 | ruby-version: 2.7.2
18 | bundler-cache: true
19 |
20 | - name: Bundle install
21 | run: cd ./android && bundle install
22 |
23 | - name: Setup JDK
24 | uses: actions/setup-java@v1
25 | with:
26 | java-version: "11.x"
27 |
28 | - name: Dump Secrets
29 | run: |
30 | echo "SENTRY_DSN='${{secrets.SENTRY_DSN}}'" > .env
31 | cd android/
32 | echo "${{secrets.KEYSTORE}}" > keystore.b64
33 | base64 -d -i keystore.b64 > keystore.jks
34 | echo "${{secrets.KEY_PROPERTIES}}" > key.properties
35 |
36 | - name: Setup flutter
37 | uses: subosito/flutter-action@v1
38 | with:
39 | channel: "stable"
40 |
41 | - name: Install tools
42 | run: |
43 | flutter pub get
44 |
45 | - name: Flutter build release
46 | run: |
47 | unset ANDROID_NDK_HOME
48 | flutter build appbundle
--------------------------------------------------------------------------------
/.github/workflows/prerelease_android.yml:
--------------------------------------------------------------------------------
1 | name: prerelease_android
2 |
3 | on:
4 | release:
5 | types:
6 | - prereleased
7 |
8 | jobs:
9 | deploy_android:
10 | runs-on: ubuntu-latest
11 | steps:
12 | - uses: actions/checkout@v2
13 |
14 | - name: Setup ruby
15 | uses: ruby/setup-ruby@v1
16 | with:
17 | ruby-version: 2.7.2
18 | bundler-cache: true
19 |
20 | - name: Bundle install
21 | run: cd ./android && bundle install
22 |
23 | - name: Setup JDK
24 | uses: actions/setup-java@v1
25 | with:
26 | java-version: "11.x"
27 |
28 | - name: Dump Secrets
29 | run: |
30 | echo "SENTRY_DSN='${{secrets.SENTRY_DSN}}'" > .env
31 | cd android/
32 | echo "${{secrets.KEYSTORE}}" > keystore.b64
33 | base64 -d -i keystore.b64 > keystore.jks
34 | echo "${{secrets.KEY_PROPERTIES}}" > key.properties
35 | echo "${{secrets.GOOGLE_PLAY_JSON_CONTENT}}" > google_play.b64
36 | base64 -d -i google_play.b64 > google_play.json
37 |
38 | - name: Setup flutter
39 | uses: subosito/flutter-action@v1
40 | with:
41 | channel: "stable"
42 |
43 | - name: Install tools
44 | run: |
45 | flutter pub get
46 |
47 | - name: Flutter build release
48 | run: |
49 | unset ANDROID_NDK_HOME
50 | flutter build appbundle
51 |
52 | - name: Deploy beta to Play Store
53 | run: |
54 | cd ./android && bundle exec fastlane beta
55 | env:
56 | PLAY_APP_IDENTIFIER: ${{ secrets.PLAY_APP_IDENTIFIER }}
57 |
--------------------------------------------------------------------------------
/.github/workflows/prerelease_ios.yml:
--------------------------------------------------------------------------------
1 | name: prerelease_ios
2 |
3 | on:
4 | release:
5 | types:
6 | - prereleased
7 |
8 | jobs:
9 | deploy_ios:
10 | runs-on: macos-latest
11 | steps:
12 | - uses: actions/checkout@v2
13 |
14 | - name: Select Xcode Version
15 | uses: maxim-lobanov/setup-xcode@v1
16 | with:
17 | xcode-version: latest-stable
18 |
19 | - name: Setup ruby
20 | uses: ruby/setup-ruby@v1
21 | with:
22 | ruby-version: 2.7.2
23 | bundler-cache: true
24 |
25 | - name: Bundle install
26 | run: cd ./ios && bundle install
27 |
28 | - name: Setup JDK
29 | uses: actions/setup-java@v1
30 | with:
31 | java-version: "12.x"
32 |
33 | - name: Setup flutter
34 | uses: subosito/flutter-action@v2
35 | with:
36 | channel: "stable"
37 | architecture: x64
38 |
39 | - uses: webfactory/ssh-agent@v0.5.3
40 | with:
41 | ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
42 |
43 | - name: Install tools
44 | run: |
45 | flutter pub get
46 | cd ./ios && pod install
47 |
48 | - name: Flutter build release
49 | run: |
50 | flutter build ios --release --no-codesign
51 |
52 | - name: Dump Secrets
53 | run: |
54 | echo "SENTRY_DSN='${{secrets.SENTRY_DSN}}'" > .env
55 | cd ios/
56 | echo "${{secrets.CONNECT_KEY}}" > ci.p8
57 |
58 | - name: Deploy to TestFlight
59 | run: |
60 | cd ./ios && bundle exec fastlane beta_ci
61 | env:
62 | MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
63 | MATCH_GIT: ${{ secrets.MATCH_GIT }}
64 | CONNECT_KEY_ID: ${{ secrets.CONNECT_KEY_ID }}
65 | CONNECT_ISSUER_ID: ${{ secrets.CONNECT_ISSUER_ID }}
66 | ITC_TEAM_ID: ${{ secrets.ITC_TEAM_ID }}
67 | TEAM_ID: ${{ secrets.TEAM_ID }}
68 | APPLE_ID: ${{ secrets.APPLE_ID }}
69 | APP_IDENTIFIER: ${{ secrets.APP_IDENTIFIER }}
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.log
4 | *.pyc
5 | *.swp
6 | .DS_Store
7 | .atom/
8 | .buildlog/
9 | .history
10 | .svn/
11 |
12 | # IntelliJ related
13 | *.iml
14 | *.ipr
15 | *.iws
16 | .idea/
17 |
18 | # The .vscode folder contains launch configuration and tasks you configure in
19 | # VS Code which you may wish to be included in version control, so this line
20 | # is commented out by default.
21 | #.vscode/
22 |
23 | # Flutter/Dart/Pub related
24 | **/doc/api/
25 | **/local.p8
26 | **/ios/Flutter/.last_build_id
27 | .dart_tool/
28 | .flutter-plugins
29 | .flutter-plugins-dependencies
30 | .packages
31 | .pub-cache/
32 | .pub/
33 | /build/
34 | ios/build/
35 |
36 | # Web related
37 | lib/generated_plugin_registrant.dart
38 |
39 | # Symbolication related
40 | app.*.symbols
41 |
42 | # Obfuscation related
43 | app.*.map.json
44 |
45 | # Android Studio will place build artifacts here
46 | /android/app/debug
47 | /android/app/profile
48 | /android/app/release
49 | ios/fastlane/report.xml
50 | assets/speech_acct.json
51 | local.properties
52 | android/fastlane/report.xml
53 | key.properties
54 | *.p8
55 | ios/fastlane/local.p8
56 | android/google_play.json
57 |
58 | ios/Runner.ipa
59 | ios/Runner.app.dSYM.zip
60 |
61 | *.env
62 | ios/fastlane/Preview.html
63 |
--------------------------------------------------------------------------------
/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled and should not be manually edited.
5 |
6 | version:
7 | revision: 4cc385b4b84ac2f816d939a49ea1f328c4e0b48e
8 | channel: stable
9 |
10 | project_type: app
11 |
--------------------------------------------------------------------------------
/.run/release.run.xml:
--------------------------------------------------------------------------------
1 | Voiceliner
2 |
3 | A voice memos-like for Android and iOS. Written in Flutter. Transcription on iOS uses the native transcription APIs (mostly on-device) and on Android, uses [Vosk](https://github.com/alphacep/vosk-api).
4 | The codebase is still quite messy, but contributions welcome!
5 |
6 | ## Screenshots
7 |
8 |
![]() |
11 | ![]() |
12 | ![]() |
13 |