docs(readme): redesign with logo, setup, vscode workflows and security notes

This commit is contained in:
Lukas Müllner 2026-03-05 21:32:52 +01:00
parent 214285bb68
commit 7a2a966128

129
README.md
View file

@ -1,20 +1,63 @@
# car64
<p align="center">
<img src="assets/icon/app_icon.png" alt="car64 logo" width="120" />
</p>
car64 is a Flutter + Supabase die-cast collector app with a fast scanning workflow, private photo storage, collaborative collections, and community-based catalog validation.
<h1 align="center">car64</h1>
## Core Features
<p align="center">
A modern Flutter + Supabase app for tracking and managing die-cast car collections.
</p>
- Lightning add flow with barcode/OCR scanning and active collection selection.
- Global catalog (`global_cars`) + personal entries (`hotwheels`) architecture.
- Private storage (`car-images`) with signed URL rendering for collection members.
- In-app photo compression pipeline (target max 1080px and <500 KB uploads).
- Collaborative garages via `collections` + `collection_members`.
- Community validation with `car_votes`, `confirmation_count`, and verification state.
---
## Local Development
## Overview
1. Install Flutter (stable) and run `flutter doctor`.
2. Configure Supabase values via build-time variables (`--dart-define`) — required (no fallback is embedded), for example:
car64 helps collectors scan model IDs, organize personal and shared collections, and keep a clean catalog with community validation/reporting flows.
## Features
- Fast scan workflow (camera OCR + manual entry fallback)
- Multi-collection support with member roles (owner/member/viewer)
- Private image storage with signed URL access
- Collection collaboration and member management
- Community validation and issue reporting for catalog entries
- Profile/settings flows including password updates and report tracking
## Tech Stack
- Flutter (Material 3)
- Supabase (Auth, PostgREST, Storage, RPC)
- Shared Preferences (local settings)
- Google ML Kit Text Recognition (scanner)
## Prerequisites
- Flutter SDK (stable)
- A Supabase project
- For iOS builds: macOS + Xcode
## Configuration
Supabase config is required at runtime/build time (no embedded fallback values).
### Option A: local defines file (recommended)
Use:
- `.env/flutter_defines.json` (local, ignored by git)
- `.env/flutter_defines.example.json` (tracked template)
Expected shape:
```json
{
"SUPABASE_URL": "https://your-project.supabase.co",
"SUPABASE_ANON_KEY": "your_anon_key",
"SUPABASE_USE_PKCE": "true"
}
```
### Option B: direct dart-define flags
```bash
flutter run \
@ -22,24 +65,68 @@ car64 is a Flutter + Supabase die-cast collector app with a fast scanning workfl
--dart-define=SUPABASE_ANON_KEY=your_anon_key \
--dart-define=SUPABASE_USE_PKCE=true
```
3. Install dependencies:
## Getting Started
1. Install dependencies
```bash
flutter pub get
```
4. Run the app:
```bash
flutter run
```
## Quality Check
2. Run analyze
```bash
flutter analyze
```
3. Launch app
```bash
flutter run
```
## VS Code Workflows
### Run / Debug (`launch.json`)
Use **Run and Debug** with:
- `Flutter (Supabase Local - Debug)`
- `Flutter (Supabase Local - Profile)`
- `Flutter (Supabase Local - Release)`
These configurations read:
`--dart-define-from-file=.env/flutter_defines.json`
### Build Tasks (`tasks.json`)
Use **Terminal → Run Task**:
- `Flutter Build APK (Release)`
- `Flutter Build App Bundle (Release)`
- `Flutter Build iOS IPA (Release)`
## Project Structure (high level)
- `lib/screens/` UI screens and flows
- `lib/services/` Supabase integration/services
- `lib/widgets/` reusable UI components
- `lib/utils/` helpers and formatting utilities
- `lib/theme/` app theme and colors
## Security Notes
- Supabase anon keys are intentionally client-side, but RLS and RPC permissions must be strict.
- Sensitive local config files are git-ignored.
- User-facing errors are sanitized and shown via global overlays.
## License
License file is not included in this repository yet.
Add your preferred license in the GitHub repo when ready.
## Reference
- Product and backend requirements: `TPB.md`
- Product/backend notes: `TPB.md`