A lightweight spreadsheet application designed for quick calculations — positioned between a calculator and a full office suite. The goal is fast loading with support for common spreadsheet operations.
Frontend (/frontend/)
npm run dev → localhost:8280Server (/server/)
The spreadsheet data is a nested map: {column-letter {row-number {:value ...}}}
Example:
{"A" {1 {:value 78 :inbound [...]}
3 {:value "=B2 * 4" :refs [...]}}
"B" {2 {:value "=A1 + 3" :refs [...] :inbound [...]}}}
= and are evaluated using math.js library=sum(A1:A10):refs - forward references (cells this formula depends on):inbound - back references (cells that depend on this cell):display - computed/evaluated value shown to user:value - raw user input:dirty - flag indicating re-evaluation needed:refs) and back (:inbound) reference trees:inbound queueFrontend Core Logic
frontend/src/cljs/microtables_frontend/core.cljs - App initializationfrontend/src/cljs/microtables_frontend/db.cljs - Data model definitionfrontend/src/cljs/microtables_frontend/events.cljs - State mutations (re-frame)frontend/src/cljs/microtables_frontend/subs.cljs - Data queries (re-frame)frontend/src/cljs/microtables_frontend/evaluation.cljs - Formula evaluation enginefrontend/src/cljs/microtables_frontend/views/sheet.cljs - Grid renderingProject Configuration
frontend/shadow-cljs.edn - ClojureScript build config (source paths, deps, build targets)frontend/package.json - npm scripts and JS dependenciesRun frontend: cd frontend && npm run dev
Install npm dependency: Add to shadow-cljs.edn, then restart
Understand formula eval: Start in evaluation.cljs, trace through evaluate-from-cell
Modify grid UI: Look in views/sheet.cljs