Software · MVP’er · Automatisering

Praktisk software, der bliver ved med at virke, når det gælder.

Jeg hedder Jesper Nybøle Toustrup og står bag NyboleDigital. Jeg bygger små softwareprodukter, MVP’er og automatiseringer – og jeg tester dem på rigtige enheder med rigtige brugere, til de holder. AI-assisteret udvikling gør mig hurtig. Disciplineret test gør resultatet til at stole på.

10 eksterne testerekørte Camper BU22 om natten på deres egne telefoner i betarunde 1
6 sprogi Camper BU22 0.4-beta: EN, DA, DE, FR, ES, NL
74 / 74 tjekautomatisk verifikation efter opstart på OTTO’s Android 17-build
Det arbejder jeg med

Små, fokuserede løsninger, der løser ét rigtigt problem godt.

Jeg tager en idé fra en løs beskrivelse til noget, der kører, kan testes og kan vises til kunder – med tydelig dokumentation af, hvad der virker, og hvad der endnu ikke gør.

Android-apps og enhedsautomatisering

Native Android med Kotlin, planlagte baggrundsopgaver, automatisering via AccessibilityService og apps, der skal køre uden opsyn i mange timer.

MVP’er og interaktive prototyper

Fra idé til noget, man kan klikke på, teste og vise kunder eller investorer – hurtigt, ærligt om begrænsningerne og veldokumenteret.

Workflow- og AI-automatisering

Sortering af mails, udtræk af data og opfølgning med værktøjer som n8n, OpenAI og Google Sheets – med et menneske til at godkende, hvor det betyder noget.

Embedded Android og diagnostik

Tilpassede Android-builds, flash- og gendannelsesværktøjer, opstartsdiagnostik og integration med skærme i bilen.

AI-assisteret udvikling

AI skriver kode hurtigt. Jeg bestemmer, hvad der bliver leveret.

Jeg bruger AI-kodeværktøjer – primært Claude Code – som en hurtig og utrættelig makker. Ansvaret for det vigtige er mit: kravene, beslutningerne, testen på rigtig hardware og hvad der bliver udgivet.

  • Krav først. Beslutninger skrives ned og versioneres – fx “genstart hvert 28. minut, aldrig under 25”.
  • Dokumentation frem for antagelser. Hver rettelse kan føres tilbage til en loglinje, en måling eller en kodelinje – ikke et gæt.
  • Test i virkeligheden. Natlogs fra eksterne testere på forskellige telefoner, ikke kun en emulator.
  • Ærlig status. Intet kaldes færdigt eller valideret, før det er testet. Begrænsninger bliver dokumenteret.
  • Privatliv som standard. Diagnostik indsamler struktur og hændelseskoder – aldrig skærmbilleder af andre apps eller persondata.
Udvalgte projekter

Tre rigtige projekter – fra en Android-beta til embedded systemer.

Hver case nedenfor forklarer problemet, den tekniske løsning og den aktuelle status – også det, der ikke er færdigt endnu.

Camper BU22’s hjemmeskærm: temperatur 21,0°, start kl. 00:30, slut kl. 07:00 og en batteriprognose Camper BU22 under en session med VW-cyklus og en rød stopknap
0.4.0-beta · sidste betatest

Camper BU22

En Android-app, der holder klimaanlægget i en elektrisk campervan kørende hele natten ved at betjene den officielle VW-app via Android Accessibility.

  • Android
  • Kotlin
  • AccessibilityService
  • Felttest
AI-sekretærens overblik med nye henvendelser, tilbud uden svar og kladder til opfølgning (fiktive data)
Konceptdemo

AI-sekretær til håndværkere

En interaktiv salgsdemo af en “digital sekretær”, der sorterer indgående mails, trækker kundeoplysninger ud og laver opfølgningskladder, som mester selv godkender.

  • Prototype
  • UX
  • n8n · OpenAI (planlagt)
Testbillede til 60 fps-projektion vist på bilens midterskærm gennem OTTO-boksen
Færdig · eget R&D-projekt

OTTO

