web-appIn progressFeatured

Anonymous Chat AI (AChat)

com.aoneahsan.achat

Anonymous Chat AI (AChat) is a no-signup, share-a-link chat where any room can be locked with a password for true in-browser end-to-end encryption and everything โ€” messages and files โ€” auto-deletes after 10 days, built entirely on free-tier infrastructure.

2025-01 โ†’ PresentZaions

At a glance

Category
web-app
Status
In progress
Started
Jan 2025
Last updated
2 months ago

Identifier

com.aoneahsan.achat

Preview

Take a look before you go

The still below is painted first, then the running site loads behind it โ€” so the dialog is never an empty rectangle waiting on a network round trip. Where a site allows framing the live app takes over; where it refuses, the still stays and says so. Nothing is requested until you press.

Anonymous Chat AI (AChat), as its brand card renders

About

What this actually is

Open the page, copy the URL, send it. That is the whole setup.

AChat asks for no email, no account and no install. You pick a chat identifier or let the page generate one, and whoever opens the link you send them is in the room with you.

That is the easy half.

The difficult half is the word private, which most chat products use to mean that somebody somewhere has written a policy about it. Here it means a key that never leaves your browser.

Add a password and the room changes.

The password derives a key with PBKDF2 and messages are sealed with AES-GCM through the Web Crypto API. The server holds ciphertext it has no way to open.

It also means there is no recovery.

Lose the password and the conversation is gone, because any route back into it would be a copy of the key held by somebody who is not in the conversation. That trade is the feature working.

The room dies with it.

Rooms expire on their own as well. A Firestore time-to-live policy deletes the whole thing after 10 days, which is deletion on a timer rather than an archive nobody reads.

Very little is left to protect by the eleventh day.

Under a deliberately plain surface there is more product than the first screen suggests. The composer is TipTap, carrying slash commands, mentions, emoji, reactions, quote-reply, voice memos and code highlighting.

Files ride through FilesHub at up to 10 MB each.

They go through a multi-file upload queue with retry, so one bad connection loses one file rather than the batch. Search across a room is fuzzy, because nobody recalls the exact words they used two hours ago.

There is a lightbox for images and an embeddable iframe widget for putting a room inside another site, which turns a support conversation into a few lines of markup on somebody else's page.

A PWA service worker is registered, and the whole interface sits behind a Radix theme customiser with accessibility modes. Those modes are not decoration on a product whose entire job is a conversation somebody needs to read.

None of that is visible on the first screen, and that is intentional. A product whose selling point is that it asks you for nothing should not open by showing you everything it can do.

The constraint behind all of it is Firebase's free Spark plan.

There is no paid backend anywhere in the room, which is why a room can cost nothing to leave running and nobody has to justify keeping it alive. Zero infrastructure cost is what lets one person keep a long list of things running at the same time.

That constraint also shapes the cryptography.

A server that cannot read a message is a server that needs no expensive protection around what it stores, and the cheapest data to secure is data you never held in the clear.

What it cost is retrieval.

Everything convenient about a normal chat product comes from the server being able to read the messages: search across the whole history, account recovery, moderation, an export somebody can be sent months later, and a password-protected AChat room gives every one of them up, because its plaintext exists only in the browsers of the people in it. That is the bill.

It is also in progress rather than finished, which belongs on the page and not in a footnote.

It is at achat.aoneahsan.com, and the Android build is on Google Play.

There is no way to get a room back once the password is gone, and that is the feature rather than a defect in it.

Worth knowing

  • The URL is the entire auth model. There are no required accounts, no sessions, no password reset โ€” by design. The chat ID is the credential; a password (when set) only ever lives in browser memory and is never sent to the server. Google sign-in is purely optional and only powers "keeping" a chat ID, never authorship.
  • Verifiable, dependency-free E2E. Encryption is the platform's own Web Crypto API โ€” PBKDF2 (150k iterations) โ†’ AES-GCM-256. A small AES-GCM "verifier" string on the chat doc lets the client confirm a correct password client-side, so the server never participates in authentication. Zero crypto npm packages.
  • Honest framing is a hard rule, not a footnote. `/privacy` and onboarding spell out that open chats are NOT private, that file bytes on FilesHub are not encrypted at rest (only the URL/metadata is), that a lost password is unrecoverable, that nobody-revisited files may linger past 10 days, that communities are public and moderation is best-effort/bypassable, and that standard Firebase telemetry (IP/UA) is collected. The product refuses to overclaim.
  • Zero-cost architecture, enforced. Everything runs on Firebase's free Spark plan: Firestore TTL does deletion (not a paid cron), App Check guards abuse (currently disabled), and FilesHub (not Firebase Storage) handles files. No Cloud Functions, no Blaze, no paid APIs โ€” a deliberate, documented constraint across all 36 phases.
  • A `/c/` room ships at 119 KB. The chat critical path was cut from 688 KB to 119 KB by lazy-loading the TipTap composer (~547 KB `ComposerInner` chunk) behind Suspense and lazy-importing the QR generator โ€” heavy editor code streams in only after first paint.
  • Self-healing community creation. A real-world Firestore rules-propagation race could leave an orphaned `chats/{id}` shell that broke every retry of the same community ID (a `setDoc` over an existing doc is an UPDATE โ†’ denied). Phase 36 made `createCommunity` idempotent and orphan-healing โ€” it pre-flights the chat/community docs, resumes its own orphan at the directory write, and raises a clear `ID_TAKEN` for a foreign id.
  • Built to be cited by AI search. Despite chat rooms being deliberately un-indexed, the marketing pages carry per-route FAQPage/Article JSON-LD, a `<noscript>` static body for non-JS crawlers, an AI-bot allowlist, llms.txt, and IndexNow โ€” answer-engine optimization on a single-purpose app.
  • One name, two faces, one reason. The full app name "Anonymous Chat AI" is kept identical to the Google OAuth consent-screen name (a verification rejection on 2026-05-26 proved the homepage must match) while "AChat" survives as the short wordmark โ€” driven from a single `SITE_FULL_NAME` constant.

