Add Node.js/Express backend with PostgreSQL and wire frontend to API

- Server: Express.js with 13 API route files (auth, regulations, contacts,
  calendar, truck stops, bridges, weigh stations, alerts, load board,
  escort locator, orders, documents, contributions)
- Database: PostgreSQL with Prisma ORM, 15 models covering all modules
- Auth: JWT + bcrypt with role-based access control (driver/carrier/escort/admin)
- Geospatial: Haversine distance filtering on truck stops, bridges, escorts
- Seed script: Imports all existing mock data (51 states, contacts, equipment,
  truck stops, bridges, weigh stations, alerts, seasonal restrictions)
- Frontend: All 10 data-driven pages now fetch from /api instead of mock-data.js
- API client (api.js): Compatibility layer that transforms API responses to
  match existing frontend rendering code, minimizing page-level changes

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Daniel Kovalevich
2026-03-30 15:43:27 -04:00
parent 260f7c4928
commit f917fb8014
35 changed files with 4964 additions and 193 deletions

View File

@@ -65,14 +65,16 @@
<div id="main-footer"></div>
<script src="mock-data.js"></script>
<script src="mock-data-extended.js"></script>
<script src="api.js"></script>
<script src="nav.js"></script>
<script>
renderNav('truckstops');
renderBanner();
renderFooter();
(async () => {
const MOCK_TRUCK_STOPS = await PilotEdge.getTruckStops();
// Facility emoji mapping
const facilityIcons = {
fuel: '⛽', food: '🍔', restrooms: '🚻', showers: '🚿',
@@ -235,6 +237,7 @@
// Initialize
initMap();
renderStops(MOCK_TRUCK_STOPS);
})();
</script>
</body>