Case studies

InkFlow: a local-first infinite canvas with a C++ and WebAssembly engine

InkFlow is an infinite-canvas web app for thinking and organizing tasks that works without sign-up and keeps data in the browser. Drawing runs on a C++ engine compiled to WebAssembly, collaboration happens in real time across devices, and handwriting turns into tasks with in-browser text recognition.

Client
Gomes Code product
Sector
Web product · productivity

Client and context

Productivity tools tend to become endless lists. InkFlow does the opposite: dump ideas on a free canvas and pull one task at a time into a focus mode with a timer.

The problem

“I want to sketch ideas like on paper, with no account, without my data going to a server, and turn the sketch into a task.”

Constraints

  • Smooth drawing even on tablets, without freezing the page.
  • User data only on the user's device.
  • Cross-device collaboration without a data server of its own.

Decisions and trade-offs

  1. A C++ drawing engine compiled to WebAssembly

    Why: Stroke computation leaves JavaScript and gets close to native performance. The cost is one more build step.

  2. Local-first with IndexedDB (Dexie.js)

    Why: Works offline and without sign-up; users can export everything. No central database to maintain and no personal data in custody.

  3. Peer-to-peer sync with Y.js and WebRTC

    Why: Devices talk directly to each other; only signaling goes through a light worker. No data server.

  4. Text recognition in a Web Worker

    Why: OCR (Tesseract.js) runs in the background, so handwriting becomes a task without freezing the canvas.

What we built

  • Infinite canvas with pen, eraser, shapes, lasso selection and PDF export.
  • Task stack, Pomodoro focus mode, Eisenhower matrix and productivity heatmap.
  • Magic wand: handwriting becomes a task through in-browser OCR.
  • QR-code pairing and real-time collaboration across devices.
  • Light and dark themes, Portuguese and English, installable as an app.

Results

  • 0accounts or data servers needed to start using itSource: Live app behavior
  • 3languages in the codebase: TSX, TypeScript and C++ (drawing engine)Source: InkFlow repository, Oct 13, 2026

This case's tile

Non-blank source lines by language, counted in the repository (src and wasm folders).

InkFlow lines of code by language
InkFlow lines of code by languagelines
TSX (interface)3,555
TypeScript (logic)2,437
C++ (drawing engine)74

Source: InkFlow repository · 2026-10-13

Technologies

  • React
  • TypeScript
  • C++
  • WebAssembly
  • Y.js
  • WebRTC
  • Dexie.js
  • Tesseract.js

See it live: inkflow.danillogomes.com

Want something at this level?

Send the problem, not a spec.