Pre-launch: product checklist, mobile UX, and offline sync deep-dive
Product launch checklist, accessible forms guideline with react-aria + shadcn, physical device testing, before/after codebase comparison, and frontend deployed to Vercel.
The focus shifted from code to product: what's left to launch, how does it feel on a phone, and can the architecture hold up. 17 sessions, 8 unique commits, 10 workspaces on the client project (NDA).
Client project (NDA)
Launch checklist
I created a formal pre-launch checklist: product name (the current one already exists, so I explored alternatives), logo, frontend domain, minimum LGPD (Brazilian data protection) requirements, and a security/performance backlog for the backend. Removed the APK pointer since the app is 100% browser-based (PWA). Main takeaway: before launch, the "New Report" form needs polished mobile-first UX.
Mobile UX and accessible forms
This was the most intense thread of the day. I studied another project of mine (a registration form with great mobile behavior: input scrolls up, keyboard focuses, comfortable space to type) and prepared a prompt to replicate that in the client project.
I wrote an accessible forms guideline combining react-aria-components with shadcn/ui.
The idea: use react-aria for accessibility (labels, errors, focus management) and shadcn for visuals, no conflict.
Organized tasks by frontend vs backend, and started applying the guideline to the NovoRelatorio component.
Tested on a physical device over the local network. The first attempt didn't connect (neither Mac nor phone). Tried ngrok, but it ended up working without it. Found a bug: "New Report" via dashboard didn't load the owner list. It worked fine from the menu.
Codebase comparison (before and after)
I cloned the repo at two distinct hashes (before the massive refactor from the previous two days and after) and generated an HTML report comparing them.
The report covers architecture, performance, security, code quality, complexity, and future opportunities.
I also did a deep-dive into the offline flow: main.tsx to App.tsx, service worker, Dexie as the local queue, uuid_cliente as the idempotency key for sync (noted the name should be more descriptive, something like idempotent_key).
Frontend deployment
The frontend went to Vercel. I investigated whether the reports in the database came from the seed or from cached data that synced when I opened the app. They were from the cache.
tgmarinho-ai-website
Started a blog post about database connection pooling, using the PostgreSQL JDBC documentation as a starting point.
A day where the central question was "what's left to launch?", and the answer came from testing on a real phone, documenting the gap, and building the plan to close it.