From first commit to live payments
Invitely went from its first commit to live payments between 2 and 13 October 2026. Here is how it was built, what it runs on, and what we did to keep it fast, low cost and safe.
- 223
- commits
- 205
- issues closed
- 20
- milestones
- 726
- tests, run in about 5 seconds
Numbers as of 13 Oct 2026
From 2 Oct to 13 Oct
- 2 Oct
First commit: the invite page with no-signup RSVP, and festival greetings.
- 2 Oct
Billing, tiles, calendar, QR poster and shared album. Security headers and Turnstile.
- 3 Oct
The brand mark and design system v2.
- 4 Oct
Landing page redesign, invite effects and fast node-only tests.
- 5 Oct
Live chat, and the first cost work.
- 6 Oct
Email codes, passkeys and realtime v2.
- 10 Oct
Host preview, a responsive pass and a new database host.
- 11 Oct
All animation moved to motion, and new templates.
- 13 Oct
Live payments, and art served from the CDN.
What it runs on
App
Next.js 16, React 19, TypeScript
Look
HeroUI v3, Tailwind v4, tailwind-variants, motion
Data
PostgreSQL, Drizzle, DynamoDB for sessions and rate limits
Accounts
Better Auth with email codes, passkeys and Google. Guests need no account.
Payments
Dodo Payments
Email
Amazon SES, react-email
Live
AWS AppSync for chat and live replies
Media
S3, CloudFront, sharp
Hosting
AWS Amplify, CDK
Tests
Vitest, PGlite, MSW
Fast, low cost and safe
Speed
- The invite page is cached at the CDN.
- Invite data is read from a stored copy before the database.
- Anonymous visitors cause no database queries.
- The realtime client (158 KB) loads after the page.
- The editor makes fewer server calls.
- Art and sounds are served from the CDN.
Cost
- Analytics are batched and loaded nightly.
- No hourly job wake-ups.
- Venue search is cached for each session.
- The album zip is built in storage.
Safety
- A security policy on every route.
- Turnstile on sign-up, sign-in and reset.
- Rate limits.
- Revoked sessions stop at once.
- Secrets are kept out of the code.
Reliability
- Backups with a restore drill.
- An email queue with bounce handling.
- Structured logs.
- A load check before launch.