The project idea is inspired by McBroken.com made by rashiq.
- View the status of ice machines for McFlurry, McSundae, and milkshake products at McDonald's locations in the US, EU, and Australia.
- Turborepo - Monorepo build system
- Serverless Framework 4.x - AWS Lambda deployment
- Prisma 7.x - ORM with PostgreSQL 17
- Next.js 16 - Frontend framework (App Router + Turbopack)
- React 19 - UI library
- TailwindCSS 4.x - Styling
- Radix UI & shadcn/ui - UI Components
- Mapbox GL - Map rendering
- pnpm 11.x - Package manager
This project uses a monorepo structure managed by Turborepo:
apps/
├── frontend/ # Next.js 16 application - @mcbroken/frosty
├── mcall/ # Serverless: EU region - @mcbroken/mcall
├── mcus/ # Serverless: US region - @mcbroken/mcus
└── mcau/ # Serverless: AU region - @mcbroken/mcau
packages/
├── database/ # Prisma client & schema - @mcbroken/db
├── mclogik/ # Shared business logic - @mcbroken/mclogik
├── eslint-config/ # Shared ESLint config
├── typescript-config/ # Shared TypeScript config
└── serverless-config/ # Shared Serverless config
- Node.js 26.7.0 for local development (see
.nvmrc); managed production runtimes remain on Node.js 24 - pnpm 11.20.0, installed explicitly (
npm install --global pnpm@11.20.0; Node.js 26 does not bundle Corepack) - Docker and Docker Compose for local PostgreSQL
- Tokens: You need to have basic tokens from the McDonald's app to use their API.
- Environment: Copy
.env.distto.envand fill in the required values. - Install: Run
pnpm installto install all dependencies across the monorepo. - Database: Run
docker-compose -f docker-compose.dev.yml up -dto start your local PostgreSQL database. - Generate Prisma Client: Run
pnpm turbo run db:generateto generate the Prisma client.
# Run a specific app
pnpm --filter @mcbroken/frosty dev
# Generate Prisma client (required after schema changes)
pnpm --filter @mcbroken/db db:generate
# Run type checking
pnpm check-types
# Run linting
pnpm lint
# Run tests
pnpm test
# Run the full local CI suite
pnpm verify
# Invoke a serverless function locally
cd apps/mcall
pnpm invoke functionName
pnpm invoke getItemStatus -- --data '{"countryList": ["US"]}'Manual deployments are handled through deploy.yml with the GitHub Actions "Run workflow" button.
- Choose
stagingorproduction - Choose
all,mcall,mcus,mcau, orfrontend - Every deployment runs the full verification suite first
Configure the staging and production GitHub environments with these secrets:
AWS_DEPLOY_ROLE_ARNDATABASE_URLBASIC_TOKEN_EUBASIC_TOKEN_ELBASIC_TOKEN_USBASIC_TOKEN_APKEYMCALL_DEPLOYMENT_BUCKETMCUS_DEPLOYMENT_BUCKETMCAU_DEPLOYMENT_BUCKETSENTRY_DSNSERVERLESS_ACCESS_KEYVERCEL_TOKENVERCEL_ORG_IDVERCEL_PROJECT_IDNEXT_PUBLIC_MAPBOX_KEY
If deployment bucket secrets are omitted, the serverless apps use their existing shared bucket names, such as mcbrokenio-mcall-bucket-dev.
Deployments are manual. The workflow never deploys automatically, and the three production Lambda services must remain deployed in their separate AWS regions because the McDonald's APIs have region-specific IP requirements.
Runtime follow-up (2026-08-07): Move managed production from Node.js 24 to Node.js 26 only after Node.js 26 is LTS and both AWS Lambda and Vercel provide managed support. Update runtime declarations, Node types, build targets, and provider settings together.
For detailed documentation, see the .ai/ directory:
- Project overview and architecture
- Development workflow
- Code patterns and conventions
You can find more information about the APIs here.