← Back to case studies
Internal app · Web · Frontend

Centralized budgeting and project management

A central catalog of line items, activities and resources that every project reuses, with an approval flow to change it.

Period
2025–2026 · ~8 months
Team
Mixed front/back
My role
Frontend developer
Industry
Construction & engineering

These projects are under a confidentiality agreement. Client names, code and screenshots are not shown; titles are descriptive.

Context

An internal web app that keeps, in a single repository, the master data a construction and engineering company uses to budget its projects: line items, activities and resources, with sale and cost prices.

It is used by the client company's technical and budgeting teams.

Problem

Budget data was scattered across each project's files, in industry-standard formats. The platform imports them into a central catalog that every project reuses, and controls who can change it through a change request and approval flow.

The main challenge: fine-grained permissions per feature and per project, and the approval flow over shared data.

What I did

  • Full edit-permission module: requests on line items, activities and resources; pending and rejected inboxes; approve, reject, revoke and restore permissions; request history.
  • Permission-based access control in the UI, with protected routes and actions.
  • Data tables with sorting, filters and pagination wired to the API.
  • Forms with validation and confirmation dialogs for unsaved changes.
  • Refactored data hooks to group them by entity, and improved the HTTP client for file uploads.

Decisions

  • Proposed and applied the reorganization of data hooks by entity, to make the project easier to maintain.

Problems solved

  • Keeping the frontend cache in sync after approving or rejecting requests, by invalidating the right queries.
  • Reflecting each user's permissions accurately in the UI.

Architecture

Decoupled SPA with typed file-based routing, an API layer organized by entity, TanStack Query data hooks and a component library documented in Storybook. JWT login.

Stack

Frontend
  • React 19
  • TypeScript
  • Vite
  • TanStack Query
  • TanStack Router
  • TanStack Table
  • Tailwind CSS
  • Headless UI
  • Yup
Testing
  • Vitest
  • Storybook
Tooling
  • Git
  • Docker
  • Nginx
  • ESLint
  • Prettier

Tests

The project had Vitest and Storybook set up for component tests; my test contributions were occasional.

What I learned

Modern React with the TanStack ecosystem (server state, caching, typed routing), permission-driven UI design and AI-assisted development (AI-DLC).