sojorn/sojorn_docs/legacy/BACKEND_MIGRATION_RUNBOOK.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

2.2 KiB

Sojorn Migration Runbook: Supabase to Golang VPS

This document outlines the step-by-step process for cutover from Supabase to the self-hosted Golang engine.

Phase 1: Infrastructure Setup

  1. Provision VPS: Ubuntu 22.04 LTS recommended (2 vCPU, 4GB RAM minimum).
  2. Install Dependencies:
    sudo apt update && sudo apt install -y postgresql postgis nginx certbot python3-certbot-nginx
    
  3. Configure Database:
    • Create sojorn database.
    • Enable extensions: uuid-ossp, pg_trgm, postgis.

Phase 2: Data Migration

  1. Export from Supabase:
    • Use pg_dump to export schema and data from your Supabase project.
    • Alternatively, use the Supabase CSV export for specific tables if the schema changes significantly.
  2. Import to VPS:
    psql -h localhost -U youruser -d sojorn -f supabase_dump.sql
    
  3. Run Go Migrations:
    • The Go backend uses golang-migrate. Ensure the version table is synced if you are not starting from scratch.
    make migrate-up
    

Phase 3: Deployment

  1. Clone & Build:
    git clone <your-repo> /opt/sojorn
    cd /opt/sojorn/go-backend
    go build -o bin/api ./cmd/api/main.go
    
  2. Configure Nginx:
    • Set up reverse proxy to port 8080.
    • Configure SSL with Certbot.
  3. Start Systemd Service:
    sudo ./scripts/deploy.sh
    

Phase 4: Cutover (Zero Downtime Strategy)

  1. Parallel Run: Keep both Supabase and Go VPS running.
  2. DNS Update: Point your API subdomain (e.g., api.gosojorn.com) to the new VPS IP.
  3. TTL Check: Ensure DNS TTL is low (e.g., 300s) before starting.
  4. Monitor: Watch logs for 4xx/5xx errors.
    journalctl -u sojorn-api -f
    

Phase 5: Decommission Supabase

  1. Once traffic has fully shifted and no errors are reported, you can disable Supabase Edge Functions.
  2. Keep the Supabase project active for a week as a backup database if needed.

Rollback Plan

  1. If critical issues occur on the VPS, point the DNS back to the Supabase Edge Functions URL.
  2. Restore any data written to the VPS back to Supabase if necessary (Dual-write during transition is recommended if possible).