尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Meet someone closer to home. Dating for the Maldives. 18+.
prototype/ (read-only) and docs/PROTOTYPE_AUDIT.mddocs/ARCHITECTURE.md (monetization in §12)docs/CONTACT_BLOCKING.mddocs/DESIGN_SYSTEM.mddocs/ARCHITECTURE.md §12.10–§12.12 and §21; OCR-assisted receipt verification (server-side tesseract.js, BML/MIB parsers): §12.14 and docs/DEPLOYMENT.md §7; Photo verification (human review, private selfies): §11; staging procedures in docs/DEPLOYMENT.mdNext.js 16 (App Router), React 19, TypeScript 5.9, Tailwind CSS 4, Prisma 7 on PostgreSQL 17 (Supabase), Zod 4, Vitest 5.
Requirements: Node 22.18+, a PostgreSQL 16+ server you can create databases on (local install or Docker).
npm install # also runs prisma generate
cp .env.example .env # fill in DATABASE_URL / DIRECT_DATABASE_URL / TEST_DATABASE_URL
createdb thundi_dev # or: psql -c 'CREATE DATABASE thundi_dev'
npm run db:migrate # applies prisma/migrations to DIRECT_DATABASE_URL
npm run db:seed # reference data only (locations, interests, prompts, placeholder plans)
THUNDI_SEED_DEMO=true npm run db:seed # + prototype demo profiles and discovery scenarios (development only, refused in production)
npm run dev
Demo logins (after the demo seed): +960 700 0010 is the prototype's Ismail (Free), +960 700 0011 is a Plus account (Undo, boosts, advanced filters). The other demo numbers are the profiles they discover; prisma/seed-data/discovery-scenarios.ts lists which rule each one exercises.
Signing in locally: sign-in is Google or Telegram (both OpenID Connect). With AUTH_PROVIDER=dev (the default outside production) "Continue with Google" opens a local stand-in for Google's account chooser at /dev/google/authorize, listing the seeded demo identities ([email protected] is the prototype's Ismail, [email protected] the Plus user) or any typed email; "Continue with Telegram" opens the same stand-in in its Telegram shape (a username instead of an email, no email claim). Email + password is the third method: with EMAIL_PROVIDER=console (the default outside production) the verification and reset links are printed to the dev-server log instead of being emailed, so the whole flow works locally. Production needs AUTH_PROVIDER=google plus a Google OAuth client, TELEGRAM_CLIENT_ID / TELEGRAM_CLIENT_SECRET from BotFather for the Telegram button, and a real mail provider (EMAIL_PROVIDER=resend with RESEND_API_KEY and EMAIL_FROM) before email sign-in appears at all. Photos are stored under LOCAL_STORAGE_DIR (.storage, git-ignored) and served through signed /api/media URLs. The dev provider and local storage are refused when NODE_ENV=production.
Photo visibility: outside production, pending (unmoderated) photos are displayable so uploads can be tested; production shows approved photos only and refuses PHOTO_VISIBILITY_POLICY=approved-and-pending. See src/lib/photo-policy.ts and docs/ARCHITECTURE.md §7.1 for the launch requirement.
Next 16 only serves dev assets to the origin it is bound to, so open http://localhost:3000 (not 127.0.0.1) when checking pages in a browser.
If you have Docker: docker run -d --name thundi-pg -e POSTGRES_HOST_AUTH_METHOD=trust -p 5432:5432 postgres:17 and use postgresql://postgres@localhost:5432/thundi_dev.
npm run typecheck
npm run lint
npm test # creates a throwaway database on TEST_DATABASE_URL, migrates it, runs unit + integration tests, drops it
npm run build
Integration tests run against a real Postgres and include concurrency tests for the like allowance, message cooldown, boosts and matching. They do not touch DATABASE_URL.
Migrations are not applied to the hosted Supabase project automatically. See docs/ARCHITECTURE.md §5 for the connection strategy; apply with npm run db:deploy against DIRECT_DATABASE_URL only when instructed. Before switching STORAGE_PROVIDER=supabase, a private bucket named by SUPABASE_STORAGE_BUCKET_PHOTOS (profile-photos) must exist and SUPABASE_SECRET_KEY must be set on the server only.
The staging environment (Vercel project thundi at https://thundi.vercel.app, Supabase project Thundi) and its procedures are recorded in docs/DEPLOYMENT.md.
prisma/ schema, migrations, seed and seed data
src/config/ product rules (single source of truth for limits and plans)
src/lib/ db client, env validation, errors, hashing, age, cookies, storage providers, validation schemas
src/server/ domain layer (auth, onboarding, photos, profiles, entitlements, usage windows, discovery, likes, matching, conversations, safety, community, media, boosts, privacy, notifications, users)
src/actions/ server actions (auth, onboarding, photos, discovery, messaging, community, profile, settings, account)
src/components/ ui primitives, layout shell, feature components (auth, onboarding, discovery, chats, community, profile, settings)
src/app/ Next.js routes: /, /auth/{google,telegram}/{start,callback}, /auth/{register,verify,verify-email,forgot-password,reset-password}, /auth/{deleted,error,logout}, /onboarding/[stage], (app)/* incl. /chats/[conversationId], /community/[postId], /profile/{edit,preview}, /settings/*, /api/photos, /api/media, /api/community/posts, /dev/design-system
src/proxy.ts cookie-presence route guard and security headers
tests/ unit and integration tests
docs/ audit, architecture, contact blocking, prototype reference sheets