Android 17 på en Ottocast-bilboks: CarPlay-video til bilens skærm og Google Maps’ rutevejledning i instrumentbrættet.

  • Android 17
  • Qualcomm EDL
  • Python
  • SELinux
Interactive simulation – no live vehicle connection

Camper BU22 – prøv den i din browser

Dette er en fungerende simulation af den rigtige apps natlogik. Vælg temperatur og tider, start en session, og følg genstarterne hvert 28. minut, verifikationen, de nye forsøg og hændelsesloggen. Det kræver ingen Android-telefon, VW-konto eller bil.

21:45Simulation

Camper BU22

Klar
Indetemperatur
21,0°
16,0° – 29,5° i trin på 0,5°
Start
Slut
07:00
–
Batteriprognose–
–
Model fra dokumenterede testnætter · simuleret vejr

Se en hel nat på cirka 25 sekunder

Starter en session nu med dine indstillinger og spoler frem til sluttidspunktet. Tilføj et simuleret VW-hik for at se, hvordan appen prøver igen.

Hastighed
Simuleret tid
–
Klima
–
Næste genstart
–
Genstarter
–
––
Verificeret startFejlet startKlima stoppet af bilenNattemperatur

Hændelseslog

    Simulationen kører udelukkende i din browser og sender intet nogen steder hen. Tidsregler, logkoder og batterimodellen kommer fra den rigtige apps 0.4.0-beta-kildekode og dokumenterede 0.3.x-natlogs. Bilen, vejret og VW-appen er simuleret.

    Case 1 · Android

    Camper BU22: en klimaassistent til hele natten for elcampere

    En Android-app, der gør det, en halvsovende person ellers skulle gøre hver halve time: genstarte klimaanlægget i den officielle VW-app.

    Min rolle
    Idé, udvikling, test, support
    Platform
    Android 12L+ · Kotlin
    Status
    0.4.0-beta
    Test
    Egen bil + 10 eksterne testere

    Problemet

    En VW ID. Buzz fra modelår 2026 eller ældre kører klimaanlægget i cirka 30 minutter, når den holder parkeret, og slukker det så. Disse modelår har ingen indbygget campingtilstand, og VW’s API er lukket for tredjepartsapps. Sover man i bilen en kold nat, skal man derfor vågne hver halve time og starte varmen igen.

    Løsningen

    Camper BU22 kører på en Android-telefon, der ligger i en oplader i bilen. Hvert 28. minut åbner den den officielle VW-app, tjekker tilstanden og genstarter klimaet – via Androids AccessibilityService, præcis som når en person trykker på skærmen. Der er intet API-hack og ingen omgåelse af VW’s servere, og appen gemmer aldrig VW-loginoplysninger.

    Sådan fungerer én genstart

    1. PlanlægningEn præcis alarm går hvert 28. minut (eller præcis ved skift af nattemperatur). En wake lock holder telefonen vågen.
    2. Åbn VW-appenServicen starter VW-appen og venter, til dens hjemmeskærm er bekræftet i UI-træet.
    3. Find klimastyringenElementer findes via ressource-id’er og nodestruktur – ikke pixelkoordinater – så det virker på alle skærmstørrelser.
    4. Stop → bekræft → start → bekræftKører klimaet stadig, stoppes det først og startes så igen. Hvert tryk bekræftes ved at aflæse resultatet.
    5. Log og tilbageResultatet logges med kode og tidspunkt, næste genstart planlægges, og telefonen går tilbage til den mørke natskærm.

    Teknikken bag

    • Android AccessibilityServiceLæser VW-appens tilgængelighedstræ og handler på noder – på samme måde som hjælpemiddelteknologi gør.
    • Integration via en eksisterende brugerfladeIngen API-adgang nødvendig. Appen arbejder med den officielle VW-app, som brugeren allerede har.
    • Kalibrering til forskellige enhederEn hastighedstest første gang vælger en tidsprofil (FAST / BALANCED / SAFE). Temperaturen styres via skyderens nabo-værdier, så ét tryk er præcis 0,5° på alle telefoner.
    • Automatisk sessionsstyringStart nu eller på et bestemt tidspunkt, sluttidspunkt, nattemperatur, batterivagt og genoptagelse efter genstart af telefonen.
    • Timing og planlagte handlingerPræcise alarmer, wake locks og en ekstra genstart præcis ved skiftet til nattemperatur i stedet for op til 28 minutter for sent.
    • Verifikation af hver handlingStart og stop tæller først, når VW-appens brugerflade bekræfter den nye tilstand – typisk inden for 60–80 ms.
    • Nye forsøg og fejlhåndteringNyt forsøg efter 1 minut (3×), derefter hvert 5. minut. 0.4 tilføjer loft over løkker, en 8-sekunders vagthund og registrering af VW-nedbrud.
    • DiagnostikEn struktureret hændelseslog med koder som RUNNING_VERIFIED og E_START_NOT_VERIFIED, som testere sender med ét tryk. Den indeholder ingen skærmbilleder af VW-appen og ingen bilposition.
    • Test med eksterne brugereRunde 1 kørte på Google Pixel, Samsung, Xiaomi, OnePlus og Lenovo. Hver log blev analyseret og omsat til rettelser.

    Udviklet iterativt

    1. Koncept

      Kan en telefon klare genstarten hver halve time? API-vejen blev udelukket, fordi VW kræver enhedsattestering siden midten af 2026.

    2. Prototype

      En accessibility-service, der finder klimastyringen og slår den til og fra, plus kalibrering af tryk-timing.

    3. Test

      Nattest i min egen bil med logs hentet hver morgen, derefter eksterne testere på andre telefoner.

    4. Fejlanalyse

      Eksempel: sjældne hæng på 60 sekunder blev sporet til en løkke mellem to VW-skærme efter en valgfri batteriaflæsning. Årsagen blev bekræftet i koden.

    5. Forbedring

      Et loft over løkken, en 8-sekunders vagthund og tilpasset tålmodighed pr. enhed. Intervallet gik fra 29 til 28 minutter for at få 2 minutters sikkerhedsmargin.

    6. Beta

      0.2 → 0.3.2 med 10 eksterne testere. 0.4.0-beta tilføjer seks sprog, hjælp i appen og rettelserne til robusthed.

    Aktuel status

    Version 0.4.0-beta – final beta testing before 1.0

    0.4 er bygget og indeholder rettelserne fra runde 1, men den er endnu ikke valideret. Nattest og næste runde med eksterne testere mangler stadig. Resultater for 0.4 bliver vist her for sig, når de findes.

    Tidligere resultater fra dokumenterede 0.3.x-natlogs, anonymiseret. Disse versioner brugte et interval på 29 minutter; 0.4 bruger 28 minutter. “Rettede sig selv” betyder, at næste planlagte cyklus genoprettede uden at brugeren gjorde noget.
    NatVersionEnhedVarighedResultatNoter
    A0.3 devGoogle Pixel3.4 h✓ 7/7 genstarter verificeretForsinket start kom til tiden, skiftet til nattemperatur virkede. Batteriforbrug 5 % mod 4 % i prognosen (ude 4 °C).
    B0.3.1Google Pixel3.5 h✓ 8 genstarter, gennemførtSkift til nattemperatur kl. 01:00 OK, og en VW-popup blev lukket automatisk.
    C0.3.2Xiaomi4.5 h✓ GennemførtTemperaturen holdt hele natten (ude 7 °C, bilen ladede). 3 starter blev ikke bekræftet, men alle rettede sig selv.
    D0.3.2Xiaomi3.5 h✓ GennemførtKold nat (1 °C) uden opladning: 1,43 % batteri i timen, prognose 5 % = faktisk 5 %. 5 korte hæng, alle rettede sig selv.
    E0.3.2Lenovo tablet8 h✓ Gennemført3 hæng på 60 sekunder, alle rettede sig selv – det vigtigste grundlag for vagthund-rettelsen i 0.4.
    F0.3.2Google Pixel~2 h✓ Ren session, 4 genstarterDen første kalibrering tog 43 minutter på denne telefon. Det førte til tydeligere feedback og hurtigere udvej i 0.4.

    Resultater for 0.4.0-beta

    Afventer – der påstås ingen 0.4-resultater endnu. Planlagt før 1.0:

    • Nattest i min egen bil med intervallet på 28 minutter.
    • Runde med eksterne testere via tilmelding, også testere uden for Danmark.
    • Verifikation af de nye sprog og understøttede versioner af VW-appen.

    Funktionsstatus – hvad er testet, bygget eller planlagt

    Testet i praksis (0.3.x-nætter)

    • Genstart med verificeret Stop → Start (dengang hvert 29. minut)
    • Forsinket start og præcist skift til nattemperatur kl. 01:00
    • Batteriprognose mod faktisk forbrug (5 % = 5 % en kold nat)
    • Automatisk lukning af harmløse VW-popups
    • Nye forsøg, der retter sig selv; kalibrering på fem telefonmærker

    Bygget i 0.4.0-beta – afventer test

    • Genstartsinterval på 28 minutter
    • Loft over løkker, hurtig udvej efter 8 sekunder og tilpasset tålmodighed pr. enhed
    • Registrering af “VW svarer ikke” med en klar besked
    • Seks sprog og hjælp/FAQ i appen
    • Dyretilstand (beta) – bygget, endnu ikke valideret i en dokumenteret test

    Planlagt – ikke i 0.4

    • Offentlig 1.0-udgivelse
    • Besked i appen om opdateringer
    • Aflæsning af kabinetemperatur og fjernalarmer til dyretilstand
    • 1.0 uden log-spørgsmålet efter hver session, som bruges i betaen

    Rigtige skærmbilleder

    Skærmbilleder fra 0.3.x-betaen (dansk brugerflade) på en Google Pixel. Brugerfladen i 0.4 ligner og findes også på engelsk, tysk, fransk, spansk og hollandsk.

    Sikkerhed, privatliv og ærlig præsentation

    Dyretilstand er ikke et sikkerhedssystem. Dyretilstand (beta) giver alarm med det samme og holder skærmen tændt, men appen kan fejle – mistet internet, låst telefon, nedbrud hos VW eller en ændret VW-app. Den må aldrig være den eneste sikring for dyr eller mennesker i et køretøj. Tjek altid selv temperaturen, og bliv inden for rækkevidde.

    Ikke et Volkswagen-produkt. Camper BU22 er et uafhængigt hobbyprojekt. Det er ikke lavet, anbefalet eller godkendt af Volkswagen. Appen arbejder med den officielle VW-app, som brugeren allerede har.

    Ingen offentlig download. 0.4-beta distribueres kun via en kontrolleret betatest med separat tilmelding. Den kan ikke hentes fra denne hjemmeside. En offentlig 1.0-udgivelse er planlagt senere.

    Afhænger af VW’s app og servere. Hvis VW’s servere er nede, eller bilen mister forbindelsen, kan ingen app genstarte klimaet, og det stopper efter ca. 30 minutter. 0.4 opdager det og siger det klart til brugeren i stedet for at fejle i stilhed.

    Case 2 · Automatisering

    AI-sekretær: ingen kundehenvendelse overset, intet tilbud glemt

    En håndværkers indbakke er fuld af henvendelser, leverandørmails og støj, og tilbud uden svar bliver let glemt. Jeg byggede en interaktiv konceptdemo, der viser, hvordan en AI-sekretær kan arbejde usynligt i den indbakke, man allerede bruger.

    Min rolle
    UX, prototype, teknisk plan
    Platform
    HTML/JS-demo · plan med n8n + OpenAI
    Status
    Konceptdemo (simuleret AI)
    Test
    101/101 automatiske tjek
    AI-sekretærens overblik med nye henvendelser, tilbud uden svar og kladder til opfølgning (fiktive data)
    Demoens overbliksskærm. Alle navne, firmaer og mails er opdigtede, og demoen er mærket “DEMO · fiktive data · simuleret AI” på alle skærme.

    Det byggede jeg

    En selvstændig salgsdemo, der virker offline (én HTML-fil) og viser hele flowet på 60–90 sekunder. Dertil en skærmoptagelse på 73 sekunder og en skriftlig teknisk leveringsplan.

    • Sortering af mails: kundehenvendelser, kundesvar, leverandører og støj.
    • Udtræk af navn, telefon, adresse og opgave – med “Ikke oplyst” i stedet for at gætte.
    • Kladder til opfølgning på tilbud uden svar efter 4–5 dage.
    • Intet sendes uden mesters godkendelse. Usikre sager går til manuel kontrol.

    Teknisk plan for en rigtig MVP

    n8n som workflowmotor, Gmail via OAuth, OpenAI med et fast JSON-skema til klassificering og udtræk, og Google Sheets som overblik. De kendte risici er kortlagt med modtræk: kobling af mailtråde, svar pr. telefon, GDPR og databehandleraftaler samt AI-fejlsortering.

    Test

    101 af 101 automatiske tjek bestod i en simuleret browser-DOM. Layoutet blev tjekket i Chromium ved 390×844 (mobil), 1366×768 og 1920×1080, og der blev rettet fejl med vandret scroll og for små touch-mål på mobil.

    Ærlig status: dette er en konceptdemo. AI og mailintegrationer er simuleret. Den rigtige MVP er afgrænset og planlagt, men ikke bygget.

    Case 3 · Embedded Android

    OTTO: Android 17 på en bilboks, integreret med en VW ID. Buzz

    En Ottocast P3 Pro-bilboks flyttet fra den oprindelige Android 13 til et Android 17-systembillede, mens den originale CarPlay-kæde blev bevaret. I bilen viser den Google Maps som hjemmeskærm via en egen launcher, streamer den til bilens skærm som CarPlay-video og sender rutepile til instrumentbrættet.

    Min rolle
    Alt – eget R&D-projekt
    Platform
    Qualcomm SM6225 · Android 17
    Status
    Færdig, kører i bilen
    Test
    Bænktest + testplan A–G i bilen
    Testbillede til 60 fps-projektion vist på bilens midterskærm gennem OTTO-boksen
    60 fps-projektionstest på bilens skærm i 1920×840
    Instrumentbræt med navigationspil og vejnavn fra Google Maps
    Rutepil i instrumentbrættet (testrute)
    • Eget flashværktøjUSB-forbindelsen faldt ud ved 130–260 MiB. Jeg skrev et værktøj, der sender 1 MiB ad gangen, venter på kvittering og læser tilbage for at verificere.
    • Reproducerbare buildsBuild-scripts med præcise filrettigheder, ejere og SELinux-labels, verificeret byte for byte mod systembilledet.
    • VerifikationEt tjek med 74 punkter efter opstart, SELinux i enforcing uden afvisninger, og en testplan for accept i bilen.
    • Ydelse60 fps-projektion målt i bilen med et særligt testbillede.
    • Gendannelse førstEn EDL-redningsvejledning og et reservebillede. Et mislykket OTA-forsøg er dokumenteret åbent som en hændelsesrapport.
    • Delt med fællesskabetEn offentlig gennemgang af buildet med guides til andre – uden nøgler, firmware og private data.

    OTTO viser den tekniske dybde i mit arbejde: fejlsøgning i hardware, der fejler på uklare måder, egne værktøjer når de eksisterende ikke holder, og dokumentation af det, der ikke virker, lige så omhyggeligt som det, der gør.

    OTTO’s kildekode, målinger og guides på GitHub

    Kontakt

    Have a project in mind?

    Jeg søger veldefinerede projekter, hvor en lille, fokuseret løsning gør en reel forskel. Jeg arbejder på afstand og på både dansk og engelsk.

    • Mindre softwareprojekterApps, værktøjer og hjemmesider med et klart formål og en klar afgrænsning.
    • MVP-udviklingEn første version, du kan teste med rigtige brugere eller vise investorer.
    • AutomatiseringsopgaverAutomatisering af mails, data og arbejdsgange – med menneskelig godkendelse, hvor det betyder noget.
    • Gratis hostingStatiske hjemmesider og demoer, som jeg bygger, kan hostes på gratis infrastruktur som Cloudflare Pages, uden en hostingregning til dig.

    Siden sender ikke noget selv. Knappen åbner dit eget mailprogram med beskeden klar til afsendelse.

    Eller skriv direkte: jesper@stabilt-wifi.dk