# Recipe Manager - Frontend

React + TypeScript frontend for the Recipe Manager application.

## Tech Stack

- **React 19** - UI framework
- **TypeScript** - Type safety
- **Vite** - Build tool and dev server
- **React Router 7** - Client-side routing

## Development

```bash
# Install dependencies
npm install

# Start dev server (http://localhost:5173)
npm run dev

# Build for production
npm run build

# Preview production build
npm run preview

# Lint code
npm run lint

# Style governance checks (token/primitive drift guardrails)
npm run style:guardrails
npm run style:check
```

## Project Structure

```
src/
├── components/     # Reusable UI components
├── hooks/          # Custom React hooks
├── pages/          # Route pages
├── services/       # API client and business logic
├── types/          # TypeScript interfaces
├── App.tsx         # Root component
└── main.tsx        # Application entry point
```

## Next Steps

- [ ] Configure Tailwind CSS
- [ ] Set up React Router
- [ ] Create recipe list page
- [ ] Create recipe detail/edit page
- [ ] Implement cook mode UI

## Architecture

See `/ARCHITECTURE.md` for full system architecture and patterns.


## Visual Assets + Fallbacks

- Visual asset definitions live in `src/assets/visualAssets.ts`.
- The homepage hero uses a fallback chain: bundled `hero.png` first, then `/images/hero-fallback.svg`.
- Keep fallback assets lightweight (SVG preferred) and store browser-served fallbacks under `public/images/`.
- Any new UI-critical image should follow the same fallback pattern to avoid broken-image regressions in production.

## Styling Guardrails

This frontend uses a token + primitive styling contract.

- Governance doc: `../.harness/docs/styling-governance.md`
- Token contract: `../.harness/docs/styling-token-contract.md`
- Primitive contract: `../.harness/docs/ui-primitive-contract.md`

Use `npm run style:guardrails` before PRs touching app shell/shared UI surfaces.
