3.1 KiB
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-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.