Back to Portfolio

SimpleFieldPro

Multi-Tenant SaaS Field Service Management — Built for small appliance repair companies

v0.1.0 — MVP complete, Phase 2 (billing & integrations) in progress
Visit simplefieldpro.com
simplefieldpro.com
SimpleFieldPro homepage screenshot

Overview

SimpleFieldPro is a multi-tenant SaaS application purpose-built for small appliance repair companies (1–10 employees). It covers the entire service lifecycle — from customer creation and job scheduling through parts tracking, estimates, invoicing, and payment — without the complexity or cost of enterprise platforms like Rossware or Walkabout.

Each repair company is an isolated tenant on its own subdomain (slug.app.com). Companies self-onboard at the root portal, and all business records are scoped to their company — enforced at both the query layer and the app layout. The architecture is Stripe-ready with manual payments in the MVP; live billing is Phase 2.

18
Job Statuses
4
User Roles
SaaS
Multi-Tenant
MVP
Feature Complete

Tech Stack

Modern full-stack TypeScript throughout — the same toolchain used in the HTS Client Portal, hardened further for multi-tenant isolation.

Next.js 15
App Router + React 19
TypeScript
End-to-end type safety
PostgreSQL
Primary database
Prisma
ORM + migrations
Tailwind CSS
Utility-first styling
Auth.js v5
Credentials + JWT sessions
Docker + Caddy
Container deployment
GitHub Actions
CI/CD → GHCR
Architecture Highlight

Tenant resolution is middleware-first — every request extracts the company slug from the hostname via src/lib/tenant.ts before any route handler runs. All Prisma queries receive a companyId filter so cross-tenant data leakage is structurally impossible, not just convention.

Key Features

Every feature covers a real pain point in the daily operation of a small appliance repair shop.

📅

Scheduling & Dispatch

  • Day/week calendar view
  • Dispatch board — per-technician columns
  • Needs-scheduling queue
  • Mobile-first technician daily route
  • Tap-to-call, open-in-maps
  • Quick status buttons from route view
🔧

Jobs & Work Orders

  • Full lifecycle across 18 statuses
  • Diagnosis & work performed notes
  • Activity timeline per job
  • Parts follow-up queue
  • Mark part arrived → ready for return
  • Estimate → invoice conversion
💰

Estimates & Invoices

  • Line-item estimates with send/approve/decline
  • One-click estimate → invoice
  • Manual payment recording
  • Balance tracking
  • Printable invoice view
  • Stripe-ready (Phase 2)
📊

Dashboard & Reports

  • Today's jobs, open & unscheduled counts
  • Parts queue, estimates awaiting approval
  • Unpaid invoices & revenue this month
  • Revenue report by date range
  • Tax collected report
  • Jobs by status & by technician
👥

Customers & Appliances

  • Full CRUD for customers
  • Customer detail with full job history
  • Appliance records per customer
  • Make, model & serial tracking

Settings & Roles

  • Owner, Dispatcher, Technician roles
  • Role-based nav and access control
  • Company profile & default rates
  • User management
  • Editable communication templates
  • Self-onboarding at portal signup

Technical Highlights

The engineering decisions that make this more than a CRUD app.

🏠

Multi-Tenant Subdomain Architecture

Each company operates at its own subdomain. Tenant identity is resolved in middleware from the request hostname — before any route handler runs — and injected into the request context. All database queries are scoped to the resolved companyId. The app layout enforces that authenticated users can only access their own company's subdomain, preventing subdomain spoofing. Local dev runs on localhost with a single-host fallback when ROOT_DOMAIN is unset.

🔁

18-Status Job Lifecycle

Jobs move through a carefully designed state machine spanning the full repair workflow: scheduled → in progress → diagnosis → waiting for parts → ready for return visit → complete → invoiced → paid. Each transition is intentional and drives which queues, dispatch views, and technician route entries a job appears in. Status is never a free-text field.

📱

Mobile-First Technician Route

The technician route view is designed to be the only screen a field tech needs during their workday. It shows their ordered jobs with one-tap status updates, tap-to-call for customers, and direct links to open the address in Apple or Google Maps. All state changes from the route view write back to the shared job record in real time.

📋

Self-Onboarding & Tenant Bootstrap

New repair companies sign up independently at the root portal. The signup flow creates the company record, the first owner account, and the full set of default communication templates in a single transaction — no admin intervention required. The company's subdomain is available immediately after signup.

🔄

Stripe-Ready Architecture

Payment infrastructure is designed for Stripe from day one. The data model carries all fields needed for Stripe Customer, Payment Intent, and Subscription objects. Manual payment recording in the MVP uses the same code paths that live Stripe webhooks will update in Phase 2 — swapping in live keys activates billing without schema changes.

🚀

Production-Ready Deployment

The repo ships everything needed to go to production: a multi-stage Dockerfile producing a thin standalone runtime, a docker-compose.yml with resource limits, a docker-entrypoint.sh that runs migrations on every start, GitHub Actions CI/CD to GHCR, a pg_dump backup drop-in, and a GET /healthz health check endpoint.

End-to-End Workflow

The MVP supports the complete real-world repair lifecycle from first contact to final payment.

Create customer Add appliance Create job Schedule Dispatch board Tech route Diagnosis & work Parts follow-up Return visit Estimate → approve Invoice Paid ✓

Phase 2+ Roadmap

The MVP is feature-complete. Phase 2 adds billing infrastructure and integrations.

Stripe subscriptions & billing Platform admin tooling Tenant isolation test suite Twilio SMS notifications Resend / SendGrid email Live Stripe payments Google Calendar sync QuickBooks Online sync Customer booking portal Customer payment portal Route optimization AI model/serial extraction from tag photos Full inventory & truck stock Purchase orders GPS technician tracking

What This Project Demonstrates

Engineering skills and product thinking exercised in building SimpleFieldPro from scratch.

🏠
Multi-Tenant SaaS Design
Subdomain routing, tenant isolation, and self-onboarding at scale
🛠
Domain Modeling
18-status state machine, role-based access, and complex relational data
📱
Mobile-First UX
Technician route UI designed for one-handed use in the field
🚀
Production Deployment
Full CI/CD pipeline, Docker, migrations, backups, and health checks
🔄
Forward-Compatible Architecture
Stripe, Twilio, and email layers wired and ready — no schema changes to go live
📋
Product Thinking
Built around a real industry vertical with a clear ICP and a deliberate feature scope

Building something similar?

SimpleFieldPro shows what a focused SaaS MVP looks like when it's engineered to grow. If you have a field service, scheduling, or operations tool in mind — let's talk.

Get In Touch View More Projects