<style>#boot { display: none; }</style>
Loading

GreatWave — Chris Simari

scroll to zoom · drag the background to roam
Hi
Chris, bearded and wearing sunglasses and a grey plaid flannel shirt, sitting in the driver’s seat of a car with red seats.

Hi, I’m Chris.

I build User Experiences - A Lead Front-End & UI Architect based in South Portland, Maine. With two decades of experience across enterprise platforms, fintech, and digital products, I build modern web software that balances high-performance architecture with rigorous digital accessibility.

TypeScriptAngularRxJSSCSSSASSNodeNPMPWAAccessibilityCanvas

What I focus on

  • Banking & Enterprise SystemsEngineering resilient, secure front ends for financial processing, invoicing platforms, and complex multi-tenant workflows.
  • Front-End ArchitectureScaling applications using Angular, TypeScript, and modern reactive patterns.
  • Engineering ExcellenceIntroducing automated unit testing frameworks, slashing pipeline bottlenecks, and deprecating technical debt.
  • Digital InclusivityArchitecting fully semantic, WCAG/ARIA-compliant interfaces that guarantee equal access for every user.
When I’m not architecting banking software, I’m usually experimenting with interactive graphics, procedural shaders, and audio synthesis in Canvas.
li
Liquid by day: a low sun glowing over layered mountains above a bright blue lake, with the word “Liquid” typed into the box and its letters splashing into the water and sinking.

liquid

The sun, the moon… waves in between. Type a word and it drops into the water as a floating body that belly-flops, bobs and sinks. The sky comes from real sunrise, sunset and moon-phase maths for your location, the clouds follow live weather from Open-Meteo, and a screen-reader description narrates the scene. Angular 22, signals and layered canvas.

AngularTypeScriptCanvasSignalsOpen-Meteo APIAccessibility
Pl
A glass plasma globe filling the frame, with violet lightning arcing out from its dark centre to the glass.

PlasmaGlobe

An interactive plasma globe on canvas. Lightning is fractal midpoint-displacement, the tentacles are verlet rope physics, and every touch point (multi-touch) pulls an arc toward your finger. Web Audio synthesises the buzz and a windchime that rings as each arc whips past, and arcs can react to your microphone. React 18, Vite and Vitest.

JavaScriptReactCanvasWeb AudioPhysicsVitest
Ve
A glowing vector jellyfish drifting through dark water, trailing cyan and magenta tentacles past seaweed and soft bokeh lights.

VectorJellyfish

A glowing vector jellyfish drifting through a canvas scene. Its tentacles are verlet-integrated ropes with distance constraints that drape on the seabed, the seaweed branches fractally, and bokeh, orbs and a translucent bell shell add depth. Everything is drawn in 2D canvas by small single-purpose systems, inside an Angular 21 component.

AngularTypeScriptCanvasVerlet physicsProcedural animation
Ra
A radial menu opened from a red centre button, with Media, Settings, Profile and Stats branching out and Music, Video and Photos beyond Media.

RadialMenu

A radial navigation menu of any depth. A recursive tree is flattened into rings that fan out around each parent, laid out with polar coordinates, and CSS transitions glide every item out from under its parent and back. It’s a standalone Angular 21 component driven by an input tree, emitting the chosen leaf as an output event.

AngularTypeScriptCSS transitionsRecursionUI
Di
Six coral diamond-shaped panels numbered 1 to 6 in a grid, each with a black facet and a red edge that make it look like a raised 3D tile.

DiamondMenu

A menu of tilted, extruded diamond panels that settle flat on hover or keyboard focus. Ported from a CodePen (Pug and SCSS) to React 19, TypeScript and Vite, with the 3D geometry derived from two CSS variables, modern CSS with native nesting and relative colour, a labelled nav landmark, and reduced-motion support.

TypeScriptReactSCSSViteAccessibility
Bo
A white login box on a coral background, expanded to show a username or email field with an arrow button to go to the next step.

BoxyLogin

A login form that grows out of a single box, one step at a time: username, password, then remember me. Ported from legacy jQuery to React 19 and TypeScript as a small state machine with an async credential check, a shake on failure, and confetti that bursts from the caret as you type. Built with Vite and tested with Vitest.

TypeScriptReactSCSSViteVitest
Si
SimpleCart’s Demo Store product grid, with product photos, prices, and Add to Cart, Favorite and Share buttons.

SimpleCart

