Skip to content
Β 
Β 

Latest commit

Β 

History

778 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

OpenInspection

OpenInspection

Open source home inspection software. Self-host the full SaaS-grade inspection stack on Cloudflare for ~$0/month.

Deploy to Cloudflare GitHub Discussions License: AGPL-3.0

πŸ§ͺ Try it in 60 seconds β€” no install, no credit card. Start free on inspectorhub.io β†’

Activation-link signup, and your first 5 inspections are free β€” no card, no clock. Your workspace ships pre-loaded with starter templates + canned comments so you can click through a real inspection immediately. Decide to self-host later? Your data exports cleanly β€” same codebase, same schema.


What it is

OpenInspection is open source home inspection software β€” a complete inspection stack: inspector dashboard, public booking widget, a field-ready inspection editor, professional HTML reports with e-signatures, AI assistance, and PWA offline support, all running on Cloudflare's edge and self-hosted on a single Worker.

Architecture

  • Single Cloudflare Worker (workers/app.ts) β€” a Hono entry that mounts the full API in-process and delegates page routes to React Router v8 SSR (the cloudflare/react-router-hono-fullstack-template shape)
  • API (server/) β€” Hono + Drizzle + D1, handles all business logic
  • Web (app/) β€” React Router v8 + React 19 + Tailwind v4, SSR on CF Workers
  • Shared UI (packages/shared-ui/) β€” Design System 0523 token-based components
  • One deployable; React Router loaders/actions call the API directly through an in-process API_WORKER self-binding (no network hop, no second worker)

Inspector workflow

  • 3-pane editor; a new workspace starts with 250+ canned comments, 80 repair items, 4 rating systems and 7 inspection templates (residential, pre-listing, new construction Γ—2, sewer scope, radon, mold)
  • Keyboard-driven: 1-5 ratings, / canned-comment library, ; snippets, ? cheatsheet, ⌘K palette in the workspace
  • Simultaneous editing β€” inspection results are a Yjs CRDT in a Durable Object
  • Installable PWA; field data is offline-capable (the results document buffers in IndexedDB and merges on reconnect). Photo and video binary upload needs a connection and says so rather than queueing
  • Migrate from Spectora through the import wizard, which shows what the conversion produced before anything is written

Customer experience

  • Company-level public booking widget (/book/<slug>) with auto-assignment, optional inspector choice, and Turnstile bot protection
  • E-sign agreements with Ed25519 audit chain β€” server-rendered signed PDF + Certificate of Completion via Browser Run, evidence-pack zip with email delivery, public verifier URL (/v/<token>) with QR code on PDFs + offline self-verify (/verify) for court-friendly independence from the server, optional inspector pre-sign
  • Branded report viewer with print-as-PDF

Agent / referral

  • Agent CRM with referral tracking
  • "Share with buyer" link generation
  • Recommendations export

Self-host friendly

  • Runs standalone (single-tenant) by default β€” one fixed tenant holds all your data, no subdomains to manage
  • Branded UI (logo, colors) configurable in Settings
  • Tenant-scoped D1 data isolation baked into every table

Why OpenInspection

  • Cheap to run: a solo inspector's whole year fits in Cloudflare's smallest paid Workers plan, plus a domain (~$10/yr). The free plan is enough to try it and enough to deploy it, but ⚠️ not enough to run it: its CPU ceiling is in the low milliseconds and this application's p95 request is ~49ms (measured over seven days of live traffic, 2026-09-05). A statutory-form render alone is ~470ms.
  • Yours: fork it, change templates, add integrations. No vendor lock-in.
  • Fast: edge-deployed, < 100 ms response times globally
  • Compliant: PBKDF2-SHA256 password hashing, hash-chained Ed25519 audit log on e-signatures (ESIGN Act + UETA), server-rendered PDF + Certificate of Completion via Browser Run, offline-verifiable evidence pack, tenant-scoped data isolation
  • Modern: React Router v8 + React 19 + Hono API + Drizzle + Tailwind v4 β€” small surface, easy to read

Quick start

There are three ways to run OpenInspection, from zero effort to full control. Pick one.

1. Try the hosted service (no deployment)

