Skip to content
Tanishq Jain
Resume

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 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)

01 / 07 Sign in

From order to licence: what a VYRO licence purchase goes through.Source
View data
From order to licence
StepWhat happens
01 Sign inEmail-code sign-in (6 digits, 10-minute expiry, 5 attempts)
02 CheckoutRazorpay order + checkout
03 VerifySignature verified AND payment re-fetched from Razorpay
04 FulfilIdempotent fulfilment in one transaction (reconciliation job every 15 min; paid-twice flagged)
05 InvoiceGST invoice PDF (CGST+SGST in Madhya Pradesh, IGST elsewhere)
06 LicenceLicence key VYRO-XXXXX-XXXXX-XXXXX-XXXXX (stored as SHA-256 hash + AES-256-GCM copy), emailed
07 ActivateApp activation returns an Ed25519-signed token (2 devices, 14-day trial, 180-day grace, 12 months of updates)
  1. 00Setup and guardrails
  2. 01Content model and admin
  3. 02Design system and motion
  4. 03Public pages
  5. 04Forms, leads and notifications
  6. 05Signature animations and polish
  7. 06Deploy pipeline and runbooks (server not set up yet)
  8. 07Accounts, checkout and invoices (Razorpay test mode)
  9. 08Licensing
  10. 09Store operations
  11. 10Store go-livenext
Built 15–18 October 2026 from a ~1,000-line spec.

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

MeasureValue
Automated tests142 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.