A demo store with 40 products, built with Angular 20 standalone components. Filters, sorting, pagination and grid/list view all live in the URL, so every state is linkable. It has lazy-loaded routes, an auth guard, signal-based cart and favorites saved to localStorage, Web Share with a clipboard fallback, and prerendered pages served by Express.

AngularTypeScriptSignalsRoutingSSRExpress
Fl
FleetManager’s Manage Aircraft screen: a filter bar with manufacturer and size-class dropdowns above a table of aircraft types with seats, speed and range, each with Edit and Delete buttons.

FleetManager

An aircraft fleet manager built with Angular 14, reactive forms and RxJS. Aircraft are filtered, sorted and paged on the client over a 202-aircraft mock fleet. Adding a variant checks the whole fleet first, and if another aircraft already owns it the form warns you and offers to jump to that aircraft instead of calling the backend.

AngularTypeScriptReactive FormsRxJSSCSS
Gr
A towering deep-blue wave curling over a yellow sky, its cream foam breaking into hooked, branching claws, with pale mountains and small boats on the sea below, and a vertical "SIMARI" title plate at the left.

GreatWave

A generative homage to Hokusai’s The Great Wave off Kanagawa. The wave, Fuji, boats and paper grain are all drawn in code on a canvas, and the foam is fractal: every claw splits into smaller curling claws, level after level. A looping cycle builds the wave, bursts the foam, then dissolves it, and every cycle draws a different wave. Angular 22, with a controls panel and reduced-motion support.

AngularTypeScriptCanvasFractalsProcedural animationAccessibility
Ne
Looking down a dark, ribbed biomechanical tunnel: strings of black beads with glowing violet nodes cross the walls, and pale, finger-like machinery reaches up from the bottom of the frame.

NecroMorphosis

A Giger-style biomechanical fractal: a WebGL raymarcher flies you down a ribbed, cable-strung tunnel of bone and machinery. Drag to look and scroll to zoom, switch between six presets (Passage Temple, Necronom IV, Birth Machine, Space Jockey, Biomechanoid Hive and Vertebrae Gallery), tune nearly twenty parameters live, and add an optional dark-ambient drone. Angular 22 with Angular Material controls.

AngularTypeScriptWebGLGLSLRaymarchingWeb Audio
Ca
Carousel UI’s overview: a dark page with a pill-shaped top menu, the headline “Stand inside a polygon and turn.” with two buttons, and a mock-up of the interface on the right with round previous and next buttons at the edges.

Carousel UI

AngularTypeScriptSignalsCSS 3DRoutingAccessibility
Pa
Paper UI’s overview: a warm sheet of paper with a typewriter label and the headline “Move through the file, one page at a time.”, a mock-up of the interface held down by a silver paper clip, and a pill-shaped top menu with a tomato-red active item, over a desk of scattered pages.

Paper UI

A navigation through a file of documents: each section is a sheet of paper on a grey desk, and moving between them handles the paper. Eight views of the same content (desk, crumple, burn, fold, stack, pad, files and a plain list), with a second stack of sub-pages beneath Layouts. The address bar is the source of truth, so links, reloads and the back button all land in the right place. Built with Angular 22 signals, with keyboard and swipe controls, ARIA carousel semantics, reduced-motion support and prerendered pages.

AngularTypeScriptSignalsCSS 3DRoutingAccessibility
ch
The portfolio zoomed out: slides hang at different angles and depths across a dark star field, joined by dashed lines to the About slide in the middle.
Case study 01

chrissimari.com

Architectural depth meets spatial web design: how this portfolio became an infinite, zoomable canvas without giving up semantic HTML, keyboard access or performance.

AngularTypeScriptCanvasSignalsAccessibilityPWA
Si
SimaBox on a laptop: a calendar of the month beside today’s daily goals, five of eight ticked and scored, with weekly and monthly goals below.
Case study 02

SimaBox

A family chore and rewards app: goals that unlock on time, points kept as a ledger, a little store, and alerts that reach people even when the app is closed. A private project.

AngularFirebaseSignalsMaterial 3PWAPlaywright
Se

Send a signal

Whether you’re looking to scale an enterprise front end, build out accessible design systems, or tackle complex platform modernization, I’m always open to discussing new engineering opportunities.

Support my work
Drop a note here or connect directly via LinkedIn or email to kick off a conversation. I look forward to hearing what you're building.
Ne

Next experiment…

