sojorn/sojorn_docs/legacy/LEGACY_README.md
Patrick Britton 38653f5854 Sojorn Backend Finalization & Cleanup - Complete Migration from Supabase
##  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!
2026-01-30 09:24:31 -06:00

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-image with R2 signing support

Shared logic lives in supabase/functions/_shared/ (tone detection, ranking, validation, R2 signing, etc.).

Getting Started (Local)

  1. Create a local .env with at least:

    • SUPABASE_URL
    • SUPABASE_ANON_KEY
    • API_BASE_URL
  2. Start Supabase and apply migrations:

    supabase start
    supabase db reset
    
  3. Run the Flutter app:

    ./run_dev.ps1
    

    Or run the web build:

    ./run_web.ps1
    
  4. 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.md
  • docs/SETUP.md
  • docs/DEPLOYMENT.md
  • docs/EDGE_FUNCTIONS.md
  • docs/ARCHITECTURE.md
  • docs/DESIGN_SYSTEM.md
  • docs/IMAGE_UPLOAD_IMPLEMENTATION.md

Notes

  • The root .env file is used by run_dev.ps1 and run_web.ps1 to pass --dart-define values into Flutter.
  • The Supabase functions list is reflected in deploy_all_functions.ps1. Update it when adding new functions.

License

To be determined.