Online invitations · Self-service SaaS
mythiep
A self-service product for online invitations: pick a template, pay once, edit it in the browser and publish a link guests can RSVP from. No yearly fee.
- Platform
- Web
- Status
- Live in production
- Stack
- Next.js 16 · React 19 · TypeScript · Prisma 7 · PostgreSQL · Auth.js · Puck · SePay · Cloudflare R2 · Redis · Sentry

The problem
Hosts want an invitation they can finish themselves in a day: choose a design, make it theirs, share a link and collect replies — without hiring a designer and without paying a yearly fee to keep it online.
Technical choices
- 01
Puck as the canvas editor, loaded only in the editor; public invitations render with Puck's <Render>
- Why
- Puck lays out in flow by default while invitation designs use absolute positions, so a time-boxed spike on a minimal canvas ran before the schema was written. It showed that absolute positions work when react-moveable is attached in the editor only, and the editor is never shipped to guests.
- 02
SePay payments: a signed form POST (HMAC-SHA256) and a payment notification verified by a secret header, one payment per invitation, Basic/Pro pricing per invitation type
- 03
Invitation photos stored on Cloudflare R2 as webp variants (768/1200/1600 px) and served with srcset instead of next/image
- 04
Next.js 16 and Prisma 7 on PostgreSQL: the app and Redis on a VPS, the database on Supabase used as plain Postgres (no Supabase Auth, Storage or Realtime)
- 05
Cloudflare Turnstile on the RSVP and wish forms, so a public invitation can take replies without accounts or spam
Architecture
- Pick a template
- Pay once (SePay VietQR)
- Edit in the browser
- Publish at /thiep/[slug]
- Guests reply (RSVP)
Supporting services
- Data
- Prisma 7 on PostgreSQL (Supabase)
- Auth
- Auth.js
- Payments
- SePay (VietQR)
- Images
- Cloudflare R2
- Cache and queue
- Redis
- Monitoring
- Sentry
What shipped
- 51 templates across six invitation types: wedding, birthday, baby's first-year, housewarming, event and graduation.
- Basic edits through a form; Pro opens the full canvas editor.
- One-time purchase per invitation with SePay VietQR checkout.
- RSVP, guestbook and map blocks on the published invitation.
- An admin area for types, templates, pricing, orders and invoices.
- Live at mythiep.com.
More facts
- invitation templates
- 51
- DB migrations
- 75
- commits
- 1,700+
- test files
- 900+