Eight commits in a single day. That's what pre-launch QA looks like when you're building with Claude.
Three things happened in parallel: a full rewrite of the compatibility (궁합, Korean couple fortune reading based on birth dates/times) page, connecting tarot to the payment flow, and running viral copy experiments on the share feature.
Compatibility page rewrite
The compat page had been cutting corners. Birth time input was missing — the calculation was just hardcoded to noon. The report only had 4 sections. I gave Claude a single directive:
"Add birth time input (12 zodiac hour selection) to both people. Feed actual birth hour into the Four Pillars engine. Expand report to 6 sections. Bump KR pricing from ₩3,900 to ₩5,900."
One prompt, one clean response. Birth time UI, engine wiring, 3-way parallel LLM chunking, i18n keys — all in one shot. The diff was dense but readable because the scope was explicit.
| Item | Before | After |
|---|---|---|
| Birth time | Hardcoded noon | 12 zodiac hour selector |
| Report sections | 4 | 6 (added communication + timing) |
| LLM chunks | Sequential | 3 parallel → 3-4K chars target |
| Price (KR) | ₩3,900 | ₩5,900 |
| i18n engine | Korean hardcoded results | Locale-agnostic keys returned |
Three QA rounds
Right after the compat commit I had Claude do a full app audit — list every bug it could find. This approach consistently surfaces things I'd miss alone.
Round 1 (2fe4e2c) caught consistency issues. Header was mixing sticky and fixed across pages. error.tsx and not-found.tsx had no i18n at all. Some API error messages were Korean hardcoded strings leaking into the API layer.
Round 2 (123f515) hit harder. Tarot paywall was using alert() for validation errors. Internal API endpoints were open to header spoofing — added x-internal-secret header verification. Also added useRef double-submit guard on the home form.
Round 3 (121086b) found a critical payment routing bug. Toss (Korean payment gateway, not yet fully implemented) code was already in the codebase, and Korean users were being routed to it. Rerouted back to Paddle for now. Removed a hardcoded fallback in INTERNAL_API_SECRET — that one got fixed immediately.
- Unified headerConsistent fixed position across all pages
- Internal API hardeningx-internal-secret header spoofing protection
- Email i18nReport emails: 8 locales × 5 products, unique subject/CTA per product
- Palm image validation2MB size cap added at both checkout endpoints
- CSP fixblob: added to img-src for palm camera preview
- Analytics unblocked/api/events removed from rate-limited paths (was capping at 5/day)
Tarot sharing + viral copy experiment
Tarot result sharing was missing. Saju (Four Pillars) results had a share button, tarot didn't. Added it, plus teaser content on the share landing page to drive conversion from viewer to paying customer.
The copy experiment was the most interesting part. First shortened the share text to one line, stripped out the personality traits. Theory: shorter = more viral. One commit later, reverted. The longer version with traits turned out to be more compelling to look at. No A/B test, just instinct — needs real data to validate.
Last catch: Hindi OG images were showing the tarot title in English. Small bug, big impression.
8commits in one day
43files changed
640lines added
8locales
3QA rounds
12new tarot i18n keys
Commit log
4f9c985 feat(compat): complete overhaul — birth time, 6 sections, i18n, pricing 2fe4e2c fix: QA fixes — unified header, i18n errors, shared constants, accessibility 123f515 fix: HIGH QA fixes — tarot paywall rewrite, palm image, API security, form guard e303218 fix: add tarot to Paddle checkout, i18n report emails, fix retrieve labels 121086b fix: QA critical fixes — Korean Paddle migration, security, email i18n, palm validation df7c2d9 fix: report page Suspense, remove /api/events rate limit, CSP blob: for palm 9553df1 feat(share): add tarot sharing, teaser content, and improve viral copy across 8 locales cab0e53 fix(share): shorten share text to 1 line, remove traits for better viral conversion ca70ae0 revert: restore longer share text with traits — better for engagement 560dc73 fix(i18n): translate Hindi tarot title in OG route from English to Hindi
Running 3 QA rounds in a single day is heavy but effective. Commit granularity gets messy — 8 commits for one day of work. The upside is the audit trail is clean. Every bug fix is isolated and traceable. I'll take that tradeoff for a pre-launch sprint.
📌 Originally published at Jidong Lab
More AI news and dev logs → jidonglab.com
Top comments (0)