Sparks
The pocket toolkit and exam companion of electrical apprentices in Ireland, born of 25 years on the tools. An app that works with no signal, calculators and toolbox talks included; exam packs encrypted and opened on the device by a licence checked in wasm; a Rust licence server; an Astro storefront.
- Role
- Design, development, hosting.
- Period
- 2026
- Stack
- SvelteKit (PWA), Rust (axum), SQLite, WebAssembly, WebCrypto, Astro
- Links


The brief
Sparks comes from an Irish electrician with twenty-five years in the trade. He wanted to bring together in a single app the preparation for the phase 2, 4 and 6 exams, the site calculations and the week’s toolbox talk. Each answer refers to its clause of I.S. 10101, the Irish wiring rules.
Apprentices work in plant rooms, risers or basements, where signal is intermittent: the app works offline. I designed and developed the product, from the first commit, in late August 2026, to production.
In use
The free part brings together the common calculations: voltage drop, cable sizing, three-phase power, Ohm’s law. It also contains the reference tables (Max Zs, cable sizes, SWA glands, conductor colours), five sample questions and four toolbox talks.
The licence opens the full question bank, organised by phase and module. Each question has a worked answer and refers to the clause or page to reread. Mock exams follow the official duration and format. In phase 4, the model answer appears once the apprentice has written their own.
The toolbox talk is the week’s safety briefing: a site situation, a few instructions, questions for the crew. Each participant signs on the phone, and the register exports as a PDF, on paper or as a CSV.


Architecture
Paid content is distributed as public packs, encrypted with AES-256-GCM; the licence provides the key. On activation, the device generates a key pair kept in the browser’s cryptographic module. The server returns a token signed with Ed25519, which contains the pack keys encrypted for that device.
Token verification lives in a single Rust crate, compiled for the server and, as WebAssembly, for the app: both apply the same rules. The token contains the keys of the current, previous and next packs, which keeps access open during an update.
The server also handles the admin (roles, audit log), Revolut payment and emails. Each deployment switches a symlink and rolls back by itself to the previous version if the health check fails.


Decisions
Offline first. The app runs entirely from a service worker cache, versioned on each build, and updates as soon as the network returns.
An explicit threat model. A check run on the phone can be bypassed by its owner. Protection rests on encryption: the server issues the keys only to licensed devices.
Accessibility blocks the build. Continuous integration fails on the slightest accessibility warning. Axe checks every screen in both themes, compliant with WCAG 2.2 AA. A bias report flags questions whose right answer can be guessed from its position or length.
PDFs produced on the device. I wrote the PDF generator in TypeScript: the signed register is created on the phone, offline.
Today
The marketing site is live at sparksireland.ie, the app at app.sparksireland.ie, open to everyone. The client manages the content from the admin, and each new version reaches devices at the next refresh.