> ## Content Index
> Fetch the complete content index at: https://thibaultmilan.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# I Never Believed the "Built It in 10 Minutes" Videos. Then I Tried One.
- URL: https://thibaultmilan.com/i-never-believed-the-built-it-in-10-minutes-videos-then-i-tried-one/
- Published: 2026-10-25T22:34:10.000Z
- Updated: 2026-10-25T22:34:10.000Z
- Description: I gave Claude a two-line prompt and three GitHub links. About ten minutes later, my Bluetooth thermal printer showed up in ⌘P like any other Mac printer. What the viral "built it in 10 minutes" videos leave out is everything that happens before the stopwatch starts.
- Author: Thibault Milan
- Tags: AI, open-source, macOS, developer tools

****TL;DR:** I asked Claude for a macOS driver for my Phomemo T02 thermal printer, with a short prompt and links to three open-source projects that had already reverse-engineered its protocol. About ten minutes later, I had a driver that worked on the first test page. Just want the driver? Download it right below, unzip, run `./install.sh --testpage`. The rest of this post is about why it worked, and what the videos promising the same thing usually skip.

[phomemo-t02-macos version 1.2.0Phomemo T02 as a regular macOS printer: CUPS → background conversion → Bluetooth LE. Menu-bar statusphomemo-t02-macos-1.2.0.zip47 KBdownload-circle](https://thibaultmilan.com/content/files/2026/10/phomemo-t02-macos-1.2.0.zip "Download")

---

 You've seen them. Someone who proudly introduces themselves as "not a developer at all" explains they just asked Cursor to build a full app, and ten minutes later it's live. (Cursor sponsors a staggering number of these.) A little less often it's the same pitch with OpenAI, especially since the Sol models came out. I've scrolled past dozens of them, eyes rolling, convinced the interesting part happened off camera.

This weekend I ran the experiment myself, on a real annoyance. I'm still a bit annoyed, mostly at how well it went.

## A printer nobody is going to support

![](https://thibaultmilan.com/content/images/2026/10/S4ac63f9ec7e0494aa0ee57d373e748d1J.jpeg)

The Phomemo T02 is a pocket thermal printer: no ink, Bluetooth only, 48 mm paper, 384 dots wide. I use it to print labels for my 3D printing filament spools, which come out of my self-hosted Spoolman instance.

The official way to print is a phone app. On a Mac, there's no driver, no CUPS support, nothing in System Settings. You can install the iOS app on an Apple silicon Mac and print from there, technically. In practice it's clunky, and frankly ugly. And nothing better is coming: this is a cheap gadget, it will never get a firmware update, let alone a driver for macOS 27.

So every label meant export, open that app, import, crop, print. Fine the first time. Infuriating the fortieth.

![](https://thibaultmilan.com/content/images/2026/10/Charcoal-Black.png)

![](https://thibaultmilan.com/content/images/2026/10/Coton-White.jpg)

![](https://thibaultmilan.com/content/images/2026/10/Sapphire-Blue.jpg)

![](https://thibaultmilan.com/content/images/2026/10/Lavender-Purple.jpg)

My label I was doing by hand, back in 2024, thanks to Sketch, and export as PDF, send through Signal from my mac to my smartphone, to import it on the Phomemo app.

## Five minutes of homework

Before typing a prompt, I spent a few minutes on GitHub. Three projects had already done the hard, unglamorous part, which is reverse-engineering the Bluetooth protocol from the official app: [TiMini-Print](https://github.com/Dejniel/TiMini-Print?ref=thibaultmilan.com) by Dejniel, [phomymo](https://github.com/transcriptionstream/phomymo?ref=thibaultmilan.com) by transcriptionstream, and [phomemo-tools](https://github.com/vivier/phomemo-tools?ref=thibaultmilan.com) by Laurent Vivier.

None of them gave me what I wanted (a real printer in ⌘P on a Mac). Together, though, they documented the protocol byte by byte.

Then I wrote the prompt. Here it is, translated from French. The original also had a link to the product page, and my typos.

```
Make me a print driver for my PHOMEMO T02 Inkless Mini Printer for my Mac. macOS 27.0.1. I want to be able to add it like a normal printer. The conversion job (if needed) must run in the background.

References of successful implementations: https://github.com/Dejniel/TiMini-Print https://github.com/transcriptionstream/phomymo https://github.com/vivier/phomemo-tools

```

That's the whole thing. No architecture, no language, no mention of CUPS, PPD files or Bluetooth Low Energy. Two requirements about the result, and a reading list.

## What happened in those ten minutes

(The full session is public [here](https://claude.ai/share/8dda1b2d-9401-4734-8545-cac5ddcc8da3?ref=thibaultmilan.com) if you want to check my claims.)

Claude started by reading the three repos and cross-checking them. The sources agreed: Bluetooth service `ff00`, writes on `ff02`, notifications on `ff03`, ESC/POS raster commands, 384 pixels wide, data sent in 128-byte packets.

Then it designed around two macOS traps I didn't know existed.

**CUPS filters live in a folder protected by System Integrity Protection.** You can't drop your own converter in there. So the driver doesn't try: a PPD file tells CUPS to stop once the page is rendered, and the built-in `socket://` backend hands the job to a small local service listening on port 9100\. That service runs in the background, converts the page and sends it over Bluetooth. The macOS print queue empties instantly, which was my second requirement.

**macOS kills any process that touches Bluetooth without declaring why in its own `Info.plist`.** A Python script can't do that. So there's a 59-line C launcher wrapped in a `.app` that carries the permission and starts Python as a child process, which inherits it.

The part that made me trust the result came next. It spun up a real CUPS server in its sandbox, plugged in a fake Bluetooth printer that saved what *would* have been printed as an image, and pushed an actual PDF through `lp`. That end-to-end test caught two bugs before I saw a single line of code: a giant blank strip at the top of every ticket, and gradients coming out as solid black blocks. Both fixed, both covered by a regression test.

And it told me plainly what it could not test: Bluetooth on macOS 27, and the physical printer. Its words, roughly: "the `--testpage` will tell you."

It did. First install, first page, clean output.

## Ten minutes was the beginning

Honesty clause. The driver that worked took about ten minutes. The repo you can clone today came out of a longer evening of back-and-forth, and that's where I learned the most.

I reported a bug: the print preview showed my label stranded in the middle of a tall page. Claude pushed back. The actual print was correct; Chrome draws the preview before the driver ever sees the job, and the label page probably used something like `min-height: 100vh`. It gave me a CSS fix, plus a workaround in case the page wasn't mine. (It wasn't. It was Spoolman's. So not a bug, and not mine to fix.)

Then I asked what it would improve, reading its own code cold. It came back with a ranked list, and argued for leaving one known limitation alone because fixing it would block the print queue. I picked four items: keep the Bluetooth permission across reinstalls, rotate the log, keep the Bluetooth link warm between jobs (2 to 4 seconds saved per label when printing a batch), and a one-line retry for failed jobs.

When it suggested a third-party tool for a menu bar status, I asked if it couldn't use something standard. It switched to a native AppKit app with zero dependencies. When I asked for faster dithering, it measured before touching anything: 0.6 seconds for a 37 cm ticket. Speed wasn't the problem, so it worked on print quality instead.

Last step: initialise a git repo, commit everything in order, publish it under my account. Twenty-five commits, one per component, with the tests passing at the end of each version. Its git proxy refused to push the release tags. It didn't try to get around the block; it handed me the four commands to run myself.

## What the videos leave out

The stopwatch in those videos is probably honest. What it doesn't count is everything that happened before someone pressed start.

My ten minutes stand on years of other people's reverse engineering, published in the open. Without TiMini-Print, phomymo and phomemo-tools, there is no protocol, and no amount of clever prompting invents the bytes a printer expects. (The README credits all three. None of their code is copied, but nothing would exist without them.)

For now, anyway. We're not at the "reverse-engineer anything" stage yet. Watching it cross-check three codebases in a couple of minutes, I'm starting to think we could get there: hand it a Bluetooth capture and the official app, and see what comes out.

They also stand on five minutes of me knowing what to look for. The three links did more work than the two lines.

And they stand on an assistant that verified instead of asserting. A real CUPS, a fake printer, 26 tests by the end, and a clear line between "tested" and "you'll have to check".

## If you run a team, here's what I'd keep

1. **Short prompts work when the context is long.** The effort goes into references: prior art, working examples, existing implementations. That's your spec, whether you call it one or not.
2. **Describe the outcome and the constraints, then leave the implementation open.** "Add it like a normal printer" and "conversion in the background" drove every architectural decision. I'd never have thought of the PPD trick or the C launcher.
3. **Judge AI output by its verification.** Eloquence is free. The questions that matter are what did you test, how, and what couldn't you test?
4. **Open source is the multiplier.** A model that reads prior art in seconds makes every well-documented repo worth more. Credit it, and give back: the driver is MIT-licensed and public for exactly that reason.

My spools have labels now, and my phone stays in my pocket. CUPS already warns that PPD drivers are deprecated, so ask me again the day Apple pulls the plug. The exit plan is in the README.

The code, the full commit history and the issues live on GitHub: [clawfire/phomemo-t02-macos](https://github.com/clawfire/phomemo-t02-macos?ref=thibaultmilan.com).