Live demo
Open source · MIT

Event rental software you can own and self‑host.

Inventory, project quoting, live availability checks, pull sheets, customer e-signatures and an SEO-friendly public catalog — in one full-stack app, with an optional AI copilot that can read and draft but never act on its own.

MIT License Release Last commit Stars React Vite Express SQLite Rust Docker
Demo admin — pre-filled on the login page
Email admin@sunset-demo.test · Password DemoAdmin!2026
Fictional company, in-browser data. No server, nothing stored.
100k+lines of code
85automated test files
13tagged releases
3runtimes: Node, Rust, Chrome MV3

What it does

Built around the real workflow of a rental company, from first inquiry to pull sheet. The demo lets you try each of these.

▦

Inventory & availability

Searchable catalog with categories, stock, set-asides and per-day availability. Overbooked items surface as conflicts before you promise them.

▤

Quotes & pricing

Line items, discounts, tax, custom items and contract text — with signed-versus-unsigned change tracking that forces re-approval.

✍

Client portal & signing

Shareable public quote page with approve-and-sign, live quote-linked messaging and audit-oriented signing artifacts.

☑

Pull sheets

Warehouse picking lists grouped by category, with aggregate pulls and QR/serial tracking for fulfillment.

🌐

Public SEO catalog

Canonical URLs, JSON-LD product markup, robots and sitemap generation so your inventory ranks.

✦

CINDY copilot

Permission-aware, read/draft-only assistant across the app. Supports OpenAI, Anthropic, Gemini or managed local Ollama — AI is never a hard dependency.

Try it in the demo →

Architecture

A single deployable: SPA, API and SQLite, with optional Rust and AI services behind feature flags.

  Browser (React + Vite SPA)  ◄─────►  Public quote & catalog pages (SEO)
        │  REST / SSE
        ▼
  Express API ── permissions · quotes · inventory · files · messaging · admin
        │            │                  │
        ▼            ▼                  ▼
  SQLite (sql.js)   Rust availability   Optional AI: OpenAI · Anthropic · Gemini · Ollama
  + safe migrations engine (guarded)    (CINDY copilot, read/draft only)
        ▲
  Chrome MV3 extension  ·  Google Sheets import  ·  SMTP / IMAP  ·  Docker / Windows EXE

Engineering highlights

Choices that go beyond the feature list.

Safe schema evolution

Startup migrations keep a live database upgradeable, with backup and a DB guardian service plus worker heartbeats and incident reflection.

Permissions by module

Role-aware navigation and per-module read/write permissions, including a dedicated check for AI copilot access.

Domain correctness

Shared totals logic, oversold detection across overlapping events, signed-quote change control and a guarded Rust parity path for the availability engine.

Documented & audited

Architecture and API docs, a security audit, release notes per version, structured handoffs and an extensive test suite.

Tech stack

ReactViteExpresssql.js / SQLiteRustChrome MV3DockerBun / Node 20MapboxNodemailer / IMAPFlowSharpJSON-LD / SEO

Run it yourself

Docker is the quickest path; Bun or Node 20 works for development.

  1. Clone and install
    git clone https://github.com/248Tech/rentalos.git
    cd rentalos
    npm run install:all
  2. Configure — copy .env.example to .env and set APP_URL (and optional AI / Mapbox keys).
  3. Start
    npm run dev            # API :3001, client :5173
    # or
    docker compose up -d --build

Full README · Changelog · Security audit