Dawat
Dawat turns a Bengali wedding invitation into a managed guest workflow. A couple edits a Bangla-first, Jamdani-inspired invitation, publishes a version, and shares personal household links. Guests see the events selected for their household and can reply or leave a wish without creating an account. A general invitation link remains view-only. The repository contains working seller, couple, and guest flows, but the project is still in development: physical-phone performance, operational recovery, and commercial handoff remain open work.

The Problem
A beautiful digital card does not solve the host's planning problem. One family may be invited to the wedding only, another to both ceremonies; a reply from a household must carry a headcount rather than merely a name. Meanwhile, invitation details and photos change during preparation. Sharing an editable draft risks exposing unfinished content, while collecting replies through a general public form makes it difficult to know which household answered and which events they were allowed to attend.
The Solution
Separate editing, publication, and guest access. The couple saves a private draft and explicitly publishes a version before sharing. Each named household receives an event allowance and a personal link; guests do not type an arbitrary identity into a public RSVP form. The host dashboard collects attendance, headcounts, and wishes, supports attributed corrections, and exports a private CSV for planning. Seller confirmation and customer activation are separate steps, so placing an order alone does not grant a management workspace.
System Architecture
Next.js App Router serves the Bangla/English workspaces, invitation pages, and server API routes. Supabase Auth supplies verified customer sessions, while PostgreSQL row-level policies and narrow transaction functions enforce wedding membership and permitted mutations. Draft revisions detect stale saves; publishing creates an immutable version rather than exposing the live editor. Guest access uses random link tokens with stored digests and wedding/household-bound AES-GCM encryption for recoverable host copying. Photos pass through a bounded Sharp processor into a private Storage bucket; application routes recheck publication or guest access before serving a referenced variant.
Key Features
Innovative solutions developed to solve complex technical challenges.
Invite a family to the right ceremonies
Create a named household, assign one or both events, and share its personal link. Attendance and headcount stay attached to that household and event scope. A general invitation can be forwarded for viewing without opening an anonymous RSVP form.
Edit privately, then publish deliberately
Change names, venue details, or photos in a draft without immediately changing the guest-facing invitation. Revision checks reject stale saves, and explicit publication creates a retained version. The workspace distinguishes unsaved, saved, and published state instead of treating a successful keystroke as a public update.
Turn replies into a working guest list
Review attendance and wishes in the couple workspace, make an attributed correction when a family updates its plans, and export a private CSV. This supports the concrete task of reconciling household responses for event planning rather than presenting only a decorative response counter.
Keep couple photos behind the invitation gate
Accept up to five active photos, decode and validate the uploaded image, strip embedded location metadata, and create 480/960/1600 WebP variants without upscaling. Drafts stay private; guest photo reads recheck current access. Revoking a household link blocks future scoped reads, though previously downloaded copies cannot be recalled.
Hand the correct workspace to the customer
The seller confirms an order and separately activates the intended verified customer. Database transactions check the wedding, current grant, and entitlement, while seller actions require a staff identity and MFA. This addresses accidental access to another couple's preparation workspace at the data boundary as well as in navigation.
Challenges & Breakthroughs
Challenge: A guest link is an access credential, not just a share URL
Growth: The code separates token digests used for lookup from encrypted copies used by the host's copy action, binds encryption to the wedding and household, and provides rotation and revocation. The practical tradeoff is that access can be stopped for future requests, but content already saved by a guest cannot be withdrawn.
Challenge: Invitation edits must not silently change a household's event scope
Growth: A dedicated migration preserves household event assignments rather than expanding them when invitation configuration changes. Publication state, event selection, and named-link permissions must agree; a newly enabled ceremony is not automatically permission to invite every existing household.
Challenge: Retries and stale tabs can corrupt otherwise simple forms
Growth: Draft revisions surface concurrent edits, while command replay and row locks protect transactional mutations. Photo reservation and upload are separate, bounded steps so retrying a slow upload does not silently allocate another slot. Recovery state is part of the workflow, not just an error toast.
Challenge: Implementation evidence is not launch evidence
Growth: The repository includes integration tests for database isolation, guest delivery, media processing, and workspace behavior. Its release notes still leave phone performance, recovery operations, and commercial delivery open; the portfolio therefore presents Dawat as ongoing and makes no adoption, revenue, or production-readiness claim.
Next Project
Duet