Changelog
Every notable change to Shadow Typer — new features, realism tweaks, and the bugs we cared enough to write down. Newest first.
v1.11.0
feature2026-05-26Feedback widget, changelog, deeper realism
- New 'Feedback' floating button on every signed-in page. Submit bugs, feature ideas, or general feedback — admins can triage with status workflow (open / planned / in progress / done / won't fix) and internal notes.
- Public /changelog page (you're reading it) — backfilled history of every notable change since launch.
- Realism: deeper night-time WPM trough (2-4 AM = ~0.45-0.6x base speed; 0-1 AM and 5 AM = ~0.55-0.75x). Casual personas no longer type at noon-speed at 3 AM.
- Realism: burst fatigue — each successive burst within a session adds a longer cooldown and shortens the next active burst, modeling real writers stretching after 5+ focus stretches.
- Job detail: 'Load more' on the recent activity list — see full session history on long jobs instead of just the last 30.
- Default timezone changed to America/New_York (ET) as the worker fallback, so jobs with unset timezone respect ET sleep hours.
v1.10.0
feature2026-05-26Video demo on landing page
- Added a 'See it in action' section under the hero with a real recorded demo of Shadow Typer writing a Google Doc.
- Patched the Dockerfile to copy the public/ folder into the runtime image so static assets ship in production.
- Migrated Fly deployment to a billing-enabled org (no more 5-minute machine kills).
v1.9.0
realism2026-05-25WPM ceiling fix + rush mode UI consistency
- Fixed a long-standing bug where baseCharDelay was capped at 180ms, hard-limiting typing to 67 WPM regardless of persona. Cap is now 40-800ms so Casual (38 WPM) and Power user (75 WPM) actually run at their stated speeds.
- Live status now respects force_continuous: rush mode shows 'writing now' instead of 'next in 2 hours'.
- Added needs_reauth flag — when Google OAuth refresh fails, the worker skips the job and the dashboard shows a re-sign-in banner instead of silently failing.
v1.8.0
feature2026-05-23Formatting toolbar + markdown paste
- B / I / H1-3 / bullet buttons above the text input. Selection-aware wrapping for inline marks; line-prefix logic for headings and lists.
- Paste from Google Docs / Word / web pages now converts to markdown automatically — bold, italics, headings, links, and lists survive the round trip.
- Markdown gets applied to the Doc on completion via a final formatting pass that converts **bold**, *italic*, # headings, and - bullets into real Docs styles.
v1.7.0
feature2026-05-21Admin user profiles + audit log
- Admin can now click into any user to see every job they've created, total characters written, doc IDs touched, and full session history.
- Audit log table records every admin action (pause, resume, delete, force format) with timestamp and admin ID.
- Toast notifications on admin actions so it's obvious when a button actually fired.
v1.6.0
realism2026-05-19Planned revisions across days
- First draft uses weaker word choices on purpose — 'show' instead of 'demonstrate', 'to' instead of 'in order to'. Later sessions quietly upgrade them.
- Homophone swaps (their/there, principal/principle) get planted in early sessions and corrected days later, modeling 'I re-read what I wrote yesterday and caught a thing.'
- ~80 word downgrades, ~30 phrase downgrades, full homophone set in src/lib/upgrades.ts.
- Crunch mode: past 60% of timeline, sessions stretch and break-rate drops. Past 95%, all pending revisions get pulled forward into one marathon polish session.
v1.5.0
feature2026-05-17Live ETA + 24h forecast
- Job page now shows a projected completion timestamp that blends observed throughput with planned pace.
- 24-hour writing forecast: estimated characters in each upcoming window, accounting for vacation days, day intensity, and crunch.
- Activity heatmap with per-day session count.
v1.4.0
realism2026-05-15Per-user typing fingerprint
- Every account gets a permanent randomized WPM jitter, typo bias, and pause pattern. Two users running the same essay produce noticeably different cadences.
- Session 'mood' — flowing, neutral, thoughtful, sluggish — shifts naturally across sessions and shapes burst length, hesitation rate, and typo frequency.
- Per-char delay now uses bigram-aware timing (common letter pairs type faster) and varies with mood.
v1.3.0
feature2026-05-1310 personas + vacation ranges + day intensity
- Persona presets: Cramming student, Steady worker, Thoughtful essayist, Procrastinator, Night owl, Early bird, Weekend warrior, Lunch break, Power user, Casual.
- Vacation date ranges — schedule respects 'I'm gone next weekend' without manually unchecking days.
- Per-weekday intensity slider (0-100%) so users can say 'big push Thursdays, light Saturdays.'
- Conflict detection: if the Doc shrinks below what we've written or grows unexpectedly, the job auto-pauses and emails the user.
v1.2.0
feature2026-05-11Admin panel + bootstrap admin
- Admin sign-in with scrypt-hashed password seeded from ADMIN_EMAIL/ADMIN_PASSWORD env vars (never hardcoded).
- Allowlist mode: when enabled, only listed emails can sign in.
- Per-job admin controls: pause, resume, delete, force format. Server-validated sameOrigin checks on every admin POST.
- Pause-all / Resume-all global controls. Browser notifications opt-in for completion + conflict alerts.
v1.1.0
infra2026-05-09Privacy/Terms pages + Google verification prep
- Privacy Policy and Terms of Service pages with the Google API Services User Data Policy / Limited Use disclosure verbatim.
- Robots.txt, sitemap.xml, PWA manifest, branded favicon, OG metadata.
- AES-256-GCM encryption at rest for stored full_text (key derived from ENCRYPTION_KEY env).
- Self-delete + JSON export endpoints for user data.
v1.0.0
feature2026-05-07Public launch on shadowtyper.ca
- Initial release. Bring-your-own Google account sign-in. Paste text + Google Docs URL + deadline. Worker writes the doc over time on a configurable schedule.
- Realism engine: shallow typos that fix in seconds, burst-pause sessions (12-35s on / 8-35s off), time-of-day energy curve, hard late-night sleep (2-5 AM in user timezone), window-skip probability, 'I'm ahead of schedule' coast behavior.
- Deferred error model — some typos get 'noticed and fixed' seconds later, others get corrected next session, the deepest sit until a final polish pass.
- Custom domain shadowtyper.ca on Fly.io with persistent SQLite volume.