Field Service

Business & SaaS · React + Node (Express) · 11 @molecule/* packages

Jobber-like field service management with quotes, job dispatch scheduling, technician assignment, checklists, and invoicing — with built-in Stripe-backed subscription tiers

Open in Molecule

Try it

Opens instantly. Runs on sample data, so changes reset on reload.

Open preview in a new tab ↗View workspace ↗

What is inside

Screens (26)

  • Landing /
  • Login /login
  • Signup /signup
  • ForgotPassword /forgot-password
  • ResetPassword /reset-password
  • Pricing /pricing
  • About /about
  • Privacy /privacy
  • Terms /terms
  • Dashboard /dashboard (signed in)
  • Customers /customers (signed in)
  • NewCustomer /customers/new (signed in)
  • CustomerDetail /customers/:id (signed in)
  • Quotes /quotes (signed in)
  • QuoteNew /quotes/new (signed in)
  • QuoteDetail /quotes/:id (signed in)
  • QuoteEdit /quotes/:id/edit (signed in)
  • Jobs /jobs (signed in)
  • JobDetail /jobs/:id (signed in)
  • Dispatch /dispatch (signed in)
  • Technicians /technicians (signed in)
  • Invoices /invoices (signed in)
  • InvoiceDetail /invoices/:id (signed in)
  • Notifications /notifications (signed in)
  • Settings /settings (signed in)
  • PlanUpdated /plan-updated (signed in)

Data model (12 tables)

  • customers — id, owner_id, name, email, phone, address, notes, created_at, …
  • devices — id, createdAt, updatedAt, userId, name, pushPlatform, pushSubscription, hasPushSubscription
  • invoice_items — id, invoice_id, description, qty, unit, rate_cents, position, created_at, …
  • invoices — id, owner_id, job_id, customer_id, number, status, total_cents, issued_at, …
  • job_checklist — id, job_id, label, done, done_at, created_at, updatedAt
  • job_notes — id, job_id, author, body, created_at, updatedAt
  • jobs — id, owner_id, customer_id, quote_id, title, description, address, scheduled_start, …
  • notifications — id, user_id, kind, title, body, link, payload, read_at, …
  • payments — id, createdAt, updatedAt, userId, transactionId, productId, platformKey, data, …
  • quote_items — id, quote_id, description, qty, unit, rate_cents, position, created_at, …
  • quotes — id, owner_id, customer_id, title, status, valid_until, total_cents, notes, …
  • technicians — id, owner_id, name, trade, phone, email, skills, active, …

API (9 handlers)

  • \_seed api/src/handlers/_seed.ts
  • \_shape api/src/handlers/_shape.ts
  • customers api/src/handlers/customers.ts
  • invoices api/src/handlers/invoices.ts
  • jobs api/src/handlers/jobs.ts
  • notifications api/src/handlers/notifications.ts
  • quotes api/src/handlers/quotes.ts
  • settings api/src/handlers/settings.ts
  • technicians api/src/handlers/technicians.ts

Subscription tiers

free / pro / team — gated by: maxCustomers, maxQuotes, maxJobs, maxTechnicians, maxInvoices, advancedFeatures, canExport, retentionDays

Built from 11 @molecule/* packages

Browse all @molecule/* packages →

Required secrets

  • DATABASE_URL PostgreSQL connection string
  • MAILGUN_API_KEY Mailgun API key for quote and invoice emails
  • MAILGUN_DOMAIN Mailgun sending domain
  • STRIPE_SECRET_KEY Stripe secret API key (sk_test_... in test mode)
  • STRIPE_WEBHOOK_SECRET Stripe webhook signing secret (whsec_...)

The @molecule/* packages are Apache-2.0. The app you build from this template is yours to export and self-host. Licensing