Skip to content

Operations, by configuration

Your operations backend, without the build.

Launch real operational apps, bookings, payments, records, workflows, storefronts, by configuration. You get a working multi-tenant backend and console in a day, not a codebase to maintain.

no per-app rebuild · no redeploy · docker or aws lambda

one declaration → a running system
booking.strategy
strategy:booking
resource:practitioner// what gets reserved
granularity:30m
horizon:60d
timezone:from_location// DST-correct per site
buffers:{ before: 0m, after: 10m }
exclusivity:postgres_gist// double-booking is impossible
deposit:25%// captured at booking
notify:
confirm
remind @ -24h
remind @ -2h
console · bookingslive
Tue 24 AugAmerica/Jamaica
09:00
Available
09:30
Ava Chen · Cleaningdeposit $30
10:00
Available
10:30
Held · 4:59

exclusivity: postgres gist · double-booking impossible

Configure, don't code

Turn on a strategy. Get the whole stack.

A strategy is the unit you switch on: booking, storefront, records, subscriptions, forms, workflow. Each one stands up its own API, console surfaces, and data model. Pick one and watch the backend change, no rebuild.

Booking

Reservable resources, real availability in the site's own timezone, deposits at booking. Exclusivity is enforced in Postgres, not hoped for in app code.

e.g. Dental & physio clinics
booking.strategy
strategy:booking
resource:practitioner// what gets reserved
granularity:30m
horizon:60d
timezone:from_location// DST-correct per site
buffers:{ before: 0m, after: 10m }
exclusivity:postgres_gist// double-booking is impossible
deposit:25%// captured at booking
notify:
confirm
remind @ -24h
remind @ -2h
console · bookingslive
Tue 24 AugAmerica/Jamaica
09:00
Available
09:30
Ava Chen · Cleaningdeposit $30
10:00
Available
10:30
Held · 4:59

exclusivity: postgres gist · double-booking impossible

API it exposes

  • GET/booking/availability
  • POST/booking/appointments
  • POST/booking/appointments/:id/reschedule

by end of day
A working scheduler your front desk can use before lunch.

Two readers, one product

Warm at the front desk. Precise in the terminal.

The same platform reads two ways. Business owners see the outcomes. Developers see the guarantees underneath them.

for business owners

Run your operation, not a project.

  • Take bookings with deposits by this afternoon
  • One console your whole team actually runs
  • Reminders and follow-ups that cut no-shows
  • Add a storefront or plans without a new project

for developers

Guarantees, not vibes.

  • Row-level security FORCED on every tenant table
  • Booking exclusivity enforced by a Postgres GiST constraint
  • Idempotent payments, comms, and webhooks
  • Durable workflows with park / resume and crash recovery

Batteries included

Every strategy composes the same kernel.

You don't wire these together. They're already one system, sharing typed contracts and a single Postgres database.

  • 01

    Bookings

    Availability & reservations

    Timezone-correct slots, resource exclusivity enforced by a Postgres GiST constraint, reschedule and cancel flows.

  • 02

    Payments

    Intents, refunds, payouts

    Idempotent payment intents and refunds behind a provider adapter, so a retry never charges twice.

  • 03

    Subscriptions

    Plans, trials, dunning

    Billing cadence with proration and a dunning ladder that retries then pauses, instead of churning quietly.

  • 04

    Records

    Collections & relations

    Typed collections with relations, column-level policy, and cross-tier reads with no N+1 hydration.

  • 05

    Workflows

    Durable automation

    An executor with durable park/resume, timers, crash recovery, and idempotent compensation.

  • 06

    Comms

    Transactional email

    Templated, tracked transactional email with a cascade of overrides, delivered idempotently.

  • 07

    Storefront

    Catalog & checkout

    Products, variants, carts and checkout that hand off to payments without a separate integration.

  • 08

    Domains & files

    Custom domains, storage

    A domain registry with DNS verification and TLS, plus S3-backed file storage with signed URLs.

Isolation you can prove

Multi-tenant, for real.

Not a tenant_id column you have to remember to filter. Isolation is enforced in the database, on every table, for every query.

  • Every transaction binds app.tenant_id before it reads or writes.
  • The app connects as a non-owner role, so RLS can't be bypassed.
  • Cross-tenant reads resolve through a scoped, audited resolver, never by widening scope.
BEGIN; SET LOCAL app.tenant_id = 'tenant_b';
Tenant A
•••• 6 rows
denied
Tenant B
client:avaorder:#1042invoice:paid
readable
Tenant C
•••• 12 rows
denied

row-level security is FORCED on every table, including extension tables. the app connects as a non-owner role, so a query bound to one tenant cannot read another's rows.

Your cloud, not ours

Deploy it where you already operate.

The same kernel runs as one container next to Postgres, or as per-module Lambdas behind API Gateway. Your data stays on your infrastructure.

Long-lived server

The whole kernel runs unmodified in one container next to Postgres and Redis.

  • One compose file: api, console, worker, Postgres, Redis
  • Realtime over WebSocket / SSE included
  • Push to deploy on your own box

one container · one box

apiconsoleworkerpostgresredisrealtime

same modules · same contracts · process differences hidden behind adapters

Where it earns its keep

Built for operations that get messy.

These aren't demos. They're the shapes ProWork was designed around.

Clinics & practices

01

Dental, physio, aesthetics, veterinary

Online booking with deposits, patient records with gated notes, automated reminders, and no-show charges.

bookingrecordsworkflow

Home & field services

02

Cleaning, HVAC, salons, tradespeople

Job intake forms, scheduling per crew, quotes and invoices, and reminders that cut no-shows.

formsbookingsubscriptions

Marketplaces

03

Multi-vendor storefronts & directories

A vendor per tenant, catalogs and checkout, payouts, and records that never leak across vendors.

storefrontrecordssubscriptions

SaaS & memberships

04

Tools, communities, content businesses

Plans and trials, metered access, dunning, and a console your team runs without deploys.

subscriptionsrecordsworkflow

In a day

Morning declaration. Afternoon operations.

  1. 09:0001

    Declare a strategy

    Pick booking, storefront, records, subscriptions, forms, or a workflow, and set it in the console.

  2. 11:0002

    The backend is live

    A tenant-isolated API and console are running, with real endpoints and a database behind them.

  3. 15:0003

    You're operating

    Taking bookings and payments, sending reminders, and watching runs, all without a deploy.

Turn your operations on.

Create an account and stand up your first strategy today. No sales call, no per-app build.