Speed Trek
A full-stack web platform for a family-owned gas-station and travel-center brand. One codebase serves customers, employees, and admins, with role-based access, location scoping, and audit logging.
01 Context
The business needed a single platform to serve three audiences: customers (find locations, apply for jobs), employees (onboarding, documents, help), and admins (hiring, HR, daily paperwork, fuel tracking, P&L, payroll, schedules, a document library, audit logging, store analytics, and internal chat). All of it had to respect roles and location scoping, so store managers and corporate staff each saw only what they were allowed to.
02 Constraints
- Budget and timeline had to support a phased rollout rather than a big-bang launch.
- Role-based access and location scoping were non-negotiable for compliance and operations.
- Data and auth had to be reliable and auditable for HR and finance.
03 Key decisions
- Next.js / React: one codebase for the public site and both portals; SSR and static generation where it helped performance and SEO.
- Prisma + PostgreSQL: strong typing and migrations for schema evolution; relational data ready for reporting and future analytics.
- Vercel Blob: simple, scalable file storage for documents and uploads without managing object storage directly.
- Azure / Microsoft Graph: integration with existing identity and org structure for auth and user context.
04 Outcome
The platform is live in production. The public site, employee portal, and admin portal are all in use, with role-based access and location scoping in place. Hiring, HR workflows, document management, and internal tools, including chat and store-level analytics, are delivered inside one application, which reduces context-switching and keeps permissions consistent.
05 What I'd do differently
- Introduce a clearer testing strategy earlier (E2E for critical flows, structured unit tests for business logic) to speed up refactors and onboarding.
- Add structured monitoring and alerting from day one (errors, latency, key actions) instead of layering it on later.
- Document API and data contracts earlier so front-end and back-end could parallelize more smoothly.