Haarvisie verslagen
← Alle verslagen📄 Download als PDF
🎧 Luister dit verslag
1,0x
⬇️ Download naar telefoon
📖 Lees mee met de podcast

Hallo Jamal, welkom bij deze podcast! Vandaag duiken we in een belangrijk onderwerp: de relatie tussen de nieuwe Appel 2 en de oude Appel. Jouw vraag was heel helder: waar verwijst Appel 2 nog naar de oude Appel, en is het slim om de belangrijkste functionaliteiten naar de nieuwe omgeving te halen? Na ons onderzoek op 9 september hebben we daar een duidelijk beeld van gekregen, en belangrijker nog: een praktisch stappenplan.

Laten we beginnen met de kern. Technisch gezien is er al veel mogelijk. Alle functionaliteit van de oude Appel is via Appel 2 bereikbaar, en zelfs de spraak-websocket werkt op beide domeinen. Dat betekent dat we qua techniek al bijna op één domein zitten. De huisstijl is ook al grotendeels gelijkgetrokken; de CSS van Appel 2 is zelfs letterlijk overgenomen van de oude indexpagina, en veel pagina's gebruiken al hetzelfde lettertype en kleurenpalet.

Maar er zijn ook een paar knelpunten, en die zorgen voor verwarring bij Dani. Het grootste probleem is de zogenaamde 'PIN-poort'. Zestien oude pagina's, zoals de sparren-pagina of de vakpagina's, sturen je terug naar de voordeur van Appel 2 als een specifieke code niet is gezet. Omdat die code domeingebonden is, en Appel 2 die niet zet, kom je dus steeds weer bij het beginpunt uit als je zo'n oude pagina via Appel 2 opent.

Een ander groot verwarringspunt is dat de oude Appel nergens teruglinkt naar Appel 2. Geen van de dertig oude bestanden noemt de nieuwe omgeving, dus als Dani eenmaal in de oude omgeving is, kan ze niet eenvoudig terug. Daarnaast valt op dat de oude site stilzwijgend verkeerde links accepteert. Als je een niet-bestaande pagina bezoekt, krijg je geen 404, maar gewoon de oude voordeur te zien. De nieuwe Appel 2 geeft hier wel netjes een echte foutmelding.

Als we kijken waar Appel 2 momenteel nog naar de oude Appel verwijst, komen we een aantal belangrijke zaken tegen. Denk aan de spraakbot, de oefentoetsen, de planning en het uploaden van huiswerkfoto's. Ook de leerblokken verwijzen vaak naar pagina's in de oude omgeving, zoals 'leren.html' met de leercirkel en de specifieke vakpagina's voor Duits, Engels en Frans. Dit zijn allemaal cruciale onderdelen die Dani dagelijks of wekelijks gebruikt.

We hebben elke belangrijke doelpagina onder de loep genomen om te zien hoe complex deze is en of deze overgezet kan worden. De **sparren-pagina** is vrij klein; het is eigenlijk een formulier vóór de spraakbot. De spraakbot zelf, die draait op 'index-oud', is een enorm en complex systeem. Deze verplaatsen als geheel is nu niet realistisch. De **oefentoetsen** zijn al deels aangepast voor Appel 2 en kunnen relatief eenvoudig de nieuwe huisstijl krijgen. De **planning** is een middelgrote klus, maar veel van de benodigde data zit al in Appel 2. Wat ontbreekt, zijn bijvoorbeeld de aftelklok voor actiepunten en een boekenlijst. Het uploaden van **huiswerkfoto's** is een kleinere aanpassing, mede omdat jij besloten hebt dat foto's niet meer verplicht zijn. De pagina 'leren.html', de **leercirkel**, is een heel groot en complex onderdeel. Het is beter om deze voorlopig in de 'Bibliotheek' te laten en later pas specifieke onderdelen daarvan naar Appel 2 te halen. De **vakpagina's** zijn per vak een middelgrote klus en bevatten ook de PIN-poort. De **oude indexpagina** wordt uiteindelijk het menu voor de 'Bibliotheek'.

