In launch prep
Jainav Infotech platform
My company's website and store — product mini-sites, Razorpay checkout, GST invoices and a licensing API, in English and Hindi.
- Role
- Founder, product owner and spec author
- Timeline
- October 2026 (built 15–18 Oct)
- Status
- In launch prep. The code is complete through store operations; the site isn't live yet.
- Next.js 16
- React 19
- Payload CMS 3
- PostgreSQL 17
- Tailwind CSS 4
- next-intl
- Motion
- Razorpay
- Resend
- Cloudflare (R2, Turnstile, Tunnel)
- Sentry
- Umami
- Docker
- Caddy
- GitHub Actions
TL;DR
Problem
A product company needs more than a brochure. It has to sell software, issue licence keys and invoices that satisfy Indian GST, and work for Hindi-speaking restaurant owners on their phones.
What I built
A Next.js + Payload CMS platform, specified in a ~1,000-line spec and built in ten reviewed phases (0–9): content, design system, forms, checkout, invoicing, licensing and store operations.
Result
About 355 automated tests, Lighthouse accessibility and SEO scores of 100 in local runs, and about 175 KB of initial JavaScript.
01 / 07 Sign in
View dataHide data
| Step | What happens |
|---|---|
| 01 Sign in | Email-code sign-in (6 digits, 10-minute expiry, 5 attempts) |
| 02 Checkout | Razorpay order + checkout |
| 03 Verify | Signature verified AND payment re-fetched from Razorpay |
| 04 Fulfil | Idempotent fulfilment in one transaction (reconciliation job every 15 min; paid-twice flagged) |
| 05 Invoice | GST invoice PDF (CGST+SGST in Madhya Pradesh, IGST elsewhere) |
| 06 Licence | Licence key VYRO-XXXXX-XXXXX-XXXXX-XXXXX (stored as SHA-256 hash + AES-256-GCM copy), emailed |
| 07 Activate | App activation returns an Ed25519-signed token (2 devices, 14-day trial, 180-day grace, 12 months of updates) |
- 00Setup and guardrails
- 01Content model and admin
- 02Design system and motion
- 03Public pages
- 04Forms, leads and notifications
- 05Signature animations and polish
- 06Deploy pipeline and runbooks (server not set up yet)
- 07Accounts, checkout and invoices (Razorpay test mode)
- 08Licensing
- 09Store operations
- 10Store go-livenext
Selling software properly
- Checkout goes through Razorpay. Before fulfilling an order, the server checks the signature and re-fetches the payment from Razorpay.
- Fulfilment is idempotent.
- A reconciliation job runs every 15 minutes and flags anyone charged twice.
Licences that verify offline
- The licensing API is built for VYRO's paid edition; the app-side integration is still to come.
- Keys are stored only as SHA-256 hashes, plus AES-256-GCM-encrypted copies.
- Activation returns an Ed25519-signed token that the app can verify offline.
- The defaults are 2 devices per licence, a 14-day trial, and a 180-day grace period.
Tax and invoices
- CGST + SGST applies inside Madhya Pradesh, and IGST elsewhere.
- Invoices and credit notes are numbered and rendered as PDFs.
- A monthly CSV goes to the accountant.
Two languages
- English lives at
/and Hindi at/hi, with field-level translation in the CMS. - A CI check fails if any Hindi string is missing.
Operations
- A ~360 MB Docker image runs behind Caddy on one VPS.
- Deploys:
- staging on every merge;
- production on tagged releases after approval;
- automatic rollback and smoke tests.
- Backups: nightly encrypted Postgres backups to R2, with a restore test.
Results
| Measure | Value |
|---|---|
| Automated tests | 142 unit · 158 integration · 49 end-to-end · 6 smoke |
| Lighthouse (local) | Performance 89–95 · Accessibility 100 · Best practices 96 · SEO 100 · CLS 0 |
| Initial JavaScript | ~175 KB gzipped |
| Size | ~34k lines of TypeScript · 28 API endpoints · 32 page routes |
Limitations and what's next
- The site isn't deployed yet. Launch is waiting on the server, DNS and the company's registration details.
- The store stays off until VYRO's paid edition is priced and the tax settings are confirmed with the accountant.
How this was built
I wrote the spec, reviewed every phase report, and made the product, legal and design calls. Claude Code built it phase by phase.