Fomo

fomo.comcontributed by Samuele Ongaro

YES

Replaceable in one session with an AI coding agent.

Shows small notifications of recent activity — someone just signed up, someone just bought — pulled from your own systems, as social proof.

Promptfree, for everyone, and the only version there is
Build me a social-proof notification tool that replaces Fomo: real recent activity shown on my site, from my own data, with nothing invented.

STACK
- Node 20+ with Fastify, SQLite through better-sqlite3
- One embeddable script, vanilla, under 8KB gzipped, from my own domain
- Server-rendered admin
- Caddy in front

THE DATA MODEL
- sources: id, kind, config_json, is_active — a webhook, a database view, a CSV upload, or an API push
- events: id, source_id, kind, actor_name, actor_location, subject, subject_url, image_path, amount_cents, currency, occurred_at, received_at, is_public
- rules: id, name, event_kinds_json, page_pattern, min_age_minutes, max_age_hours, display_seconds, gap_seconds, position, max_per_session
- impressions: id, event_id, rule_id, session_hash, shown_at, clicked_at, dismissed_at
- Every event carries the time it actually happened. Nothing is generated, ever, and the schema has no column that would let it be

THE HARD RULE
- This tool shows things that happened. There is no fake mode, no sample generator that can be left on in production, and no 'someone in Berlin' when nobody was in Berlin.
- Write that in the README and enforce it in the code: an event with no source and no occurred_at cannot be stored.
- Anonymise instead of inventing: a first name and a city, taken from the real record, and configurable down to 'someone' — the ceiling is what is true, the floor is what is polite

GETTING THE DATA IN
- A webhook endpoint with a shared secret, taking one event or a batch
- A pull adapter for a database view, run every minute
- A CSV import for a backfill
- Idempotency by external id: a retry does not show the same purchase twice
- Events older than the rule's maximum age are stored but never shown, because 'somebody bought this' in a notification means recently

SHOWING IT
- One notification at a time, in a corner, for N seconds, with a gap of M seconds before the next
- A per-session cap, because the fifth notification is worse than the first
- A per-page rule set: the pricing page shows purchases, the blog shows nothing
- Never covering navigation or the bottom bar on a phone; never blocking a click
- Dismissible, and a dismissal is remembered for the session
- Keyboard reachable and announced politely to a screen reader, or not announced at all — never interrupting

WHAT A NOTIFICATION SAYS
- A line of text with slots: name, location, subject, and how long ago
- The relative time is computed in the browser from the real timestamp and never rounded upwards
- An optional image and a link to the subject
- The template is per rule, and the interface previews it with a real recent event, never with a placeholder

MEASURING WHETHER IT WORKS
- Impressions, clicks, dismissals, and click-through per rule
- A/B: two templates on the same rule, split by session hash, with the split stated
- The honest metric is conversion on the pages where it ran against where it did not — the admin page says that plainly rather than showing a vanity number

PRIVACY
- The name shown is whatever the source sends; the README says to send a first name only
- Location from a local database file at country or city level, never finer
- Visitors are identified by a session-scoped salted hash: no cookie, no cross-site anything
- A person in the source data can be excluded by key, permanently

THE INTERFACE
- One page per rule: what it shows, where, how often, and a live preview
- A feed of recent events with a switch to hide one
- Dark and light, one accent

OPERATIONS
- .env: DATABASE_PATH, BASE_URL, WEBHOOK_SECRET, HASH_SALT, GEOIP_DB_PATH, ALLOWED_ORIGINS
- Migrations on boot, each once
- The payload endpoint answers from memory with an ETag
- Nightly backup off the machine, restore script
- Health endpoint that reports the age of the newest event, because a silent source is the failure mode here

WHAT MATTERS MOST
Ingestion honesty and the frequency rules. Build the webhook, the idempotency and the one-at-a-time display first. Then put it on a real page for a day: if you cannot say where every notification came from, the tool is doing the one thing it must never do.

Give me the repository, the embeddable script, migrations, .env.example, a seed of real-shaped events, and a README with deploy steps behind Caddy.

What you lose

  • Connectors that read recent orders and signups from a dozen platforms
  • Display rules and rate limiting already tuned
  • Templates that look credible rather than desperate

If you would rather not build

  • Your own recent-orders query plus a script
  • A static testimonial, which is honest and permanent
  • Nothing at all, which many sites find performs the same

What it costs

read from their page 15 Aug 2026

PlanBilled monthlyBilled yearlyLast read
—$25/mo—15 Aug 2026

Their pricing page is where these came from. Seeing a different price? Tell us.

The escape hatch

open source · no votes, no paid placement

Umami

$0

If you want the events measured as well as shown.

umami-software/umamifree · open source

Astro

$0

Renders the proof server-side so no client script is needed at all.

withastro/astrofree · open source

Why this verdict

our own opinion · changed only by a person

88/100

Verdict yes at 88. It is a cached query and a small script. The only thing worth insisting on is that the events are real.

History

tracked since 10 Aug 2026 · nothing is ever overwritten

Interest · last 30 dayspeak 1/day
views0130 Aug4 Sept9 Sept14 Sept19 Sept24 Sept28 Sept
— views— prompt copies none yet— votes none yet

Questions about Fomo

answered from the record above

Is Fomo free?

No — the plan we track is $25 a month. From around $25/month billed monthly, priced on notifications shown.

Can you replace Fomo by building your own?

YES. Replaceable in one session with an AI coding agent. Replacement score 88 out of 100, build time one session. Read what you lose before you decide.

How much does Fomo cost?

$25 a month on Starter — $300 a year. Recorded 10 Aug 2026.

What do you lose by replacing Fomo?

Connectors that read recent orders and signups from a dozen platforms; Display rules and rate limiting already tuned; Templates that look credible rather than desperate. If any of those carry weight for you, keep paying.

Is there an open-source alternative to Fomo?

Yes: Umami, Astro. The prompt on this page is for when you want it your way instead.

Related entries

same category first, most replaced first

All 31 in Design & website builders

Not sending yet

Every week, something stops being worth paying for.

New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.

free forever · no tracking pixel · stored here, never passed to anyone

Esc