• bvandeusen released this 2026-04-29 12:11:21 -04:00 | 0 commits to main since this release

    Hotfix-style follow-up to v26.04.29.1.

    Drop the WeatherCard

    The card expected a flat shape (current_temp, condition, today_high, ...) but the prep payload sends raw OpenMeteo data nested under forecast_json per location. Every field read as null, so the rendered card showed "null°" and "null/null" pinned at the top of the journal chat — covering the actual prep prose.

    The prep prose itself already mentions weather plainly. Removing the redundant card eliminates the bug; the underlying weather data is still in metadata.sections.weather for any future visualization that wants the structured form.

    flutter analyze clean. Tag push triggers the signed-APK build.

    Downloads
  • bvandeusen released this 2026-04-28 22:30:34 -04:00 | 2 commits to main since this release

    Tier 2 offline mode (#147 closed)

    Real offline support: cache everything read, queue everything written, reconcile cleanly on reconnect.

    • Phase 1 — Drift cache + read-through for notes
    • Phase 2 — cache extended to tasks, projects, milestones, calendar events, conversations
    • Phase 3 — generic offline write queue with optimistic UI, server-wins conflict resolution, auto-replay on reconnect
    • Phase 4 — per-row pending-sync indicators

    When you go offline now, edits land in the local cache immediately and queue for replay. The OfflineBanner shows Retry (N) with the pending count; rows with queued writes get a small upload-cloud glyph. On reconnect the queue drains in order; conflicts (someone else edited the same row) and rejections (4xx) surface as one-time SnackBars.

    Design system port (#156 closed)

    The "Illuminated Transcript" design language from the web app lives on Android now: dusty violet (#5B4A8A) accent, warm parchment light surfaces, Moss / Bronze / Oxblood action tokens, and the full Lucide icon set.

    Journal migration

    The Briefing surface is gone; daily Journal takes its place.


    Tag push triggers the signed-APK build; the artifact attaches automatically once CI completes.

    Downloads
  • bvandeusen released this 2026-04-28 09:13:56 -04:00 | 8 commits to main since this release

    Mirrors the FabledScribe v26.04.28.1 web design pass. Single-file change to lib/core/theme.dart — most widgets read colorScheme.primary so the palette flip alone covers a large surface.

    Highlights

    • Palette swap — dark mode flipped from cool grey to Obsidian/Iron/Pewter (#14171A/#1E2228/#3F4651). Light mode flipped from white-and-cool-blue to warm parchment (#F5F1E8/#FBF8F0). Primary color swapped from indigo #7C3AED to dusty violet #5B4A8A in both modes.
    • Action token ThemeExtension — new ActionColors extension exposes Moss / Bronze / Oxblood / Pewter outside the ColorScheme for the Hybrid rule. Read at call sites via Theme.of(context).extension<ActionColors>()!.primary etc. No widget refactors yet — extension is defined for surface-phase work to consume.
    • Typography — Inter loaded for body / labels (was system default). Fraunces still loaded for display / headline / titleLarge ≥18px. JetBrains Mono available at call sites for code.
    • GradientButton recolored — the chat send / journal send / brand-moment CTA equivalent of the web's --gradient-cta. Indigo gradient (#7C3AED#5B21B6) → dusty-violet gradient (#5B4A8A#3F3560).

    Backend requirement

    No new API surface used. Compatible with FabledScribe v26.04.27.1 and newer. Pairs cleanly with the matching FabledScribe v26.04.28.1 release for visual consistency across web and mobile.

    What's deferred

    Per-screen Hybrid-rule button reclassification (Save → Moss FilledButton, Delete → Oxblood, etc.), Lucide icon migration, chat bubble Illuminated Transcript pattern in ChatMessageBubble, input border radius adjustment (24 → 8), voice/tone touchups. Tracked in Fable task #156.

    Reference

    Web foundation pass shipped on FabledScribe at 7a9a8b7 (2026-04-27). Web design system doc: docs/design-system.md in fabledscribe.

    Downloads
  • bvandeusen released this 2026-04-27 08:20:06 -04:00 | 10 commits to main since this release

    Tracks the FabledScribe v26.04.27.1 server-side release. The Daily Briefing is gone; the Journal takes its place.

    Highlights

    • Journal tab replaces Briefing as the home tab post-auth. Daily LLM-generated prep at the top, conversational chat below, weather card preserved.
    • News tab removed along with the entire RSS surface — the backend retired all of it. Nothing of the news/RSS UI remains in the app.
    • Past Days picker (formerly "Past Briefings") browses /api/journal/days and drills into individual days.

    Backend requirement

    This build talks to /api/journal/* endpoints. You need FabledScribe v26.04.27.1 or newer running — older Scribe instances do not have these endpoints and the Journal tab will fail to load.

    Removed

    • News tab + screen
    • All briefing API code, models, providers, widgets
    • openArticleInChat (the from-article entry point — backend endpoint deleted)
    • rssEnabledProvider and the rss-gated nav

    What's deferred

    The Journal screen is a 1:1 functional swap of the Briefing screen with the necessary repointing. A polished mobile-native Journal UX (matching the web side's design-system pass) is a follow-up.

    Downloads
  • bvandeusen released this 2026-04-18 13:14:25 -04:00 | 12 commits to main since this release

    Fixes

    • Server offline no longer "loses" the server URL. When the backend is unreachable at launch, returning users now land on the briefing with a sticky offline banner + retry button instead of the login screen.
    • Network failures (NetworkException) are now distinguished from HTTP 401 in auth verification.
    • Fresh installs with an unreachable server still show the login screen (no stolen trust on a first boot that never authenticated).

    Tier 2 follow-up

    Real offline mode — local store, per-provider last-good caching, and edit reconciliation — is tracked as a follow-up task and is not part of this release.

    Downloads
  • bvandeusen released this 2026-04-17 23:41:17 -04:00 | 14 commits to main since this release

    Highlights

    • Voice input stability — fixed the dual-recorder conflict and the defunct element crashes that were plaguing push-to-talk.
    • Background update downloader — new builds download in the background; a snackbar prompts to install when ready.
    • Inline chat images — images returned by the assistant (Wikipedia thumbnails, image searches) now render in the chat bubble.
    • RSS gating — News tab and briefing news cards respect the server-side rss_enabled setting.
    Downloads
  • bvandeusen released this 2026-04-16 21:01:13 -04:00 | 18 commits to main since this release

    Replace amplitude-based silence detection with Silero VAD v5 ONNX for robust speech-vs-noise classification. Upgrade record to v6. Add no-speech guard on manual stop.

    Downloads
  • v26.04.16.1 Stable

    bvandeusen released this 2026-04-16 01:57:29 -04:00 | 21 commits to main since this release

    Tablet landscape improvements: NavigationRail, chat master-detail, responsive grids, briefing reading column, knowledge snippet fixes, dynamic silence threshold.

    Downloads
  • bvandeusen released this 2026-04-15 00:38:35 -04:00 | 23 commits to main since this release

    Voice

    • Silence detection now auto-calibrates to your mic + room. Once the session peak arms above -20 dBFS, recording stops when current level drops ≥15 dB below peak. Before arming, a -35 dBFS static fallback keeps dead-silent sessions from spinning. 1500 ms grace period at the start.
    • Fixes the bug where recordings wouldn't stop on their own and you had to click the mic a second time.
    Downloads
  • v26.04.14.3 Stable

    bvandeusen released this 2026-04-14 22:55:00 -04:00 | 25 commits to main since this release

    Live amplitude mic pulse

    The mic button now pulses in real time with mic input, giving obvious feedback that audio is actually being picked up.

    VoiceState carries a normalized 0..1 amplitude fed from the existing onAmplitudeChanged subscription (already used for silence detection), with a 0.02 change threshold to keep rebuild traffic sane. VoiceMicButton drops its old constant-rate AnimationController and replaces it with an AnimatedScale + animated glow driven by live amplitude. 0.1 floor keeps the button breathing on silence; 120ms ease-out smooths between the 200ms amplitude samples. Applied at all three call sites — chat, briefing, and the top-app-bar capture mic.

    Downloads