## 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!
3.1 KiB
3.1 KiB
sojorn
sojorn is a calm, consent-first social platform built to slow attention and reduce hostility by design. The project pairs a Flutter client with a Supabase backend and Edge Functions that enforce tone gating, mutual-consent conversations, and trust-aware ranking.
Product Principles
- Calm is structural, not performative.
- Hostility is contained; clean content remains visible.
- Exposure is opt-in, filtering is private, and blocking is absolute.
- Conversation requires mutual consent (mutual follow).
- Attention is non-possessive: feeds rotate and trends fade.
- Transparency is a feature: reach rules are explainable.
Tech Stack
- Client: Flutter (mobile + web) in
sojorn_app/ - Backend: Supabase (Postgres, Auth, RLS, Edge Functions) in
supabase/ - Media: Cloudflare R2 signing for uploads/downloads
- Tooling: PowerShell helpers for dev and deployment
What Lives Here
sojorn/
docs/ Architecture, setup, and deployment guides
sojorn_app/ Flutter app (mobile + web)
supabase/ Database + Edge Functions
troubleshooting/ Notes and fixes for common issues
.env Local secrets for dev scripts
run_dev.ps1 Run Flutter app with .env defines (device)
run_web.ps1 Run Flutter app in Chrome with .env defines
deploy_all_functions.ps1 Deploy all Edge Functions to Supabase
import requests.py Standalone API test script
test_r2_credentials.js Quick R2 credential check
Backend Capabilities (Edge Functions)
- Publishing:
publish-post,publish-comment,manage-post - Feeds:
feed-personal,feed-sojorn,trending - Moderation & Trust:
tone-check,report,calculate-harmony - Social Graph:
follow,block,save,appreciate - Profiles & Auth:
signup,profile,profile-posts,delete-account,deactivate-account - Notifications & Beacons:
notifications,create-beacon - Media:
upload-imagewith R2 signing support
Shared logic lives in supabase/functions/_shared/ (tone detection, ranking, validation, R2 signing, etc.).
Getting Started (Local)
-
Create a local
.envwith at least:SUPABASE_URLSUPABASE_ANON_KEYAPI_BASE_URL
-
Start Supabase and apply migrations:
supabase start supabase db reset -
Run the Flutter app:
./run_dev.ps1Or run the web build:
./run_web.ps1 -
Deploy Edge Functions when needed:
./deploy_all_functions.ps1
For detailed setup, seeding, and troubleshooting, see the docs listed below.
Key Docs
docs/QUICK_START.mddocs/SETUP.mddocs/DEPLOYMENT.mddocs/EDGE_FUNCTIONS.mddocs/ARCHITECTURE.mddocs/DESIGN_SYSTEM.mddocs/IMAGE_UPLOAD_IMPLEMENTATION.md
Notes
- The root
.envfile is used byrun_dev.ps1andrun_web.ps1to pass--dart-definevalues into Flutter. - The Supabase functions list is reflected in
deploy_all_functions.ps1. Update it when adding new functions.
License
To be determined.