---
phase: 01-authentication
plan: 01
type: execute
wave: 1
depends_on: []
files_modified: ["pubspec.yaml", "lib/main.dart", "lib/core/constants/supabase_constants.dart", ".env"]
autonomous: true
user_setup:
- service: supabase
why: "Authentication backend and database"
env_vars:
- name: SUPABASE_URL
source: "Supabase Dashboard → Settings → API → Project URL"
- name: SUPABASE_ANON_KEY
source: "Supabase Dashboard → Settings → API → anon/public key"
dashboard_config:
- task: "Configure redirect URLs for password reset"
location: "Supabase Dashboard → Authentication → URL Configuration"
must_haves:
truths:
- "Flutter project initializes with Supabase client"
- "Environment variables are loaded securely"
- "Supabase connection is established without errors"
artifacts:
- path: "pubspec.yaml"
provides: "Flutter project dependencies"
contains: "supabase_flutter"
- path: "lib/main.dart"
provides: "Supabase initialization"
min_lines: 15
- path: "lib/core/constants/supabase_constants.dart"
provides: "Supabase configuration constants"
min_lines: 10
- path: ".env"
provides: "Environment variables"
contains: "SUPABASE_URL"
key_links:
- from: "lib/main.dart"
to: "Supabase.initialize"
via: "main() function"
pattern: "Supabase\\.initialize"
- from: "lib/core/constants/supabase_constants.dart"
to: ".env"
via: "environment variable loading"
pattern: "String.fromEnvironment|dotenv"
---
Create Flutter project foundation with Supabase integration and secure configuration.
Purpose: Establish the technical foundation required for all authentication features in Sage.
Output: Working Flutter app that can communicate with Supabase backend using secure configuration.
@~/.opencode/get-shit-done/workflows/execute-plan.md
@~/.opencode/get-shit-done/templates/summary.md
@.planning/PROJECT.md
@.planning/ROADMAP.md
@.planning/STATE.md
@.planning/phases/01-authentication/01-RESEARCH.md
Initialize Flutter project with Supabase dependencies
pubspec.yaml
Create Flutter project if it doesn't exist. Add required dependencies to pubspec.yaml:
- supabase_flutter: ^2.12.0
- flutter_dotenv: ^5.1.0
- go_router: ^13.0.0
- riverpod: ^2.5.0
- flutter_secure_storage: ^9.0.0
Run `flutter pub get` to install dependencies.
flutter pub get completes successfully and all dependencies resolve
Flutter project exists with all required Supabase dependencies installed
Create secure Supabase configuration
lib/core/constants/supabase_constants.dart, .env
Create environment configuration:
1. Create .env file with SUPABASE_URL and SUPABASE_ANON_KEY placeholders
2. Create lib/core/constants/supabase_constants.dart that loads environment variables using flutter_dotenv
3. Add .env to .gitignore to prevent committing secrets
4. Provide clear instructions in comments about where to get the values
Constants file should export:
- supabaseUrl
- supabaseAnonKey
Environment variables load correctly without exposing sensitive data in version control
Secure configuration system exists with placeholder values ready for user setup
Initialize Supabase in main.dart
lib/main.dart
Update lib/main.dart to:
1. Import required packages (supabase_flutter, flutter_dotenv)
2. Load environment variables using dotenv.load()
3. Initialize Supabase in main() before runApp()
4. Use SharedPreferencesLocalStorage for session persistence (default, secure enough for v1)
5. Handle initialization errors gracefully
6. Create basic MyApp widget structure
Follow the PKCE flow pattern from research.
flutter run starts without Supabase initialization errors
Flutter app initializes Supabase client successfully on startup
1. Flutter project runs without errors (`flutter run`)
2. Supabase client initializes without throwing exceptions
3. Environment variables are loaded securely (not hardcoded)
4. Project structure follows recommended architecture from research
Flutter app starts successfully, Supabase client is initialized and ready to handle authentication operations, and configuration is secure and maintainable.