Have an idea you’d like to bring to life? Tell me what you’re imagining — a prototype, an interface, an experiment — and I’ll write back.

Prefer your own email app? chrissimari@gmail.com

Chris Simarieverything, as a list

About

Chris, bearded and wearing sunglasses and a grey plaid flannel shirt, sitting in the driver’s seat of a car with red seats.

Hi, I’m Chris.

I build User Experiences - A Lead Front-End & UI Architect based in South Portland, Maine. With two decades of experience across enterprise platforms, fintech, and digital products, I build modern web software that balances high-performance architecture with rigorous digital accessibility.

What I focus on

  • Banking & Enterprise Systems: Engineering resilient, secure front ends for financial processing, invoicing platforms, and complex multi-tenant workflows.
  • Front-End Architecture: Scaling applications using Angular, TypeScript, and modern reactive patterns.
  • Engineering Excellence: Introducing automated unit testing frameworks, slashing pipeline bottlenecks, and deprecating technical debt.
  • Digital Inclusivity: Architecting fully semantic, WCAG/ARIA-compliant interfaces that guarantee equal access for every user.

When I’m not architecting banking software, I’m usually experimenting with interactive graphics, procedural shaders, and audio synthesis in Canvas.

  • TypeScript
  • Angular
  • RxJS
  • SCSS
  • SASS
  • Node
  • NPM
  • PWA
  • Accessibility
  • Canvas

Projects

Liquid by day: a low sun glowing over layered mountains above a bright blue lake, with the word “Liquid” typed into the box and its letters splashing into the water and sinking.

liquid

The sun, the moon… waves in between. Type a word and it drops into the water as a floating body that belly-flops, bobs and sinks. The sky comes from real sunrise, sunset and moon-phase maths for your location, the clouds follow live weather from Open-Meteo, and a screen-reader description narrates the scene. Angular 22, signals and layered canvas.

  • Angular
  • TypeScript
  • Canvas
  • Signals
  • Open-Meteo API
  • Accessibility
A glass plasma globe filling the frame, with violet lightning arcing out from its dark centre to the glass.

PlasmaGlobe

An interactive plasma globe on canvas. Lightning is fractal midpoint-displacement, the tentacles are verlet rope physics, and every touch point (multi-touch) pulls an arc toward your finger. Web Audio synthesises the buzz and a windchime that rings as each arc whips past, and arcs can react to your microphone. React 18, Vite and Vitest.

  • JavaScript
  • React
  • Canvas
  • Web Audio
  • Physics
  • Vitest
A glowing vector jellyfish drifting through dark water, trailing cyan and magenta tentacles past seaweed and soft bokeh lights.

VectorJellyfish

A glowing vector jellyfish drifting through a canvas scene. Its tentacles are verlet-integrated ropes with distance constraints that drape on the seabed, the seaweed branches fractally, and bokeh, orbs and a translucent bell shell add depth. Everything is drawn in 2D canvas by small single-purpose systems, inside an Angular 21 component.

  • Angular
  • TypeScript
  • Canvas
  • Verlet physics
  • Procedural animation
A radial menu opened from a red centre button, with Media, Settings, Profile and Stats branching out and Music, Video and Photos beyond Media.

RadialMenu

A radial navigation menu of any depth. A recursive tree is flattened into rings that fan out around each parent, laid out with polar coordinates, and CSS transitions glide every item out from under its parent and back. It’s a standalone Angular 21 component driven by an input tree, emitting the chosen leaf as an output event.

  • Angular
  • TypeScript
  • CSS transitions
  • Recursion
  • UI
Six coral diamond-shaped panels numbered 1 to 6 in a grid, each with a black facet and a red edge that make it look like a raised 3D tile.

DiamondMenu

A menu of tilted, extruded diamond panels that settle flat on hover or keyboard focus. Ported from a CodePen (Pug and SCSS) to React 19, TypeScript and Vite, with the 3D geometry derived from two CSS variables, modern CSS with native nesting and relative colour, a labelled nav landmark, and reduced-motion support.

  • TypeScript
  • React
  • SCSS
  • Vite
  • Accessibility
A white login box on a coral background, expanded to show a username or email field with an arrow button to go to the next step.

BoxyLogin

A login form that grows out of a single box, one step at a time: username, password, then remember me. Ported from legacy jQuery to React 19 and TypeScript as a small state machine with an async credential check, a shake on failure, and confetti that bursts from the caret as you type. Built with Vite and tested with Vitest.

  • TypeScript
  • React
  • SCSS
  • Vite
  • Vitest