Want to evaluate the product without running any infrastructure? Register at inspectorhub.io/register with your email, click the activation link, and a workspace is created for you β€” the app lives at app.inspectorhub.io. This is the managed edition of this exact codebase (first 5 inspections free, no card), pre-loaded with starter templates so you can click through a real inspection immediately. You can export your data and switch to a self-hosted deploy at any time.

2. Deploy to Cloudflare (one-click)

  1. Click the Deploy to Cloudflare button above and follow the wizard. The DEPLOY was verified end-to-end on the Cloudflare Workers Free plan (2026-05-31), and the wizard's "Workers Paid" notice banner is non-blocking β€” the deploy completes. ⚠️ That verified the install, not the running application: under real traffic the free plan's CPU ceiling returns HTTP 1102 on ordinary pages (observed 2026-09-05). Plan for a paid Workers plan before putting it in front of clients.
  2. Cloudflare reads the committed wrangler.jsonc (which carries placeholder IDs only) and auto-provisions and binds the required resources β€” D1 (DB), KV (TENANT_CACHE), R2 (PHOTOS), the BROWSER binding, the Durable Objects and the Workflow β€” injecting the real resource IDs for you. There is no manual ID editing.
  3. After the deploy finishes, visit /setup on your new Worker URL and enter your SETUP_CODE to create the first admin account. For the one-click path, the wizard reads .dev.vars.example and surfaces SETUP_CODE as a secret field you fill in during the deploy β€” that is the value you type at /setup. It must be any value of at least 6 characters. /setup is gated solely on this secret: if SETUP_CODE is unset the endpoint refuses to proceed, so an unprovisioned Worker can't be claimed. You can change it later in the dashboard under Settings β†’ Variables and Secrets.

Deep dive: docs/operate/deploy.md.

3. Deploy with the CLI

git clone https://github.com/InspectorHub/OpenInspection
cd OpenInspection
npm install
npm run setup:cloudflare    # provisions D1/KV/R2 + writes real IDs to a gitignored wrangler.local.jsonc
npm run deploy              # full react-router build, then wrangler deploy
  • npm run setup:cloudflare (scripts/setup-cloudflare.js) provisions the Cloudflare resources and writes their real IDs into a gitignored wrangler.local.jsonc (bootstrapped from the committed placeholder wrangler.jsonc).
  • Use npm run deploy, not raw wrangler deploy β€” the npm script runs the full react-router build (bundling server/ API + app/ SSR into one worker) before deploying. Its tail then runs idempotent ensure-steps that provision the JWT keypair and print the SETUP_CODE in the deploy output if one is not already set (it never overwrites an existing value). Visit /setup with that code for your first login.
  • For local development, use npm run dev:hmr (Vite dev server with hot module replacement, port 5173) for the fast iteration loop, or npm run dev (build-based β€” react-router build then wrangler dev on port 8787) to run the real bundled worker.

Deep dive: docs/operate/deploy.md. Architecture overview: docs/develop/architecture.md.

Documentation

docs/README.md is the map. The most-used entries:

Tech stack

  • Cloudflare Workers: edge runtime (single Worker β€” Hono entry mounts the API in-process + delegates page routes to React Router SSR)
  • React Router v8 + React 19: frontend SSR on Workers
  • Hono + Zod OpenAPI: typed API layer
  • Drizzle ORM + Cloudflare D1: SQLite at the edge
  • Cloudflare R2 / KV: object storage and config cache
  • Tailwind CSS: v4 only (via @tailwindcss/vite, design system tokens + utility CSS)
  • Optional: any OpenAI-compatible AI endpoint, Stripe Connect, email (Resend / SendGrid / Postmark / Mailgun), SMS (Twilio / Telnyx), QuickBooks Online, Google or Apple calendar, Google Places

Community

Prefer a managed setup?

If you'd rather skip the infrastructure work, InspectorHub offers a fully-hosted version of this software β€” same codebase, managed for you.

  • First 5 inspections free β€” no credit card required
  • Simple per-seat pricing
  • Any-month money-back guarantee
  • Upgrade to self-hosted at any time β€” your data, your choice

Try InspectorHub free β†’

License

GNU Affero General Public License v3.0.

About

Open-source home inspection software. Self-host on Cloudflare for ~$0/mo. Functional parity with Spectora and Inspector Toolbelt.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages