A soft, shared coffee ritual for two devices at home.
Find a file
2026-03-09 12:05:55 -04:00
apps =Add_mobile_management_screens_and_Amber_updates 2026-03-09 09:15:02 -04:00
docs =Add_mobile_management_screens_and_Amber_updates 2026-03-09 09:15:02 -04:00
packages/contracts Build cafe MVP scaffold 2026-03-08 18:16:08 -04:00
scripts Enable LAN access workflows for local runtimes 2026-03-08 19:11:50 -04:00
.dockerignore Build cafe MVP scaffold 2026-03-08 18:16:08 -04:00
.editorconfig Build cafe MVP scaffold 2026-03-08 18:16:08 -04:00
.gitignore Build cafe MVP scaffold 2026-03-08 18:16:08 -04:00
AGENTS.md Add mobile README screenshots 2026-03-08 20:19:12 -04:00
docker-compose.yml Build cafe MVP scaffold 2026-03-08 18:16:08 -04:00
openapi.yaml Align v1 docs and OpenAPI around identity, order flow, and inventory safety 2026-03-08 11:55:13 -04:00
package.json Build cafe MVP scaffold 2026-03-08 18:16:08 -04:00
pnpm-lock.yaml Build cafe MVP scaffold 2026-03-08 18:16:08 -04:00
pnpm-workspace.yaml Build cafe MVP scaffold 2026-03-08 18:16:08 -04:00
README.md =Add_mobile_management_screens_and_Amber_updates 2026-03-09 09:15:02 -04:00

Our Cafe

A soft, shared coffee ritual for two devices at home.

Mobile Preview

Welcome Today Recipe Orders Manage Inventory Settings
Mobile welcome screen for Our Cafe Mobile dashboard showing active orders and quick actions Mobile recipe detail page with drink customizations and note input Mobile order queue grouped by status Mobile order queue grouped by status Mobile order queue grouped by status Mobile order queue grouped by status

Screenshots were captured from the seeded local development stack at a phone-sized viewport.

Repo Shape

  • apps/web: Next.js App Router frontend
  • apps/api: FastAPI + SQLModel + SQLite backend
  • packages/contracts: generated TypeScript types from openapi.yaml
  • docs/v1: product, API, UI, and design reference docs

Local Development

Install dependencies:

corepack pnpm install
uv sync --project apps/api --group dev
corepack pnpm contracts:generate

Run the API:

uv run --project apps/api uvicorn our_cafe.main:app --reload --host 0.0.0.0 --port 8000

Run the web app:

corepack pnpm --filter @our-cafe/web dev

Seed the database manually:

uv run --project apps/api our-cafe seed

The API serves on 0.0.0.0:8000 and the web app serves on 0.0.0.0:3000, so other devices on the same LAN can reach the app at http://<your-machine-ip>:3000.

For browser traffic, keep NEXT_PUBLIC_API_URL=/api/v1 so requests stay relative to the web app origin and work from phones or other devices on the network.

Docker

Start both services with:

docker compose up --build

SQLite data is stored under ./data.

Podman on Windows LAN Access

On Windows with Podman machine + WSL, published ports can appear as 0.0.0.0:3000->3000/tcp in podman ps while Windows only binds them on 127.0.0.1. In that case the app works on the host but not from phones on the LAN.

After podman compose up --build, run this from an elevated PowerShell session:

.\scripts\podman-lan-access.ps1

That adds Windows portproxy and firewall rules for ports 3000 and 8000, forwarding LAN traffic to Podman's localhost listeners. Remove those rules later with:

.\scripts\podman-lan-access.ps1 -Action disable

Quality Checks

uv run --project apps/api pytest
corepack pnpm --filter @our-cafe/web test
corepack pnpm --filter @our-cafe/web typecheck
corepack pnpm --filter @our-cafe/web build

Product Notes

The implementation follows the warm, mobile-first MVP described in: