GratNotes answers a simple question: what if expressing appreciation to your partner was as frictionless as a text message — but stayed completely private, intentional, and categorized?
The mechanic is deliberately minimal: 280 characters, 4 note types (Gratitude 🙏, Compliment ✨, Memory 📸, Vibe 🌊), and a real-time feed shared only between partners. Notes arrive the moment you send them via Supabase Realtime. There are no reactions, no likes, no replies — notes are one-directional on purpose. Response comes in person.
Under the hood: Supabase RLS scopes every note and profile to its owner and their linked partner. A send_note() Postgres function validates the receiver is the authenticated user's linked partner, updates the sender's streak atomically, and increments both counters in a single transaction. Mutual partner linking happens via an 8-char invite code and the link_partners() function. The full note history is client-side filterable by type (gratitude/compliment/memory/vibe) and direction (sent/received), grouped by date.
This is also a live test of Motivd's builder speed. The full app — schema, RLS, functions, auth flow, landing page, dashboard with real-time feed, history with filters, partner invite — shipped in one focused session. The result is production-grade: it runs on Next.js 16, deploys to Vercel, and uses Supabase patterns end-to-end. GratNotes is proof that 'say it, don't just feel it' can go from intent to shipped software in hours.
