RM RegretMap Open app
By Shamil TP & Nihal T

RegretMap

Travel smarter.
Regret less.

A community map of travel regret — so the next traveller doesn't repeat them.

QR code linking to regret-map.shamiltp.me Scan to explore
329

travel lessons on the map

53

countries, every Indian state

300+

automated tests

The problem

Reviews rate hotels. Nobody maps the mistakes.

Wrong day

Planning the Taj Mahal for a Friday, when it's closed.

Wrong season

Arriving at a national park in its monsoon closure.

Wrong plan

Squeezing a full-day trip into one afternoon.

RegretMap is about destinations, places, journeys, activities and travel conditions — not a hotel, room or restaurant rating site.

How it works

Search a place. Learn before you go.

Search

Any destination in the world.

Map

Every story pinned, with a heatmap.

Discuss

Reactions and threaded replies.

Ask

AI tips and chat from the stories.

Features

Four pages, one purpose.

Home

/

Search any destination or town worldwide, browse photo postcards, and explore every story on a map with filters and a heatmap. No AI runs here.

Destination page

/destinations/[slug]

“Before you go” lessons with links to their source stories, the destination's stories on a map and feed, and an “Ask travellers” chat.

Story page

/stories/[id]

What happened, what went wrong, the lesson and advice. React 👍 😬 🙋 💡 and reply in threads up to six levels deep.

Share an experience

/submit

Pick the place, category and travel month, then add your lesson. Stories go live right away; AI only labels them for moderators.

Content

What's on the map.

201

India travel notes

Across all 28 states and 8 Union Territories.

128

World travel notes

75 destinations in 52 countries, on every inhabited continent.

You

Community stories

Personal accounts shared by travellers through the site.

Travel notes are written by the RegretMap team and always labelled “Travel note”, never passed off as a personal experience.

AI that doesn't make things up

Answers come only from real stories.

  • Grounded only — the summary and chat see just this destination's published stories, treated as untrusted data.
  • Checked sources — every tip links to its source stories; the server rejects unknown or other-destination references.
  • No invented numbers — a price, time or distance must appear in the cited stories, or it's dropped.
  • No story? It says so — an answer citing no story becomes “the stories don't cover that yet”.
  • Honest failures — if Gemini is down, the summary says it will appear later and chat shows related stories.
  • Reliable — Gemini runs server-side with a rotating pool of up to ten API keys, a fallback model and cached summaries.

Trip-planning questions get a fixed, server-written note and a referral to The Visa Guy for full plans, visas or bookings.

Accounts, moderation & security

Safe by default.

Row Level Security

On every table. The public reads only published stories and visible comments.

Session identity

Comments and reactions use your own session. User IDs can't be supplied or faked.

Server-side secrets

Supabase and Gemini keys never reach the browser, logs or URLs.

Validated input

zod schemas, length limits, stripped control characters and rate limits.

Anonymous

Public pages never show emails or account IDs. User content renders as plain text.

Moderation

Email accounts via Supabase Auth. Moderators review AI-labelled submissions.

Tech stack

Built with.

Framework
Next.js 16React 19TypeScript
Styling
Tailwind CSS 4Space GroteskIBM Plex SansJetBrains Mono
Data & auth
SupabasePostgreSQLRow Level Security
Maps
Leafletleaflet.heatOpenStreetMapPhoton
AI
Google Gemini (server-side)
Quality
zodVitestlucide-react
Platform
Installable PWA

Getting started

Run it locally.

git clone https://github.com/shamil-tp/RegretMap.git
cd RegretMap
npm install
cp .env.example .env.local
npm run dev
  • Requirements — Node.js 24 and npm 11.19+.
  • Environment — Supabase URL and keys, Gemini key pool and model, moderator emails, site URL.
  • Database — run supabase/migrations in order, then the India and world seeds.
  • Auth — add <site>/auth/callback to Supabase redirect URLs.

Testing, CI & releases

Checked on every push.

npm ci lint type-check tests build

~300 tests

Validation, RLS-dependent actions, AI grounding, key rotation, comments, reactions and seeds. Gemini is always mocked.

CI

Runs on every pull request and push to main, on Node 24, before anything ships.

Releases

Push a tag like v1.2.3 to re-run every check and publish a GitHub Release.

Design & credits

Rounded neo-brutalism.

Design

A raw-paper canvas with a dot grid, black ink borders, hard block shadows, caution-yellow calls to action, regret red and map blue. Motion is CSS only and turns off for reduced-motion.

Credits

Map tiles © OpenStreetMap contributors. Place search by Photon. Destination photos from Wikimedia Commons under free licences, each showing its author and licence.

Known limitations

What's next.

  • Reporting — the Report button is a placeholder; moderators hide stories with SQL for now.
  • Accounts — no password reset or account deletion yet.
  • Rate limits — kept in memory per server instance (the submission cap is shared).
  • Not verified facts — stories are personal accounts. Always check official sources for permits, weather and safety.

The team

Made by Shamil TP & Nihal T.

RegretMap — built by Shamil TP and Nihal T. Live at regret-map.shamiltp.me

Every journey leaves a lesson.

Try it now:

regret-map.shamiltp.me

Thank you! — Shamil TP & Nihal T