update readme
This commit is contained in:
@@ -1,34 +1,40 @@
|
||||
# smb-online — "Get Your Small Business Online"
|
||||
|
||||
A productized service that gets local small businesses online: **landing page + online booking +
|
||||
online reception + small automations**. Built to be **thoroughly tracked and logged** — every
|
||||
client, lead, booking and invoice lives in a Google Sheets CRM, driven by **n8n** on the homelab.
|
||||
A productized service that gets local small businesses online: **landing page + online
|
||||
booking + lead capture + small automations**. Built to be **thoroughly tracked and logged** —
|
||||
every client, lead, booking and invoice lives in a **Postgres CRM** (source of truth), driven by
|
||||
**n8n** on the homelab, with a one-way mirror into Google Sheets for a human-readable overview /
|
||||
Looker Studio dashboard.
|
||||
|
||||
> Full plan: `~/.claude/plans/pitch-me-some-ideas-breezy-swing.md`
|
||||
> Full documentation (architecture, data model, every component): **`Documentation.md`**.
|
||||
|
||||
## Two delivery tiers
|
||||
## Delivery tiers — an internal signal, not a fixed product
|
||||
|
||||
| | **Tier A — Google stack** | **Tier B — Self-hosted / privacy** |
|
||||
|---|---|---|
|
||||
| For | casual businesses, no data-residency concern | privacy-sensitive (health, legal, tax) |
|
||||
| Site | static page / Google Sites | static page (Astro) on free host |
|
||||
| Booking | Google Calendar Appointment Schedule | self-hosted Cal.com |
|
||||
| Lead capture | Google Forms | self-hosted form → n8n |
|
||||
| Reception | Gmail | self-hosted + AI receptionist |
|
||||
| Infra cost | ≈ €0 | small (homelab + domain) |
|
||||
|
||||
Both tiers feed the **same Google Sheets CRM** via n8n webhooks.
|
||||
`tier` (A = free Google stack, B = self-hosted/privacy) started as two fixed product bundles but
|
||||
is being decoupled from the public offering (see `TODO.md`): which stack a client actually gets
|
||||
is a decision made **with the client**, case-by-case, and recorded on their `clients` row
|
||||
(`tier`, `stack_notes`) — it's no longer baked into the demos. In practice, **booking has already
|
||||
converged on one shared self-hosted service** (Easy!Appointments, see `deploy/booking/`) used for
|
||||
every client regardless of tier.
|
||||
|
||||
## Repository layout
|
||||
|
||||
```
|
||||
templates/landing/ Reusable landing-page template + the two tier demos
|
||||
demo-tier-a/ Tier A demo — "Schnittpunkt" barbershop (Google stack)
|
||||
demo-tier-b/ Tier B demo — "PhysioVital" physio practice (self-hosted/privacy)
|
||||
sheets/SCHEMA.md Google Sheets CRM workbook spec (tabs + columns)
|
||||
n8n/ Exported n8n workflow JSON (lead-intake, booking-sync, renewals, …)
|
||||
stacks/selfhosted/ docker-compose for Tier-B services (Cal.com, Vaultwarden, lead form)
|
||||
playbooks/ Per-client setup checklists (tier-a-google.md, tier-b-selfhosted.md)
|
||||
Documentation.md Full architecture / component reference — start here for "how it works"
|
||||
backoffice/ Postgres CRM + Flask API + operator dashboard (the source of truth)
|
||||
deploy/
|
||||
clients/ One isolated nginx stack per signed client + new-client.sh scaffolder
|
||||
booking/ Shared Easy!Appointments booking service (all clients)
|
||||
smb-demos/ Public demo/preview hosting (Apache)
|
||||
backup/ Daily Postgres backup script (cron on the homelab)
|
||||
n8n/ Exported n8n workflows (lead-intake, onboarding, booking-sync, renewal-reminder)
|
||||
playbooks/ Operator playbooks (outreach, lead-to-customer, tier-a, tier-b)
|
||||
sheets/SCHEMA.md Google Sheets mirror spec (tabs + columns) — downstream of Postgres
|
||||
templates/landing/ Landing-page demos + client preview pages
|
||||
demo-tier-a/ "Schnittpunkt" barbershop demo
|
||||
demo-tier-b/ "PhysioVital" physio practice demo
|
||||
demo-pizzeria/ "Bella Napoli" pizzeria demo w/ online ordering
|
||||
templates/onboarding/ Internal "create client" form → n8n onboarding workflow
|
||||
```
|
||||
|
||||
## View the demos
|
||||
@@ -36,28 +42,36 @@ playbooks/ Per-client setup checklists (tier-a-google.md, tier-b-
|
||||
They are self-contained HTML — open directly:
|
||||
|
||||
```bash
|
||||
xdg-open templates/landing/demo-tier-a/index.html # barbershop / Google stack
|
||||
xdg-open templates/landing/demo-tier-b/index.html # physio practice / self-hosted
|
||||
xdg-open templates/landing/demo-tier-a/index.html # barbershop
|
||||
xdg-open templates/landing/demo-tier-b/index.html # physio practice
|
||||
xdg-open templates/landing/demo-pizzeria/index.html # pizzeria / online ordering
|
||||
```
|
||||
|
||||
Or serve both with a chooser page:
|
||||
Or serve them all with the chooser page:
|
||||
|
||||
```bash
|
||||
python3 -m http.server 8080 --directory templates/landing
|
||||
# → http://localhost:8080/ (links to both demos)
|
||||
# → http://localhost:8080/ (links to all three demos)
|
||||
```
|
||||
|
||||
Forms and booking are **stubbed** until Phase 4 wires them to the n8n webhooks.
|
||||
Lead/callback forms POST live to the n8n `lead-intake` webhook; booking widgets link to the
|
||||
shared Easy!Appointments instance. Nothing here is stubbed anymore — see `Documentation.md` §4.5
|
||||
for the full workflow wiring.
|
||||
|
||||
## Phases (status)
|
||||
|
||||
- [x] **Phase 1** — Two demo landing pages (this commit)
|
||||
- [ ] **Phase 2** — Accounts & setup: fresh Google account → connect Drive MCP → master workbook;
|
||||
secure n8n; bind Google creds; Vaultwarden; domain
|
||||
- [ ] **Phase 3** — CRM workbook + n8n lead-intake & renewal workflows + Looker Studio dashboard
|
||||
- [ ] **Phase 4** — Wire demo forms/booking to n8n webhooks (live end-to-end proof)
|
||||
- [ ] **Phase 5** — First real client + reception v1
|
||||
- [ ] **Phase 6** — AI receptionist (Claude Haiku 4.5)
|
||||
Tracked against actual repo state — see `Documentation.md` for what backs each checkmark.
|
||||
|
||||
- [x] **Phase 1** — Demo landing pages
|
||||
- [x] **Phase 2** — Accounts & setup: Google account + workbook, n8n live, Google creds bound,
|
||||
Vaultwarden (`clients.vault_ref`), domain (wildcard `*.mivanchenko.de`)
|
||||
- [x] **Phase 3** — CRM (now Postgres-first, Sheets mirrored) + n8n lead-intake & renewal
|
||||
workflows — Looker Studio dashboard itself lives in Google and isn't repo-verifiable
|
||||
- [x] **Phase 4** — Demo forms + booking wired live to n8n webhooks (lead-intake, booking-sync)
|
||||
- [ ] **Phase 5** — First real client + reception v1 — onboarding automation and per-client
|
||||
deploy tooling exist and are exercised (`deploy/clients/`); not verifiable from the repo
|
||||
alone whether a paying client is live
|
||||
- [ ] **Phase 6** — AI receptionist (Claude Haiku 4.5) — not started
|
||||
|
||||
## ⚠️ Before going live (legal — not legal advice)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user