# BobNinja, serious software that runs entirely in your browser

> Free online tools, PDF compression and image extraction among them, that run 100% in the browser with no application server: Rust compiled to WebAssembly, hosted for free on Cloudflare. Written in a language I had never used professionally, thanks to AI.

- Client: Our product (Developer tools)
- Role: Founder and engineer, Nicolas Dao
- Status: Live. Our products and research
- Capabilities: WebAssembly, Rust, Agentic programming, Zero-cost architecture
- Web page: https://cloudlesslabs.com/work/bobninja/

## Outcomes

- Heavy document processing, PDF compression and image extraction, done entirely in the user's browser.
- No backend application servers: hosting costs close to zero, and users' files never leave their device.
- Built in Rust and WebAssembly, a language I'd never used professionally, with AI as the bridge.

## The idea

BobNinja is my engineering playground, built around one hard rule: **every tool must run entirely in the user's browser,** with no backend application server. The aim was to see how sophisticated the software could get while keeping the infrastructure, and its bill, close to zero. It's hosted on Cloudflare's free static hosting, and the heavy lifting happens on the visitor's own machine, in WebAssembly.

## The hard part

The most challenging tools are a **PDF compressor** and a **PDF image extractor**. Compressing a large PDF is hard anywhere: memory runs out, performance collapses, and a careless rewrite corrupts the document. Doing it inside a browser tab, with the browser's memory limits and no server to fall back on, is considerably harder than a typical front end. It's also why people can trust it: their documents never leave their device.

Much of the logic is written in **Rust, compiled to WebAssembly**. Rust was outside my usual stack of Python, Node.js, JavaScript, SQL, CSS and C#. I had never used it professionally.

## What it proved

AI let me build sophisticated software in a language I didn't know. That's the real lesson of BobNinja, and it changes how technology should be chosen: a programming language is no longer the constraint it was. For decades, teams picked a stack because of what their engineers already knew. Now the best technology for the problem can win on its merits, and the engineer's value moves to understanding the problem, designing the architecture, choosing the right tools and delivering a working solution.

## Why it matters to you

We pick the right technology for your problem, not the one we happen to know best. And when the right answer is "no servers at all", we know how to build that too.

## Built with

- [Cloudflare static hosting](https://cloudlesslabs.com/stack/cloudflare-static-hosting/index.md): My default in The Stack
- [Claude Code](https://cloudlesslabs.com/stack/claude-code/index.md): My default in The Stack
- Rust
- WebAssembly
- PDF processing

## Links

- [bobninja.com](https://bobninja.com)

## Related

- [Forecasting a weather-driven risk for farmers, from a research paper to agents](https://cloudlesslabs.com/work/research-to-forecasts/index.md): a related project
- [Crop-risk scores from a partner's proprietary model, shipped in a week with Claude Code](https://cloudlesslabs.com/work/crop-risk-platform/index.md): a related project
- [Every project](https://cloudlesslabs.com/work/index.md)
- [How we work](https://cloudlesslabs.com/about/how-we-work/index.md)
- [Map of every Markdown file on cloudlesslabs.com, with what each one answers](https://ask.cloudlesslabs.com)