Op basis hiervan hebben we een voorstel in fasen opgesteld, Jamal. Het uitgangspunt is jouw regel: bestaand werk één-op-één overzetten, zonder opnieuw te ontwerpen, en alles is omkeerbaar.

**Fase A: De terugweg en de PIN-poort (klein, snel te realiseren)** Het doel is dat Dani vanuit elke oude pagina met één tik terug kan naar Appel 2, en dat niets meer terugkaatst door die PIN-poort. We willen een regel toevoegen die de benodigde code zet in Appel 2, zodat oude pagina's werken. Verder passen we de navigatiebalk aan zodat "Appel" en "Start" altijd naar Appel 2 wijzen, en voegen we een duidelijke knop "Bibliotheek" toe voor de oude Appel. Ten slotte maken we alle harde links in Appel 2 relatief.

**Fase B: Sparren in Appel 2 (klein-middel)** Hierbij nemen we de sparren-pagina één-op-één over als een v2-pagina. Het is een klein formulier dat vóór de spraakbot zit. De spraakbot zelf blijft voorlopig nog draaien op de oude omgeving. Dani ziet dan alleen nog een Appel 2-scherm en één 'praat-scherm' dat opent.

**Fase C: De week-tab in Appel 2 (middel)** Dit is de "open ontwerpvraag" die we eerder hadden. We nemen de secties van de planning-pagina één-op-één over als een tweede tab in Appel 2. Denk aan actiepunten met een aftelklok, huiswerk en wat je moet kennen per toets. De meeste data heeft Appel 2 al.

**Fase D: Oefentoetsen in de Appel 2-jas (klein)** Hierbij zorgen we ervoor dat 'oefentoetsen.html' de nieuwe Appel 2-stijl laadt, zodat het visueel helemaal klopt. De functionaliteit blijft ongemoeid.

**Fase E: De rest blijft Bibliotheek** De complexere onderdelen zoals de leercirkel, de pagina voor succesvol leren, de vakpagina's en andere minder frequent gebruikte pagina's, blijven voorlopig in de oude omgeving. Ze zijn dan goed gelinkt vanuit Appel 2 en met een duidelijke terugweg bereikbaar als een "Bibliotheek".

Dit stappenplan zorgt ervoor dat we snel de grootste knelpunten wegnemen en de belangrijkste functionaliteiten een plek geven in de nieuwe, prettige Appel 2-omgeving. Zo creëren we voor Dani een veel soepelere en consistentere ervaring. Ik denk dat we hier een mooie basis hebben om verder te bespreken.

Bedankt voor het luisteren, Jamal!

Appel 2 versus de oude Appel: inventaris en voorstel

Vraag van Jamal: waar verwijst Appel 2 (appel2.haartips.nl) nog naar de oude Appel (appel.haartips.nl)? En is het slim om de belangrijkste dingen in Appel 2 te zetten?

Gemeten op 9-9-2026, alleen via HTTPS (curl) en lokale bestanden. Geen ssh, niets gewijzigd, geen browser. Wat ik niet kon meten staat als onzeker.