SimpleCart’s Demo Store product grid, with product photos, prices, and Add to Cart, Favorite and Share buttons.

SimpleCart

A demo store with 40 products, built with Angular 20 standalone components. Filters, sorting, pagination and grid/list view all live in the URL, so every state is linkable. It has lazy-loaded routes, an auth guard, signal-based cart and favorites saved to localStorage, Web Share with a clipboard fallback, and prerendered pages served by Express.

  • Angular
  • TypeScript
  • Signals
  • Routing
  • SSR
  • Express
FleetManager’s Manage Aircraft screen: a filter bar with manufacturer and size-class dropdowns above a table of aircraft types with seats, speed and range, each with Edit and Delete buttons.

FleetManager

An aircraft fleet manager built with Angular 14, reactive forms and RxJS. Aircraft are filtered, sorted and paged on the client over a 202-aircraft mock fleet. Adding a variant checks the whole fleet first, and if another aircraft already owns it the form warns you and offers to jump to that aircraft instead of calling the backend.

  • Angular
  • TypeScript
  • Reactive Forms
  • RxJS
  • SCSS
A towering deep-blue wave curling over a yellow sky, its cream foam breaking into hooked, branching claws, with pale mountains and small boats on the sea below, and a vertical "SIMARI" title plate at the left.

GreatWave

A generative homage to Hokusai’s The Great Wave off Kanagawa. The wave, Fuji, boats and paper grain are all drawn in code on a canvas, and the foam is fractal: every claw splits into smaller curling claws, level after level. A looping cycle builds the wave, bursts the foam, then dissolves it, and every cycle draws a different wave. Angular 22, with a controls panel and reduced-motion support.

  • Angular
  • TypeScript
  • Canvas
  • Fractals
  • Procedural animation
  • Accessibility
Looking down a dark, ribbed biomechanical tunnel: strings of black beads with glowing violet nodes cross the walls, and pale, finger-like machinery reaches up from the bottom of the frame.

NecroMorphosis

A Giger-style biomechanical fractal: a WebGL raymarcher flies you down a ribbed, cable-strung tunnel of bone and machinery. Drag to look and scroll to zoom, switch between six presets (Passage Temple, Necronom IV, Birth Machine, Space Jockey, Biomechanoid Hive and Vertebrae Gallery), tune nearly twenty parameters live, and add an optional dark-ambient drone. Angular 22 with Angular Material controls.

  • Angular
  • TypeScript
  • WebGL
  • GLSL
  • Raymarching
  • Web Audio
Carousel UI’s overview: a dark page with a pill-shaped top menu, the headline “Stand inside a polygon and turn.” with two buttons, and a mock-up of the interface on the right with round previous and next buttons at the edges.

Carousel UI

A navigation you stand inside: each section is one wall of a polygon and moving between them turns the room. Seven views of the same content (prism, pinwheel, carousel, coverflow, ring, deck and a plain list), with a second ring of sub-panels beneath Layouts. The address bar is the source of truth, so links, reloads and the back button all land in the right place. Built with Angular 22 signals, with keyboard and swipe controls, ARIA carousel semantics, reduced-motion support and prerendered pages.

  • Angular
  • TypeScript
  • Signals
  • CSS 3D
  • Routing
  • Accessibility
Paper UI’s overview: a warm sheet of paper with a typewriter label and the headline “Move through the file, one page at a time.”, a mock-up of the interface held down by a silver paper clip, and a pill-shaped top menu with a tomato-red active item, over a desk of scattered pages.

Paper UI

A navigation through a file of documents: each section is a sheet of paper on a grey desk, and moving between them handles the paper. Eight views of the same content (desk, crumple, burn, fold, stack, pad, files and a plain list), with a second stack of sub-pages beneath Layouts. The address bar is the source of truth, so links, reloads and the back button all land in the right place. Built with Angular 22 signals, with keyboard and swipe controls, ARIA carousel semantics, reduced-motion support and prerendered pages.

  • Angular
  • TypeScript
  • Signals
  • CSS 3D
  • Routing
  • Accessibility

Case Studies

The portfolio zoomed out: slides hang at different angles and depths across a dark star field, joined by dashed lines to the About slide in the middle.

Case study 01

chrissimari.com

