Charles Jackson · Automation engineer · Montréal, QC
I build systems that keep running after I close the laptop.
Forecasting kernels, agent platforms, and scheduled data planes — built so the work continues on a clock rather than on my attention. Six of them are running right now. The index is below.
Index of works
6 built · 4 publicPolypredict
polypredict.ggPublic forecasting instrument
A forecaster that never sees the price.
- Runtime
- Python · FastAPI
- Data
- Supabase Postgres
- Schedule
- Vercel cron · 3 jobs daily
- Reporting
- Slack digests, unprompted
Polypredict puts its own probability on every live prediction market before it looks at what the market thinks, so a disagreement is an opinion rather than an echo. Every call is written down, graded when the event resolves, and kept where anyone can check it. Three scheduled jobs run the whole thing without me: one takes the day's forecasts, one grades yesterday's against what happened, one folds the result back in.

Digital Twins
digitaltwins.worldAgent platform
Agents that keep a memory when nobody is watching.
- Runtime
- Next.js on Cloudflare Workers
- State
- Durable Objects · Supabase
- Schedule
- Worker cron trigger, nightly
- Posture
- Fail-closed without its secret
You set a persona, a mandate, and the boundaries; the twin holds the thread and can negotiate with other people's twins inside them. The part that makes it work happens offline. Every night the worker wakes on its own schedule, sweeps the last thirty-six hours of episodic memory, and consolidates it into something semantic — so the twin is sharper in the morning than it was at midnight.

DataBay
databay.worldData marketplace
Every fact carries two clocks.
- Runtime
- Next.js on Cloudflare
- Data
- Postgres · bitemporal schema
- Access
- Keyed API · metered
- Guarantee
- No silent overwrite of history
A marketplace for dated, sourced datasets sitting on a bitemporal world model. Each observation keeps both when it happened and when it became known, so a query can ask what the world looked like at a moment in the past rather than what we later decided it had been. Revisions arrive as new knowledge instead of overwriting the record — which is the only way a backtest tells the truth.

Predictive
predictive.companyAI product studio
A firm that runs on the agents it sells.
- Runtime
- Next.js · Supabase
- Money
- Stripe · tax at source
- Core
- Agent orchestration
- Discipline
- Graded against outcomes
Predictive takes a process a company runs by hand and gives it back engineered, measured, and shipped. The studio's own operations move through the same machinery the clients are buying — intake, scoping, delivery, and invoicing on one plane. Underneath sits the forecasting kernel: a calibrated probability on a decision, and a grade against the outcome when it lands.

MicroHabitat
Commercial engagementClient platform
Five applications, one farming operation.
- Runtime
- Next.js · five apps
- Data
- Supabase · row-level security
- Documents
- Researched and typeset to PDF
- Tenancy
- Isolation verified as a user
An urban-farming company runs its business on a platform of five applications — field operations, a client portal, an internal desktop tool, a community surface, and the public site — over a single Postgres with row-level isolation holding the tenants apart. The piece I would point at is the certification reporting: documents that were assembled by hand are now researched, scored, typeset, and delivered as a finished PDF without anyone opening a template.
Client platform · behind authentication · no plate
Invoice Studio
invoice.charlesjackson.devBilling and tax engine
The tax code, written down once.
- Runtime
- Vite · Supabase
- Rules
- GST 5% · QST 9.975%
- Output
- Numbered PDF
- Threshold
- Small-supplier crossing encoded
Quebec's GST and QST rules encoded as an engine instead of a spreadsheet — the two rates, the small-supplier threshold and the date it was crossed, half-up rounding to the cent. An invoice is drafted, taxed, numbered, rendered to PDF, and sent without anyone re-deriving the arithmetic. It bills my own work, which is the honest test of it.
Owner tool · behind authentication · no plate
What I automate.
The six works differ in subject and share a spine. This is the spine — the parts I would bring to a system that has to keep running when nobody is looking at it.
Scheduled work
Cron on Vercel and Cloudflare. Jobs that fail closed when a secret is missing, secrets that never enter the repository, and a log worth reading the morning after.
Data planes
Postgres schemas, migrations that apply cleanly, row-level security, bitemporal history, and tenant isolation checked by signing in as a second user and trying to read the first one's rows.
Agent pipelines
Model orchestration tiered by cost, structured output with validation at the boundary, guardrails that hold on malformed input, and an evaluation that runs before a change is allowed to ship.
Forecasting and grading
Calibrated probabilities, held-out backtests with no leakage, Brier and log-loss, and a gate that refuses to promote a model which does not beat the one it replaces.
Documents
Reports researched, assembled, and typeset to PDF. Invoices numbered and taxed at the source. Nothing re-keyed by hand between one system and the next.
Money
Stripe checkout, webhooks verified by signature before they are trusted, credit ledgers that reconcile, metered access, and sales tax computed where the amount is decided.
Observability
Digests that arrive whether or not anyone asks for them, so that a job which quietly stopped running is not a job which quietly stopped running.
Hardening
Malformed and oversized input, replay and tampering, concurrency and idempotency, cross-tenant reads. Every hole found becomes a regression test before the fix is called done.