0. Vijf dingen die je eerst moet weten

  1. Alles van de oude Appel is ook onder appel2.haartips.nl bereikbaar. De nginx-terugval @oud werkt: sparren.html, planning.html, leren.html, index-oud, oefentoetsen.html, alle JSON-data en de backend (/toets/, /nulmeting/, /bespreek/) geven 200 op appel2. Ook de spraak-websocket /live werkt op beide domeinen (bewezen: 101 Switching Protocols op appel én appel2). Technisch is "één domein" dus al bijna waar.
  2. Maar: de PIN-poort breekt dat. 16 oude pagina's (waaronder sparren.html, huiswerk-foto.html, dagstart.html, succesvol-leren.html, alle vakpagina's) sturen je door naar index.html als localStorage.appel_ok niet 1 is. Die sleutel wordt alleen gezet door de oude index.html (PIN 2703) en dagstart.html. localStorage is per domein. Op appel2 is index.html = Appel 2, die zet niets. Gevolg: open je zo'n pagina via appel2, dan stuit je terug op de voordeur van Appel 2. Daarom staan de links in Appel 2 nu als volledige https://appel.haartips.nl/...-adressen. Let op (onzeker, uit code afgeleid, niet in een browser getest): de relatieve link "📷 foto (niet verplicht)" op de voordeur van Appel 2 gaat naar huiswerk-foto.html op appel2 en kaatst dus waarschijnlijk terug.
  3. Vanuit de oude Appel kom je nooit terug in Appel 2. Geen van de 30 oude bestanden noemt appel2 (0 treffers). De gedeelde bovenbalk appbar.js stuurt "🍎 Appel" en "🏠 Start" naar de oude index.html. Sparren.html "‹ Terug" gaat naar de oude index.html. Dit is het grootste verwarpunt voor Dani.
  4. De oude site slikt elke verkeerde link stil. appel.haartips.nl/bestaat-niet.html, /toets.html en /les.html geven 200 met de oude voordeur (geen 404). Een link met het verkeerde domein (bijvoorbeeld in een Telegram-bericht) landt dus geruisloos op de oude Appel. appel2 geeft wel een echte 404.
  5. De huisstijl is al grotendeels gelijk. appel2.css is letterlijk overgenomen van de oude index.html (regel 2 van appel2.css zegt dat). Zes oude pagina's hebben al Bricolage Grotesque + Atkinson + #0f1420. De rest gebruikt Baloo 2 (koppen) op bijna dezelfde donkere achtergrond (#0f1424). Alleen index-oud, inhoud.html, planning/rooster/masterclasses wijken echt af.

1. Inventaris: elke plek waar Appel 2 naar de oude Appel verwijst

Bron: v2/index.html, v2/toets.html, v2/les.html, v2/lessen.html, v2/appel2-data.js (lokale kopie, stand 8-9 23:48). "Absoluut" = hard https://appel.haartips.nl/.... "Relatief" = zelfde domein, op appel2 via de terugval @oud.

