shipped / October 6, 2026

Darkplug: an iPhone and a $20 smart plug become a darkroom f-stop timer

score smart plug: $20

Péter Szentkirályi wanted a proper f-stop timer for darkroom printing and didn't want to spend a couple hundred dollars on one. So he vibe coded an iPhone app with Codex and Xcode that switches his enlarger through a cheap smart plug. He has been printing with it for months.

Built by Péter Szentkirályi with Codex and Xcode.

iosswiftxcodecodexiphonephotographyfilmdarkroomhardwaresmart plugshellyapp

What it is

Darkplug is, in its maker's words, "a darkroom timer for iPhone that controls your enlarger." You plug the enlarger into a Shelly smart plug, put the plug and the phone on the same network, type the plug's local IP address into the app, and the phone switches the lamp on and off.

That is the whole trick. The app does the timing, which phones are already good at, and the plug does the one thing a phone cannot: switch a mains lamp. The interface is red on black so it is safe under a safelight.

It does regular timing and f-stop timing, with a four second count-in option. The paid Darkplug+ tier (a one-time purchase, no subscription) adds test strips, a dodge and burn planner with a grid, split-grade printing with two timing channels, and a paper development timer. The free app is on the App Store for iPhone and iPad.

How it was built

Péter is a film photographer who does some darkroom printing. On Hacker News he says he "always wanted one of the proper, advanced f-stop timers, but never really wanted to spend a couple hundred dollars on one." Then: "Eventually I figured my phone was already perfectly capable of doing the timing, it just needed a way to switch the enlarger."

The post's title puts the switch at $20. The build method gets one line, and it is our favorite line of the week: "Fair warning: the app was blindly vibe coded using Codex and Xcode."

Blindly, and then tested the honest way. He has been using it "for a few months in my improvised bathroom darkroom."

Why we picked it

Because this is the vibe coding story we like best: not a developer shipping another dev tool, but a photographer with a specific, slightly expensive problem who could suddenly build the fix himself. The hard part was never the code. It was knowing what a printer needs from a timer, and a person who prints knows that.

It also ends in a physical thing. Most agent projects live in a browser tab. This one lives in a bathroom with the lights off, switching a lamp while someone counts in f-stops.

The first question in the thread was about network jitter between the tap and the plug switching. Péter's answer, in effect, is a few months of prints. It works on his prompt.


Shipped is Accept All's daily pick of things people build with AI. We are not affiliated with Péter Szentkirályi; the work and the credit are theirs, so go tell them it's good. Older: stillwet: a studio where the models paint in simulated oils.