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
- React 19
- TypeScript
- Vite
- TanStack Query
- TanStack Router
- TanStack Table
- Tailwind CSS
- Headless UI
- Yup
- Vitest
- Storybook
- 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).