Week in Review: Fluency Gym, Auth Cleanup, and Finally Being Honest About Sign-In
119 commits across Firstly Academy and english-exercises.org, mostly spent removing friction: Fluency Gym got a cleaner flow, anonymous progress stopped leaking into the database, and I finally admitted sign-in was not ready yet.
119 commits this week. A lot of them were not glamorous.
This was one of those weeks where I spent a stupid amount of time fixing the bits that make a product feel slightly off. Not broken enough to explode. Just annoying enough to quietly wear people down.
Firstly Academy
The main Fluency Gym change was structural: session creation and SM-2 scheduling are now decoupled.
That sounds dry, because it is dry. But it matters. The old flow was doing too much at once, which meant the schedule modal could create weird side effects and the whole thing felt more complicated than it needed to.
So I cleaned it up:
- back button during a practice session
- Continue now returns you to the input page after completion
- completion status loads cleanly on mount
- no default intensity level sneaking in and creating unwanted schedules
- celebration and XP bonus triggers behave properly instead of trying to party five times
Basically: less hidden behaviour, more obvious behaviour. Always the better trade.
english-exercises.org
The other half of the week was auth and anonymous progress cleanup.
I fixed local progress syncing so it tracks attempts and completions properly, stopped writing anonymous sessions to Neon, passed userId through the right paths, and made local storage clear only when sync actually succeeds.
That last bit matters more than it sounds. Nothing destroys trust faster than a system acting confident while quietly binning your progress.
I also hit the point where I had to stop pretending sign-in was ready. So I disabled sign-up and sign-in in production and replaced them with a plain “Coming Soon” message.
Not ideal. Also correct.
Half-built auth is worse than no auth. It invites users into a room where the floor isn’t finished yet.
The Pattern
This week wasn’t about adding a flashy new thing. It was about stopping the apps from being weird in small ways.
That’s most of the real work, tbh.
You get the fun screenshot features later. First you have to fix the invisible stuff:
- the schedule flow that does too much
- the database writes that should not exist
- the sync logic that looks fine until it really isn’t
Annoying week. Useful week.
Building in public continues.