# Project Structure

This is a monorepo-style project with separate backend and frontend applications.

## Expected Organization

```
/
├── backend/                 # TypeScript backend server
│   ├── src/
│   │   ├── scrapers/       # Playwright scraping modules
│   │   ├── api/            # REST endpoints
│   │   ├── websocket/      # WebSocket handlers
│   │   ├── database/       # Prisma/Drizzle schema & migrations
│   │   ├── services/       # Business logic (price index calculation)
│   │   └── utils/          # Shared utilities
│   ├── tests/
│   ├── Dockerfile
│   └── package.json
│
├── flutter_app/            # Flutter cross-platform app
│   ├── lib/
│   │   ├── models/        # Data models (PriceData, PriceAlert)
│   │   ├── providers/     # State management (Provider)
│   │   ├── services/      # API, WebSocket, Storage services
│   │   ├── screens/       # UI screens (HomeScreen)
│   │   ├── widgets/       # Reusable UI components
│   │   └── main.dart      # App entry point
│   ├── assets/            # Images, fonts, etc.
│   ├── .env               # Environment configuration
│   └── pubspec.yaml       # Dependencies
│
├── electron-app/          # Legacy Electron app (deprecated)
│   └── ...                # Kept for reference
│
├── shared/                 # Shared TypeScript types/interfaces
│   └── types/
│
├── .kiro/                  # Kiro AI assistant configuration
│   └── steering/           # Project guidance documents
│
├── PRD.md                  # Product Requirements Document
└── README.md
```

## Architecture Patterns

- **Backend**: Modular service-oriented architecture
  - Scrapers are isolated, containerized services
  - API layer is stateless for horizontal scaling
  - TimescaleDB handles time-series data efficiently

- **Frontend**: Flutter widget-based architecture
  - Provider pattern for state management
  - Service layer for API/WebSocket communication
  - Client-side alert evaluation logic
  - Cross-platform: Windows, macOS, Linux, Android, iOS

- **Database Schema**: Three main tables
  - `raw_vendor_prices`: Individual vendor listings
  - `price_index`: Computed median index values
  - `scrape_log`: Monitoring and debugging

## Key Conventions

- Backend: TypeScript with strict type checking
- Frontend: Dart with null safety
- Scrapers include retry logic (3 attempts) and error handling
- WebSocket auto-reconnect logic in Flutter app
- Signed binaries for all platform distributions
- Flutter: No eval or dynamic code execution (security)
