|
|
@@ -1,21 +1,11 @@
|
|
|
# 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.
|
|
|
+A lightweight spreadsheet application positioned between a calculator and a full office suite — fast loading, common spreadsheet operations.
|
|
|
|
|
|
## Architecture
|
|
|
-
|
|
|
-**Frontend** (`/frontend/`)
|
|
|
-- **Language**: ClojureScript (compiled via shadow-cljs)
|
|
|
-- **Framework**: Reagent + re-frame (React wrapper)
|
|
|
-- **Build**: shadow-cljs (via npm scripts)
|
|
|
-- **Dev server**: `npm run 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
|
|
|
+- `/frontend/` - ClojureScript (Reagent + re-frame, shadow-cljs). Fully functional standalone.
|
|
|
+- `/server/` - Express, minimal; will eventually handle persistence and collaboration.
|
|
|
|
|
|
## Key Concepts
|
|
|
|
|
|
@@ -40,37 +30,11 @@ Example:
|
|
|
- `: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/shadow-cljs.edn` - ClojureScript build config (source paths, deps, build targets)
|
|
|
-- `frontend/package.json` - npm scripts and JS dependencies
|
|
|
+A cell change re-parses references, updates `:refs`/`:inbound`, evaluates the cell, then recursively evaluates its `:inbound` queue (cycle detection prevents infinite loops).
|
|
|
|
|
|
## Development Notes
|
|
|
-
|
|
|
-- there is a todo.md file which contains some desired changes
|
|
|
-- 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
|
|
|
+- `todo.md` has a running list of desired changes
|
|
|
- Data structures prioritize clarity over micro-optimization (small dataset assumption)
|
|
|
|
|
|
## Common Tasks
|
|
|
-
|
|
|
-**Run 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`
|
|
|
+- **Install an npm dependency**: add it to `shadow-cljs.edn` (not just `package.json`), then restart the dev server
|