A spreadsheet whose columns think

Paste a list.
Add columns that do the work.

Every column is one small job: fetch the page, pull out the price, sort it into one of your labels, score it against your rubric, write the line. Press run and the grid fills in front of you. Open any cell and it tells you what produced it — the inputs it read, the words it was given, the milliseconds, the cost.

  • Live, cell by cell
  • Every cell shows its working
  • Free columns beside paid ones
0 lines

Or open one that is already filled in:

Opening a table…

 

Nothing open yet.

A column may only read the columns to its left. Click a heading to change it, click a cell to see how it was made.

How it works

Seven kinds of column. Three of them never call a model.

The point is not that a model can do everything. The point is that each column does one small, checkable thing — and that you can see which ones cost you.

Left to right, always

A column may only read the columns before it, written as {{ A }}. That one rule removes circular references, makes the run order obvious, and means changing a column only invalidates what comes after it.

A cell is a pure function

Same column settings, same inputs, same answer — so every result is cached and shared between tables. Opening a filled example costs nothing, and re-running only pays for what actually changed.

The run outlives the tab

Each table is a Durable Object with its own queue and an alarm. Close the browser mid-run and the work carries on; come back and the finished cells are waiting. Anyone else with the link watches the same cells land.

What it costs

The cheapest column is the one that does not think.

A meter runs in the corner of the workspace while a table fills: how many cells were computed, how many neurons that spent, and how many came back free from the cache. It is there because the honest answer to "should this be AI?" is usually "part of it".

Pulling a brand name out of a messy title needs a model. Joining that brand to a size and a category does not — that is a formula column, instant and free. Fetching a page does not need one either. On the example tables, two or three of the five columns cost nothing at all.

It is the same argument I make on client work, except here you can watch the number move.

Measured on the example tables

  • 48 cells filled in about twelve seconds, six at a time
  • ~2.6 neurons for one model cell, on the Workers AI free allowance
  • 0 for a formula, a fetch, or anything the cache has seen before
  • 1–3 s for a model cell — the model is the slow part, not the grid

Neurons are Cloudflare's unit for Workers AI. The free allowance is 10,000 a day, shared with the other demos on this domain, which is why Tabula caps itself well below it.

Built

What it is made of.

One Worker holds the API and the budgets. Each table is a Durable Object — its own small server with its own storage — which owns the grid, runs the queue on an alarm, and is the thing every open browser is connected to over a WebSocket. That is what makes a fill appear in every tab at once, and what lets a run carry on after you close yours.

D1 keeps three things only: which tables exist, the shared cell cache, and today's budgets. A column is data rather than code, and the little template language that lets a prompt say {{ B }} is parsed, never evaluated.

Runtime
Cloudflare Workers, one SQLite-backed Durable Object per table
Live
WebSocket fan-out from that object, with hibernation so an idle table costs nothing
Store
D1 for the registry, the shared cell cache and the daily counters
Model
Llama 3.1 8B on Workers AI — one narrow question per cell
Front end
Hand-written HTML, CSS and JavaScript. No framework, no grid library, no build step

For a client I would add: accounts and shared workspaces, a real job queue so a thousand rows do not sit in one object, per-run cost limits with an approval before a big one, connectors that read the list straight from a CRM or a warehouse instead of the clipboard, and an evaluation set so a prompt change can be measured rather than guessed at.

Questions

Fair questions.

Is this a real product I can use?

It is a working demo, and it says so. Tables you make live for seven days, hold up to forty rows and eight columns, and share a daily model budget with the other demos on this domain. If this shape of thing would earn its keep in your business, the useful version is one built around your data and your systems — that is the work I do.

What happens to what I paste?

It goes into that table's own storage on Cloudflare, and to the model for the columns you run. Tables expire after seven days and take their cells with them. Anyone with the link can open the table, so do not paste anything you would not put on a public page.

How accurate is it?

Accurate enough to be useful, not accurate enough to be left alone. A classify column can only answer with one of your labels, and a cell the model could not match is marked unsure rather than quietly guessed. Every cell shows the evidence or the reasoning behind it, so a person can check the ones that matter. For client work I would build an evaluation set before trusting any of it in production.

Why a spreadsheet?

Because everyone already knows how one works, and because the interesting problems in this kind of automation are per-row and per-column: what depends on what, what to re-run, what it costs, and where a wrong answer came from. A grid shows all four at once. A chat window shows none of them.

Can it read my own URLs?

Yes — a fetch column takes the URL in a cell and keeps the readable text of that page, with no model call at all. It is https only, it refuses private and local addresses, it gives up after eight seconds, and it cannot read pages that need JavaScript to render.

Got a list somebody is working through by hand?

Lead lists, product catalogues, support queues, application piles, supplier quotes. When a person is reading each row and typing a judgment beside it, that is usually a week of work and then a system that runs itself. Tell me what the rows look like.