ENGINEERING

Built as a small but serious software system.

The project intentionally stays dependency-light while demonstrating product UX, browser storage, deterministic money calculations, accessible UI patterns, testing and static deployment.

Architecture

Client-side application

Semantic HTML provides the UI, CSS provides the design system, app.js owns state and UI orchestration, and settlement.js contains the isolated finance engine.

Browser UI
   ↓
app.js — state + events
   ↓
settlement.js — deterministic calculations
   ↓
localStorage — workspace persistence
Runtime

Why vanilla JavaScript?

The problem does not require a framework. Keeping the application native makes the state model visible, reduces bundle size and lets the repository demonstrate fundamentals rather than dependency management.

Stack

Technologies

FrontendHTML · CSS · JS
PersistencelocalStorage
HostingGitHub Pages
QualityNode test + CI
Design decisions

What makes it production-minded

Money as paise

Amounts are stored as integer minor units to avoid common floating-point money errors.

Workspace isolation

Members and expenses live inside named workspaces instead of one global session object.

Explicit participant sets

Each expense records who shared it, so a WiFi bill and a dinner can involve different people.

Testing

Settlement scenarios

The test suite covers equal splits, participant-specific expenses, paise remainders, multi-expense balances and deterministic transfer output.

npm test

For the browser app, open the static site through a local web server so ES modules resolve correctly.

Deployment

GitHub Pages + CI

The repository includes a GitHub Actions workflow that runs syntax and settlement checks on pushes and pull requests. GitHub Pages can then serve the static site from the repository.

View repository