2.7 KiB
2.7 KiB
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 listingsprice_index: Computed median index valuesscrape_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)