Synthèse, home

Work

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.

clientSvelteKitRustPWA

Role
Design, development, hosting.
Period
2026
Stack
SvelteKit (PWA), Rust (axum), SQLite, WebAssembly, WebCrypto, Astro
The sparksireland.ie storefront on desktop: an apprentice testing a distribution board with a clamp meter, beside a panel reading “Pass your phase exams. Sparks gets you ready.” and buttons to open the app and see pricing.
The sparksireland.ie storefront on desktop: an apprentice testing a distribution board with a clamp meter, beside a panel reading “Pass your phase exams. Sparks gets you ready.” and buttons to open the app and see pricing.

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.

The voltage drop calculator in the Sparks app on a phone: supply, circuit type, cable size in mV/A/m, run length and design current, above the Toolkit, Study, Reference and Settings tabs.
The voltage drop calculator in the Sparks app on a phone: supply, circuit type, cable size in mV/A/m, run length and design current, above the Toolkit, Study, Reference and Settings tabs.

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.

A toolbox talk in the Sparks app on a phone: “Ladders and work at height”, a short site scene under “Picture this”, then numbered safety points.
A toolbox talk in the Sparks app on a phone: “Ladders and work at height”, a short site scene under “Picture this”, then numbered safety points.

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.

A project in mind? Let's talk