“Just some finishing touches before launch.”
3 months later...
My JSON file is possessed
Cursor keeps suggesting duplicate keys… and silently judging me
Supabase serves stale data from another timeline
Next.js wants use client but won’t tell me where
And my multilingual components translate everything... except the part that matters

SocialRally is my baby —
a gamified platform that turns content into interactive quests.
But right now? I’m deep in a final boss fight straight out of Elden Ring,
battling async dragons, haunted layouts, and bugs that only appear when someone’s watching.
Your Git branches are clean.
➜ But the only working version lives in a forgotten stash.
Everything works in dev.
➜ But crashes in prod… at exactly 3 AM.
100% test coverage.
➜ 0% confidence every time you hit npm run build.
"Undefined is not a f@%ing function." ➜ And yet, somehow… it used to be.
My SaaS is 98% done.
But the last 2%?
A dungeon full of TypeError dragons, cursed i18n keys, and AI inventing components you never wrote.
Wanna test it? Show me your own zombie bug?
Or just send a React spell my way?
I’m here.
And if you’ve fought Next.js + Supabase + Cursor + JSON + i18n + npm run build + caching bugs + git stash regrets solo…
You’ve earned your place in Valhalla. 🧙♀️🔥⚔️

#buildinpublic #nextjs #supabase #cursor #i18n #jsonhell #solodev #valhalla
Two tools that catch exactly this:
`i18n-validate` — finds missing keys, stale keys, and placeholder mismatches across all your locale files. Add to CI and broken translations never ship: `npx @i18n-agent/i18n-validate --base messages/en.json --targets messages/*.json --fail-on-error`
`i18n-pseudo` — pseudo-localizes your English file so untranslated strings visually stand out (unchanged text = hardcoded, not going through i18n): `npx @i18n-agent/i18n-pseudo messages/en.json --out messages/pseudo.json`
Both open-source, no cloud.
The Supabase stale data thing is real. I've hit that with RLS policies caching in unexpected ways. Took me an embarrassing amount of time to realize the data wasn't stale, the policy was just evaluating against a cached auth context.
The "98% done, 2% remaining, 2% is a dungeon" framing is painfully accurate. That last stretch is where you discover every edge case you ignored during the fun part. I've started building the boring stuff (error handling, empty states, loading skeletons) first now, just so the final push is the interesting work instead of the tedious stuff.