- Hourly PASSIVE WAL checkpoint prevents unbounded WAL growth and
ensures all writes are merged into the main .db file regularly.
Previously the WAL was never checkpointed — all data was accumulating
in stories.db-wal with no protection if that file was lost.
- Daily backup using better-sqlite3 .backup() writes a safe online
snapshot to data/backups/stories-YYYY-MM-DD.db on startup and
every 24 h; keeps last 7 days, pruning older ones automatically.
- busy_timeout = 5000 so concurrent requests wait briefly rather
than failing with SQLITE_BUSY.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The server at ai.binarygnome.com is Open WebUI, not a bare Ollama
instance. Open WebUI proxies Ollama at /ollama/v1/... rather than /v1/...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The server at ai.binarygnome.com returns 405 on POST /api/generate,
which means it speaks the OpenAI-compatible API rather than the native
Ollama format. Switch to /v1/chat/completions with messages[] payload
and data.choices[0].message.content response parsing.
Also add optional OLLAMA_API_KEY env var for servers that require a
Bearer token.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Notes: per-story rich-text notes panel (right drawer) with TipTap
editor, image support, autosave, and full CRUD API
- Font picker: 15 Google Fonts selectable from a floating Aa button,
persisted to localStorage via --font-body CSS variable
- Sticky toolbar: pulled formatting bar out of overflow:hidden wrapper
so it sticks below the topbar while scrolling
- Prompts: 100 additional built-in prompts (120 total) in a shuffled
no-repeat queue; pre-fetch on page load so the AI has time to respond;
timeout raised to 45s; error logging + /api/prompts/test debug endpoint;
source badge shows whether prompt came from AI or built-in list
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Login now uses username instead of email
- DB migration renames email -> username on existing databases
- Users can change their own password from the Stories page
- Admin can reset any user's password from the admin panel
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>