No description
  • Go 27.2%
  • JavaScript 20.7%
  • Dart 18.4%
  • Nix 15.6%
  • Shell 8.5%
  • Other 9.6%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-07 11:58:04 +00:00
.agents fix: load nix environment in user shells 2026-08-15 20:14:44 +00:00
.amp feat: replace waydroid with redroid (#28) 2026-09-19 08:14:12 -04:00
apps/kwilabook_launcher perf(launcher): poll Student browser status asynchronously 2026-10-07 04:19:40 +00:00
helpers fix(browser): preserve both Android PCM audio channels 2026-10-07 11:58:04 +00:00
install feat: split admin/student accounts (#6) 2026-08-29 11:06:27 -04:00
modules feat(updater): add remote nightly pause until reboot 2026-10-07 11:01:39 +00:00
scripts feat: split admin/student accounts (#6) 2026-08-29 11:06:27 -04:00
.envrc feat: use nix 2026-08-29 20:12:51 -04:00
.gitignore feat: run kiosk with Sway and Waydroid (#3) 2026-08-20 08:17:20 -04:00
AGENTS.md docs: document Python avoidance 2026-09-02 11:27:04 +00:00
flake.lock feat: add USB kiosk proof of concept (#2) 2026-08-15 21:34:46 -04:00
flake.nix feat(updater): add remote nightly pause until reboot 2026-10-07 11:01:39 +00:00
justfile feat: add automated persistent-storage installer 2026-08-24 19:44:57 -04:00
LICENSE Initial commit 2026-08-15 16:02:04 -04:00
README.md feat(updater): add remote nightly pause until reboot 2026-10-07 11:01:39 +00:00

Kwilabook

Kwilabook is a computer for children. Parents control what children can use.

Requirements

1. Admin and Student Access

  • The computer must have separate Admin and Student access.
  • Admins must be able to manage Kwilabook.
  • Students must not be able to open Admin settings or use Admin features.

2. Websites

  • Admins must be able to add and remove websites from the allowed list.
  • Students must be able to visit websites on the allowed list.
  • Students must not be able to visit other websites.

3. Android Apps

  • Admins must be able to install, set up, and remove Android apps.
  • Students must be able to use Android apps approved by Admins.
  • Students must not be able to use other Android apps.

4. Screenshots

  • The computer must take a screenshot at least every five minutes while a Student is using it.
  • The computer must keep at least 30 days of screenshots.
  • Admins must be able to view the last 30 days of screenshots.

5. Updates

  • The computer must check for updates every night.
  • It should try to install updates overnight. An update may be delayed if the computer is not connected to the internet or does not have power.
  • Admins must be able to start an update manually.

Pause nightly updates until reboot (SSH only)

An admin can pause automatic updates remotely without sudo or a graphical authentication prompt:

ssh admin@kwilabook kwilabook-nightly-update-pause

The command stops the nightly timer and creates a root-owned marker in /run. Both the timer and nightly service refuse to start while that marker exists, including after system activation. The timer remains enabled; reboot clears the marker and restores normal scheduling. Manual updates remain available. The command is safe to repeat and does not interrupt an update already running; it reports failure if one is still running. There is no launcher UI for this command.

Update and generation-recovery checks

The committed updater failure contract is runnable through the flake check:

nix build .#checks.x86_64-linux.updater-failure-contract --no-link

A disposable non-Android NixOS VM was also exercised under QEMU TCG. It performed live generation A → B activation and explicit B → A recovery with switch-to-configuration test; it did not reboot or select a bootloader entry. The exact temporary NixOS test source and successful log are retained in .amp/in/artifacts/kwilabook-generation-recovery-test.nix and .amp/in/artifacts/kwilabook-generation-recovery-tcg.log for review, rather than being added as a new test: the repository's guidance prohibits adding Python source or runtime dependencies, while the stock make-test-python runner requires an embedded Python test script.