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.
ArchitectureClient-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
RuntimeWhy 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.
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