Hey Jamal, welkom bij deze duik in "Het Bouwboek" van Appel! Stel je voor: we gaan het hebben over de complete gebruiksaanwijzing en herbouw-gids van Appel, jouw persoonlijke digitale leercoach. Het doel van dit document is zo helder als maar kan: met alleen deze informatie zou je Appel morgen opnieuw kunnen bouwen. Laten we er meteen induiken.
De kern van Appel is eenvoudig en krachtig: het is de persoonlijke digitale leercoach voor Dani, jouw zoon van 13, die in 2 havo zit op het Stanislas College. Dit is géén algemene huiswerk-app, maar een op maat gemaakte begeleider die Dani door zíjn eigen schoolstof heen leidt. Het unieke is dat het gebouwd is op een bewezen leermethode van een echte studiecoach en dat alle stof 100% uit Dani’s *eigen* echte schoolboeken komt. En heel belangrijk: het is alleen voor Dani persoonlijk gebruik, vanwege de auteursrechten op die digitale schoolboeken. Verkopen zou verspreiding van beschermd materiaal via AI zijn, en dat willen we absoluut niet.
Waarom bestaat Appel? Nou, in 2 havo valt de begeleiding na het brugjaar vaak wat terug, en Appel vult precies dat gat. Het is niet zomaar een app met oefeningen, maar een leercoach die naast Dani zit en drie dingen tegelijk doet. Allereerst: Dani motiveren op de juiste manier, want de kernovertuiging is dat succes motivatie geeft, niet andersom. Dus: altijd kleine successen laten voelen, fouten zien als een eerste stap en weerstand als groei. Nooit straffen, altijd opbouwen. Ten tweede: leren zoals de wetenschap zegt dat het werkt, denk aan retrieval practice – ophalen uit je hoofd – spreiding en metacognitie. Geen onzin over leerstijlen hier. En ten derde: de echte stof, voor de echte toets. Alles wat Dani leert, komt uit zijn eigen boeken en sluit perfect aan op zijn toetsen. Hij mag nooit iets fout leren. Deze principes zijn zo belangrijk dat we ze de grondwet van Appel noemen, en daar wijken we nooit van af.
Het hart van Appel is wat we het "leraar-DNA" noemen, gebaseerd op de Succesvol Leren-methode van Larissa Kapnissakis. Dit zit verweven in alles wat Dani leert, niet als een apart tabblad. Dat DNA heeft drie lagen: de mindset en toon, dus hóe Appel praat – altijd positief en opbouwend. Vervolgens de leerwetenschap: retrieval, spreiding en metacognitie, gecombineerd met de vier leersleutels. En tot slot de vaktechniek per vak: van signaalwoorden bij Nederlands tot de salamitechniek bij Frans en het masterschema voor exacte vakken. Ook coaching-modules zoals Planning en Laserfocus zijn hierin verwerkt, en technisch zit dit verankerd in de prompts van de AI-chatdiensten.
Wanneer er nieuwe stof wordt toegevoegd, gebeurt dat altijd in een "volle cirkel". Elke paragraaf krijgt de hele behandeling: van lesstof uit het boek, tot een podcast ingesproken door Sulafat, flashcards, een toets – zowel meerkeuze als open vragen – werkbladen en een reflectie met de drie metacognitie-vragen. Wanneer jij lesmateriaal stuurt, Jamal, wordt de hele cirkel bijgewerkt en krijg je daar proactief bericht van.
De toets-filosofie van Appel, Toets v2, is ook heel specifiek. Kennis en begrip worden getoetst met meerkeuzevragen, en toepassing met open vragen die de AI nakijkt. Dani krijgt bij een fout antwoord eerst een hint, en pas bij een tweede poging het antwoord zelf. Alles wordt gelogd voor een dashboard waar hij zijn voortgang, zwakke punten en cijfers kan zien. De flashcards zijn ook van hoge kwaliteit, met plausibele foute opties.
En dan de architectuur – hoe het technisch in elkaar zit. Appel draait op een eigen server, met een frontend voor alles wat je ziet en een backend die alle slimme dingen doet. Voor de AI gebruiken we Google Gemini, en alle data en logs gaan naar Supabase. Er zijn diverse services die elk hun eigen taak hebben: één voor het nakijken van toetsen, een ander voor de getypte chat, weer een andere voor de gesproken interactie, en zo verder. Belangrijk om te weten is dat de gesproken en getypte chat ieder hun eigen prompts hebben, dus een aanpassing in de één moet je ook in de ander doorvoeren. De kern van de leerstof zit in het bestand `cirkel/data.json`, samen met alle podcasts en lesstof. Daarnaast zijn er bestanden voor het Magister-rooster, de weekplanning en huiswerk uit Google Classroom. Veel content, zoals de lesstof en audio, wordt statisch gegenereerd, terwijl de live services real-time AI-interacties afhandelen. Dit zorgt voor een efficiënt en responsief systeem.
Tot slot, een recente en belangrijke ontwikkeling: de planner, die sinds kort als pilot voor Nederlands draait. Het doel hiervan is dat Appel een echte planner wordt die de leervolgorde van de docent volgt. De bron hiervoor is de docent-planner uit Google Classroom. Dit betekent dat Appel precies weet wat de klas op dat moment doet, bijvoorbeeld eerst spelling en dan creatief schrijven voor de toetsweek, in plaats van zomaar paragraaf 1.1 te leren. En het huiswerk uit Classroom wordt nu netjes gescheiden van de weekplanning, zodat die elkaar niet meer in de weg zitten. Er liggen nog plannen om dit verder uit te breiden naar alle vakken en nog preciezer te koppelen aan het rooster.
Kortom, Appel is een geavanceerd, gepersonaliseerd leersysteem, volledig afgestemd op Dani’s behoeften en gebouwd op solide pedagogische en technische fundamenten. Het is een fantastisch project dat echt een verschil maakt voor Dani. Ik hoop dat dit je een helder beeld geeft van hoe Appel in elkaar steekt, Jamal!
De complete gebruiksaanwijzing en herbouw-gids van Appel: het concept, de filosofie,
hoe het gebouwd is, en waar je alles vindt. Doel: met dit document alleen zou je Appel
morgen opnieuw kunnen bouwen.
Appel is de persoonlijke digitale leercoach van Dani (13 jaar, 2 havo, Stanislas College).
Geen algemene huiswerk-app, maar één begeleider die Dani door zijn eigen schoolstof heen leidt —
met de leermethode van een echte studiecoach ingebouwd, en met stof die 100% uit zijn eigen
echte schoolboeken komt.
Voor wie: alleen voor Dani. Niet doorverkopen, niet verhuren aan andere leerlingen.
De digitale schoolboeken zijn auteursrechtelijk beschermd. Zolang de stof alleen voor Dani's
eigen studie onder zijn eigen licentie wordt gebruikt, is het persoonlijk gebruik en
verdedigbaar. Doorverkopen zou verspreiding van beschermd materiaal via AI zijn.
Dani stapt in 2 havo in, en juist havo is het zwakke deel van de school: de begeleiding valt
terug ná het brugjaar. Appel vult dat gat. Het idee is niet "een app met oefeningen", maar
een leercoach die naast Dani zit en drie dingen tegelijk doet:
Jamals kernwens: de Succesvol Leren-methode van Larissa Kapnissakis zit in het DNA van
Appel — in álles wat Dani leert, niet als een los tabje. Openbare spec:
https://appel.haartips.nl/dna-spec.html
Het DNA heeft drie lagen:
Laag 1 — Mindset & toon (hóe Appel praat). Fout = eerste stap. Weerstand = groei.
Piekeren = "wolkjes". Bij black-out: het brein is plastisch. Schuld vs verantwoordelijkheid
(5/95). Altijd kleine successen benoemen, met Larissa's beelden (portier, fabriek, wolkjes,
zones). Kern: succes geeft motivatie, niet andersom.
Laag 2 — Leer-wetenschap. Retrieval-eerst · spreiding · metacognitie (3 vragen: wat wist
ik / wat ging fout / wat doe ik anders) · 3 leerniveaus (kennis → begrip → toepassing) ·
4 leersleutels (chunken, actief, herhalen, oefenen op toetsniveau).
Laag 3 — Vaktechniek per vak.
- Nederlands = signaalwoorden + 4-stappen-leesstrategie
- Frans/Duits = salamitechniek (7 woorden per keer, ezelsbruggetjes) + grammaticaschema +
leestrucjes ("only/most" = 95% fout)
- Wiskunde/NaSk = masterschema exacte vakken (stap voor stap)
- Aardrijkskunde = GeoQuest · Biologie = mindmap · Geschiedenis = matrix 5W1H +
kenmerkende aspecten + scoren op bronnen
Extra coaching-modules die in het DNA verwerkt zijn: Planning (helikopterview 7 dagen
vooruit, aanvalsplan ≠ agenda), Laserfocus (Pomodoro, doodelen, max 3-4 vakken/dag).
Technisch zit dit DNA als coaching-blokken in de systeem-prompts van de chat-services
(appel-live.py en appel-chat-api.py): o.a. MINDSET_COACHING, SUCCESVOL_LEREN_DNA,
FOCUS_COACHING, PLANNING_COACHING, EXACTE_VAKKEN_COACHING.
Nieuwe stof wordt nooit als los stuk toegevoegd. Elke paragraaf krijgt de hele cirkel:
lesstof (markdown, 1000% uit boek)
→ podcast (ingesproken audio, stem Sulafat)
→ flashcards (retrieval-oefening)
→ toets (meerkeuze + open)
→ werkblad(en)
→ reflectie (3 metacognitie-vragen)
Zodra Jamal lesmateriaal voor een vak stuurt: meteen de hele cirkel bijwerken én dat proactief
melden — niet alleen de bestanden eronder hangen.
Server: VPS 149.210.171.174 (user jamalhaarvisie). Live: https://appel.haartips.nl/
Frontend/webroot: /var/www/appel-haartips/ (statisch, Cache-Control: no-store).
Backend-code: /opt/jarvis/ (Python ThreadingHTTPServer, systemd-services, nginx-proxy).
AI: Google Gemini (key in /opt/jarvis/env). Data/logs: Supabase (haarvisie-brain).
| Pagina | Wat het doet | Laadt (fetch) |
|---|---|---|
index.html |
Startscherm: vandaag/deze week, rooster-tegel, voortgang, spar-knoppen | agenda.json, rooster.json, cirkel/data.json, /toets/stats, /toets/voortgang-stats |
leren.html |
Kernpagina: leerstof-cirkel per vak → lesstof, flashcards, oefentoets, spar-overlay, tijdlijn, podcast | cirkel/data.json, /toets/grade, /toets/log, /toets/voortgang-log |
cirkel.html |
Alleen redirect → leren.html (stub) |
— |
dashboard.html |
Voortgang-dashboard (stats + zwakke punten) | /toets/stats, /toets/voortgang-stats |
planning.html |
Planning: actiepunten, huiswerk (Classroom), helikopterview (weekplanning), boeken | acties.json, huiswerk.json, agenda.json, leermiddelen.json |
rooster.html |
Magister-rooster per dag | rooster.json |
bijspijker.html |
Leestraining-chat (PIN 2026) | /bespreek/bijspijker, /bespreek/chat, /bespreek/tts |
frans.html |
Frans oefenen + chat + oefentoets | /bespreek/frans, /bespreek/chat, /bespreek/tts |
dagstart.html |
Dagelijkse dagstart (audio+png) + afvinken + weekschema | dagstart/manifest.json, /bespreek/dagstart-* |
nulmeting.html |
HAVO-2 nulmeting (adaptieve toets) | /nulmeting/* |
oefentoetsen.html |
Oefentoetsen per set | <api>/vragen, /grade |
succesvol-leren.html |
Module Succesvol Leren + chat | /bespreek/succesvol |
podcast.html |
Podcasts per vak/paragraaf | cirkel/data.json |
dna-spec.html |
Openbare spec van het leraar-DNA | — |
Navigatie: appbar.js = gedeelde sticky bovenbalk (🍎 Appel → index.html, ‹ Vorige, 🏠 Start).
De echte navigatie zit per pagina. Legacy: index-oud-20260819.html (229KB oude single-page-app,
nog gelinkt via een "Bespreken met AI"-tegel — op te ruimen).
/opt/jarvis/, systemd, via nginx geproxyd)| Service | Bestand | Poort | Endpoints | Functie |
|---|---|---|---|---|
appel-toets.service |
appel-toets-api.py |
8753 | /toets/health,stats,voortgang-stats,spar-uitleg (GET) · /toets/grade,log,voortgang-log (POST) |
Toets nakijken (Gemini), spar-uitleg uit boek-lesstof, voortgang → Supabase |
appel-bespreek.service |
appel-chat-api.py |
8754 | /bespreek/chat,tts,bijspijker,frans,succesvol,dagstart-* |
Getypte chat + TTS, bestand-per-vak bespreken |
appel-nulmeting.service |
appel-nulmeting-api.py |
8757 | /nulmeting/vragen,status,grade,grade-een |
HAVO-2 nulmeting, adaptief |
appel-live.service |
appel-live.py |
8751 | WebSocket /live |
Gemini Live spraak-relay (de gesproken route) |
| (gedeeld) | jarvis-api.py |
8748 | /api/* |
Gedeelde Gemini/Jarvis-proxy |
Nginx (/etc/nginx/sites-enabled/appel.haartips.nl, root = webroot):
/api/→8748 · /toets/→8753 · /live→8751 (WS) · /bespreek/→8754 (14MB body) ·
/nulmeting/→8757 · /→statisch.
⚠️ Twee aparte chat-prompts: gesproken = appel-live.py, getypt = appel-chat-api.py.
Een promptfix in de één raakt de ander NIET. Wil je gedrag in beide: pas beide aan.
cirkel/data.json — de leerstof-kern. {titel, bijgewerkt, vakken[]}. 9 vakken{key, naam, emoji, paragrafen[]}. Paragraaf = {paragraaf, titel, hoofdstuk,
methode, lesstof (markdown uit boek), flashcards[]{voor,achter,mode}, toets[]{niveau,v,a,type},
matrix{}, audio (mp3-pad), timing{duur,zinnen[]}} (whisper-getimede zinnen voor podcast-highlight).rooster.json — Magister-rooster: {titel, bron, bijgewerkt, vanaf, tot, vrije_dagen,
vakanties, dagen{datum→lessen}, monitor_meldingen{nieuw_huiswerk,…}}. Live bijgewerkt doormagister-monitor.py (bot-browser).agenda.json — weekplanning/helikopterview: {brugklas[], 2havo[], 3havo[], _bron,
_bijgewerkt}; item = {datum (maandag-ISO), week, vak, wat}. Gerenderd als tabelhuiswerk.json — Classroom-huiswerk (deadlines): {bron, bijgewerkt, geen_datum,
items[]{titel,omschrijving,wanneer}}. Gevuld door dani-hub-keepalive. (Nieuw 2-9-2026.)acties.json — actiepunten met aftelklok: {acties[]{id,titel,wat,deadline,opent,link}}.leermiddelen.json — boekenlijst 2 havo per vak (methode + uitgeverij + EAN).masterclasses.json, dagstart/manifest.json, ai/serie-manifest.json, krant/manifest.json.cirkel/ (leerstof-motor: data.json + 432 mp3-podcasts + lesstof-bronnen + Python-generators)
· toetsen/ (statische toets-HTML per hoofdstuk) · succesvol/ (Succesvol Leren: pdf+video+mp3)
· sl/ (werkbladen) · va/ (vak-audio-lessen) · ai/ (AI-cursus audioserie) · ep/ (podcast-episodes)
· dagstart/ (dagelijkse audio+png) · gesch/ (geschiedenis H6).
06:30 appel-krant.py (AI-krant) · 04:45 appel-dagstart.py (dagstart audio+png) ·
maandelijks appel-linkcheck.py. (appel-ai-podcast.py staat uit sinds 25-7.)
Content (lesstof/audio) is statisch en offline gegenereerd door de batchscripts in cirkel/;
de live services doen alleen realtime AI (nakijken, chat, spraak).
index.html laadt cirkel/data.json + rooster.json + agenda.json → toont vandaag/deze week + voortgang.leren.html → paragrafen uit data.json: lesstof (uit boek), flashcards, podcast (met timing-highlight)./toets/grade (Gemini kijkt na) → gelogd via /toets/log + /toets/voortgang-log → Supabase./toets/spar-uitleg (warme uitleg uit dezelfde boek-lesstof), of chat /bespreek/chat + /bespreek/tts, of spraak /live.planning.html; nulmeting via /nulmeting/*; dagstart via dagstart/manifest.json.Doel: Appel wordt een echte planner die de leervolgorde van de docent volgt.
u/1). Voor Nederlands H2c: docent Daphne Zuiderwijk, doc "Planner periode 1" +~/.claude/magister-data/appel-planner/.agenda.json → 2havo): eerst spellinghuiswerk.json en wordtplanning.html getoond; de weekplanning blijft in agenda.json. Daarvoor botsten die tweedani-hub-keepalive.js/.sh.Nog open (Jamals bredere visie): Classroom-meldingen + afvinken per opdracht in Appel · stof
koppelen aan datum+les uit het rooster · de vertaaltabel-codes (mod/mw/AHMS/KUIR/RUTA) aanvullen ·
de andere vakken op de echte docent-volgorde zetten (nu alleen Nederlands).
Plak dit als opdracht om Appel from scratch te herbouwen. Vul de bronbestanden (boek-PDF's,
Larissa-documenten) aan waar genoemd.
Bouw "Appel": de persoonlijke digitale leercoach voor Dani (2 havo, Stanislas). ALLEEN voor Dani.
FILOSOFIE (niet-onderhandelbaar):
- Stof komt 1000% uit Dani's eigen echte schoolboeken (leermiddelen.json). Nooit StudyGo/verzonnen.
Enige uitzondering: foute meerkeuze-opties mogen verzonnen zijn (moeilijk/plausibel).
- Leraar-DNA = Succesvol Leren (Larissa Kapnissakis) in ALLES, 3 lagen: (1) mindset/toon
"succes geeft motivatie", (2) leer-wetenschap retrieval+spreiding+metacognitie, (3) vaktechniek
per vak (NL signaalwoorden, talen salamitechniek, exacte vakken masterschema, zaakvakken matrix/mindmap).
- Per paragraaf de VOLLE CIRKEL: lesstof → podcast (stem Sulafat) → flashcards → toets → werkblad → reflectie.
ARCHITECTUUR:
- Frontend statisch in /var/www/appel-haartips/ (nginx, no-store). Kernpagina leren.html leest
cirkel/data.json (9 vakken; paragraaf = {titel,hoofdstuk,methode,lesstof(md),flashcards,toets,audio,timing}).
Verder: index.html (start), dashboard.html (voortgang), planning.html (acties+huiswerk+weekplanning+boeken),
rooster.html, bijspijker/frans/succesvol/dagstart/nulmeting/podcast.
- Backend /opt/jarvis/ (Python ThreadingHTTPServer, systemd, Gemini-key in env):
appel-toets-api.py:8753 (/toets/grade,log,stats,voortgang,spar-uitleg → Supabase),
appel-chat-api.py:8754 (/bespreek/chat,tts,per-vak), appel-live.py:8751 (WS /live spraak),
appel-nulmeting-api.py:8757. Nginx proxyt /toets/ /bespreek/ /live /nulmeting/ /api/.
- Toets v2: kennis/begrip=meerkeuze(klik), toepassing=open(AI kijkt na), hint-first, alles gelogd → Supabase.
- Data: rooster.json (Magister live), agenda.json (weekplanning per leerjaar), huiswerk.json (Classroom),
acties.json, leermiddelen.json. Content/audio offline gegenereerd door batchscripts in cirkel/.
- Planner: leervolgorde + toetsscope uit de docent-planner in Classroom (bot-browser, Dani u/1),
in agenda.json onder het juiste leerjaar. Huiswerk en weekplanning in APARTE bestanden houden.
REGELS: alles read-first + backup vóór wijzigen; live verifiëren (echt renderen, niet HTTP 200);
twee chat-prompts (live vs bespreek) apart; nooit doorverkopen (auteursrecht).
/var/www/appel-haartips//opt/jarvis/ (services appel-toets, appel-bespreek, appel-nulmeting, appel-live)cirkel/data.json (+ cirkel/audio/ podcasts)~/.claude/magister-data/appel-planner/~/.claude/scripts/dani-hub-keepalive.{js,sh} (Classroom→huiswerk), magister-monitor.py (rooster)/opt/jarvis/env) · Logs: Supabase haarvisie-brain (appel_toets_log, appel_gesprek_analyse)