Architectural depth meets spatial web design: how this portfolio became an infinite, zoomable canvas without giving up semantic HTML, keyboard access or performance.

  • Angular
  • TypeScript
  • Canvas
  • Signals
  • Accessibility
  • PWA

Architectural depth meets spatial web design

Website
chrissimari.com
Subject
Chris Simari, Lead Front-End & UI Architect / Senior Software Engineer
Domain
Front-end architecture, creative engineering, digital accessibility and enterprise UI systems

Executive summary

A portfolio that is a place, not a page

Most engineering portfolios rely on standard vertical-scrolling cards or templated layouts.

chrissimari.com breaks convention by presenting an interactive, pan-and-zoom spatial canvas, while keeping strict semantic accessibility and progressive enhancement.

A professional CV

For enterprise software engineering.

An interactive sandbox

Showcasing low-level browser APIs: HTML5 2D Canvas, Web Audio and physics engines.

1 · Spatial UI

An infinite, zoomable canvas

At the core of the experience is an infinite, zoomable 2D workspace.

  • ← →: Cycle through projects
  • ↑ ↓: Switch thematic sections
  • + −: Zoom in and out
  • ⇧ arrows: Pan smoothly across the canvas
  • Esc: Return straight to the overview
Infinite canvas navigation

Pan, click-and-drag to roam, and pinch or scroll to zoom across the nodes of the portfolio: Overview, About, Projects, Case Studies and Contact.

Precise zoom HUD

Dynamic zoom feedback (0.77× and counting) with quick-jump selection menus to move between sections.

1 · Spatial UI

Detail that follows the zoom

The canvas isn’t just big, it is layered. What you see depends on how close you are.

Semantic zoom

Each slide fades its detail in continuously as it grows on screen: first the picture and title, then the description, tags and links. Zoomed far out, a slide collapses to a glowing orb.

Depth you can feel

In the overview every slide hangs at its own angle and depth, the same on every visit. As the camera flies toward one it unwinds to exactly flat and lands at native size, the crispest the text can be.

Calm when you pause

After a few idle seconds everything but the slide being read settles back. Any movement brings it straight back, and the whole effect is off for reduced motion or high contrast.

2 · Dual-mode UX

Digital inclusivity, first

A common pitfall of canvas-driven websites is that they break accessibility standards (WCAG) and hinder screen readers. The architecture of chrissimari.com tackles this directly.

Dual view paradigm

Switch at any time between the roaming 2D canvas and an accessible, semantic list view (“everything, as a list”) made for linear reading and screen readers. Its bokeh is always the colour opposite the logo’s dot: violet over yellow, and as the dot turns, so does the water.

Progressive enhancement

Non-JS fallbacks: the site degrades cleanly where JavaScript or hardware-accelerated canvas is disabled or unsupported.

Reduced motion

Interactive animations and canvas shaders have built-in controls and respect the system’s prefers-reduced-motion setting.

Semantic ARIA layering

WCAG and ARIA standards are built into every custom component, so focus states, landmarks and headings are properly exposed to assistive technology.

3 · Featured demos

Creative computation

The portfolio is organised around distinct projects, each running live in the page.

Click to run a demo inside its slide. It stays inert until then, so scrolling and dragging still move the canvas, and only one runs at a time so the whole thing stays smooth.

liquid

An interactive fluid-body simulation: typed words drop into water as floating rigid bodies that bob, splash and sink.

  • Angular
  • TypeScript
  • Signals
  • Layered canvas
  • Open-Meteo API
Web Audio synthesizer

Generative audio that creates micro-soundscapes (wind chimes, hums), coupled with particle arcs that react to cursor velocity and microphone input.

  • React
  • Vite
  • Web Audio API
  • Vitest
Verlet physics & procedural canvas

Lightweight physics engines and procedural animation, run without heavy third-party game bundles.

  • Angular
  • TypeScript
  • Verlet integration
  • 2D canvas
GreatWave

A mathematical fractal wave simulation with a customisable parameters panel and motion-sensitivity toggles.

  • Angular
  • Canvas fractals
  • Procedural shaders

3 · Featured demos

Enterprise patterns, small interactions

The same discipline applied to enterprise state management and to modular UI.

SimpleCart & FleetManager

Deep URL routing that keeps sorting, filtering and view modes in linkable states, and reactive form pipelines.

  • Angular
  • RxJS
  • SSR / Express
  • Deep linking
