···11-# INKFINITE
22-33-An infinite canvas whiteboard application for creative visual thinking and collaboration.
11+# Inkfinite
4255-## Overview
66-77-Inkfinite is a web-based infinite canvas application.
33+A web-based infinite canvas application for creative visual thinking.
8495## Architecture
1061111-Inkfinite is built with a reactive architecture and optimized canvas rendering.
1212-There are pan, zoom, and shape manipulation tools.
77+Inkfinite is built with reactivity, vector math, and optimized canvas rendering.
138149The project is organized as a pnpm monorepo with the following structure:
1510···119114120115### Development
121116122122-```bash
123123-cd apps/desktop
124124-125125-# Development mode (with hot reload)
126126-pnpm tauri dev
127127-128128-# Build production app
129129-pnpm tauri build
130130-```
131131-132132-**Note:** The web app automatically detects when running in Tauri and switches from IndexedDB to file-based persistence.
133133-134134-</details>
135135-136136-## Development
137137-138138-### Prerequisites
117117+#### Prerequisites
139118140119**Standard Setup:**
141120···147126- Nix with flakes enabled
148127- For desktop app: Rust via [rustup](https://rustup.rs) (not Nix)
149128150150-### Setup
151151-152152-<details>
153153-<summary>
154154-Standard
155155-</summary>
156156-157129```bash
158158-# Install dependencies
159159-pnpm install
160160-161161-# Run tests
162162-pnpm test
163163-164164-# Build all packages
165165-pnpm build
166166-167167-# Start web app in development
168168-cd apps/web
169169-pnpm dev
170170-```
171171-172172-</details>
173173-174174-<details>
175175-<summary>
176176-Nix Shell
177177-</summary>
178178-179179-```bash
180180-# Enter Nix development shell (provides Node.js & pnpm)
181181-nix-shell
182182-183183-# Install dependencies
184184-pnpm install
185185-186186-# For desktop app development, ensure Rust is installed via rustup:
187187-# curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh --no-modify-path -y
188188-189189-# Run web app
190190-cd apps/web
191191-pnpm dev
192192-193193-# Run desktop app (Tauri)
194130cd apps/desktop
195195-pnpm tauri dev
196196-```
197197-198198-- Node.js and pnpm are provided by Nix for consistency
199199-- Rust must be installed via rustup to avoid macOS framework linking issues
200200-- The shell automatically configures paths and SDK for Tauri development
201201-202202-</details>
203131204204-### Project
132132+# Development mode (with hot reload)
133133+pnpm tauri dev
205134206206-<details>
207207-<summary>
208208-Structure
209209-</summary>
210210-211211-```sh
212212-.
213213-├── packages/
214214-│ ├── core/
215215-│ │ ├── src/
216216-│ │ │ ├── math.ts # Vector and matrix math
217217-│ │ │ ├── camera.ts # Camera transforms
218218-│ │ │ ├── geom.ts # Geometry utilities
219219-│ │ │ ├── model.ts # Data structures
220220-│ │ │ ├── reactivity.ts # State management
221221-│ │ │ └── actions.ts # Input system
222222-│ │ └── package.json
223223-│ └── renderer/
224224-│ ├── src/
225225-│ │ └── index.ts # Canvas renderer
226226-│ └── package.json
227227-└── apps/
228228- └── web/
229229- ├── src/
230230- │ ├── routes/ # SvelteKit routes
231231- │ └── lib/ # Svelte components
232232- └── package.json
135135+# Build production app
136136+pnpm tauri build
233137```
234138235235-</details>
236236-237237-<details>
238238-<summary>
239239-Design Principles
240240-</summary>
241241-242242-### Code Organization
243243-244244-- **Namespace pattern** - Types and operations co-located (e.g., `Vec2` type + `Vec2.add()` function)
245245-- **Pure functions** - Immutable operations, no side effects
246246-- **Type safety** - Full TypeScript coverage with strict mode
247247-248248-### Coordinate Systems
249249-250250-- **World space** - Infinite 2D plane for shape coordinates
251251-- **Screen space** - Viewport pixels, origin at top-left
252252-- **Camera** - Mediates between world and screen coordinates
253253-254254-</details>
255255-256256-<details>
257257-<summary>
258258-Theme
259259-</summary>
260260-261261-- **Light:** Nord color palette
262262-- **Dark:** Iceberg.vim color palette
263263-- **Font:** Open Sans
139139+**Note:** The web app automatically detects when running in Tauri and switches from IndexedDB to file-based persistence.
264140265141</details>