No updates detected yet. GitHub releases will appear here.
Thật Space: private community for Vietnamese women (Next.js frontend demo)
翻訳待ち
Loading the full README.
Read the full README ↗Thật Space is a private Vietnamese community for any person aged 18 or older. Membership is not restricted by gender.
This repository contains three deliberately separate surfaces:
Public site: https://that-space-demo.vercel.app
Private community: https://ubuntu-asus.tail349cbf.ts.net:8443
The approved soft-launch shape is public self-service membership for any adult, with the full community and Bà Mối experience available from day one:
/, /forum, /forum/[slug], /tuvi,
/matchmaking, and /profile, plus /privacy, /terms, and /contact;The release sequence and acceptance gates are in the public self-service launch plan.
Requires Node.js 20 or later. Vercel builds with Node 24.
npm ci
cp .env.example .env.local
npm run dev
The public community link requires DISCOURSE_URL and
PUBLIC_COMMUNITY_LINK_ENABLED=true. Direct signup additionally requires
COMMUNITY_PUBLIC_REGISTRATION_ENABLED=true. Production sets
BA_MOI_ENABLED=true; changing it to false is the emergency service stop. Do
not add real secrets to tracked files.
| Command | Purpose |
|---|---|
npm test | Vitest page, matching, data-layer, service, and local journey tests |
npm run test:beta | Two complete Bà Mối journeys against disposable Postgres and fake Discourse |
npm run typecheck | TypeScript validation |
npm run lint | ESLint (next/core-web-vitals) |
npm run build | Production Next.js build |
GitHub Discourse community acceptance | Pinned native Discourse request/browser acceptance suite |
Manifest --check from the runbook | Report drift from the controlled community manifest |
| Route | Content |
|---|---|
/ | Bà Mối-led product, adult eligibility, public signup, and community features |
/forum | Filterable public preview of the handed-off origami forum; posting opens the authenticated community |
/forum/[slug] | Public sample thread in the handed-off folded-letter treatment |
/tuvi | Interactive 12-palace sample chart with clear cultural/illustrative disclaimer |
/matchmaking | Interactive compatibility-letter preview; real participation opens Bà Mối signup |
/profile | Static public profile artboard; real member profiles remain private |
/privacy | Community/Bà Mối data handling and active processors |
/terms | 18+ eligibility, account rules, and conduct terms |
/contact | Account, data, community, and Bà Mối support |
If PUBLIC_SUPPORT_EMAIL is absent, /contact directs visitors through the
public Google signup or member login path before they contact staff inside the
community; it does not link guests into a login redirect loop.
DISCOURSE_URL never publishes a link by itself:
PUBLIC_COMMUNITY_LINK_ENABLED=true is also required. The signup CTA appears
only when the independent public-registration flag is true.
app/ Public pages and Bà Mối route handlers
components/ Shared public navigation and footer
lib/matching/ Bà Mối compatibility, privacy, and filtering core
lib/db/ Bà Mối Postgres data layer and sample members
lib/service/ Tool handlers, relay, outbox, copy, and launch switch
lib/discourse/ Discourse API client and webhook verification
supabase/ Supabase CLI config and additive SQL migrations
scripts/ Install, verification, and maintenance scripts
discourse/ Community manifest, bootstrap, theme, agent, and deployment pin
tests/discourse/ Native Discourse request and browser acceptance
__tests__/ Public-page tests in jsdom
tests/unit/ Node unit tests; database suites use PGlite
tests/integration/Local Bà Mối journeys through the real dispatcher
The implementation source of truth is docs/design/origami/: Fraunces and Be
Vietnam Pro, paper tokens, sharp folds, grain, shadows, interactive cards, and
the cursor-following 29-petal lotus are ported into the actual Next.js routes.
next.config.js keeps the logo unoptimized so the static public surface does not
depend on the image optimization server.
The source of truth is discourse/community/manifest.json. The manifest
enforces:
login_required=true;allow_new_registrations=true and enable_signup_cta=true;invite_only=false and must_approve_users=false;enable_local_logins=false so Google is the only signup/login path;enable_google_oauth2_logins=true, checked by the owned manifest and
bootstrap drift command;auth_skip_create_confirm=false so only a completed OAuth handoff can create
the account;This is the beginning of the README. Read the rest at the original. Read the full README ↗