sojorn/sojorn_docs/legacy/LEGACY_README.md

3.1 KiB

sojorn

sojorn is a friends-first, consent-first social platform built to foster genuine connections and reduce hostility by design. The project pairs a Flutter client with a Go backend that enforces tone gating, mutual-consent conversations, and trust-aware ranking.

Product Principles

  • Friendliness 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.