AlSalt

Personal app

PRIME SALT

Personal project

A personal game for real-life goals: goals become bosses (main, mini, raid), tasks deal damage and earn XP, ranks run E to SS, 7 stats across 5 pillars (Income, Health, Education, Life, Deen), and 4 screens (Tasks, Profile, Vault, Puzzle Board). Runs locally, installs like an app and works offline.

PRIME SALT Tasks screen: the New Task form beside All Tasks, All Bosses and New Boss

A life, fought for.

automated tests in 8 files
79
screens
4
boss types
3
stats
7
pillars
5

The brief

Turn real-life goals into a game I actually want to play every day.

What I built

  • Goals as bosses (main, mini, raid) that tasks damage
  • XP and ranks from E to SS
  • 7 stats across 5 pillars
  • Installs like an app and works offline (service worker)

Three hard problems

  1. Problem Finishing one task can do many things at once: damage a boss, defeat it, cascade into its main boss, and pay XP and levels. Half an update would break the game.

    How I solved it The combat maths is pure: it returns a plan without touching the database, and one database transaction applies the whole plan. A cascade can never loop, because a main boss never cascades.

  2. Problem Bosses expire and the weekly fight is judged by date, but nothing runs in the background to check.

    How I solved it Expiry and the weekly result are worked out lazily, every time the data is read, so the game is always right when you look, with no scheduler at all.

  3. Problem Uploading trophies and media is a classic way into a server.

    How I solved it Every upload goes through one shared check: the extension and the file’s own magic bytes must agree, and the file is saved under a safe generated name.

What I learned

It taught me to make every change all or nothing, and to treat every upload as a possible attack.

The stack

  • Node.js
  • Express 5
  • SQLite (better-sqlite3)
  • multer
  • GSAP
  • Plain HTML, CSS and JS
  • Service worker
  • Web Audio

Proof

The New Boss form: name, type, pillar, deadline, max HP, current HP and weekly task target
A new boss: type, pillar, HP, deadline and a weekly target
The New Inventory Item form: an optional boss, a file and a note
The Vault: a trophy, optionally tied to a boss