AngelOS
Een kindveilig besturingssysteem — van visie tot architectuur.
Versie 1.0 · Maart 2026 · ITARR
1. Introductie
AngelOS is een compleet besturingssysteem ontworpen voor kinderen van 6-12 jaar. Het combineert een veilige, afgesloten omgeving met een modern, intuïtief design dat kinderen aanspreekt — zonder concessies te doen aan privacy of veiligheid.
De ontwerpfilosofie rust op drie pijlers:
- Bescherming zonder opsluiting — Angel legt uit waarom iets niet mag, in plaats van alleen te blokkeren
- Privacy als fundament — alle data blijft lokaal, geen telemetrie, geen analytics
- Toegankelijkheid — draait op hardware van €50, geen krachtige computer nodig
Het systeem is gebouwd als een web-applicatie die draait in een kiosk-browser op een gestripped Linux systeem. Dit geeft de flexibiliteit van webtechnologie met de controle van een native OS.
2. Architectuur Overzicht
AngelOS bestaat uit vijf lagen, van hardware tot gebruikersinterface:
De frontend (Shell) communiceert met de Python backend via een abstracte Bridge-laag die automatisch het juiste transport kiest op basis van de runtime-omgeving. De backend beheert AI-interacties, bestandsopslag, schermtijd en ouderlijke controle.
3. De Shell
De shell is een volledige desktop-omgeving gebouwd met webtechnologie. Het biedt een macOS-achtige ervaring met een dock, window manager, statusbalk en launcher.
Tech Stack
- Preact 10 — React-compatibel framework, 3KB gzipped
- Vite 6 — Bundler met HMR en code splitting
- Tailwind CSS 4 — Utility-first CSS met custom design tokens
- Tiptap — Rich text editor (schrijf-app)
- Canvas API — Teken-app en Snake game
- Web Audio API — Muziekspeler met visualizer
Window Manager
De window manager ondersteunt drag, resize, minimize, maximize en z-index stacking. Windows worden geanimeerd met cubic-bezier easing voor een native feel. State wordt beheerd via Preact hooks — geen externe state library nodig.
Design System
Het visuele ontwerp is gebaseerd op glassmorphism met een kleurrijk accentpalet. Light en dark mode worden ondersteund via CSS custom properties:
@theme {
--color-angel-purple: #a78bfa;
--color-angel-pink: #f472b6;
--color-angel-blue: #60a5fa;
--color-angel-green: #4ade80;
--color-angel-gold: #fbbf24;
--color-angel-surface: rgba(255, 255, 255, 0.72);
--color-angel-glass: rgba(255, 255, 255, 0.55);
} 4. App Ecosysteem
Apps zijn manifest-driven en lazy-loaded. Elke app definieert zijn metadata, permissies en standaard window-grootte in een manifest:
{
"id": "writing",
"version": "1.0.0",
"permissions": ["files:read", "files:write"],
"category": "productivity",
"size": { "w": 680, "h": 520 },
"bg": "linear-gradient(135deg, #c084fc, #a855f7)",
"hasMenuBar": true,
"fileCategory": "documenten"
} De 10 Apps
| App | Categorie | Technologie |
|---|---|---|
| Schrijven | Creativiteit | Tiptap editor, 6 templates, auto-save |
| Tekenen | Creativiteit | Canvas API, tools, shapes, flood fill |
| Presenteren | Creativiteit | Slides met transitions, drag-reorder |
| Rekenmachine | Leren | Windows Calculator kloon, keyboard input |
| Spreadsheet | Leren | Grid met formules (SUM, celrefs), CSV export |
| Muziek | Ontspanning | Web Audio API, visualizer, playlists |
| Video's | Ontspanning | HTML5 player, grid met categorieën |
| Snake | Ontspanning | Canvas game, highscores, wrap-around |
| Internet | Ontdekken | Iframe sandbox, URL check via Angel |
| Mijn Spullen | Ontdekken | File manager met zoek en categorieën |
Service Layer
Apps communiceren via een service-abstractie (Preact Context): FilesService voor bestandsoperaties, UIService voor modale dialogen, en NotificationService voor meldingen. Een event bus faciliteert asynchrone communicatie tussen apps.
5. The Bridge
De Bridge is de communicatielaag tussen de JavaScript shell en de Python backend. Het abstraheert vier transport-modi achter één uniforme API:
Native (WebKitGTK)
Direct via window.webkit.messageHandlers — laagste latency
WebSocket
ws://localhost:9876 — real-time, auto-reconnect
HTTP Fetch
POST /api/bridge — stateless, session-based
Dev Fallback
localStorage mock — offline development
De bridge detecteert automatisch de juiste modus op basis van de runtime-omgeving. In kiosk-modus (Chromium op localhost:8080) wordt WebSocket gebruikt. Bij een geïnstalleerde WebKitGTK-versie wordt de native bridge geprefereerd. Tijdens development wordt de localStorage mock actief.
API Surface
bridge.chat(message) // Angel AI chat
bridge.checkUrl(url) // Content filtering
bridge.screenTime() // Schermtijd opvragen
bridge.fileList(category) // Bestanden ophalen
bridge.fileWrite(cat, name, content)
bridge.askPapa(message) // Telegram naar ouder
bridge.wifiScan() // Netwerk scan
bridge.volumeSet(level) // Hardware controle 6. Angel AI
Angel is de AI-beschermengel van AngelOS, aangedreven door Claude Haiku. Angel vervult drie rollen:
Chat Companion
Angel beantwoordt vragen in het Nederlands op een kindvriendelijke manier. De system prompt beperkt antwoorden tot maximaal 150 woorden en voorkomt dat persoonlijke informatie gedeeld wordt. Maximum 50 berichten per dag.
Content Filtering Pipeline
Elke URL die het kind bezoekt doorloopt een filteringpipeline:
- DNS-level blocklists (StevenBlack hosts + CleanBrowsing Family)
- Lokale whitelist/blacklist controle
- AI-gebaseerde content check (met 24-uur cache)
- Resultaat:
allow,block, ofask_parent
Telegram Bridge
Angel stuurt real-time notificaties naar de ouder via Telegram: geblokkeerde websites, schermtijd-overschrijding, "Vraag het aan papa"-verzoeken, en een dagelijks rapport om 20:00.
ai:
model: "claude-haiku-4-5-20251001"
content_check:
enabled: true
cache_hours: 24
chat:
max_messages_per_day: 50
system_prompt: |
Je bent Angel, een vriendelijke
beschermengel voor een 9-jarig meisje. 7. Beveiligingsmodel
Sandbox Architectuur
Apps draaien in sandboxed iframes zonder directe internettoegang. De browser-app is de enige app die extern verkeer mag genereren, maar uitsluitend via de Angel content filtering pipeline.
Systeem Lockdown
- Ctrl+Alt+Delete uitgeschakeld
- Magic SysRq uitgeschakeld
- USB-opslag geblokkeerd via modprobe blacklist
- GRUB wachtwoord voor recovery mode
- Chromium managed policy blokkeert chrome://, about:*, file://
- DevTools, downloads en extensies uitgeschakeld
- F5, F11, F12, Ctrl+L, Ctrl+T, Ctrl+W geblokkeerd in shell JavaScript
Process Control
Een process whitelist voorkomt dat ongeautoriseerde applicaties draaien. Processen als tor, wine en steam staan op de blacklist.
8. Privacy by Design
Privacy is geen feature — het is het fundament van de architectuur:
- Alle data lokaal — bestanden, chatgeschiedenis, surfhistorie en schermtijd worden opgeslagen in een lokale SQLite database op het apparaat
- Geen telemetrie — er wordt geen gebruiksdata verzameld of verzonden
- Geen analytics — geen tracking pixels, geen cookies van derden
- Geen cloud sync — data verlaat het apparaat niet tenzij de ouder dit expliciet configureert
- Versleutelde opslag — de persistence partitie kan optioneel versleuteld worden
- Retentie — logs worden na 90 dagen automatisch verwijderd
De enige externe communicatie is naar de Claude API (voor Angel chat en content filtering) en optioneel naar de Telegram API (voor ouderlijke notificaties). Beide zijn optioneel en kunnen uitgeschakeld worden voor volledig offline gebruik.
9. Deployment
USB Kiosk Build
De primaire deployment is een bootable USB-stick met een three-layer structuur:
USB Stick (16GB)
├── EFI Partitie (200MB) — GRUB2 bootloader
├── System Partitie (3-5GB) — squashfs root filesystem
└── Persistence (8-12GB) — overlayfs upper layer
├── /home/maya/ — gebruikersbestanden
├── /var/lib/angel/ — database + config
└── /etc/NetworkManager/ — WiFi credentials Boot Sequence (~15s USB, ~8s disk)
- UEFI/BIOS → GRUB2 (timeout=0, quiet boot)
- Linux kernel + initramfs (zstd compressed)
- overlayfs mount: squashfs (read-only) + persistence (writable)
- systemd parallel init: NetworkManager, PipeWire, angel-server
- getty autologin → startx → Openbox + Chromium kiosk
Disk Install
Voor permanente installatie wordt het squashfs-image uitgepakt naar een standaard ext4 partitie. Boot time daalt naar ~8 seconden door snellere disk I/O.
Remote Update
Shell-updates (frequent) worden gedistribueerd via de aiohttp server: manifest check → download → verify → apply → restart. Systeem-updates (zeldzaam) gebruiken een A/B partitie-schema met GRUB pointer switching.
10. Performance
| Metric | Waarde |
|---|---|
| Boot tijd (USB) | ~15 seconden |
| Boot tijd (disk) | ~8 seconden |
| RAM gebruik | 500MB - 1GB (Chromium + shell) |
| Frontend framework | Preact — 3KB gzipped |
| Vite bundle | ~983KB (code splitting actief) |
| squashfs image | 500MB - 2GB |
| Min. hardware | x86_64, 4GB RAM, 32GB storage |
| Geteste hardware | Mid-2009 MacBook (17 jaar oud) |
Optimalisaties: Vite code splitting voor lazy loading van apps, zstd-gecomprimeerde initramfs, squashfs met LZO compressie, GRUB timeout=0, quiet boot, en netwerk dat niet blokkerend start.
11. Roadmap
Klassieke games
Mijnenveger en Patience — de Windows klassiekeers
Screensavers
Starfield, Bubbels, Matrix, Bouncing logo
Meer leercontent
Educatieve games, quizzen en interactieve leermaterialen
Mobiel & tablet
Responsive versie voor tablets en eventueel smartphones
Bundle optimalisatie
Code splitting verfijnen, ongebruikte dependencies verwijderen
A/B systeem updates
Automatische systeem-updates met rollback mogelijkheid