## Phase 1: Critical Feature Completion (Beacon Voting) - Add VouchBeacon, ReportBeacon, RemoveBeaconVote methods to PostRepository - Implement beacon voting HTTP handlers with confidence score calculations - Register new beacon routes: /beacons/:id/vouch, /beacons/:id/report, /beacons/:id/vouch (DELETE) - Auto-flag beacons at 5+ reports, confidence scoring (0.5 base + 0.1 per vouch) ## Phase 2: Feed Logic & Post Distribution Integrity - Verify unified feed logic supports all content types (Standard, Quips, Beacons) - Ensure proper distribution: Profile Feed + Main/Home Feed for followers - Beacon Map integration for location-based content - Video content filtering for Quips feed ## Phase 3: The Notification System - Create comprehensive NotificationService with FCM integration - Add CreateNotification method to NotificationRepository - Implement smart deep linking: beacon_map, quip_feed, main_feed - Trigger notifications for beacon interactions and cross-post comments - Push notification logic with proper content type detection ## Phase 4: The Great Supabase Purge - Delete function_proxy.go and remove /functions/:name route - Remove SupabaseURL, SupabaseKey from config.go - Remove SupabaseID field from User model - Clean all Supabase imports and dependencies - Sanitize codebase of legacy Supabase references ## Phase 5: Flutter Frontend Integration - Implement vouchBeacon(), reportBeacon(), removeBeaconVote() in ApiService - Replace TODO delay in video_comments_sheet.dart with actual publishComment call - Fix compilation errors (named parameters, orphaned child properties) - Complete frontend integration with Go API endpoints ## Additional Improvements - Fix compilation errors in threaded_comment_widget.dart (orphaned child property) - Update video_comments_sheet.dart to use proper named parameters - Comprehensive error handling and validation - Production-ready notification system with deep linking ## Migration Status: 100% Complete - Backend: Fully migrated from Supabase to custom Go/Gin API - Frontend: Integrated with new Go endpoints - Notifications: Complete FCM integration with smart routing - Database: Clean of all Supabase dependencies - Features: All functionality preserved and enhanced Ready for VPS deployment and production testing!
281 lines
7.2 KiB
Markdown
281 lines
7.2 KiB
Markdown
# Sojorn Flutter Client
|
|
|
|
A calm, text-only social platform built with Flutter.
|
|
|
|
## Status
|
|
|
|
✅ **Core functionality implemented:**
|
|
- Authentication (sign up, sign in, profile creation)
|
|
- Personal feed (chronological from follows)
|
|
- Sojorn feed (algorithmic FYP with calm velocity)
|
|
- Post creation with tone detection
|
|
- Profile viewing with trust tier display
|
|
- Clean, minimal UI theme
|
|
|
|
🚧 **Features to be added:**
|
|
- Engagement actions (appreciate, save, comment on posts)
|
|
- Profile editing
|
|
- Follow/unfollow functionality
|
|
- Category management (opt-in/out)
|
|
- Block functionality
|
|
- Report content flow
|
|
- Saved posts collection view
|
|
|
|
## Prerequisites
|
|
|
|
- Flutter SDK 3.38.5 or higher
|
|
- Dart 3.10.4 or higher
|
|
- Supabase account with backend deployed (see [../EDGE_FUNCTIONS.md](../EDGE_FUNCTIONS.md))
|
|
|
|
## Setup
|
|
|
|
### 1. Install Dependencies
|
|
|
|
```bash
|
|
cd sojorn
|
|
flutter pub get
|
|
```
|
|
|
|
### 2. Configuration
|
|
|
|
The app is already configured to connect to your Supabase backend:
|
|
|
|
- **URL**: `https://zwkihedetedlatyvplyz.supabase.co`
|
|
- **Anon Key**: Embedded in [lib/config/supabase_config.dart](lib/config/supabase_config.dart)
|
|
|
|
If you need to change these values, edit the config file.
|
|
|
|
### 3. Run the App
|
|
|
|
#### Web
|
|
```bash
|
|
flutter run -d chrome
|
|
```
|
|
|
|
#### Android
|
|
```bash
|
|
flutter run -d android
|
|
```
|
|
|
|
#### iOS
|
|
```bash
|
|
flutter run -d ios
|
|
```
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
lib/
|
|
├── config/
|
|
│ └── supabase_config.dart # Supabase credentials
|
|
├── models/
|
|
│ ├── category.dart # Category and settings models
|
|
│ ├── comment.dart # Comment model
|
|
│ ├── post.dart # Post, tone analysis models
|
|
│ ├── profile.dart # Profile and stats models
|
|
│ ├── trust_state.dart # Trust state model
|
|
│ └── trust_tier.dart # Trust tier enum
|
|
├── providers/
|
|
│ ├── api_provider.dart # API service provider
|
|
│ ├── auth_provider.dart # Auth providers (Riverpod)
|
|
│ └── supabase_provider.dart # Supabase client provider
|
|
├── screens/
|
|
│ ├── auth/
|
|
│ │ ├── auth_gate.dart # Auth state router
|
|
│ │ ├── profile_setup_screen.dart
|
|
│ │ ├── sign_in_screen.dart
|
|
│ │ └── sign_up_screen.dart
|
|
│ ├── compose/
|
|
│ │ └── compose_screen.dart # Post creation
|
|
│ ├── home/
|
|
│ │ ├── feed-personal_screen.dart
|
|
│ │ ├── feed-sojorn_screen.dart
|
|
│ │ └── home_shell.dart # Bottom nav shell
|
|
│ └── profile/
|
|
│ └── profile_screen.dart # User profile view
|
|
├── services/
|
|
│ ├── api_service.dart # Edge Functions client
|
|
│ └── auth_service.dart # Supabase Auth wrapper
|
|
├── theme/
|
|
│ └── app_theme.dart # Calm, minimal theme
|
|
├── widgets/
|
|
│ ├── compose_fab.dart # Floating compose button
|
|
│ └── post_card.dart # Post display widget
|
|
└── main.dart # App entry point
|
|
```
|
|
|
|
## Key Features Implemented
|
|
|
|
### Authentication Flow
|
|
1. User signs up with email/password (Supabase Auth)
|
|
2. Creates profile via `signup` Edge Function
|
|
3. Sets handle (permanent), display name, and bio
|
|
4. Auto-redirects to home on success
|
|
|
|
### Feed System
|
|
- **Personal Feed**: Chronological posts from followed users
|
|
- **Sojorn Feed**: Algorithmic feed using calm velocity ranking
|
|
- Pull-to-refresh on both feeds
|
|
- Infinite scroll with pagination
|
|
|
|
### Post Creation
|
|
- 500 character limit
|
|
- Category selection (currently hardcoded to "general", needs UI)
|
|
- Tone detection at publish time
|
|
- Character count display
|
|
- Calm, intentional UX
|
|
|
|
### Profile Display
|
|
- Shows display name, handle, bio
|
|
- Trust tier badge with harmony score
|
|
- Post/follower/following counts
|
|
- Daily posting limit progress bar
|
|
- Sign out button
|
|
|
|
### Theme
|
|
- Muted, calm color palette
|
|
- Generous spacing
|
|
- Soft borders and shadows
|
|
- Clean typography
|
|
- Trust tier color coding:
|
|
- **New**: Gray (#9E9E9E)
|
|
- **Trusted**: Sage green (#8B9467)
|
|
- **Established**: Blue-gray (#6B7280)
|
|
|
|
## Testing
|
|
|
|
Run widget tests:
|
|
```bash
|
|
flutter test
|
|
```
|
|
|
|
Run analyzer:
|
|
```bash
|
|
flutter analyze
|
|
```
|
|
|
|
## Building for Production
|
|
|
|
### Android APK
|
|
```bash
|
|
flutter build apk --release
|
|
```
|
|
|
|
### iOS
|
|
```bash
|
|
flutter build ios --release
|
|
```
|
|
|
|
### Web
|
|
```bash
|
|
flutter build web --release
|
|
```
|
|
|
|
## Next Steps for Development
|
|
|
|
### High Priority
|
|
1. **Implement engagement actions**
|
|
- Appreciate/unappreciate posts
|
|
- Save/unsave posts
|
|
- Comment on posts (mutual-follow only)
|
|
- Add action buttons to PostCard widget
|
|
|
|
2. **Profile editing**
|
|
- Update display name and bio
|
|
- View/edit category preferences
|
|
|
|
3. **Follow/unfollow**
|
|
- Add follow button to profiles
|
|
- Show follow status
|
|
- Followers/following lists
|
|
|
|
### Medium Priority
|
|
4. **Category management**
|
|
- Category list screen
|
|
- Opt-in/opt-out toggles
|
|
- Filter feeds by category
|
|
|
|
5. **Block functionality**
|
|
- Block users
|
|
- Blocked users list
|
|
- Unblock option
|
|
|
|
6. **Report flow**
|
|
- Report posts, comments, profiles
|
|
- Reason input (10-500 chars)
|
|
|
|
### Nice to Have
|
|
7. **Saved posts collection**
|
|
- View saved posts
|
|
- Organize saved posts
|
|
|
|
8. **Settings screen**
|
|
- Password change
|
|
- Email update
|
|
- Delete account
|
|
|
|
9. **Notifications**
|
|
- New followers
|
|
- Comments on your posts
|
|
- Appreciations
|
|
|
|
10. **Search**
|
|
- Search users by handle
|
|
- Search posts by content
|
|
|
|
## Architecture Notes
|
|
|
|
### State Management
|
|
- **Riverpod** for dependency injection and state management
|
|
- Providers for auth state, API service, Supabase client
|
|
- Local state management in StatefulWidgets for screens
|
|
|
|
### API Communication
|
|
- Custom `ApiService` wrapping Edge Function calls
|
|
- Uses `http` package for HTTP requests
|
|
- All calls require auth token from Supabase session
|
|
- Error handling with user-friendly messages
|
|
|
|
### Navigation
|
|
- Currently using Navigator 1.0 with MaterialPageRoute
|
|
- Future: Consider migrating to go_router for deep linking
|
|
|
|
### Design Philosophy
|
|
- **Calm UI**: Muted colors, generous spacing, minimal animations
|
|
- **Intentional UX**: No infinite feeds, clear posting limits, thoughtful language
|
|
- **Structural boundaries**: Blocking, mutual-follow, category opt-in enforced by backend
|
|
|
|
## Troubleshooting
|
|
|
|
### "Failed to get profile" on sign up
|
|
- Make sure the `signup` Edge Function is deployed
|
|
- Check Supabase logs for errors
|
|
- Verify RLS policies allow profile creation
|
|
|
|
### "Not authenticated" errors
|
|
- Ensure user is signed in
|
|
- Check Supabase session is valid
|
|
- Try signing out and back in
|
|
|
|
### Build errors
|
|
- Run `flutter clean && flutter pub get`
|
|
- Check Flutter version: `flutter --version`
|
|
- Update dependencies: `flutter pub upgrade`
|
|
|
|
## Contributing
|
|
|
|
When adding features:
|
|
1. Match the calm, minimal design language
|
|
2. Use the existing theme constants
|
|
3. Follow the established patterns for API calls
|
|
4. Add error handling and loading states
|
|
5. Test on both mobile and web
|
|
|
|
## Resources
|
|
|
|
- [Flutter Documentation](https://docs.flutter.dev/)
|
|
- [Supabase Flutter SDK](https://supabase.com/docs/reference/dart/introduction)
|
|
- [Riverpod Documentation](https://riverpod.dev/)
|
|
- [Backend Edge Functions](../EDGE_FUNCTIONS.md)
|
|
- [Sojorn Design Philosophy](../README.md)
|