# Sojorn - Quick Start Guide

## Step 1: Inject Test Data

Before running the app, you'll want some content to view. Run this SQL in your Supabase SQL Editor:

### 1.1 First, create a test user account

You can do this two ways:

**Option A: Via the Flutter app**
```bash
cd sojorn_app
flutter run -d chrome
```
Then sign up with any email/password.

**Option B: Via Supabase Dashboard**
1. Go to https://app.supabase.com/project/zwkihedetedlatyvplyz/auth/users
2. Click "Add user" → "Create new user"
3. Enter email and password
4. Then call the signup Edge Function to create the profile (see below)

### 1.2 Create a profile for the user

If you created the user via Dashboard, call the signup function:

```bash
curl -X POST "https://zwkihedetedlatyvplyz.supabase.co/functions/v1/signup" \
  -H "Authorization: Bearer YOUR_USER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "handle": "sojorn_poet",
    "display_name": "Sojorn Poet",
    "bio": "Sharing thoughtful words for a connected world"
  }'
```

### 1.3 Inject the poetry posts

Go to https://app.supabase.com/project/zwkihedetedlatyvplyz/sql/new

Paste the contents of `supabase/seed/seed_test_posts.sql` and run it.

This will inject 20 beautiful, thoughtful posts with poetry and wisdom.

---

## Step 2: Disable Email Confirmation (For Development)

1. Go to https://app.supabase.com/project/zwkihedetedlatyvplyz/auth/providers
2. Click on "Email" provider
3. Toggle **OFF** "Confirm email"
4. Click "Save"

This allows immediate sign-in during development.

---

## Step 3: Run the Flutter App

```bash
cd sojorn_app
flutter pub get
flutter run -d chrome
```

Or for mobile:
```bash
flutter run -d android
# or
flutter run -d ios
```

---

## Step 4: Test the Flow

### 4.1 Sign Up
1. Click "Create an account"
2. Enter email/password
3. Create your profile (handle, display name, bio)
4. You'll be redirected to the home screen

### 4.2 View Feeds
- **Following** tab: Will be empty until you follow someone
- **Sojorn** tab: Shows all posts ranked by authentic engagement
- **Profile** tab: Shows your profile, trust tier, and posting limits

### 4.3 Create a Post
1. Tap the floating (+) button
2. Select a category
3. Write your post (500 char max)
4. Tap "Publish"
5. Tone detection will analyze and either accept or reject

### 4.4 Check Your Profile
- View your trust tier (starts at "New")
- See daily posting limit (3/day for new users)
- View harmony score (starts at 50)

---

## Common Issues & Fixes

### Issue: "Failed to get profile"

**Cause**: Profile wasn't created after signup

**Fix**:
```sql
-- Check if profile exists
SELECT * FROM profiles WHERE id = 'YOUR_USER_ID';

-- If missing, the signup Edge Function didn't run
-- You can manually insert:
INSERT INTO profiles (id, handle, display_name, bio)
VALUES ('YOUR_USER_ID', 'your_handle', 'Your Name', 'Bio here');

-- Also create trust_state:
INSERT INTO trust_state (user_id)
VALUES ('YOUR_USER_ID');
```

### Issue: "Error loading categories"

**Cause**: Categories table is empty

**Fix**:
```bash
# Run the category seed:
cd supabase
cat seed/seed_categories.sql | # paste into SQL Editor
```

### Issue: Posts not showing in feed

**Cause**: No posts exist or RLS is blocking

**Fix**:
```sql
-- Check if posts exist:
SELECT COUNT(*) FROM posts WHERE status = 'active';

-- Check if you can see them:
SELECT * FROM posts WHERE status = 'active' LIMIT 5;

-- If posts exist but RLS blocks, check:
SELECT * FROM categories;
-- Make sure 'general' category exists and is not default_off
```

### Issue: Can't publish posts - "Please select a category"

**Cause**: Categories aren't loading

**Fix**:
1. Open browser dev tools (F12)
2. Check Network tab for errors
3. Verify categories table has data:
```sql
SELECT * FROM categories ORDER BY name;
```

### Issue: Post rejected with "Sharp speech"

**Cause**: Tone detection flagged the content

**Fix**: This is working as intended! Try softer language:
- ❌ "This is stupid and wrong!"
- ✅ "I respectfully disagree with this approach."

---

## Next Steps

### Add More Users
1. Sign up multiple accounts
2. Follow each other
3. Test mutual-follow commenting
4. Test blocking

### Test Edge Functions Directly

```bash
# Get your auth token:
# Sign in to the app, then in browser dev tools:
localStorage.getItem('supabase.auth.token')

export TOKEN="your_token_here"

# Test profile:
curl "https://zwkihedetedlatyvplyz.supabase.co/functions/v1/profile" \
  -H "Authorization: Bearer $TOKEN"

# Test feed:
curl "https://zwkihedetedlatyvplyz.supabase.co/functions/v1/feed-sojorn" \
  -H "Authorization: Bearer $TOKEN"

# Test posting:
curl -X POST "https://zwkihedetedlatyvplyz.supabase.co/functions/v1/publish-post" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "category_id": "CATEGORY_UUID",
    "body": "A thoughtful, engaging post."
  }'
```

### Test Tone Detection

Try posting these to see how tone detection works:

**Will be accepted (CIS 1.0):**
- "I'm grateful for this moment."
- "Sometimes the most productive thing you can do is rest."
- "Growth is uncomfortable because you've never been here before."

**Will be accepted (CIS 0.9-0.95):**
- "I disagree with that approach, but I understand the reasoning."
- "This is challenging, but we can work through it."

**Will be rejected:**
- "This is stupid and you're an idiot!"
- "What the hell were you thinking?"
- Any profanity or aggressive language

---

## Checking Logs

### View Edge Function Logs
https://app.supabase.com/project/zwkihedetedlatyvplyz/logs/edge-functions

### View Database Logs
https://app.supabase.com/project/zwkihedetedlatyvplyz/logs/postgres-logs

### View Auth Logs
https://app.supabase.com/project/zwkihedetedlatyvplyz/logs/auth-logs

---

## Development Workflow

1. **Make backend changes**: Edit Edge Functions in `supabase/functions/`
2. **Deploy**: `npx supabase functions deploy FUNCTION_NAME`
3. **Test**: Use curl or the Flutter app
4. **Make frontend changes**: Edit Flutter code in `sojorn_app/lib/`
5. **Hot reload**: Press `r` in the Flutter terminal
6. **Full restart**: Press `R` in the Flutter terminal

---

## Production Checklist

Before going live:

- [ ] Enable email confirmation
- [ ] Set up custom domain
- [ ] Configure email templates with friendly copy
- [ ] Set up SMTP for transactional emails
- [ ] Enable RLS on all tables (already done)
- [ ] Set up monitoring and alerts
- [ ] Schedule harmony cron job
- [ ] Create admin dashboard for report review
- [ ] Write transparency pages ("How Reach Works")
- [ ] Set up error tracking (Sentry)
- [ ] Configure rate limiting
- [ ] Set up CDN for assets

---

**You're all set! Enjoy building Sojorn - a friendly corner of the internet.**
