132 lines
2.9 KiB
Markdown
132 lines
2.9 KiB
Markdown
<p align="center">
|
|
<img src="assets/icon/app_icon.png" alt="car64 logo" width="120" />
|
|
</p>
|
|
|
|
<h1 align="center">car64</h1>
|
|
|
|
<p align="center">
|
|
A modern Flutter + Supabase app for tracking and managing die-cast car collections.
|
|
</p>
|
|
|
|
---
|
|
|
|
## Overview
|
|
|
|
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 \
|
|
--dart-define=SUPABASE_URL=https://your-project.supabase.co \
|
|
--dart-define=SUPABASE_ANON_KEY=your_anon_key \
|
|
--dart-define=SUPABASE_USE_PKCE=true
|
|
```
|
|
|
|
## Getting Started
|
|
|
|
1. Install dependencies
|
|
|
|
```bash
|
|
flutter pub get
|
|
```
|
|
|
|
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/backend notes: `TPB.md`
|