Dek

Koder Dek — Audio Recorder with AI Transcription

  • *rea:*Workspace
  • *ath:*products/horizontal/dek/app
  • *ersion:*1.9.52
  • *tatus:*Active
  • *ind:*Flutter app — mobile + desktop (Android, iOS, Windows, macOS, Linux, Web)

Role in the stack

Koder Dek is Koder's audio recorder flagship, built to match Samsung Voice Recorder (One UI 7) in UI fidelity while adding an AI-powered transcription and analysis layer unique to the Koder ecosystem.

Users record voice memos; Dek uploads them to ai/voice for transcription, speaker diarization, summarization, and tag extraction. The result is displayed as chatbubble segments per speaker with an AIgenerated summary at the top — a pattern familiar from Samsung's Transcript mode, extended with Koder's AI backend.

Dek ships as a native Flutter app for Android (.apk/Google Play), Linux (.deb via Koder Hub, x8664), Windows (.msi planned), iOS, and macOS. The recording engine wraps platform-specific audio APIs via the record package; playback uses `justaudio + media_kit` on desktop.

Core capabilities

  • *ecording*— AACLC, realtime amplitude waveform (Samsung-style), pause/resume, bookmarks
  • *layback*— scrubbable waveform, skip ±5s, speaker-colored transcript bubbles
  • *I transcription*— multipart upload to ai/voice, Whisper model selection (tinylarge-v3), bearer-token auth
  • *anage recordings*— categories, tags, trash (softdelete + autopurge), search, sort, bulk edit
  • *eport templates*— user-defined AI report templates attached to tags (e.g. tag Therapy → templates "Clinical note", "Diagnosis", "Symptoms"). Each template has a title, an LLM prompt, and an enabled toggle. Generation modal: pick tags → pick enabled templates → generate. Reports persist locally and sync via KDrive.
  • *ettings*— LLM provider picker (Koder AI / OpenAI / Anthropic / Google), endpoint + token override
  • *elf-update*— checks hub.koder.dev via engines/sdk/store on launch
  • *loud sync*— bidirectional sync to Google Drive and Koder Drive with per-recording badge, sync history, completion notifications, and conflict policies
  • *atch export*— multi-select audio share or ZIP transcript export
  • *ndroid widget*— 1×1 homescreen quickrecord widget
  • *ersistent playback speed*— preferred speed saved across sessions
  • *oder ID login*— dedicated "Conta Koder" section in Settings; OIDC PKCE signin via koder_kit's KoderAuth (crosssurface — AndroidiOS custom scheme, desktop loopback, web redirect to `dek.koder.devauth/callback`); displays user name + email; sign-out revokes local tokens
  • *18n*— runtime locale switcher (KoderLanguagePicker in Settings § Aparência), Wave 1 baseline enUS + ptBR via KoderL10n per specs/i18n/contract.kmd (mass migration of remaining hardcoded strings tracked at backlog #095)

Primary couplings

Dependency Relationship
ai/voice Transcription backend — multipart upload of audio, returns transcript + speaker segments + summary + tags. Also provides POST /v1/llm/complete (textonly LLM completion) consumed by the reporttemplates feature
engines/sdk/store Self-update: checks Koder Hub for newer version on launch
ai/gateway Routes to third-party LLM providers (OpenAI, Anthropic, Google) when selected in settings
foundation/id Koder ID OIDC auth (account section + KDrive PKCE login)

Distribution

  • Android: Google Play / Koder Hub (dev.koder.dek) — current v1.9.30 (arm64 APK)
  • Linux: koder-dek-linux-x86_64.deb via Koder Hub — v1.9.30, GTK3, ALSA/PipeWire, media_kit, binary kdek
  • Web: *ive at https://dek.koder.dev/*(deployed 20260517, #094 Fase 3). Flutter Web app at root; landing at /about/; OAuth callback /auth/callback (SPA fallback). Vhost dek.koder.dev in infra/net/jet/sites.toml with spa=true; TLS via services/foundation/certs (DNS01 ClouDNS, valid Apr 21 → Jul 20 2026). Selfhosted Inter + JetBrains Mono fonts; zero third-party origin requests verified.
  • Windows: .msi planned
  • iOS / macOS: planned

Status

*1.9.38*— production. #085 P3 — SyncClient shipped at lib/core/sync/. Talks to services/foundation/sync over REST + WebSocket per RFC001. 13 unit tests green against mock HTTP/WS. Not yet wired into MetadataSyncService (P3.1 followup).

*1.9.37*— *18n mass migration (#095) closed* Wave 9 bulkmigrated 40 call sites in settings_screen.dart via Python regex pass, finally wiring Wave 3 baseline keys into both the Google Drive + Koder Drive sections (which share labels). 175 userfacing strings translatable; 132 keys registered across enUS + ptBR (Waves 1–9). Every visible string in the Dek UI across 18+ files routes through KoderL10n.t() — recording, playback, reports, tags, settings, folder pickers, sync history, categories drawer, dialogs, editor, interpreter, report widgets. Switching to enUS produces a recognizable English surface endtoend. All 10 i18n regression tests green (cases #540#542 + #553-#559). Ticket moved to done/.

*1.9.36*— i18n Wave 8 (#095): longtail dialogs + report widgets migrated — saverecordingdialog, audioeditorscreen, interpreterscreen, generatereportmodal, reporttemplate_editor. 13 call sites, 7 new keys. 135 userfacing strings translatable; 131 keys registered across enUS + ptBR (Waves 1–8). All 9 i18n regression tests green. The Dek UI outside settings_screen long tail is now substantially translatable — switching to en-US produces a recognizable English surface across every visible screen, dialog, modal, and shared widget.

*1.9.35*— i18n Wave 7 (#095): 4 mostreused shared widgets (folder pickers Drive+KDrive, sync history, categories drawer) migrated — 20 call sites, 8 new keys. 122 userfacing strings translatable; 124 keys registered across enUS + ptBR (Waves 1–7). All 8 i18n regression tests green. The crosscutting UI is now broad enough that switching to enUS produces a recognizable English surface across recording, playback, reports, tags, settings, folderpicking, and synchistory flows. Long tail of remaining strings (~30) in dialogs (saverecordingdialog, audioeditorscreen) + report widgets (generatereportmodal, reporttemplateeditor) tracked as Wave 8+.

*1.9.34*— i18n Wave 6 (#095): reports flow (templates list, generated reports, singlereport viewer) + tags management screen migrated — 23 call sites with 13 new keys. 102 userfacing strings translatable; 116 keys registered across enUS + ptBR (Waves 1–6). Structural regression test #556 added; all 7 i18n tests green. Three top-traffic screens (settingsrecordingsplayback) + entire reports flow + tags screen now substantially translatable; long tail remains in dialogs/widgets (~50 strings, ~10 files).

*1.9.33*— i18n Wave 5 (#095): playback_screen.dart substantially migrated — 32 call sites covering 13 PopupMenuItem actions, 3 longrunning snackbar pairs, summary section, edittranscript dialog, rename dialog, and Velocidade labels. 79 userfacing strings translatable; 103 keys registered across enUS + ptBR (Waves 1–5). Structural regression test #555 added. The two toptraffic screens (settings_screen.dart + recordings_screen.dart + playback_screen.dart) now all have majority i18n coverage; remaining work is the long tail (reportstagswidgets).

*1.9.32*— i18n Wave 4 (#095): recordings_screen.dart substantially migrated — 19 call sites now route through KoderL10n covering the recordingmode bottomsheet, 5 PopupMenuItem actions, 3 dialog titles + buttons, 5 snackbar messages, and the ZIPcreation progress dialog. 47 userfacing strings translatable; 77 keys registered across enUS + ptBR (Waves 1–4). Structural regression test #554 added. recordings_screen.dart is now the second screen (after settings_screen.dart) with majority i18n coverage; playback_screen.dart remains as the largest pending file (34 strings, Wave 5 target).

*1.9.31*— Web variant Fase 3 deploy complete (#094) — dek.koder.dev serves the Flutter app at / with the branded shell (Verge #3584E4 accent + selfhosted InterJetBrains Mono fonts + OGTwitter meta image at `aboutogimage.png); landing at about; SPA fallback wired for authcallback handing the OIDC code to Flutter Router. Jet vhost config drift fixed (container jet:etckoderjet/sites.toml was missing spa=true while repo had it). Flutter web build unblocked via conditional export pattern for whisperlocalservice.dart (_io.dart` keeps the FFIbacked impl; _web.dart stub throws UnsupportedError; barrel if (dart.library.js_interop)). i18n Wave 3 (#095) migrates 5 SnackBars + 3 connectionstatus labels + 6 dialog elements + reusable Cancel/Save in settings_screen.dart (28 userfacing strings now route through KoderL10n); structural regression test landed (registry case #553). RFC001 crossdevice metadata sync drafted at dek/app/docs/rfcs/RFC-001-cross-device-metadata-sync.kmd (#085) recommending a new services/foundation/sync push service backed by kdb + WebSocket fanout (Path B over polling stopgap Path A). Tsuite (T1T8+N1N4 per specs/auth/oauth-flow-test-template.kmd) remains blocked by G1 stub Koder ID infra; #095 Wave 4+ (~150 hardcoded strings remaining in playbackrecordingsreports) and #092 captureengine migration (blocked by MCAP003/004) tracked as follow-ups.

*1.9.30*— Web variant productionization Fase 1246 scaffold — branded Flutter Web shell (Verge tokens + self-hosted Inter+JetBrains Mono + OGTwitter meta), Jet vhost declared for dek.koder.dev (deploy pending — closed in v1.9.31), OAuth Koder ID unified on koder_kit.KoderAuth crossplatform (drops flutter_appauth + flutter_secure_storage custom stack), i18n scaffold (Wave 1 enUS + pt-BR via KoderL10n, KoderLanguagePicker in Settings).

*1.9.29*— production. Adds Linux ALSA fallback recording (DEK-76): when parecordPulseAudio is unavailable but arecord + ffmpeg are present, Dek records via a direct arecord | ffmpeg subprocess pipeline (pauseresume + live amplitude not supported in this mode).

*1.9.24*— Adds the reporttemplates feature: users can define AI report templates attached to recording tags (e.g. tag Therapy → templates "Clinical note", "Diagnosis"). Generation modal picks enabled templates, calls ai/voice /v1/llm/complete, and saves reports to local storage with KDrive metadata sync (`dektemplates.json, dekreports.json`). Includes a Tags Inventory for crossrecording tag management and a Reports screen with viewer.

*1.9.23*— restores the Android APK artifact in the Flow release and Koder Hub publication path, keeps the Linux .deb current, and defers the self-update prompt until the root navigator context is ready.

Source: ../home/koder/dev/koder/meta/docs/stack/modules/dek.md