Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
翻訳待ち
Stop losing customers because you were too busy to answer the phone. Lead capture, AI qualification, instant quotes and automatic follow-up for local service businesses.
翻訳待ち
ビジネスTypeScript · JavaScriptGitHub @TwistedQoutesオンライン所有者未確認
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Tattoo supplies
翻訳待ち
Loading the full README. The saved excerpt is shown below.
Turn Leads Into Jobs. Automatically.
Lead-to-job management for local service businesses — lawn care, landscaping,
pressure washing, cleaning, junk removal, handyman, painting, HVAC, plumbing,
electrical and roofing.
JobFlow takes a lead through the whole journey and does the parts an owner never
gets round to:Read the full README ↗Turn Leads Into Jobs. Automatically.
Lead-to-job management for local service businesses — lawn care, landscaping, pressure washing, cleaning, junk removal, handyman, painting, HVAC, plumbing, electrical and roofing.
JobFlow takes a lead through the whole journey and does the parts an owner never gets round to:
LEAD → AI QUALIFICATION → CUSTOMER → PROPERTY → ESTIMATE → QUOTE
→ FOLLOW-UP → BOOKING → JOB → COMPLETION → REVIEW → REPEAT CUSTOMER
The build is phased. Phases 1–14 are complete and verified: project setup, the full database schema, multi-tenancy, authentication, the dashboard shell, the lead pipeline and CRM, the services catalogue and pricing engine, professional quotes a customer can accept without an account, AI lead qualification, the messaging layer — a unified inbox, missed-call text-back, carrier-compliant opt-out and the automated follow-up engine — scheduling with jobs and a calendar in the business's own timezone, and the repeat-business loop: tracked review requests, reactivation of lapsed customers, and the settings screen the rest of it depends on, and Stripe billing — hosted checkout, a signature-verified webhook, and plan limits that follow what the workspace has actually paid for, analytics with a platform admin view for whoever runs JobFlow itself, and the way in: a four-question setup wizard and a seeded demo workspace that cannot touch the real world.
| Phase | Scope | State |
|---|---|---|
| 1 | Setup, Next.js, TypeScript, Tailwind, Prisma, Postgres, authentication | ✅ Done |
| 2 | Database schema, multi-tenancy, workspace provisioning | ✅ Done |
| 3 | Dashboard, navigation, UI components | ✅ Shell done |
| 4 | Customers, leads, CRM, Kanban pipeline | ✅ Done |
| 5 | Services, pricing engine, quote calculator | ✅ Done |
| 6 | Quote generation, public quote pages, acceptance | ✅ Done |
| 7 | AI lead qualification, AI responses | ✅ Done |
| 8 | Email/SMS, Twilio, Resend, automated follow-up | ✅ Done |
| 9 | Calendar, appointments, jobs | ✅ Done |
| 10 | Review requests, customer reactivation | ✅ Done |
| 11 | Stripe billing, subscriptions, usage limits | ✅ Done |
| 12 | Analytics, admin dashboard | ✅ Done |
| 13 | Landing page, onboarding, demo mode | ✅ Done |
| 14 | Testing, security, performance, deployment | ✅ Done |
The navigation in src/components/layout/navigation.ts is the whole product map,
with a built flag per entry. Unbuilt screens are hidden rather than shown as
dead links, and each phase flips its entries on as it lands.
Named here rather than left to be discovered: loadSpeed and monthlySeries
still aggregate in JavaScript what Postgres could aggregate in SQL. The reasoning
for leaving that alone is in docs/performance-phase-14.md.
node --version)ON DELETE SET NULL ("column"), whose
column-list form arrived in 15, and without it deleting a customer fails
outright. On 14 the migration does not apply at all.Nothing else is required to run the app. Every third-party integration is optional; see Integrations.
npm install
npm install runs prisma generate automatically, which writes the typed
database client.
cp .env.example .env
Then set the two things that are genuinely required:
# 1. Where Postgres is
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/jobflow"
DIRECT_URL="postgresql://postgres:postgres@localhost:5432/jobflow"
# 2. A signing secret for sessions
AUTH_SECRET="$(openssl rand -base64 48)"
.env.example documents every variable and says what breaks without it. Read it
rather than copying keys blindly — the two Google Maps keys in particular are
deliberately separate and need different restrictions.
createdb jobflow # or create it in your host's console
npm run db:migrate:deploy # applies prisma/migrations
For a fresh database you can use npm run db:migrate instead, which creates a
new migration if you have changed the schema.
npm run dev
Open http://localhost:3000, click Start free, and you have a working workspace.
Signup is not just a user row. src/lib/organizations/provision.ts creates the
whole starting state in one transaction:
OWNERIt is one transaction because a half-provisioned workspace — a business row with no membership — is unreachable by the person who just signed up for it.
The board is the product's main screen, and two decisions in it are worth stating.
Two ways to move a card. Dragging is what a board is for, and it works on a desktop. But HTML5 drag-and-drop does nothing on touch, and these users are on a phone in a truck more often than at a desk — so every card also carries a status select. That is not a degraded fallback: on a phone it is the better interaction, it is keyboard-operable, and a screen reader can drive it.
This is the beginning of the README. Read the rest at the original. Read the full README ↗