Infinite Canvas - Whiteboarding App
The Context

Infinite Canvas is my latest venture into creative tools, launching in 2025. It’s a whiteboarding and sketching app with infinite zoom and pan capabilities, available across Mac, iPhone, and iPad.
This project represents my return to graphics and creative tools, combining my experience in app architecture with a fresh take on digital canvas applications. I love low-key visual storytelling in presentations, and I’m a visual thinker overall, doodling and sketching a lot to think. So this app was meant to fill my small niche.
Technical Challenges
Infinite Zoom Implementation
- Custom rendering pipeline for smooth zooming at any scale so that I could really expand on ideas
- Exploring data-structures to partition infinite space
- Level-of-detail system for zoomed-out strokes to maintain performance
Cross-Platform SwiftUI
- Unified codebase for Mac, iPhone, and iPad
- Platform-specific optimizations while sharing core logic
- Touch, mouse, and trackpad input handling
Immutable Data Architecture
- Pure functional approach to canvas state: a collection of brush strokes with well-defined transformations
- Efficient projection of state into spatial data structures that make drawing what’s on screen possible
- Predictable undo/redo through state snapshots
Agentic LLM/Claude Code Experiment
I started this project in mid-2025 when Claude Code was out for about a month, and developer friends left and right were surprised about what they could do with it. So I gave it a shot to resurrect a 2017 prototype and after liking the result of a day’s worth of work, I started from scratch with everything I’ve learned.
Team Dynamics
While a solo project, Infinite Canvas benefits from:
- Early beta testers from my existing app communities
- Collaboration with designers for UI/UX decisions
- Feedback from digital artists and note-takers
- Constant chatting with an LLM – writing with and for it was almost a social interaction, fooling my stupid ape brain
Personal Reflections
It’s exciting to work on something visual after years of text-based apps. The immediate, tactile feedback of drawing reconnects me with the graphics work I did in my youth, the presentation slides I miss making – and the glee my baby daughter showed when she could test the app was priceless.
Infinite Canvas brings together everything I’ve learned about app development to perform, not learn, and release something new in a short time-frame. I resurrected an old prototype and used the mid-2025 LLM tech for agentic coding to iterate and prototype much more rapidly than I could write on my own.
I pointed Claude Code at it, asked to modernize the non-compiling, outdated Swift code, make a couple of changes, and then it just worked. That floored me.
After I picked myself up, I used Claude Code to use the prototype (which had a terrible hodge podge of generated changes) as a blueprint. Or a backdrop, rather: The functionality and approach could remain the same. But I started the whole thing from scratch, from well-defined model to UI inside out, so that I could work in smaller increments, on smaller features, that better fit an LLM’s context window.
This workflow resulted in splitting the project into 5 package components, each with their own documentation, some with their own CLAUDE.md
instructions, to keep the LLM focused. It also enabled parallelization in multiple terminals. This worked really well to make quick progress for the first 2 weeks of development, until the app reached a state where I needed to make and test changes manually and check the result on devices. Claude Code was so well-groomed by that point, and I so accustomed to this new workflow, that I could let the LLM perform some refactorings and mechanical changes while I tweaked the interactive details in the UI – which, since I was using SwiftUI from the start, means not a lot of training data that’s reliable and up-to-date anyway. I still needed to perform a lot of manual work and felt like the bottleneck starting in week 3. With StoreKit integration and more manual testing, that lasted until the end, and only post release did I pick up speed again with feature additions and changes.
This LLM-augmented coding experience strengthened my resolve for documentation and clear, technical writing. It helped the LLM not go too far off rails, and as a result I had much better documentation that I actually wanted to interact with.
The take-away: If you explain a concept to a junior developer who is just joining your team, everyone wins.
Impact
The app represents my continued commitment to creating focused, powerful tools that respect users’ creativity and workflow: a visual thinking tool in my toolbox for independent scholars.