CLAUDE.md 2.9 KB

Microtables - LLM Navigation Guide

Project Overview

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.

Architecture

Frontend (/frontend/)

  • Language: ClojureScript (compiled via shadow-cljs)
  • Framework: Reagent + re-frame (React wrapper)
  • Build: Leiningen + shadow-cljs
  • Dev server: lein dev → localhost:8280

Server (/server/)

  • Language: JavaScript (ES6+ with Babel)
  • Framework: Express
  • Status: Minimal implementation - currently the frontend is fully functional standalone
  • Future: Will handle persistence and collaboration

Key Concepts

Data Structure

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 [...]}}}

Formula System

  • Formulae start with = and are evaluated using math.js library
  • Range syntax supported: =sum(A1:A10)
  • Cell references create a doubly-linked tree structure:
    • :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

Evaluation Flow

  1. When a cell changes, parse for references
  2. Update forward (:refs) and back (:inbound) reference trees
  3. Evaluate the cell
  4. Recursively evaluate all cells in :inbound queue
  5. Cycle detection prevents infinite loops

Important Files

Frontend Core Logic

  • frontend/src/cljs/microtables_frontend/core.cljs - App initialization
  • frontend/src/cljs/microtables_frontend/db.cljs - Data model definition
  • frontend/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 engine
  • frontend/src/cljs/microtables_frontend/views/sheet.cljs - Grid rendering

Project Configuration

  • frontend/project.clj - Leiningen config
  • frontend/shadow-cljs.edn - ClojureScript build config

Development Notes

  • Almost everything is subject to change (architecture, structure, design)
  • The frontend currently operates completely standalone
  • Focus is on simplicity and performance for common use cases
  • Data structures prioritize clarity over micro-optimization (small dataset assumption)

Common Tasks

Run frontend: cd frontend && lein 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