Stream Facility

Development Log

A running record of what's been built, what's underway, and what's on the horizon. Updated as the platform grows.

Last updated 2026-07-12

74

Features built

0

In progress

2

Planned

DesktopBuilt
2026-07

Stream Facility Desktop — Phase 4A: License & Distribution

The desktop app now ships with a full license system: a signed JSON license file downloaded from your account page, verified at startup via HMAC-SHA256, and stored in the OS app data directory. Missing license shows a gate screen; expired license shows a banner but writing keeps working forever.

  • ·License file: { payload, signature } where payload is JSON with authorId, email, version, and a 1-year validThrough date; HMAC-SHA256 signed with DESKTOP_LICENSE_SECRET
  • ·Secret embedded at compile time via build.rs writing to $OUT_DIR — never read from env at runtime; dev builds use an all-zero placeholder automatically
  • ·Startup check: Missing → LicenseGate screen (Get License opens browser, Import License File opens file dialog); Expired → crimson banner, full writing still works, sync disabled; Active → normal app
  • ·Web: GET /api/desktop/license generates and serves the signed file as a browser download; /dashboard/desktop page with OS download links and the Download License button
  • ·Import flow verifies HMAC before writing the file — no restart needed, React state updates immediately after import
  • ·Desktop nav link added to the inside nav bar
DesktopBuilt
2026-07

Stream Facility Desktop — Phase 4D: Full-text Search

Search across all scenes in a draft from the Plan view. A 320px search panel slides in from the right, debounces input at 300ms, and shows up to 50 hits with a context snippet and direct navigate-to-scene on click.

  • ·SQL LIKE query on TipTap JSON content — no FTS5 migration needed; fast enough for typical draft sizes
  • ·Rust recursively extracts plain text from TipTap JSON nodes and builds a ~160-char snippet centred on the match
  • ·Results grouped and ordered by chapter → scene; each hit shows chapter name, scene name, snippet, and word count
  • ·Search and Sync panels are mutually exclusive — opening one closes the other
  • ·Click any result to navigate directly to that scene in Write view
DesktopBuilt
2026-07

Stream Facility Desktop — Phase 4B: Settings & Planning Notes

A dedicated Settings page consolidates account info, platform URL, AI key management, and Write view typography preferences. Separately, chapter summaries and scene notes — fields that existed in the schema but were never shown — now appear as inline text areas in the Plan view on both desktop and web.

  • ·Settings page: Account (email + sign out), Platform (editable URL saved to preferences.json), AI Assist (key status, set/remove), Write View (font size and line spacing toggles)
  • ·Font size (Small/Medium/Large) and line spacing (Normal/Relaxed/Loose) stored in preferences.json; WriteView reads on mount and applies as CSS custom properties --write-font-size and --write-line-height
  • ·Gear ⚙ icon added to Studio and Plan view toolbars
  • ·Chapter summary: two-row textarea below chapter header, save-on-blur
  • ·Scene notes: single-row textarea below each scene row, save-on-blur
  • ·Web platform: new PATCH /api/studio/[draftId]/chapters/[chapterId] route for chapter summaries; both views updated
DesktopBuilt
2026-07

Stream Facility Desktop — Phase 3B: AI Write Assist

A ✦ Assist panel slides in on the right side of the Write view. Four modes — Continue, Improve, Brainstorm, Custom — send selected text or the full scene to Claude and return a response. The Anthropic API key is stored securely in the OS keychain, never on disk.

  • ·Four modes: Continue (1–3 paragraph continuation), Improve (rewrite for clarity and rhythm), Brainstorm (3–5 concrete next ideas), Custom (author-specified instruction)
  • ·Selected text used as focus if present; full scene text always included as context — no character limit
  • ·Anthropic API key stored in OS keychain via the keyring crate — same keychain service as the sync auth token
  • ·Insert at cursor inserts the response directly into the focused TipTap editor at cursor position
  • ·Copy button for using the response outside the app; ✕ to dismiss without inserting
  • ·Remove API key option in the panel footer resets to the key-setup view
DesktopBuilt
2026-07

Stream Facility Desktop — Phase 3A: Entity Sync & Markdown Export

Codex entities from the web platform sync to the desktop app and appear as amber highlights in the Write view. Clicking a highlighted name shows a popup with the entity's type, name, and summary. Drafts can be exported to Markdown with a native save dialog.

  • ·Entity sync: GET /api/desktop/worlds lists the author's worlds; GET /api/desktop/world/[worldId]/entities returns all 6 codex types (characters, locations, items, creatures, organizations, concepts)
  • ·Entities stored locally in a SQLite entities table — name, aliases (JSON), summary, entity_type, world_id
  • ·Entity mention plugin ported from the web platform: ProseMirror decoration overlay highlights entity names in amber in Write view without changing stored TipTap JSON
  • ·EntityPopup: click any highlighted entity name to see a fixed-position popup with type badge, name, and summary
  • ·SyncPanel world picker: Sync Entities button opens a world list; selecting a world pulls entities into SQLite
  • ·Markdown export: PlanView Export button opens a native save dialog; Rust tiptap_to_markdown() handles paragraph, heading, blockquote, lists, hr, and all inline marks
DesktopBuilt
2026-07

Stream Facility Desktop — Phase 2: Core Writing Loop

The full writing loop is working in the native desktop app: plan your draft structure, write in a continuous-scroll TipTap canvas, save version snapshots, and sync to the web platform. PlanView has full drag-and-drop reordering of acts, chapters, and scenes.

  • ·PlanView: Acts → Chapters → Scenes hierarchy with @dnd-kit drag-and-drop, inline rename, collapse/expand, word count totals, Expand All / Collapse All
  • ·WriteView: continuous-scroll TipTap canvas — all scenes render simultaneously; toolbar applies to the focused scene; Scene Break and Chapter Break insertable at cursor
  • ·Scene version control: ⎘ Save Version and ⎇ Version History per scene; ⎘ Save Manuscript Version for a bulk snapshot across all scenes
  • ·Sync panel: sign in with Stream Facility credentials, link local draft to a web draft, push dirty scenes, pull updates
  • ·Desktop API routes on web platform: POST /api/desktop/auth/token (90-day JWT), GET /api/desktop/drafts, scene pull and push routes
  • ·Entity mention plugin registered from launch with a live entity list — highlights update after every entity sync
DesktopBuilt
2026-07

Stream Facility Desktop — Phase 1: Foundation

A native desktop writing app built with Tauri v2 — roughly 5 MB vs Electron's 150 MB. A .sfstudio SQLite file is created or opened at launch. The Launcher screen handles New World, Open World, and a Recent Worlds list. All draft, chapter, scene, revision, and sync tables initialise on first open.

  • ·Tauri v2 + React + Vite + TypeScript — one binary, no Electron, no Chromium bundle
  • ·SQLite schema with WAL mode: drafts, acts, chapters, scenes, scene_revisions, sync_config — mirrors web platform MongoDB collections
  • ·Project stored as a portable .sfstudio file (SQLite database) — copy the file to move the project
  • ·Launcher: New World / Open World dialogs via Tauri file dialog; Recent Worlds list in the sidebar
  • ·Full type-safe Rust command layer in src-tauri/src/commands/ with tauri-commands.ts wrapper on the frontend
  • ·Same sf-* design tokens as the web platform via a copied @theme {} block — zero UI divergence

This log tracks platform features, not individual content. For questions or feedback, get in touch.