尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗One repo, two Next.js apps, one Supabase project behind both.
| Path | Port | What it is |
|---|---|---|
apps/booking | 3000 | Customer-facing. Serves every tenant's booking pages, chosen by hostname, plus /embed.js. Later: /api/agent, webhooks, the jobs runner. No logins. |
apps/admin | 3001 | Owner dashboard (and later super-admin). Everything behind a login. |
packages/core | Shared code: Supabase admin client, tenant lookup, and the booking engine (pricing, availability, holds). | |
supabase/ | Migrations and seed data. |
npm install
npm run dev # both apps, behind one address: localhost:3000
npm run dev:booking # just the booking app, on :3002
npm run dev:admin # just the admin app, on :3001
npm test # unit tests for pricing, availability and time zones
Both apps read the root .env.local (see .env.example). The booking app
needs SUPABASE_SECRET_KEY.
npm run dev starts a small router on :3000 (routing/dev-router.mjs) in front of
the two apps. It applies the same rules as Vercel (routing/rules.mjs, which vercel.json
is written from by npm run routing:vercel), so each address
reaches the app that serves it. Every link is built by packages/core/src/urls.ts
from ROUTING_MODE (see .env.example and info/routing.md).
Path mode (the default, and what the .vercel.app deployment uses):
Subdomain mode (ROUTING_MODE=subdomain and NEXT_PUBLIC_ROUTING_MODE=subdomain;
browsers send *.localhost to your machine without any DNS):
A business's booking pages come from its slug; the domains table only holds
domains of their own (booking.theirsite.co.uk), used in subdomain mode once verified.
Apply migrations to the hosted project with the Supabase CLI
(npx supabase db push), then run supabase/seed.sql in the SQL Editor.
packages/core/src/booking/engine.ts is the tool layer: getBookingConfig
(list_services), quote (get_quote), checkArea, findSlots
(check_availability), saveLead, holdSlot and confirmBooking. The plain
booking form uses it now; the Booking Agent will call the same functions.
Prices only ever come from getQuote() in pricing.ts.