sojorn/sojorn_docs/features/posting-and-appreciate-fix.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

1.5 KiB

Posting and Appreciate Issue Fix

Symptoms

  • One account could post and appreciate, another could not.
  • Client showed ClientFailed to fetch with no useful error details.

Root Causes

  1. Missing user_settings rows
    The failing account had no user_settings row, which publish-post relies on when determining TTL defaults. That caused requests to fail silently.

  2. CORS headers missing on edge functions
    The browser blocked responses from publish-post and appreciate, producing a generic ClientFailed to fetch instead of the real error response.

Fixes Applied

1) Backfill user_settings and ensure new users get it

Migration added:

  • Creates user_settings table if missing.
  • Backfills rows for all existing users.
  • Updates handle_new_user trigger to insert a user_settings row.

File: supabase/migrations/20260121_create_user_settings.sql

2) Add CORS headers to edge functions

Both edge functions now return CORS headers for all responses. This prevents the browser from hiding the response body.

Files:

  • supabase/functions/publish-post/index.ts
  • supabase/functions/appreciate/index.ts

Deployment Steps

  1. Apply migrations (includes 20260121_create_user_settings.sql).
  2. Redeploy edge functions:
    • publish-post
    • appreciate

Validation Checklist

  • select * from user_settings where user_id = '<user_id>'; returns a row.
  • Posting succeeds for both accounts.
  • Appreciating posts returns 200 and no browser CORS errors.