Production Project

LegacyOps

Full-stack construction operations platform built to track and manage construction jobs, machine hours, and maintenance schedules.

React
.NET API
MariaDB
Vercel
Raspberry Pi
Cloudflare Tunnel

Overview

Legacy Ops was built to assist in the management of construction operations by centralizing job-related information into a single system.

My brother came to me with this idea of an application that could help track blue stakes, machine and employee hours, and have a map of job locations ─ all in one place. He initially created a simple prototype interface using AI-generated tools and asked me to help turn the concept into an application he could use for his construction business.

I redesigned the frontend and built the backend API, database integration, authentication system, and deployment infrastructure. What started as a simple idea has grown into a full-stack application with significant potential for future expansion.

The system is currently being deployed with a React frontend hosted on Vercel and a self-hosted .NET backend running on a Raspberry Pi behind a Cloudflare Tunnel.

For now, the application is being used as an internal tool for my brother's business, with plans to eventually support multiple companies.

Features

Machine hour tracking
Maintenance interval monitoring
Operator punch tracking
Job activity logging
Real-time equipment status
Blue stake ticket tracking
JWT authentication
Role-based permissions

Architecture

 Users 
↓
Frontend (React - Vercel)
↓
Cloudflare Tunnel
↓
Backend API (.NET on Raspberry Pi)
↓
MariaDB Database

Legacy Ops follows a client-server architecture designed to separate the frontend interface from the backend business logic and data storage.

The frontend was built using React and Vite to provide a fast and responsive user interface. Tailwind CSS was used to create a consistent and modern UI system.

The backend was developed using ASP.NET Core Web API in C#. The API handles authentication, business logic, data validation, and communication with the database.

MySQL is used to store application data including jobs, employees, equipment usage, time tracking, and other project-related information.

The frontend communicates with the backend through REST API endpoints using JSON requests and responses. This separation allows the frontend and backend to be deployed independently and scaled separately in the future.

This system was designed with modularity in mind so that new features can be added without major restructuring.

Deployment

The frontend application is deployed using Vercel, which provides automatic builds and deployments directly from a GitHub repository. This allows the frontend to be updated quickly with minimal configuration.

The backend API is self-hosted on a Raspberry Pi running Linux, allowing greater control over infrastructure and backend services.

Cloudflare is used for DNS management and HTTPS support. A Cloudflare tunnel securely connects the backend API to the internet without exposing network ports directly. Environment variables are configured separately for both frontend and backend services to securely manage API URLs and sensitive configuration values.

Version control is managed through GitHub, allowing changes to be tracked and deployed through a streamlined workflow.

Screenshots

Screenshot 1
Screenshot 2
Screenshot 3

Challenges & Lessons Learned

  • Deploying .NET applications on Linux
  • Managing services with systemd
  • Using Cloudflare Tunnel securely
  • Handling production CORS configuration
  • Managing environment variables securely
  • Working with MariaDB on Raspberry Pi

Future Roadmap

  • Add support for multiple companies
  • Implement mobile-friendly design
  • Add Report generation features
  • Add support for offline data syncing