← All work

Case study · 06

Whispr

Whispr gives anyone a personal link where strangers or friends can send fully anonymous text, images, voice notes, and video — mixed in a single message rather than one format at a time.

whisprapp.vercel.app
Whispr landing page showing the anonymous, multimedia messaging pitch and call-to-action buttons
whisprapp.vercel.app
Whispr private inbox showing a multi-photo anonymous message with AI-classified topic tags
whisprapp.vercel.app
Whispr lightbox view for browsing all photos in a multi-photo anonymous message
Role
Sole Developer
Scope
Frontend · Backend · AI integration
Platform
Web
Year
2026

Overview

A personal-link inbox where anyone can send you anonymous text, photos, voice notes, and video — combined in one message, like a private chat.

Next.js 16TypeScriptTailwind CSS v4PrismaPostgreSQL (Neon)Auth.js v5Supabase StorageGroq (Llama 3.1)Resend

The Challenge

The Challenge

Anonymous messaging apps like NGL or Sendit are built around short text only. There was no equivalent for anonymous rich media — a place where someone could send a photo, a voice note, or a video anonymously, let alone combine them with text in one message the way a normal chat app allows.

Approach

Approach

Shipped the core loop first — a personal link, anonymous text submission, a private inbox — then layered in media types one at a time (images, then voice, then video), each validated against real device quirks (like iPhone HEIC photos) before widening scope. Deliberately used platform-level solutions over custom infrastructure where they were sufficient: Vercel Firewall rules for rate limiting instead of a hand-rolled limiter, and polling instead of WebSockets for live inbox updates.

Design

Design

Dark, gradient-driven visual language (violet/fuchsia/amber) aimed at feeling playful and confessional rather than corporate. The composer works like a chat app — attach multiple photos/videos plus one voice note alongside text in a single send — after an earlier one-type-at-a-time picker proved too limiting for how people actually wanted to send anonymous media. The message detail view includes a lightbox for browsing multi-photo messages and a one-tap 'Share as image' action that generates a branded card for reposting to Instagram/Snap Stories, which doubles as the app's built-in growth loop.

Engineering

Engineering

Next.js 16 App Router with Server Actions end to end; Prisma models a Message → Attachment one-to-many relationship so a single message can carry mixed media types. Auth.js v5 runs credentials-based JWT sessions with in-place session refresh (the update() trigger), so changing your username doesn't force a re-login. Media uploads go directly from the browser to Supabase Storage via short-lived signed upload URLs rather than through the Server Action body, avoiding both Next.js's and Vercel's request-size ceilings. Incoming text is auto-classified into a topic taxonomy (Compliment, Confession, Question, etc.) using Groq's free-tier Llama 3.1 model. The share-card feature renders a Story-ready PNG per message server-side with Next's built-in next/og (Satori), compositing a hero image or video frame plus a secondary media strip for messages with several attachments, with reachability checks so one broken asset can't fail the whole render. HEIC/HEIF photos are detected by sniffing the file's actual container bytes (not trusting the extension) and transcoded to JPEG client-side before upload.

Outcome

Outcome

Live and working end to end at whisprapp.vercel.app: the public send flow, the private dashboard with live polling for new messages, and the Story-card growth feature are all functional. Solo project, actively iterated, no monetization built yet.