One grid engine, three platforms
This project set out to answer a specific technical question: how much of a spreadsheet app's logic can live in one shared core, reused across web, desktop, and mobile? The grid itself is canvas-rendered rather than DOM-based, which is what keeps a sheet with thousands of cells smooth to scroll through.
It's structured as a Turborepo monorepo with a shared TypeScript core and three platform packages: a Next.js 14 web app (Firebase for persistence, ECharts for in-sheet charting), a Tauri 2.0 desktop app wrapping the same web app in a native shell with Rust filesystem access, and a React Native + Expo app for iOS and Android.
A shared core, three shells
Web
Next.js 14, canvas grid rendering, ECharts, Firebase.
Desktop
Tauri 2.0 wrapping the web app natively, with Rust for local file read/write.
Mobile
React Native + Expo 51, targeting iOS and Android from the same core.
Core
A shared TypeScript package for grid logic, formulas, and state — one engine, three shells.
One monorepo, one release process
Structured as a Turborepo monorepo so the web, desktop, and mobile builds share one core rather than three separate implementations.


