Lulucat

Lulucat Blog

Lulucat Blog is where we write down how the apps actually get built. Expect deep dives into the rendering engines behind our handwriting tools — stroke models, erasers, GPU pipelines — the measurement harnesses we build to trust them, and honest notes on working with AI coding agents: what they got right, what they broke, and what we kept. No fixed schedule; new posts appear when there's something real to show.

RSS feed
The blue-tiled roof of the Temple of Heaven above a red wall in Beijing, scanned from Fuji slide film with the sprocket border visible
Photo by Zhen Yao · Original · Unsplash License

Chalk Tool Performance: From Full-Screen Passes to Scissor Rectangles

Lulucat Notes' chalk tool slowed down in dense handwriting areas. The bottleneck was not the 3,571 input samples — it was 70 full-screen scratch passes per frame. A rejected low-resolution cache and a per-stroke scissor rectangle tell the rest of the story.

Gaoge ZhangGaoge Zhang

Why We Don't Use a Database Yet

We evaluated Turso/libSQL for our iPad handwriting app, measured everything, and chose flat snapshot files. The workload does not need a database — and each step should only pay for problems that already exist.

Gaoge ZhangGaoge Zhang

How Kimi K3 Built a Digital Fountain Pen Stroke

We wanted Freeform's directional fountain pen in Lulucat Notes. The spec was a screenshot of handwriting. Two models, one discriminating question, and an ellipse nib later, the water pen writes the way it should. The research, code, and validation were done by Kimi K3 on Fireworks.

Gaoge ZhangGaoge Zhang