LunchNSpecials — Portfolio Case Study
portfolio — full-stack web application
LunchNSpecials
Find nearby specials on a map.
A location-aware restaurant discovery platform with an interactive ArcGIS map, a fully operational admin dashboard, a documented Hono/Bun REST API, and Dockerized multi-service deployment.
React
TypeScript
Bun + Hono
MongoDB
ArcGIS Maps SDK
TanStack Router
OpenAPI / Swagger
Docker
JWT Auth
Zod
overview
LunchNSpecials is a production-minded, multi-app platform solving a concrete problem: surfacing nearby lunch, drink, and coffee specials in real time on an interactive map. The system is built as four independent services — a public client, a protected admin dashboard, a typed REST API, and a MongoDB-backed database — all orchestrated through Docker Compose for consistent deployment.
key features
Map-First Discovery
ArcGIS graphics layers with custom markers for lunch, drinks, coffee, partner restaurants, and recently updated listings.
Location & Day Filtering
Coordinate + radius queries combined with day-of-week filtering for contextually relevant specials results.
CSV Import & Export
Admin-facing CSV import workflow with a downloadable sample template and full data export for portability.
Duplicate Detection
Automated duplicate restaurant detection with bulk cleanup tools for ongoing data quality management.
Analytics Dashboard
Tracks total visitors, unique visitors, total restaurants, and top-viewed listing via middleware-level instrumentation.
OpenAPI Docs
Auto-generated API documentation via @hono/zod-openapi with both Swagger UI and Scalar reference views.
implementation highlights
01Built a map-first UX using ArcGIS graphics layers, custom marker symbols per category, popup detail loading on demand, and "search this area" / "my location" interaction patterns.
02Designed the admin dashboard to support real operational workflows — not just CRUD — including CSV import, bulk deletes, duplicate cleanup, legal content management, and logo/settings configuration.
03Used Zod schemas as the single source of truth across API validation and OpenAPI spec generation, keeping contracts typed and documented without manual duplication.
04Instrumented analytics at the middleware level — capturing visitor sessions and per-restaurant engagement without coupling tracking logic to route handlers.
05Containerized all four services (client, admin, API, MongoDB) with Docker Compose and Nginx, including an initialization script for the database on first boot.
local endpoints
Client
localhost:3001
Admin
localhost:3002
API Server
localhost:5001
API Docs (Scalar)
localhost:5001/docs
Swagger UI
localhost:5001/swagger
full tech stack
ReactTypeScriptViteTanStack RouterTanStack QueryTailwind CSSRadix UIReact Hook FormZodAxiosArcGIS Maps SDKLucide ReactBunHonoMongoDBOpenAPISwaggerJWTCSV ParserDockerDocker ComposeNginx
current status