mivanchenko d5a304ebe9 n8n ingest swap: lead-intake & onboarding write to the DB
Both flows now POST into the smb-crm DB API instead of appending to Sheets, so
Postgres stays the source of truth and the DB->Sheets mirror keeps the Sheet
current. Telegram notifications unchanged.

- lead-intake: Webhook -> Build lead row -> POST /api/leads -> Telegram
  (dropped the direct Sheets append + the redundant activity-log nodes; the DB
  service logs + mirrors activity itself).
- onboarding: Webhook -> Compute -> POST /api/clients (DB assigns C-id) ->
  Build project w/ returned id -> POST /api/projects -> Telegram. DB computes
  renewal_date; go-live = start + 14d.
- Token injected at deploy time; repo keeps the __CRM_TOKEN__ placeholder.

Verified end-to-end on the live webhooks: lead and client+project land in the
DB and mirror to Sheets; test data cleaned; DB/Sheets consistent.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 09:33:53 +02:00

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.

Full plan: ~/.claude/plans/pitch-me-some-ideas-breezy-swing.md

Two delivery tiers

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.

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)

View the demos

They are self-contained HTML — open directly:

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

Or serve both with a chooser page:

python3 -m http.server 8080 --directory templates/landing
# → http://localhost:8080/   (links to both demos)

Forms and booking are stubbed until Phase 4 wires them to the n8n webhooks.

Phases (status)

  • 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)

Operator is in an Ausbildung as Cloud Engineer at NETWAYS. This offering deliberately stays out of NETWAYS's lane (no managed cloud hosting / monitoring / OpenStack/K8s hosting for clients). Before taking paying clients: (1) check the Ausbildungsvertrag for a Nebentätigkeit clause and get written employer approval if required; (2) Gewerbeanmeldung + Kleinunternehmerregelung (§19 UStG) once revenue starts; (3) confirm with the IHK / a Steuerberater if unsure.

S
Description
No description provided
Readme 860 KiB
Languages
HTML 56.3%
Python 39.7%
PLpgSQL 2%
CSS 1%
JavaScript 0.6%
Other 0.4%