FIELD NOTE / VIDEO

nautivia.app · Claude Code · Playwright · ElevenLabs · 2:51

To film the last scene, it faked a camera

2026-10-01  ·  ~5 min read  ·  by Gal Tidhar

Claude Code made a 2:51 tour of the NautiVia Skipper app. Every app screen in it, apart from the Apple Pay ones, is a real recording of the app running. The sea is staged: a simulated position, a Stripe test checkout and, for the last scene, a fake camera. Reviewing the video turned up two bugs in the product itself.

The final cut, v4, with ElevenLabs narration.

What is real, and what is staged

The tour goes from nautivia.eu into the Skipper app: the week's weather, fuel, restaurants, docks and shelter, saving a favourite, handing over from the laptop to the phone with a real QR pairing, booking a buoy with Apple Pay, navigating to it, and checking in. Every app screen except the Apple Pay ones is a recording of the real app on its demo hosts, driven by Playwright scripts. A yellow dot glides to each target before the tap, so a viewer can follow the hand. Where the data did not exist, it was created: a demo buoy field of 80 buoys.

What is staged: the boat's position at sea is simulated, the checkout is Stripe in test mode so nothing is charged, and the Apple Pay screens are screenshots from my iPhone with the card, email and address blurred.

The fake camera

The last scene is a phone camera pointed at a buoy. You cannot screen-record the sea. So instead of faking the screen, the recorder fakes the camera. A small script takes a picture of an orange mooring buoy, generates the booked buoy's real check-in QR, warps it in perspective onto the buoy's tag plate, and writes a video file that Chrome is told to use as its webcam (--use-file-for-fake-video-capture). The app does not know. It reads the code exactly as it would from a phone in someone's hand.

An orange mooring buoy with a QR tag plate reading Pay here
The buoy picture the camera feed is built from. The QR on the plate is replaced with the booked buoy's real code.

My note on the first version was "hang on this a little, make the picture move a little until the QR code is visible". So the feed now starts low on the water with the plate out of frame and rises onto it over about five seconds. The code only reads once it is in view, like a real hand.

The app's scan screen reading the QR on the buoy
The scan, mid-read.

Feedback on a page, not in chat

Claude published a private review page: the video on top, then a card per scene with a still, its timestamp, the narration line and a text box that saves as you type. I filled it in and Claude read the answers from the page's saved state. Seven cards got just "perfect". Some of the others:

  • "it's missing the point, the point are the icons on the left"
  • "don't mention the 'demo' in voice, it's breaking the flow"
  • "I think this jumping back to the phone is confusing, lets make the point that there are two ways to 'go to sea'"
  • "I would love to hide the simulate button"

The video found two product bugs

Two notes pointed at the app itself. "There is no 'large buoy', all buoys are equal, you just pay by the size of your boat" was a wording problem in the app: the booking showed buoy size letters. And "this one should say also the operator phone number and services provided at that buoy field" was a gap in the arrival screen. Both were fixed in the app and deployed that morning, before the video was re-cut. The arrival screen now shows the operator's number and what is on site.

The voice

Drafts used Kokoro, a free local voice. Once the cut was settled, the narration moved to ElevenLabs. I auditioned voices with a text built to break narrators: "buoy" (boy or boo-ee), Mali Lošinj, Jadrolinija, Valbiska, Merag, Ilovik, and the winds, bura, jugo, maestral, tramontana. I picked a voice that sounds to me like a Croatian speaking English, so the J in Jadrolinija comes out right. Free accounts cannot use library voices through the API, so it is the Starter plan, €5.53 a month. 26 lines, generated by a script, and the scenes re-time themselves to the new line lengths.

Four versions in one morning

VersionLengthWhat changed
v13:16local voice, the first story, before my review
v23:15restructured from the review notes, real QR pairing to the phone
v32:4815% faster, no sandbox line
v42:51ElevenLabs narration

What is missing?

Tell me what the video should show that it does not. And if you sail in Croatia, try it.