|
| 1 | +# Prompt: BattBrain 1.0 launchvideo |
| 2 | + |
| 3 | +Plak dit in een nieuwe sessie met deze repo. Het is geschreven als opdracht voor Claude Code. |
| 4 | + |
| 5 | +--- |
| 6 | + |
| 7 | +## Opdracht |
| 8 | + |
| 9 | +Maak een launchvideo voor **BattBrain 1.0**: open-source, lokale sturing voor je thuisbatterij in |
| 10 | +Home Assistant. Lever drie versies: |
| 11 | + |
| 12 | +| Versie | Formaat | Lengte | Waar | |
| 13 | +|---|---|---|---| |
| 14 | +| Hoofdvideo | 1920×1080, 30 fps, MP4 (H.264, AAC) | 60–75 s | Tweakers-topic, landingspagina, YouTube | |
| 15 | +| Kort | 1080×1920, 30 fps | 25–30 s | LinkedIn, Instagram Reels, YouTube Shorts | |
| 16 | +| Stil | Hoofdvideo met ingebrande ondertitels en zonder voice-over | zelfde | Autoplay zonder geluid | |
| 17 | + |
| 18 | +Daarnaast: `.srt`-ondertitels (NL), een thumbnail van 1280×720 en het voice-overscript als tekst. |
| 19 | +Zet alles in `battbrain/marketing/video/`. De bronbestanden (HTML-scènes en scripts) gaan in de repo; |
| 20 | +de gerenderde MP4's alleen als ze kleiner zijn dan 20 MB. |
| 21 | + |
| 22 | +## Publiek en gevoel |
| 23 | + |
| 24 | +Kijkers zijn Nederlanders met een thuisbatterij en een dynamisch contract, vaak met Home Assistant. |
| 25 | +Ze zijn technisch, wantrouwen marketing en reageren op metingen. De video voelt als een |
| 26 | +medetweaker die laat zien wat hij gemeten en gebouwd heeft: rustig, precies en eerlijk. Het is geen |
| 27 | +reclamespot. |
| 28 | + |
| 29 | +**De ene boodschap:** *Je batterij, je data, je leverancier. BattBrain plant elk kwartier, legt uit |
| 30 | +waarom, en rekent op je eigen data uit wat het oplevert.* |
| 31 | + |
| 32 | +## Feiten die je mag gebruiken (en geen andere) |
| 33 | + |
| 34 | +Hiervoor geldt: alleen deze tabel. Verzin geen bedragen, percentages of klantcitaten. |
| 35 | + |
| 36 | +| Feit | Waarde | Bron in de repo | |
| 37 | +|---|---|---| |
| 38 | +| Salderen stopt | 1 januari 2027 | `battbrain/README.md` | |
| 39 | +| Geregistreerde thuisbatterijen in NL | 79.000+ (sept 2026), ~8.000 per maand erbij | pitchdeck, dia 2 | |
| 40 | +| Gemeten op Solis 5,1 kWh, Frank, 7–9 okt 2026 (besparing t.o.v. geen batterij, nu / 2027) | zelfverbruik €0,74 / €2,27 · drempelregels €0,77 / €2,00 · BattBrain €0,86 / €2,39 · maximum €1,12 / €2,49 | `simulator/`, README | |
| 41 | +| BattBrain t.o.v. maximum in 2027 | 96% | idem | |
| 42 | +| Veiligheid | alleen reserveschakelaar + doel-SoC; terugval naar zelfverbruik; maximumprijs; hooguit één wissel per 10 min; adviesmodus eerst | `app/DOCS.md` | |
| 43 | +| Licentie en privacy | AGPL-3.0; lokaal, geen account, geen telemetrie | `app/DOCS.md` | |
| 44 | +| Prijs | zelf hosten gratis; Hosted €3/mnd is een voorstel en heet "binnenkort" | `marketing/site/` | |
| 45 | + |
| 46 | +Demobedragen (zoals "+€0,72" in de Terugblik) mogen in beeld als schermopname. Ze krijgen dan het |
| 47 | +label "demo". Spreek ze nooit uit als resultaat. |
| 48 | + |
| 49 | +## Merk |
| 50 | + |
| 51 | +- Kleuren: achtergrond `#07130e`, oppervlak `#0e2119`, tekst `#ecf6f0`, gedempt `#a9c2b7`, accent `#2fd07a`. |
| 52 | +- Actiekleuren (één kleur = één betekenis, dezelfde als in de app): |
| 53 | + - laden van het net `#4f8cff` |
| 54 | + - zon `#ffd84d` |
| 55 | + - ontladen `#ff9a3d` |
| 56 | + - vasthouden `#b59cff` |
| 57 | + - zelfverbruik `#8aa39a` |
| 58 | +- Lettertypes: Space Grotesk (koppen) en Manrope (tekst). Ze staan in `battbrain/app/web/fonts/`. |
| 59 | +- Logo: groen afgerond vierkant met een bliksem, met de tekst "Batt**Brain**" (Brain in accentgroen). |
| 60 | + |
| 61 | +## Storyboard hoofdvideo (± 70 s) |
| 62 | + |
| 63 | +| # | Tijd | Beeld | Voice-over (NL) | |
| 64 | +|---|---|---|---| |
| 65 | +| 1 | 0–5 s | Zwart. Een datum tikt naar **1 januari 2027**; het woord "salderen" wordt doorgestreept. | "Op 1 januari stopt salderen." | |
| 66 | +| 2 | 5–12 s | De teller loopt op naar **79.000+** thuisbatterijen. Daaronder drie gesloten app-tegels met een slotje (niet herkenbaar als een bestaand merk). | "Er staan al tienduizenden thuisbatterijen. Maar wie stuurt ze aan, en hoe beslist die?" | |
| 67 | +| 3 | 12–22 s | Twee balken groeien naar €2,27 (zelfverbruik) en €2,00 (drempelregels); de tweede kleurt oranje met het label "−€0,27". | "Ik mat het op mijn eigen batterij. Mijn slimme prijsregels deden na 2027 zelfs minder dan niets doen." | |
| 68 | +| 4 | 22–34 s | Het echte dashboard (schermopname, demomodus): de hero "Ontladen" met de reden; de energiestroom met bewegende deeltjes; daarna wordt het plan ingezoomd, één kwartier per kleur. | "Daarom bouwde ik BattBrain. Elk kwartier een plan, met de prijzen van vandaag en morgen, je zonverwachting en je eigen verbruik. En bij elke keuze staat waarom." | |
| 69 | +| 5 | 34–44 s | De kaart Installatie vult zich met groene stippen ("automatisch gevonden"); daarna de Terugblik met balken die groeien. De schakelaar "Vanaf 2027" wordt aangeklikt. | "Hij zoekt zelf je sensoren, en rekent op je eigen data van vorige week uit wat hij had opgeleverd. Nu, en na 2027." | |
| 70 | +| 6 | 44–54 s | Een tabel bouwt zich op: €0,74, €0,77, **€0,86**, €1,12 met nu en 2027; "96%" licht op. Klein in beeld: "3 dagen · 5,1 kWh · oktober". | "Op mijn installatie haalde BattBrain zesennegentig procent van wat theoretisch kon. Eerlijk: bij een kleine batterij in de herfst is dat geen fortuin. Daarom laat hij je eigen bedrag zien." | |
| 71 | +| 7 | 54–62 s | Zes veiligheidsregels verschijnen als korte regels; daarna de knop "Pauzeer 1 uur". | "Hij begint met advies. Sturen zet je zelf aan, alleen via twee knoppen, en bij twijfel doet je batterij gewoon zelfverbruik." | |
| 72 | +| 8 | 62–70 s | Het logo op een donkere achtergrond, met daaronder "Open source · lokaal · gratis zelf draaien", de repo-URL en een QR-code naar de landingspagina. | "BattBrain. Je batterij, je data, je leverancier. Gratis, open source, nu te installeren." | |
| 73 | + |
| 74 | +**Korte versie (9:16, ± 28 s):** scènes 1, 3, 4 (ingekort), 5 en 8, met grote ondertitels in het |
| 75 | +middelste derde van het beeld. Elke scène wordt opnieuw opgemaakt voor staand formaat; een bijgesneden |
| 76 | +16:9-beeld is niet goed genoeg. De eerste 2 seconden moeten zonder geluid werken: "Salderen stopt. |
| 77 | +Wie stuurt je batterij?" |
| 78 | + |
| 79 | +## Hoe je het maakt |
| 80 | + |
| 81 | +1. **Controleer de gereedschappen:** kijk of `ffmpeg` er is (`ffmpeg -version`) en of Playwright met |
| 82 | + Chromium werkt (`/opt/pw-browsers/chromium`). Ontbreekt ffmpeg, kijk dan of er een statische build of |
| 83 | + een pip-wheel (`imageio-ffmpeg`) via het netwerk te halen is. Lukt dat niet, lever dan de |
| 84 | + frames-pijplijn plus een script dat de gebruiker lokaal draait. Lever nooit een halve video. |
| 85 | +2. **Schermopnames uit de echte app:** |
| 86 | + - Start `python3 -m battbrain_app --demo --port 8099` in `battbrain/app`. |
| 87 | + - Neem met Playwright video op (`recordVideo`, 1920×1080, `deviceScaleFactor` 1, `colorScheme: 'dark'`, `locale: 'nl-NL'`, `timezoneId: 'Europe/Amsterdam'`). |
| 88 | + - Verberg de demomelding met `page.addStyleTag`. Laat het label "Demo" in de statuspil wel staan. |
| 89 | + - Scroll vloeiend met `page.mouse.wheel` in kleine stappen. Klik "Vanaf 2027" en open de kaart Installatie. |
| 90 | + - Wacht tot de Terugblik berekend is: poll `/api/backtest` tot er `totals` in staat. |
| 91 | +3. **Motion graphics:** maak elke titelscène als één HTML-pagina in `video/scenes/`. Gebruik CSS-animaties die op een tijdlijn worden aangestuurd, met `animation-play-state` en `animation-delay` die je per frame zet via een `?t=`-parameter, zodat elk frame deterministisch is. Render de frames met Playwright-screenshots op 30 fps. Gebruik geen externe CDN's; de fonts komen uit de repo. |
| 92 | +4. **Voice-over:** |
| 93 | + - Is er geen TTS beschikbaar, lever dan het script met timecodes (`voiceover.txt`) en een opnamegids: rustig tempo, ~140 woorden per minuut, één take per scène. |
| 94 | + - Bouw de video zo dat hij zonder stem werkt (de stille versie), en met stem zodra er een opname is: `assemble.sh` mixt `vo/*.wav` erin als die bestaan. |
| 95 | +5. **Muziek:** gebruik geen muziek met onduidelijke licentie. Maak een zachte, synthetische ondergrond met ffmpeg (`sine` plus een laagdoorlaatfilter, of een eenvoudige akkoordpad) op −24 LUFS, of lever de video zonder muziek en zet in `README.md` waar een rechtenvrij nummer in moet. |
| 96 | +6. **Samenvoegen:** |
| 97 | + - Zet alles in elkaar met één reproduceerbaar script, `video/assemble.sh`: ffmpeg, crossfades van 8 frames, de ondertitels ingebrand voor de stille versie, en loudnorm naar −16 LUFS voor de versie met stem. |
| 98 | + - Exporteer met `-pix_fmt yuv420p -movflags +faststart`. |
| 99 | +7. **Thumbnail:** donkere achtergrond, links groot "Wie stuurt je batterij na 2027?", rechts een uitsnede van het dashboard. Moet leesbaar zijn op 320 px breed. |
| 100 | + |
| 101 | +## Kwaliteitseisen (controleer ze vóór je oplevert) |
| 102 | + |
| 103 | +- [ ] Elk getal in beeld of in de voice-over staat in de feitentabel hierboven, of is gelabeld als "demo". |
| 104 | +- [ ] Geen logo's, kleuren of app-beelden van Frank, Zonneplan, Tibber of andere merken. |
| 105 | +- [ ] Tekst in beeld is minimaal 36 px op 1080p (staand: 48 px) en staat minimaal 1,5 s stil. |
| 106 | +- [ ] Ondertitels: maximaal 2 regels van 42 tekens, en synchroon (±150 ms). |
| 107 | +- [ ] De actiekleuren betekenen hetzelfde als in de app. |
| 108 | +- [ ] De eerste 3 seconden werken zonder geluid. |
| 109 | +- [ ] `ffprobe` bevestigt de resolutie, 30 fps en een lengte binnen de marge. Bekijk 6 stilstaande frames (één per scène) als afbeelding voordat je oplevert. |
| 110 | +- [ ] Er is een `README.md` in `video/` met: hoe je opnieuw rendert, welke onderdelen nog door een mens moeten (stem, muziek) en de bronnen van de cijfers. |
| 111 | + |
| 112 | +Oplevering: een korte samenvatting met wat klaar is, wat je niet kon maken (bijvoorbeeld de stem) en |
| 113 | +de paden naar de bestanden. Commit op de huidige branch; maak geen PR. |
0 commit comments