Built with

  • React 19
  • TypeScript
  • Vite 8
  • TanStack Router
  • TanStack Query
  • Zustand
  • TipTap
  • Firebase
  • CapacitorJS

Key features

What it does, and what that costs to build

Each of these is a capability the stack genuinely provides. None of them is an outcome nobody measured โ€” there is no "cut onboarding by 40%" on this page, because no one measured onboarding.

  • No-signup, share-a-link chat
  • Optional in-browser E2E encryption (Web Crypto)
  • 10-day auto-deletion via Firestore TTL
  • TipTap composer (slash commands, @mentions, reactions)
  • Multi-file upload queue + image lightbox + voice memos
  • Embeddable iframe chat widget
  • Full Radix theme customizer + accessibility modes

Screenshots

5 slots, 2 of them filled in

These are designed frames, not pictures. Each one records what belongs in the slot and at what width; the capture itself is taken from the running app. Drawing a fake screenshot here would put an image on the site that no build has ever produced.

Timeline

Still being worked on

  1. Jan 2025

    Work started

    The earliest month on record for Anonymous Chat AI (AChat).

  2. Sep 2026

    Last change

    Status is in-progress โ€” 2 months ago. Ongoing, so this row moves whenever something lands.

Questions

Common questions

The questions that actually arrive, answered in the first sentence.

Who built Anonymous Chat AI?
Ahsan Mahmood built it, working alone, and it is at achat.aoneahsan.com with an Android build on Google Play. The room model, the browser-side cryptography, the composer, the upload queue and the Android packaging are one person's work, which is why the encrypted path and the file path agree about what a room is. It runs on React and TypeScript with TanStack Router and Query, Zustand for state, TipTap for the composer and Firebase underneath, packaged for Android with Capacitor from the same codebase the web version is built from.
What happens if I forget a room password?
The conversation is gone, and there is no way to recover it. The password is what derives the key, the key never leaves the browser, and the server holds ciphertext it has no means of opening, so there is nobody to appeal to. A recovery path would be a second copy of that key held by someone other than the two people talking, which is the exact thing an encrypted room exists to avoid. This is the cost of the feature rather than a gap in it, and it is worth understanding before you rely on a room for something you need later.
How long does a chat room last?
Ten days, after which a Firestore time-to-live policy deletes the whole room. That is deletion on a timer rather than an archive nobody ever reads, and it applies to the room whether or not anybody remembers it exists. The practical effect is that the product has almost no long-term storage to secure, because there is very little left to secure by the eleventh day. If a conversation matters beyond that window, take what you need out of it while it is still there.
Does it work without an account?
Yes, and that is the design rather than a trial mode. There is no email address to give, no password to invent for the service itself, and no application to install before two people can talk. You pick a chat identifier or let the page generate one, share the resulting link, and the room exists. An optional room password is separate from an account: it encrypts the conversation, it does not identify you, and nothing about it creates a profile that outlives the room.
Does Anonymous Chat AI work on iPhone?
No, there is no iOS build. It runs in a browser and ships an installed application on Android only, because there is no Apple Developer account behind this work and nothing here has gone to the App Store. An iPhone can open the web version like any other device, and since the whole product is browser cryptography plus a shared link, the web version is close to the whole thing. The installable Android build comes out of the same codebase through Capacitor.

Keep looking

More web apps

  • ZT

    ZTools

    com.zaions.ztools

    A privacy-first developer and power-user toolbox covering 20 categories, where the work happens in your browser rather than on someone's server.

    completedFeatured
  • TA

    TaxEase

    com.aoneahsan.taxease

    Tax compliance workflows for filers, with an admin side for staff.

    completedFeatured
  • LI

    LifeWell

    com.aoneahsan.lifewell

    Health and wellness tracking across web and Android.

    completedFeatured
All 23 projects