AngelOS AngelOS Technical Whitepaper

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:

Shell (Preact + Vite + Tailwind CSS 4)
↕ Bridge (WebKitGTK / WebSocket / HTTP)
Python Backend (aiohttp + SQLite)
Chromium Kiosk + Openbox WM
Debian 12 (squashfs + overlayfs)
Hardware (x86_64, 4GB RAM, 32GB storage)

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
SchrijvenCreativiteitTiptap editor, 6 templates, auto-save
TekenenCreativiteitCanvas API, tools, shapes, flood fill
PresenterenCreativiteitSlides met transitions, drag-reorder
RekenmachineLerenWindows Calculator kloon, keyboard input
SpreadsheetLerenGrid met formules (SUM, celrefs), CSV export
MuziekOntspanningWeb Audio API, visualizer, playlists
Video'sOntspanningHTML5 player, grid met categorieën
SnakeOntspanningCanvas game, highscores, wrap-around
InternetOntdekkenIframe sandbox, URL check via Angel
Mijn SpullenOntdekkenFile 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:

  1. DNS-level blocklists (StevenBlack hosts + CleanBrowsing Family)
  2. Lokale whitelist/blacklist controle
  3. AI-gebaseerde content check (met 24-uur cache)
  4. Resultaat: allow, block, of ask_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)

  1. UEFI/BIOS → GRUB2 (timeout=0, quiet boot)
  2. Linux kernel + initramfs (zstd compressed)
  3. overlayfs mount: squashfs (read-only) + persistence (writable)
  4. systemd parallel init: NetworkManager, PipeWire, angel-server
  5. 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 gebruik500MB - 1GB (Chromium + shell)
Frontend frameworkPreact — 3KB gzipped
Vite bundle~983KB (code splitting actief)
squashfs image500MB - 2GB
Min. hardwarex86_64, 4GB RAM, 32GB storage
Geteste hardwareMid-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