Frequency is a Community Collective. Everything a community needs, in one place: start a Circle, host Events near you, and grow a Space. You keep 100% of your own bookings; we earn only a small, shrin
翻译准备中
社交TypeScript · JavaScriptGitHub @hellofrequencylab在线运营者未确认
试用过了吗? 点一下就好,无需登录。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Frequency is a Community Collective. Everything a community needs, in one place: start a Circle, host Events near you, and grow a Space. You keep 100% of your own bookings; we earn only a small, shrinking network-only take-rate on what the network sends you.
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
A platform for place-based, in-person community practice. Four nouns:
Member, Space, Circle, Event. Channels are the topical
layer people tune into. Hubs and Nexuses emerge from Circles; they are not
primary nav. An Outpost is a Nexus home base, not the top unit.
Mobile-first (the app is the primary doorway; the web is the secondary
surface and the SEO/discovery front), with a physical-world engagement layer
(QR / NFC / geolocation).
Current build: Next.js 16 (App Router / RSC) + Supabase (Postgres, Auth,
Realtime, Storage) on Vercel, Tailwind v4.查看完整 README ↗A platform for place-based, in-person community practice. Four nouns: Member, Space, Circle, Event. Channels are the topical layer people tune into. Hubs and Nexuses emerge from Circles; they are not primary nav. An Outpost is a Nexus home base, not the top unit.
Mobile-first (the app is the primary doorway; the web is the secondary surface and the SEO/discovery front), with a physical-world engagement layer (QR / NFC / geolocation).
Current build: Next.js 16 (App Router / RSC) + Supabase (Postgres, Auth, Realtime, Storage) on Vercel, Tailwind v4.
| Home | Audience | Contains |
|---|---|---|
GitHub (/docs, AGENTS.md, this README) | Developers | architecture, schema, conventions. Status: docs/BUILD-BACKLOG.json |
Public help center (content/help/, served at /help) | Members | how to use the product, in member language |
| Notion | Operators, hosts, training | how to operate/moderate the product, host/admin guides, community policy |
Rule of thumb: if it tells a developer how to build it, it goes in Git; if it tells a member how to use it, it goes in the help center; if it tells an operator how to run or moderate it, it goes in Notion. One change updates each home in its own voice: we single-source the routing, not the prose. Full spec: docs/DOCS-PROTOCOL.md and docs/HELP-CENTER.md.
Five layers separated by stable contracts, so no single framework choice can trap us (full rationale in SCALE-ARCHITECTURE):
PRESENTATION web: Next.js/RSC · mobile: Expo/RN (later) · design tokens · headless UI ← replaceable
COMPOSITION server-composed capability MODULES, chosen per user by role + involvement
CONTRACT one typed, presentation-neutral contract (RPC view-models) ← shared by web + mobile
DOMAIN/CORE business rules + capability resolver, framework-independent
DATA Supabase/Postgres (+PostGIS) as source of truth · AUTHZ = RLS + SECURITY DEFINER RPCs
Engagement/gamification rides on top as one pipeline (ENGAGEMENT-ARCHITECTURE):
SOURCE adapters (web · task · QR · NFC · geo · P2P) → server VERIFICATION
→ append-only EVENT LEDGER + rules → REWARD ledger (+ realtime feedback)
The one decision everything hinges on: the contract + capability layer — presentation-neutral data, computed server-side, consumed identically by web and mobile.
The repo carries years of planning documents, and several of them describe themselves as the single source of truth. The live set is short, and AGENTS.md §"Which plan is live" is its authority; this section mirrors it:
| Question | Where the answer lives |
|---|---|
| Where does the work stand? | docs/BUILD-BACKLOG.json — the ONE list. Run pnpm backlog for the working view. Status never lives in prose (ADR-1043). |
| What ships next? | UX-MATURITY-PLAN (ADR-925; its §Sequencing table) + BUILD-LIST (ADR-921; the phase runway, including the parked phases). |
| Why was it decided? | DECISIONS — the ADR record. A plan doc that contradicts an ADR is stale, not authoritative. |
| What are the product nouns? | NAMING wins names. CORE-MODEL is commercial law (ADR-1294). FOCUS-MODEL is the accepted interior (ADR-1403). Four nouns: Member, Space, Circle, Event. Channels are the topical layer. |
| The editor, blocks, block registry | EDITOR-ARCHITECTURE (ADR-974…978), phases E0–E10. Read it before touching any of them. |
The locked canons, each machine-enforced or gated: NAMING +
CONTENT-VOICE (every word a human reads),
PAGE-FRAMEWORK (one shell, seven page shells, one chrome map; RailGrid is not a shell; WidgetSlot is a sketch; railFor is the code default and operator overrides can beat it),
STUDIO (creation wizards derive from a manifest),
MENU-CONTRACT (the admin menu derives from four catalogs), and
DEPLOY-SAFETY (merging main deploys to production; the artifact gates).
Everything below this line is context. DEVELOPMENT-MAP, BUILD-PHASES,
ROADMAP, CHECKLIST and BACKLOG are history with superseded banners: worth reading for
rationale, never for status. BUILD-SEQUENCE and MASTER-TODO were absorbed into
docs/BUILD-BACKLOG.json (HYG-104) and removed. When the code and a doc disagree, the code wins, and the doc gets
fixed in the same pass.
RailGrid is not a shell. WidgetSlot is a sketch.docs/BUILD-BACKLOG.json + pnpm backlog — where the work
stands. Every row states how it is proven; pnpm check:backlog runs the probes and fails both
ways (a stale open row and a regressed done row).BUILD-SEQUENCE and MASTER-TODO were absorbed into the one list (HYG-104) and removed.As-is vs to-be:
ARCHITECTURE.md/DATABASE.md/GLOSSARY.mddescribe what exists today (pnpm check:arch-docholdsARCHITECTURE.mdto the tree). The strategy docs describe where we're going;BUILD-BACKLOG.jsonrecords how far along it is.
Prerequisites: Node 20+ and pnpm 10.33.0 — pinned via the packageManager
field, so let corepack manage it (don't npm i -g pnpm).
corepack enable # use the exact pnpm version this repo pins
pnpm install
pnpm approve-builds # first time only: allow sharp + unrs-resolver to build
cp .env.example .env.local # then fill in the values below
pnpm dev # Next.js dev server (Turbopack) → http://localhost:3000
Environment variables (.env.local). vercel env pull does not help here —
the Vercel vars are marked Sensitive, so they pull back blank. Fill these by hand
(the minimum to boot the app):
| Var | Where to get it |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | Supabase → Settings → API → Project URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Supabase → Settings → API → publishable key |
SUPABASE_SERVICE_ROLE_KEY | Supabase → Settings → API → secret key (server-only) |
NEXT_PUBLIC_SITE_URL, NEXT_PUBLIC_APP_URL | http://localhost:3000 |
Feature keys (Stripe, Resend, AI, KV/Redis, VAPID) only matter when you exercise those features — leave them blank otherwise.
Quality gates (run before you push):
pnpm exec tsc --noEmit # the project's main correctness gate
pnpm lint
pnpm test # Vitest unit suite (repo-wide co-located *.test.ts)
pnpm check:authz # authz contract gate (admin-client guards)
Tests are a repo-wide unit suite of co-located *.test.ts files (under test/ and
alongside the code they cover in app/, components/, and lib/ — capabilities,
currency, the outbox queue, suppression, webhook verification, and more). They
complement, not replace, tsc --noEmit + ESLint + pnpm check:authz + manual
verification. Schema source
of truth is supabase/migrations/; see ARCHITECTURE for the
authorization model you must follow (the admin client bypasses RLS — authz is
enforced in application code today, converging on RLS + RPCs per the strategy).
main is protected — every change goes through a pull request (you cannot push to
main directly).
git checkout main && git pull
git checkout -b feature/your-change
# ...edit, run pnpm dev + the gates, commit...
git push -u origin feature/your-change
Open a PR → Vercel builds a preview URL → CI + preview must be green → merge deploys to production. The full workflow (local + on-the-go, and the path to a team-grade setup) lives in docs/WORKFLOW.md.
⚠️ One shared database (for now). Local, preview, and production all point at the same Supabase project. Develop freely, but never run destructive or migration commands against it — in particular, do not run
supabase db pushuntil the migration baseline is established. See WORKFLOW.md → Scaling to a team.
pnpm backlog (docs/BUILD-BACKLOG.json) for where we
are and what is built; take the ordered "what to build next" from
UX-MATURITY-PLAN §Sequencing and BUILD-LIST.
(DEVELOPMENT-MAP.md and BUILD-PHASES.md are superseded history.
BUILD-SEQUENCE and MASTER-TODO were absorbed into the one list and removed.)source.file). A probe measures the consequence, never the row's own title.Mirror, don't duplicate, the Git docs — translate them into human language:
(Ask before scaffolding — needs the target Notion workspace.)