All work
Live/2026

Portal CRM

A complete self-hosted CRM + ops platform for a field-service crew.

A production CRM and operations dashboard for a residential field-service business — recurring scheduling, a Kanban pipeline, quotes/invoices, a map view, audit logging, and a mobile-first UX — built to deploy as a single self-hosted binary.

Demo login
email demo@portalcrm.localpassword demo12345

Seeded with sample data — log in to explore the full app.

Single-binary
Architecture
SvelteKit
Frontend
PocketBase
Backend
100% self-hosted
Privacy

The problem

Small field-service businesses run on paper, phone notes, and spreadsheets — and most off-the-shelf CRMs are either bloated, expensive, or require handing customer data to a third-party cloud. The need is a focused, fast, fully-owned system that works from a truck.

This project is a complete, production-grade CRM designed to replace all of that, with a hard constraint that drove every decision: 100% private and self-hosted — it zips up and runs as a single binary with near-zero setup.

What I built

  • Full relational schema design — clients with embedded property data, recurring service scheduling that auto-advances on job completion, quotes, invoices, and payments.
  • Operations dashboard: a drag-and-drop Kanban opportunity pipeline, calendar scheduling with conflict handling, and a map view of the client base.
  • Production hardening: cascade-delete with audit logging and a recoverable trash view, duplicate-record prevention, timezone-correct date handling, and access rules.
  • Mobile-first throughout — designed to be used on a phone or tablet in the field, with tap-friendly targets and responsive layouts.
  • Single-folder deploy: PocketBase serves the built SvelteKit SPA from one directory, so the entire app runs from a single binary with SQLite — no cloud accounts, no telemetry.

Architecture

  1. 1SvelteKit + TypeScript SPA (mobile-first UI)
  2. 2shadcn-svelte + Tailwind component system
  3. 3PocketBase (Go) — auth, REST, realtime, SQLite
  4. 4Single binary serves SPA from pb_public/
  5. 5Self-hosted on a VPS — fully private, zero telemetry

What it demonstrates

This is full-stack system design end-to-end: data modeling, a realtime backend, a polished reactive frontend, and the operational details (audit logs, soft-deletes, timezone correctness) that separate a demo from a system real people depend on.

The live demo is seeded with sample data — use the demo login above to click through the full app.

Stack

SvelteKitTypeScriptPocketBaseSQLiteTailwind CSSshadcn-svelte