💬 “Show me overdue invoices grouped by customer”
⚡ The AI wrote a page record — rendered instantly, live over websockets. The “app” is literally this data:
{"kind":"list", "collection":"invoices", "filters":{"status":"overdue"}, "sort_by":"total_cents"}
| Customer | Invoices | Total due |
| Acme Corp | 14 | $12,845.39 |
| Blue Ridge Ltd | 8 | $8,210.00 |
| Northwind | 11 | $6,523.48 |
💬 “Now weight the totals by the FX rate on each invoice date”
import object_records as orr
def GET(request):
# the schema can't express this — so
# the AI wrote this object. Live on save:
# no build, no deploy, same permissions.
rows = orr.read_collection_records
fx = {}
for r in rows("fx_rates"):
fx[r["date"]] = float(r["rate"])
totals = {}
for inv in rows("invoices"):
rate = fx.get(inv["invoice_date"], 1.0)
cid = inv["customer_id"]
cents = int(inv["total_cents"]) * rate
totals[cid] = totals.get(cid, 0) + cents
return {"json": {"totals_cents": totals}}
✦ The same AI wrote a Python object beside the data — same store, same permissions, live on the next request
The open-source Python object server
Talk to your data. Get an app. Pop the hood.
$ git clone https://github.com/askrobots/
dbbasic-object-server
$ scripts/install.sh
# fresh VM → server + HTTPS in ~30 min⭐ Source on GitHub
Quickstart · Architecture · Generative UI · Capabilities
</> Open source · MIT licensed · Python stdlib + uvicorn
Proof: this site runs on it.
This page is a record; updating it is a data change, not a deploy. A $5–$7 VM is plenty.
</> Objects all the way down
The primitive is a real Python file: pages, workers, APIs. First-class, versioned, reviewable — in a store you can grep.
✨ The generative UI is the shortcut
A schema projects a full app — live tables, boards, forms, filters, comments, attachments, sharing, permissions, realtime — so you skip the boring 80%. Not magic, just leverage.
🔄 No cliff
When the schema can’t say it, the same AI writes a code object beside it. Same store, same permissions, live on the next request. No export, no rebuild.