AgenticOS
One place to build, run and govern your company's AI agents. Self-hosted, open source, and yours.
Instant quotes, online bookings and deposits for mobile car detailers and valeters, on your own booking page. £49 a month after a 14-day free trial.
BusinessTypeScript · PLpgSQLGitHub @HY-HY1OnlineOwner 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 ↗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.