Speed Trek
Full-stack web platform for a family-owned gas-station and travel-center brand. Public site, employee portal, and admin: role-based access, location scoping, and audit logging.
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, document library, audit logging, store analytics, internal chat). All of this had to respect roles and location scoping so that store managers and corporate staff saw only what they were allowed to see.
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.
Key decisions
- Next.js / React: One codebase for public site and portals; SSR and static generation where it made sense for performance and SEO.
- Prisma + PostgreSQL: Strong typing and migrations for schema evolution; PostgreSQL for relational data, reporting, and future analytics.
- Vercel Blob: Simple, scalable file storage for documents and uploads without managing object storage ourselves.
- Azure / Microsoft Graph: Integration with existing identity and org structure where needed for auth and user context.
Outcome
The platform is live in production. The public site, employee portal, and admin portal are 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 within the same application, reducing context-switching and keeping permissions consistent.
What I'd do differently
- Introduce a clearer testing strategy earlier (e.g. E2E for critical flows and more 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 that front-end and back-end work could parallelize more smoothly.