# Bestand:regel Linktekst voor Dani Doel Waarvoor Hoe vaak
1 index.html:20 + :161 🎙️ Sparren met Appel · zeg gewoon waar je mee bezig bent https://appel.haartips.nl/sparren.html (absoluut) invoerbalk onderaan de voordeur, kies vak + bladzijde, dan spraakbot dagelijks
2 index.html:21 + :97 Ja, samen doen ▶ (als het eerste open item huiswerk of inleveren is) https://appel.haartips.nl/index-oud-20260819.html?spar=<vak>\|<kop> (absoluut) spraakbot start meteen over dat huiswerk dagelijks (thuiskomst)
3 index.html:22 + :161 📚 (tooltip "Bibliotheek") https://appel.haartips.nl/ (absoluut) hele oude Appel altijd zichtbaar, gebruik zelden
4 index.html:23 + :93 … en nog N, zie de planning https://appel.haartips.nl/planning.html (absoluut) alleen als er meer dan 4 items zijn soms
5 index.html:23 + :127 📅 hele week → planning.html (absoluut) alleen als er 2 of meer toetsen aankomen wekelijks
6 index.html:146 ▶ Doe eerst de oefentoets oefentoetsen.html?set=havo2-toetsmij&vak=… (relatief) ochtend van een toetsdag bij toets
7 index.html:86 + appel2-data.js:103 📷 foto (niet verplicht) bij planner-huiswerk huiswerk-foto.html?vak=&item=&terug=/ (relatief) foto van gemaakt werk dagelijks zichtbaar, gebruik zelden; waarschijnlijk kapot door PIN-poort (onzeker)
8 index.html:82 + :97, appel2-data.js:101 kop van een leerblok + Ja, samen doen ▶ bij een blok link uit trainingsplan.json (relatief): 5× leren.html?vak=, 5× oefentoetsen.html, 3× duits.html#apprkaart, 2× engels.html#apprkaart, 2× frans.html#apprkaart leerblok starten dagelijks in de weken voor een toets
9 toets.html:18 + :117 🎙️ Sparren (voet) sparren.html (absoluut) sparren vanuit de route bij toets
10 toets.html:47, appel2-data.js:191 + :207 praat erover met Appel → (gele coach-regel) index-oud-20260819.html?spar=<vak>\|<hoofdstuk> (absoluut) na 3× misgaan op een onderdeel zelden
11 toets.html:90 + :94 + :95 Blok n · focus en ▶ Start blok n trainingsplan-link (zie #8, relatief) stap 2 van de route bij toets
12 toets.html:108, appel2-data.js:189 📝 Doe de oefentoets / Nog een keer oefentoetsen.html?set=havo2-toetsmij&vak=<key> (relatief) stap 3, bewijs het bij toets
13 toets.html:46, appel2-data.js:245 oefen alleen dit → / nog eens → oefentoetsen.html?…&vragen=1,3&onderdeel=… (relatief) deel-oefening per onderdeel bij toets
14 les.html:18 + :91 🎙️ Sparren (voet) sparren.html (absoluut) sparren na een les dagelijks (na school)
15 feed.html:57-59 (proefje-bron, niet gelinkt) zelfde als #1, #2, #3 zelfde proefje n.v.t.

Niet in de tabel, want geen oude pagina: les.html, lessen.html, toets.html (allemaal v2), en de backend-aanroepen /toets/afvink, /bespreek/tts, /nulmeting/* (gedeelde API, geen pagina). Podcasts staan op goed.haartips.nl.

Samengevat: Appel 2 leunt op 5 oude pagina's: sparren.html, index-oud-20260819.html (de spraakbot), oefentoetsen.html, planning.html, huiswerk-foto.html. Plus via de trainingsplan-links: leren.html en de vakpagina's duits/engels/frans.

2. Per doelpagina: wat hij doet, hoe zwaar, overzetbaar?

Gemeten aan de live bestanden (curl, 9-9). "Huisstijl A" = Bricolage Grotesque + Atkinson Hyperlegible, achtergrond #0f1420, accent #5bb8ff (= Appel 2). "Huisstijl B" = Baloo 2 + Atkinson, #0f1424, zelfde accenten. "C" = anders.

Pagina Regels / KB API's en afhankelijkheden Huisstijl PIN-poort Overzetten 1-op-1
sparren.html 78 / 7 KB laadt paginas.json; geen API; appbar.js; bouwt de URL index-oud-20260819.html?spar=vak\|par&blz=&vraag=&terug= A (al gelijk) ja klein (1 avond). Het is een formulier vóór de spraakbot.
index-oud-20260819.html (de spraakbot) 2480 / 230 KB WebSocket wss://<host>/live naar relay appel-live.py (poort 8751); microfoon + camera (getUserMedia); 20 fetches: /api/onthoud,taak,verslag,zoek, /bespreek/chat,fototekst,seeds,tts,upload,wens, /toets/grade,spar-uitleg,stats; stem Sadachbia (regel 965); leest ?spar= (regel 2255) en ?terug= C (systeemfont, eigen kleuren) nee groot, als geheel niet verstandig. Wel haalbaar: een uitgeklede v2/spar.html met alleen mic + websocket + spar-context (middel-groot, later). Let op de twee chat-routes: gesproken = appel-live.py, getypt = appel-chat-api.py.
oefentoetsen.html 767 / 42 KB /nulmeting/vragen,grade,pogingen, /toets/log, /toetsplan; coach-route naar index-oud (regel 233-241) B nee middel. Is op 8-9 al drie keer voor Appel 2 aangepast (deel-oefening, coach-pop-up, klasgenoot-toon met avatar). Feitelijk al een Appel 2-pagina in een oude jas. Alleen appel2.css laden = klein.
planning.html 416 / 24 KB 8 fetches: acties.json, huiswerk.json, agenda.json, leermiddelen.json, planners.json; /toets/afvink C (Baloo + Hanken Grotesk, #0e0f15) nee middel. Appel 2 heeft planners, huiswerk, toetsplan en trainingsplan al in appel2-data.js. Ontbreekt: acties (aftelklok), boekenlijst, helikopterview-tabel. De "week-tab" is de open ontwerpvraag uit fase 0.
huiswerk-foto.html 238 / 18 KB /bespreek/upload,uploads,bestand,nakijk,voortgang, /toets/afvink; localStorage appel_hwfoto_* A (al gelijk) ja klein-middel. Jamal besloot 7-9: foto is niet meer verplicht (fase 5 = noodknop). Kan als kleine v2-pagina of blijft link.
leren.html (de cirkel) 1108 / 72 KB cirkel/data.json (6,8 MB), cirkel/huiswerk.json; /bespreek/bestand,nakijk,uploads,voortgang, /toets/grade,log,voortgang-log; trainer-motor; spar-knoppen naar index-oud; localStorage appel_streak B nee groot. Doel van 5 trainingsplan-blokken. Laten staan als Bibliotheek. Hooguit later per onderdeel (flashcards, oefentoets) naar v2.
duits / engels / frans.html 728 / 592 / 1020 gewone-taal.js, /bespreek/chat,tts, /toets/afvink, /nulmeting (frans); #apprkaart = doel van 7 trainingsplan-blokken B ja middel per vak. Nu doel van "▶ Start blok".
index.html (oude voordeur) 1035 / 73 KB /bespreek/uploads, /toets/afvink,kv,stats,voortgang-stats; zet de PIN (2703) A zet hem niet overzetten. Dit wordt het Bibliotheek-menu.
dashboard.html 151 / 10 KB /toets/stats,voortgang-stats B nee klein
dagstart.html 387 / 19 KB /bespreek/dagstart-afvink,dagstart-weekschema, /nulmeting/grade-een B ja niet nodig: Appel 2 ochtend speelt dezelfde dagstart-audio al.
succesvol-leren.html 783 / 59 KB 6 API's onder /bespreek/ A ja groot; staat als fase 3 (print + teller) gepland.
helikopterview.html 655 / 42 KB /toets/afvink,kv,streak, /toetsen-auto, /toetsplan B ja middel; overlapt met de route naar je toets.
nulmeting.html 334 / 17 KB /nulmeting/* B ja middel; zelden gebruikt.
rooster, mededelingen, weekschema, krant, bijspijker, podcast, masterclasses, ai-serie, inhoud, dna-spec 70 tot 321 regels; inhoud.html 65 KB licht B of C wisselend Bibliotheek. Niet overzetten.
cirkel.html stub, redirect naar leren.html negeren
lessen.html (oud) bestaat niet in de oude root: appel.haartips.nl/lessen.html toont de oude voordeur (terugval). appel2.haartips.nl/lessen.html is de v2-pagina. geen conflict, wel verwarrend bij een verkeerd domein

3. Voorstel in fasen

Uitgangspunt: regel van Jamal "bestaand werk 1-op-1 overzetten, niet herontwerpen" en "goedgekeurd = bevroren". Alles hieronder is omkeerbaar met een .bak-voor-<wijziging>.

Fase A: de terugweg en de PIN (klein, 1 avond, eerst een stil proefje)

Doel: Dani komt vanuit elke oude pagina met één tik terug in Appel 2, en niets kaatst meer.

  1. v2/index.html: zet localStorage.appel_ok = '1' bij het laden (1 regel). Dan werken sparren.html, huiswerk-foto.html en de vakpagina's ook onder appel2. Alternatief: de PIN-check centraal in appbar.js zetten in plaats van in 16 losse pagina's.
  2. appbar.js: "🍎 Appel" en "🏠 Start" naar Appel 2 (https://appel2.haartips.nl/, of / na de domeinwissel). Eén bestand, 28 pagina's. Voeg daar de knop "📚 Bibliotheek" toe naar de oude index.html. De oude index.html en index-oud laden geen appbar: daar een losse knop, en ?terug= uit Appel 2 meegeven (index-oud leest terug al).
  3. Appel 2: alle absolute links (#1, #2, #3, #4, #5, #9, #10, #14) relatief maken. Kan pas na stap 1. Dan werkt alles op één domein.
  4. uptime-monitor.py: appel2 erbij zetten (nu alleen appel).

Fase B: sparren in Appel 2 (klein-middel)

sparren.html 1-op-1 als v2/sparren.html (78 regels, huisstijl is al gelijk). Zelfde vakkeuze, zelfde bladzijde-veld, zelfde knop "🛠️ Praten over Appel zelf". De spraakbot zelf blijft index-oud-20260819.html?spar= (de motor). Dani ziet dan alleen nog het Appel 2-scherm, en één "praat-scherm" dat opent.

Fase C: week-tab in Appel 2 (middel)

De open ontwerpvraag uit fase 0. Neem de secties van planning.html 1-op-1 over als tweede tab: actiepunten met aftelklok, huiswerk uit Classroom, huiswerk uit de planners (foto = af), wat moet ik kennen per toets, boeken. De data heeft Appel 2 al; alleen acties.json en leermiddelen.json komen erbij. Dan vervallen links #4 en #5.

Fase D: oefentoetsen in de Appel 2-jas (klein)

oefentoetsen.html laadt appel2.css (kop in Bricolage in plaats van Baloo). Logica ongemoeid (bevroren sinds 1c). Dan vervallen #6, #12 en #13 als "oude" plekken. Eventueel verhuizen naar v2/ zodra hij niet meer vanuit de oude Appel gelinkt hoeft te worden.

Fase E: de rest blijft Bibliotheek

leren.html (de cirkel), succesvol-leren (fase 3), vakpagina's, dashboard, krant, nulmeting, helikopterview. Alleen goed gelinkt en met een terugweg. Later stukje voor stukje, alleen als Dani ze echt gebruikt (meten via /toets/log en de uploads).

Wat mag link blijven

De spraakbot (index-oud) als motor, leren.html als cirkel, succesvol-leren, de vakpagina's, dashboard, krant. Zolang de terugweg klopt is dat geen probleem.

3b. De naam en de verwarring: drie opties

(a) Appel 2 wordt "Appel" op appel.haartips.nl; oud naar /oud/ of /bieb/ (b) Eén domein, één menu, niets verhuizen (c) Laten zoals het is, naam "Bibliotheek"
Wat gebeurt er nginx: root van appel.haartips.nl wordt v2/, oude root onder /oud/ (alias), appel2 wordt een redirect appel2 blijft het adres; PIN-fix + appbar naar Appel 2 + relatieve links; later de domeinen wisselen (appel → v2-root, appel2 → redirect) alleen de tekst "Bibliotheek" duidelijker maken
Voordelen één naam, één adres, één icoon op het beginscherm; localStorage en PIN op één plek kleinste stap, alles omkeerbaar, geen bestand verhuist; technisch al bijna zo (terugval @oud werkt, websocket werkt) nul werk
Nadelen 28 oude pagina's laden rooster.json, cirkel/data.json, appbar.js, gewone-taal.js relatief: onder /oud/ moeten die paden kloppen (symlinks of try_files naar de root); trainingsplan.json-links (leren.html, duits.html#apprkaart) krijgen een /oud/-prefix; index-oud?spar= links in v2 aanpassen twee namen blijven bestaan tot de wissel; Dani's bookmark moet appel2 zijn terugweg blijft kapot (🏠 Start → oude voordeur); 📷-link kaatst (onzeker); twee voordeuren die allebei "Appel" heten
Risico deep-links Dani oude links naar appel.haartips.nl/leren.html landen stil op Appel 2 (terugval) → acceptabel, maar wel even uitleggen geen geen
Risico LaunchAgents / cron data-URL's (appel.haartips.nl/rooster.json in plaud_les_split.py en dani-classroom-monitor.js, dani-hub-keepalive.js) blijven werken als de JSON op de root blijft (terugval @oud moet dus blijven) geen geen
Risico Telegram-links dani-classroom-monitor.js zegt "appel.haartips.nl/mededelingen.html" → wordt /oud/mededelingen.html; nakijk-links in appel-chat-api.py (/bespreek/nakijk?item=) blijven werken (API); Dani-berichten (VPS): onzeker welke link erin staat, script niet lokaal geen geen
Risico spar-route (websocket 8751) /live moet in de nieuwe vhost blijven geproxyd; index-oud bouwt de URL uit location.host, dus werkt op elk domein al bewezen op appel2 geen
Risico localStorage oude pagina's bewaren appel_weekschema, appel_streak, appel_hwtr_*, appel_hwfoto_*, appel_jaar per domein. Bij een domeinwissel is die toestel-toestand eenmalig weg (server-kant via /toets/afvink en /toets/kv blijft) pas bij de latere wissel geen
Moeite middel-groot (1 dag bouwen + testen van 28 pagina's) klein (1 avond) + later 1 uur voor de wissel nul
Advies als tweede stap, zodra B en C af zijn nu doen nee

4. Andersom en de automatische berichten

Verwijst de oude Appel naar appel2? Nee. 0 treffers in 30 bestanden (alle pagina's + appbar.js). De oude Appel weet niet dat Appel 2 bestaat.

Welke automatische dingen linken waarheen (alleen wat lokaal of publiek te zien was):

Bron Waar draait het Linkt naar Opmerking
Dagstart (appel-dagstart.py, cron 04:45) VPS dagstart/manifest.json: veld oefentoets = relatief oefentoetsen.html?…, geen domein in de tekst gebruikt door Appel 2 ochtend én oude dagstart.html; nieuwste entry 8-9 gezien
Telegram naar Dani (appel-dani-berichten.py, ochtend + thuiskomst) VPS onzeker: script staat niet lokaal, CHANGELOG noemt geen link als er een link in staat: check dat het appel2 is, want appel.haartips.nl/toets.html toont stil de oude voordeur
Classroom-monitor (dani-classroom-monitor.js, 3x/dag) MacBook, via meld.sh naar Jamal (Conductor-bot) "Staat in de app: appel.haartips.nl/mededelingen.html" naar Jamal, niet naar Dani; oude Appel
Huiswerk-foto en SL-blad nakijken (appel-chat-api.py) VPS, via queue naar Jamal https://appel.haartips.nl/bespreek/nakijk?item=… API-link, werkt op beide domeinen
Gespreksverslag spraakbot (appel-live.py regel 790) VPS, naar Conductor noemt "appel.haartips.nl" in de tekst alleen tekst
Les-podcasts (appel-les-verwerk.py) VPS https://goed.haartips.nl/appel-lessen/<datum>-<vak>.mp3 geen domeinkwestie; gelinkt vanuit v2/les.html
plaud_les_split.py (LaunchAgent 16:30/20:30) MacBook leest https://appel.haartips.nl/rooster.json data, werkt op beide
dani-hub-keepalive.js MacBook houdt een tab https://appel.haartips.nl/ open oude Appel
uptime-monitor.py MacBook bewaakt alleen https://appel.haartips.nl/ appel2 wordt niet bewaakt

Niet gezien (geen lokale kopie): de cron-regels op de VPS, de nginx-configs (appel.haartips.nl en appel2.haartips.nl), appel-dani-berichten.py, appel-dagstart.py. Uitspraken daarover komen uit het BOUWBOEK en het geheugen, niet uit meting.

5. Eindadvies (volgorde)

  1. Kies optie (b): één domein, niets verhuizen. Eerst een stil proefje laten zien.
  2. Fase A: appel_ok zetten in v2, appbar.js naar Appel 2 + knop Bibliotheek, absolute links relatief, uptime-monitor. Eén avond, alles met .bak.
  3. Fase B: sparren.html 1-op-1 naar v2. De spraakbot blijft de motor.
  4. Fase C: week-tab in Appel 2 uit planning.html (1-op-1 secties).
  5. Fase D: oefentoetsen in de Appel 2-jas (alleen css).
  6. Dan pas de domeinwissel (optie a als tweede stap): appel.haartips.nl → Appel 2, appel2 → redirect, oude Appel = Bibliotheek onder hetzelfde domein. Lijst uit §4 bijwerken.
  7. Leren, Succesvol Leren, vakpagina's, dashboard, krant: blijven Bibliotheek met een goede terugweg.
  8. Check de Telegram-berichten aan Dani op het domein (onzeker, VPS).
  9. Onzeker gebleven: of de 📷-link op appel2 echt kaatst (uit code afgeleid). Eén browser-test bewijst het.
  10. Niets hiervan verandert de bevroren onderdelen (feed, route, 3x-goed). Alleen links en de terugweg.
🎙️ Bespreek met Jarvis