A quiet, anonymous place for Maldivians to set down what they're carrying. Seal it in a bottle. Let the sea listen.
SocialTypeScript · PLpgSQLGitHub @Roon627OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Ihusaas (feeling) is an anonymous, gentle place for Maldivians to set down what they're carrying. Write a letter, seal it in a bottle, let strangers listen. Readers reply with 🫂 🫀 🕯️ and kind anonymous notes. No accounts.
Stack: Next.js 15 (App Router) · Tailwind · Framer Motion · Leaflet · Supabase · installable PWA.
cp .env.example .env.local # fill in the Supabase URL + anon key
npm install
npm run dev # http://localhost:3000
Database (Supabase SQL editor, in this order):
supabase/schema.sql — tables, indexes, RLS, column grants, reaction/report RPCssupabase/migrations/002_comments_moderation.sql — anonymous notes, the English + Dhivehi word filter, richer reports, audit logsupabase/seed_showcase.sql — 24 sample letters + notes for demos. Remove with delete from posts where device_token like 'seed-%';.env.example. At minimum NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY, NEXT_PUBLIC_SITE_URL=https://ihusaas.online.ihusaas.online in the host's dashboard and point DNS at it (the host shows the exact records).supabase/ schema, migrations, seeds
public/data/ real atoll boundaries (jawish/maldives-geo) + 1,063 islands (naxeem/maldives-atoll-islands), both MIT
public/brand/ logo pack (see public/brand/README.md)
public/sw.js service worker (same-origin only; never caches Supabase)
scripts/ build-geo-data · build-brand · fodibey-smoke.sh
docs/fodibey-api.md the Fodibey integration
src/lib/helplines.ts verified Maldives helplines (add only numbers you've verified)
src/lib/fodibey/ the Fodibey API (server-only)
src/components/ feed, bottles, reader, composer, map, nav, sheets
Handy scripts: npm run geo:build refreshes the map/island data · npm run brand:build regenerates the whole logo pack.
docs/fodibey-api.md §4 for managing the list.src/lib/helplines.ts records when they were last checked).Atoll boundaries: jawish/maldives-geo (MIT). Islands: naxeem/maldives-atoll-islands (MIT). Fonts: Fraunces, Nunito, Caveat (SIL OFL).
Run node --test tests/pwa-security.test.mjs, npm run typecheck, npm audit, and npm run build.
When a local server is running, build separately: NEXT_DIST_DIR=.next-sweep npm run build.
The install manifest uses a same-origin / launch URL. The correct production address is
https://ihusaas.online/ (without www). The Apple touch icon is an opaque PNG
embedded directly in the initial HTML head. The owner confirmed the iOS 27
black “I” icon was fixed on 2026-10-30. Preserve this approach: npm run pwa:build
regenerates the embedded icon; npm run brand:build also rebuilds the artwork.
See the confirmed fix and maintenance checks.
See the security review for changes and remaining operational work.