State-machine micro-interactions

Modular patterns such as the DiamondMenu (recursive tree components) and a modernised, state-machine auth input with caret-based particle effects.

  • React
  • TypeScript
  • SCSS

4 · Technical stack

Engineering philosophy

The site reflects modern front-end best practice.

Reactive state management

Extensive use of Angular Signals and RxJS pipelines for decoupled event streams.

Progressive Web App

A web app manifest, custom app icons and an offline-capable service worker.

Strict type safety & automated testing

TypeScript, Vite and Vitest for deterministic builds and unit-tested interface logic.

  • Angular
  • TypeScript
  • Signals
  • RxJS
  • Canvas
  • Web Audio
  • Vite
  • Vitest
  • SCSS
  • PWA
  • SSR

4 · Engineering decisions

Small decisions, measured

Most of the craft here is in problems you only notice when they are solved.

Crisp text in a 3D scene

Text drawn inside a 3D scene is resampled and measurably softer. So once every slide is flat, the canvas drops its 3D scene entirely. Nothing visibly changes, and the text comes out roughly twice as sharp.

Phones are a different design

A phone starts on the plain list, which reads better than a zoomable canvas at that size. On the canvas, slides get narrower and taller, and a short phone shows a shorter About so it can be larger.

Contrast, even when dimmed

Idle dimming was tuned against the contrast ratio, not by eye: one step lower and a neighbouring slide’s bright button fell below 4.5:1. The dimmed state passes the accessibility checks.

Checked, not assumed

Unit tests cover the camera, the layout maths and the content, and automated axe audits run against the production build, including the offline service worker.

5 · Shipping it

A canvas that behaves like a website

A spatial interface only works if it still behaves like the web: addresses you can share, pages crawlers can read, and failures that fail gracefully.

Real addresses, prerendered

Every slide has its own address (/projects/liquid, /contact…) rendered to static HTML at build time, with its own title, description, canonical link, share cards and structured data. The page then hydrates in the browser.

A custom 404 that is honest

Unknown addresses get a real 404 status and a space-flight 404 page. A returning visitor’s service worker would answer every navigation with the app, so the app spots an unknown address itself and hands over to the same page.

Analytics with consent

Google Tag Manager is not even loaded until the visitor accepts, so nothing is sent to Google before then. Ad signals stay off, a returning visitor’s choice is remembered, and a blocked script can never break the site.

Always up to date

The Projects section follows GitHub: new public repos get a card automatically, hand-written ones take over from them, and a daily rebuild publishes the changes.

Offline-capable

A service worker precaches the app shell so the site works offline after the first visit, and tells you when a newer version is ready.

Edge-hosted contact

Hosted on Cloudflare Workers. The contact form is validated again on the server, drops spam silently, and sends through Resend with the visitor as Reply-To.

Key takeaways

Creative range without giving up rigour

chrissimari.com is an exemplar (if I don’t say so myself 😉) of how a modern web portfolio can show creative capability without sacrificing performance or accessibility.

By packaging enterprise-grade code (SSR, signals, automated testing) alongside exploratory browser APIs (canvas, audio synthesis, physics), the site demonstrates both technical rigour and creative front-end design.

SimaBox on a laptop: a calendar of the month beside today’s daily goals, five of eight ticked and scored, with weekly and monthly goals below.

Case study 02

SimaBox

A family chore and rewards app: goals that unlock on time, points kept as a ledger, a little store, and alerts that reach people even when the app is closed. A private project.

  • Angular
  • Firebase
  • Signals
  • Material 3
  • PWA
  • Playwright

Do great things. Earn points. Get awesome stuff.

Project
simabox
Subject
A family chore and rewards app: a private project, designed and built end to end
Domain
Product design, front-end architecture, Firebase, notifications and automated testing

Executive summary

Chores, turned into a game worth playing

SimaBox is a family chore and good-behavior tracker. A grown-up sets up daily, weekly, monthly and annual goals plus a bonus list; kids check them off to earn points and spend them in a little store.

It is built like a product, not a toy: roles and approvals, a points ledger that can be audited, alerts that arrive with the app closed, and four suites of automated tests.

For kids

A calendar of finished days, a streak, a pie chart of today, goals that unlock at check-in time, and a store to spend points in.

For grown-ups

Edit every list, set who each task is for, approve orders and wishes, adjust points by hand and set the family’s rules.

