Private repository — The source code is company property and is not publicly available. All data shown in the screenshots is fictional and for illustrative purposes only.
Summary
The Rodrigues Denoni Engenharia ERP was built to digitize and centralize the full operation of a civil engineering firm — from financial management to on-site construction tracking. The system covers everything from client, supplier and employee registration to contract management, service orders, fleet maintenance and payroll, replacing fragmented manual processes with an integrated platform accessible from any device.
The Challenge
The firm operated with scattered spreadsheets, informal communication and no centralized visibility into field activities or finances. Engineers logged construction progress in notebooks, employee hours were tracked manually, bank statements had to be reconciled by hand, and clients had no way to follow the status of their projects. Each department worked in isolation, leading to rework, inconsistencies and poor decision-making.
The Solution
I built a complete ERP with a Python (FastAPI) back-end and a React + TypeScript front-end, fully containerized with Docker. The architecture was designed to cover all operational workflows in a single system, with role-based access control (admin, engineer, client) and a responsive interface that works on both desktop and mobile for field use.
Features
Finance
- Revenue and expense tracking with categorization and full history
- Bank reconciliation via OFX statement import
- Financial report generation with PDF export
Finance module — entries, bank reconciliation and reports
Construction & contracts
- Contract management with schedules, status tracking and change history
- Construction diary: log daily activities, incidents and photos directly from a mobile device on-site
- Project completion records with milestone tracking and documentation
Construction diary — logging activities and incidents from a mobile device on-site
Construction & contracts — schedules, status tracking and milestone completion
Clients & suppliers
- Full registration of clients, suppliers and employees
- Client portal: real-time tracking of service orders, construction progress and pending payments
Fleet & incidents
- Preventive and corrective vehicle maintenance control
- Incident and claim tracking with history and documentation
Fleet & incidents — vehicle maintenance control and incident records
Workforce & payroll
- Employee time and attendance tracking
- Automatic payroll spreadsheet generation based on logged hours
Time tracking — attendance control and payroll spreadsheet generation
Stack
Back-end
| Technology | Purpose |
|---|---|
| FastAPI | Async web framework |
| SQLAlchemy | ORM |
| PostgreSQL | Relational database |
| Alembic | Database migrations |
| Pydantic | Data validation |
| JWT + bcrypt | Authentication & password hashing |
| ofxparse | OFX bank statement parser |
| boto3 | AWS S3 / MinIO integration |
| pytest | Automated testing |
Front-end
| Technology | Purpose |
|---|---|
| React + TypeScript | Typed, scalable UI |
| TanStack Router | Type-safe routing |
| TanStack Query | Server state & caching |
| React Hook Form + Zod | Form handling & validation |
| Tailwind CSS | Utility-first styling |
| shadcn/ui + Radix UI | Accessible components (WCAG 2.1 AA) |
| Recharts | Charts & dashboards |
| jsPDF | PDF generation |
| Axios | HTTP client |
| Vite | Build tool & dev server |
Infrastructure
| Service | Purpose |
|---|---|
| Docker + Docker Compose | Containerization |
| Nginx | Reverse proxy & SPA fallback |
| MinIO | S3-compatible storage (development) |
| Backblaze B2 | Image and document bucket storage (production) |
| Railway | Production hosting |
Architecture
The project follows Clean Architecture on the back-end, with a clear separation of responsibilities:
HTTP Request
↓
routers/ ← receives and validates input
↓
services/ ← business logic and rules
↓
models/ ← database access (SQLAlchemy)
↓
PostgreSQL
Project Structure
rodrigues-denoni-engenharia/
├── backend/
│ ├── app/
│ │ ├── routers/ # API endpoints (17 modules)
│ │ ├── services/ # Business logic
│ │ ├── models/ # SQLAlchemy models (21 entities)
│ │ ├── schemas/ # Pydantic schemas
│ │ ├── dependencies/ # Dependency injection (auth, permissions)
│ │ ├── core/ # Database, rate limiting
│ │ └── utils/ # Helper functions
│ └── alembic/ # Database migrations
│
├── frontend/
│ └── src/
│ ├── routes/ # Pages (TanStack Router)
│ ├── components/
│ │ └── ui/ # shadcn/ui (24+ components)
│ ├── lib/ # Queries, utils, pdf-generator
│ ├── hooks/ # Custom hooks
│ └── contexts/ # AuthContext
│
├── nginx/ # Dev and production configs
├── docker/ # Docker Compose
├── docs/ # Technical documentation
└── scripts/ # Backup and maintenance scripts
Development
On the back-end, code is organized into layers: routers for input and validation, services for business rules, models for database access and schemas for Pydantic data contracts. Automated tests with pytest ensure stability.
On the front-end, the interface consumes endpoints via Axios with smart caching by TanStack Query. Forms with Zod validation, visual feedback and a focus on usability complete the experience.
Results
After launch, the system delivered concrete gains:
- Centralized financial management, eliminating scattered spreadsheets and reducing data entry errors
- Real-time contract and deadline tracking with a detailed history
- Significant reduction in time spent on repetitive tasks
- Greater transparency between teams, making the workflow more agile and reliable
- CI/CD pipeline with Docker ensuring fast and reproducible deployments
