Open source home inspection software. Self-host the full SaaS-grade inspection stack on Cloudflare for ~$0/month.
π§ͺ 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.
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.
- 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_WORKERself-binding (no network hop, no second worker)
- 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-5ratings,/canned-comment library,;snippets,?cheatsheet,βKpalette 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
- 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 CRM with referral tracking
- "Share with buyer" link generation
- Recommendations export
- 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
- 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
There are three ways to run OpenInspection, from zero effort to full control. Pick one.
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.
- 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. - 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), theBROWSERbinding, the Durable Objects and the Workflow β injecting the real resource IDs for you. There is no manual ID editing. - After the deploy finishes, visit
/setupon your new Worker URL and enter yourSETUP_CODEto create the first admin account. For the one-click path, the wizard reads.dev.vars.exampleand surfacesSETUP_CODEas 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./setupis gated solely on this secret: ifSETUP_CODEis 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.
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 deploynpm run setup:cloudflare(scripts/setup-cloudflare.js) provisions the Cloudflare resources and writes their real IDs into a gitignoredwrangler.local.jsonc(bootstrapped from the committed placeholderwrangler.jsonc).- Use
npm run deploy, not rawwrangler deployβ the npm script runs the fullreact-router build(bundlingserver/API +app/SSR into one worker) before deploying. Its tail then runs idempotent ensure-steps that provision the JWT keypair and print theSETUP_CODEin the deploy output if one is not already set (it never overwrites an existing value). Visit/setupwith 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, ornpm run dev(build-based βreact-router buildthenwrangler devon port 8787) to run the real bundled worker.
Deep dive: docs/operate/deploy.md. Architecture overview: docs/develop/architecture.md.
docs/README.md is the map. The most-used entries:
- Deploy β first-time setup on Cloudflare
- Upgrading β upgrade an existing deployment to a newer release
- User guide β the inspection workflow end to end, for hosted and self-hosted alike
- Architecture β module map, request flow, cost model
- Design System β tokens, shared-ui components, dark mode,
lint:ds - Contributing β code conventions and PR process, including the Versioning & Deprecation Policy
- Community β Discussions categories and where to talk
- 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
- π¬ Q&A
- π£ Roadmap & releases
- π‘ Ideas & feature requests
- π Issue tracker
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