1 · Made for kids

Bright, quick and rewarding

Kids sign in by tapping their face, and everything they need is on one screen.

Days you can see

A calendar marks each day as all done, some done or none, with a streak counter and a pie chart of today’s progress.

Goals that unlock on time

Weekly goals open on Sunday afternoon, monthly on the last day of the month and annual on December 31, with grace hours and catch-up days the family sets. Future days can’t be ticked off early, even by an admin.

Bonus and “oops” lists

Bonus goals can be checked off any time, some more than once. Grown-ups mark the things that go wrong on an “oops” list, which takes points away.

Celebrations

Confetti and a toast for every point earned, and fireworks when a whole list is finished.

2 · The rewards

An economy you can audit

Points are a ledger, not a number.

Every earn, spend, refund or adjustment is an entry, and a balance is just the sum, so history can’t drift and anything can be traced or undone. Each completion keeps a snapshot of its points, so changing a task’s value never rewrites the past.

More than one kind of point

Sima-Points, Mega-Sima-Points, Ultra-Sima-Points… Each task pays in one type and each store item costs one, so a grandparent’s list can have rewards of its own.

Store, cart and orders

Kids browse, save a wishlist and pick something to save for, with a progress bar. Grown-ups mark orders handed over, or cancel and refund them.

Wishes

Kids suggest new store items, and one click turns a wish into a real one.

3 · Grown-ups in charge

Every list, every rule, adjustable

The admin side is where a family makes SimaBox its own.

Lists

Create, edit, reorder and switch off activities in every list, and give them to everyone, to certain kids or to certain weekdays.

Personal lists

A list just for one kid. Any admin, such as a grandparent, can make one, like “From Grandma”.

By hand when needed

Give or take points with a reason, approve orders and wishes, and set the check-in windows.

4 · Families

Many families, one app

Each family has its own people, lists, points and store.

Start or join

Start a family from the sign-in screen, or ask to join one by name and wait for a grown-up to approve from an Approvals panel.

Roles

Admin, parent or guardian, grandparent and kid, each seeing and changing only what they should.

A family feed

Posts, photos, reactions, comments and high fives, with a parent checking a kid’s post first.

A look of its own

Four colour themes (Ocean, Violet, Forest and Candy), each in light and dark, with the family’s theme set in Settings.

5 · Architecture

No backend lock-in

Components and services only talk to two small interfaces, one for data and one for sign-in.

Two interchangeable backends

A demo mode that keeps everything in the browser, and Firebase Auth with Cloud Firestore. One file chooses between them; moving to another backend means writing one more of each.

Modern Angular

Angular 21 with standalone components, signals and no zone.js, Material 3 for the interface and Bootstrap only for the grid.

Security in the rules

Firestore security rules decide who can read and write what, and they are tested like any other code.

A PWA

Installs to the home screen, works offline, and offers a reload when a new version is ready.

  • Angular 21
  • TypeScript
  • Signals
  • Material 3
  • Firebase Auth
  • Cloud Firestore
  • Cloud Functions
  • Vitest
  • Playwright
  • PWA

6 · Reaching people

Alerts that arrive even when the app is closed

Standard Web Push through the app’s own service worker, with no third-party messaging service.

Join requests

A Cloud Function pushes to approved parents and admins when someone asks to join, throttled and protected against floods.

Orders and wishes

New orders, wishes and “ready” orders reach the right person the moment they happen.

A daily nudge

Kids who turn alerts on get a reminder at 6 PM in the family’s time zone.

7 · Quality

Every change ships with tests

Four suites, so a change in one place can’t quietly break another.

Unit tests

Vitest specs for every service, utility and shared component.

End to end

Playwright smoke tests of every page, on a laptop and on a phone, against the demo backend.

Security rules

The Firestore rules are tested in the emulator, case by case.

The real thing

Real Firebase sign-in, switching between accounts and the rules, end to end in the emulator against a fake project, so the real family’s data is never touched.

Key takeaways

A product, not a prototype

SimaBox brings the same instincts as this site to a very different place: a friendly face for the kids and a careful one for the grown-ups.

A points ledger that can’t drift, roles and approvals, security rules that are tested and alerts that reach people, built so any family can have its own.

Contact

Next experiment…

Have an idea you’d like to bring to life? Tell me what you’re imagining — a prototype, an interface, an experiment — and I’ll write back.

Analytics: off.

Overview of all panels