Vanilla HTML, CSS, and JavaScript implementation of the Frontend Mentor Personal finance app premium challenge — a multi-page dashboard for overview, transactions, budgets, savings pots, recurring bills, plus extended credit cards, settings, and other features described under Additional pages & features below.
Live site: https://dextervorbe.github.io/personal-finance-app/
You need Node.js (includes npm) so the static server can serve data.json — browsers block fetch() from file://, so open the app over HTTP.
-
Clone the repository and enter the project folder:
git clone <your-fork-or-repo-url>.git cd personal-finance-app
-
Install is optional —
npm startusesnpxto runserveon demand. Start the dev server from the repository root (whereindex.htmllives):npm start
-
Open the URL shown in the terminal (default http://localhost:3000).
Equivalent: npx serve . from the same directory.
Avoid: serving a non-existent subfolder (for example an old starter-code path) — GET / will 404. Always serve the folder that contains index.html, assets/, css/, js/, and data.json.
- Flat layout: App files live at the repo root (
*.html,assets/,css/,js/,data.json) instead of inside astarter-code/subdirectory. package.jsonwith astartscript that runsnpx --yes serve .so there is one consistent command to run the site.AGENTS.md/CLAUDE.md— Frontend Mentor’s guidance for AI-assisted workflows (unchanged intent).
Full brief, designs, and submission guidance live on Frontend Mentor. The published user stories focus on overview, transactions, budgets, pots, and recurring bills (plus accessibility and responsive behavior). FM also lists optional bonuses (e.g. full-stack persistence, authentication). This implementation meets the core expectations and adds the extras below.
Design assets belong to the challenge purchase — do not commit or publish Figma/Sketch/XD files; keep using the provided .gitignore rules.
These are not spelled out in the main Frontend Mentor “users should be able to…” list for this challenge; they were added in this repo.
Pages
- Credit cards (
credit-cards.html) — multi-card accounts, per-card activity (search, sort, filter, month grouping), add/edit/delete cards, and card-scoped transaction handling with client-side persistence (e.g.localStorage) layered ondata.json. - Settings (
settings.html) — manage custom transaction categories (name + color), stored in the browser; they appear alongside the default categories anywhere you pick a category.
App-wide UX
- Light / dark theme — toggle in the sidebar, choice persisted (
localStorage) and applied on load viatheme-init.js/theme.js. - Collapsible sidebar — “minimize menu” for a compact nav strip.
Data & presentation helpers
- Budget year navigation — year picker / extended calendar range on budgets (
budget-year-picker.js), not only a single fixed month. - Category accents — consistent colors for default categories and user-defined ones (
category-accent.js,user-categories.js). - Ledger balance — shared helper for net balance from transactions + opening balance (
ledger-balance.js) on overview.
- Login / signup — Add dedicated auth pages and gate the app behind sign-in.
- Backend + database — Wire the frontend to a real API and persist data in a database, replacing
localStorageand staticdata.jsonas the source of truth. - React — Migrate the UI to React to consolidate duplicated markup and scripts into components and shared state, shrinking and simplifying the codebase.
- Live demo (GitHub Pages)
- Frontend Mentor — submit solutions
- Suggested hosts (GitHub Pages, Vercel, Netlify, etc.)
Challenge copyright © Frontend Mentor. This implementation is personal portfolio / learning work.