nautivia.app · Claude Code · Playwright · ElevenLabs · 2:51
To film the last scene, it faked a camera
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.
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.

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.

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
| Version | Length | What changed |
|---|---|---|
| v1 | 3:16 | local voice, the first story, before my review |
| v2 | 3:15 | restructured from the review notes, real QR pairing to the phone |
| v3 | 2:48 | 15% faster, no sandbox line |
| v4 | 2:51 | ElevenLabs narration |
What is missing?
Tell me what the video should show that it does not. And if you sail in Croatia, try it.