HomeProjectsPrivate Chat

Private Chat

Published Dec 10, 2025
Updated Dec 26, 2025
2 minutes read

Private Chat

Some conversations are meant to be temporary. Private Chat is a minimalist, self-destructing messaging application where privacy is the default — not a feature toggle.

The name says it all: conversations that exist only in the moment, then vanish without a trace.

The Idea

Modern messaging apps store everything forever. Every message archived, indexed, and potentially accessible — by you, by the platform, by whoever gains access to their servers.

Sometimes you just need a quick, private exchange that leaves no trace. Create a room, share the link, chat, and it's gone. No accounts. No history. No persistence.

This project explores what messaging looks like when privacy is the foundation, not a checkbox.

How It Works

The flow is intentionally simple:

  1. Create a Room — Generate a unique, shareable link with one click
  2. Share the Link — Anyone with the link can join
  3. Chat in Realtime — Messages appear instantly for all participants
  4. Automatic Cleanup — Messages expire and rooms self-destruct

There's no signup, no login, and no data retention. The experience is immediate and ephemeral.

Technical Architecture

The realtime layer is powered by Upstash Realtime, a serverless WebSocket solution that scales automatically. Messages flow through Redis pub/sub, ensuring instant delivery without managing infrastructure.

ElysiaJS provides a lightweight, type-safe backend for the API routes. It's fast, minimal, and works seamlessly with the Eden treaty for end-to-end type safety between client and server.

TanStack Query handles client-side data synchronization, providing optimistic updates and automatic refetching. The UI feels responsive even on slow connections.

The frontend is built with Next.js 16 and Tailwind CSS, keeping the interface clean and focused on the conversation. No distractions, no clutter — just the chat.

Privacy by Design

Privacy isn't a feature — it's the foundation:

  • No User Accounts — Anonymous by default, no identity to track
  • No Message Storage — Redis TTL handles expiration automatically
  • No Server Logs — Only transient data in memory
  • Unique Room IDs — Generated with nanoid for unpredictability

When the room expires, it's gone. There's no database to query, no backup to restore, no audit trail to follow.

What's Next

The foundation is solid for experimentation. Future explorations might include end-to-end encryption, file sharing with automatic deletion, or even voice chat with no recording.

Private Chat explores the intersection of realtime communication and privacy. Sometimes the best data policy is having no data at all.