# Sojorn Seeding Philosophy ## Core Principle: Honest Onboarding **The Problem:** New users dropped into an empty platform experience confusion, not calm. They don't know what belongs, what tone is expected, or whether anyone else is here. **Traditional Solution (Rejected):** - Create fake user personas - Simulate conversations and arguments - Inflate engagement metrics - Hide that content is from the platform itself **Sojorn Solution (Honest):** - Create clearly labeled official accounts - Post authentic, useful content - Never fake engagement - Never pretend to be real users --- ## What We Seed ### Official Accounts (3) All official accounts are: - Clearly labeled with "SOJORN" badge - Unable to log in (disabled passwords) - Restricted to service role posting only - Transparent in their bios #### 1. @sojorn **Purpose:** Platform transparency and announcements **Content:** - How Sojorn works - Calm velocity explanations - Feature updates - Transparency notes **Tone:** Neutral, factual, direct **Example:** > "Welcome to Sojorn. This is a text-only social platform designed for calm expression. Posts are ranked by calm velocity—genuine appreciation over time, not outrage or virality." #### 2. @sojorn_read **Purpose:** Reading content and prompts **Content:** - Public domain poetry excerpts - Gentle observations about reading - Literary reflections - No attribution debates (handled in metadata) **Tone:** Observational, appreciative **Example:** > "Sometimes a book sits on your shelf for years, and then one Tuesday you pick it up and it feels like it was waiting for exactly this moment." #### 3. @sojorn_write **Purpose:** Writing prompts and reflections **Content:** - Gentle writing invitations - Observational prompts - Seasonal/temporal reflections - No instruction or therapy framing **Tone:** Invitational, present **Example:** > "Write about a small moment that did not need to be shared." --- ## What We Don't Seed ### Never Fake Users - ❌ Create personas ("Sarah from Portland") - ❌ Generate profile pictures - ❌ Simulate follower networks - ❌ Pretend accounts are real people ### Never Fake Engagement - ❌ Auto-like posts - ❌ Generate fake saves - ❌ Create fake comments - ❌ Inflate view counts ### Never Fake Conversations - ❌ Simulate arguments - ❌ Create fake disagreements - ❌ Post as if replying to users - ❌ Generate synthetic dialogue ### Never Hide Origin - ❌ Bury "official" labels - ❌ Use vague language ("community team") - ❌ Suggest content is user-generated - ❌ Imply accounts are volunteers --- ## Content Guidelines ### Acceptable Themes **Observational:** - Weather, light, seasons - Small routines - Reading experiences - Writing reflections **Reflective:** - Quiet gratitude - Neutral observations - Gentle prompts - Present-moment awareness **Educational:** - How Sojorn works - Tone detection explanations - Feature announcements - Transparency notes ### Unacceptable Themes **Performative:** - ❌ Engagement bait ("What do YOU think?") - ❌ Calls to action ("Share this!") - ❌ Virality attempts - ❌ Trending topic chasing **Instructional:** - ❌ Self-improvement commands - ❌ Therapy framing - ❌ Moral instruction - ❌ "Should" language **Divisive:** - ❌ Politics - ❌ Religious preaching - ❌ Persuasion - ❌ Debate provocation --- ## Temporal Distribution ### Backdating Strategy **Goal:** Avoid all content appearing on the same day **Approach:** - Backdate posts naturally over 14 days - Spread across categories evenly - Maintain chronological integrity - Never future-date content **Implementation:** ```sql base_time := NOW() - INTERVAL '14 days'; -- Posts inserted with timestamps from base_time to NOW -- Example: base_time, base_time + 6 hours, base_time + 1 day, etc. ``` **Why 14 Days:** - Long enough to feel natural - Short enough to stay relevant - Creates scrollable history - Avoids "ghost town" feeling ### No Artificial Freshness **We Don't:** - ❌ Constantly bump old posts - ❌ Create "trending" illusions - ❌ Simulate real-time activity - ❌ Post at fake peak hours **We Do:** - ✅ Let old posts age naturally - ✅ Post new official content occasionally - ✅ Maintain honest timestamps - ✅ Accept that some feeds will be quiet --- ## Volume Targets ### Initial Seed (Per Category) **General Discussion:** - Platform explanations: 5 posts - Observations: 10-15 posts - Writing prompts: 10 posts - **Total: ~25 posts** **Quiet Reflections:** - Poetry excerpts: 8-10 posts - Reading reflections: 5 posts - Seasonal observations: 8 posts - **Total: ~20 posts** **Gratitude:** - Gratitude reflections: 5 posts - Writing prompts: 5 posts - **Total: ~10 posts** ### Overall Target **Total Seed Content: ~55 posts** **Why This Number:** - Enough to scroll 2-3 minutes - Not overwhelming - Models tone diversity - Leaves room for user content --- ## UI Treatment (Honest Labeling) ### Official Badge **Design:** ``` [SOJORN] badge in soft blue (AppTheme.info) - 8px font, uppercase - 12% opacity background - Always visible, never hidden ``` **Placement:** - Next to author name - In profile header - On all official posts **Copy:** - Just "SOJORN" (no embellishment) - Not "Verified" (implies endorsement) - Not "Staff" (implies employees) - Not "Official" (too formal) ### No Deceptive Language **Never:** - ❌ "Recommended for you" (implies algorithm knows you) - ❌ "Trending" (fake popularity) - ❌ "Popular" (fake consensus) - ❌ "You might like" (false personalization) **Always:** - ✅ "From Sojorn" (honest origin) - ✅ [SOJORN badge] (clear labeling) - ✅ Bio transparency ("Official Sojorn account") --- ## Feed Weighting (Exit Strategy) ### Problem Official seed content must not dominate forever as user-generated content grows. ### Solution: Gradual Dilution #### Phase 1: Empty Platform (Week 1) - Official posts: 100% of feed - User posts: 0% - **Weighting:** Equal visibility for official posts #### Phase 2: Growing Platform (Week 2-4) - Official posts: 50-80% of feed - User posts: 20-50% - **Weighting:** Begin reducing official post ranking #### Phase 3: Active Platform (Month 2+) - Official posts: 10-30% of feed - User posts: 70-90% - **Weighting:** Official posts ranked lower than user content #### Phase 4: Mature Platform (Month 6+) - Official posts: 0-10% of feed - User posts: 90-100% - **Weighting:** Official posts archived or heavily downranked ### Implementation **Ranking Modifier:** ```typescript if (post.author.is_official) { // Reduce ranking weight based on platform maturity const platformAge = daysSinceFirstUserPost(); const officialPenalty = Math.min(platformAge / 30, 0.7); // Max 70% reduction post.calmVelocity *= (1 - officialPenalty); } ``` **Cap Per Feed Window:** ```typescript // Limit official posts in each feed page const maxOfficialPosts = Math.max(2, Math.floor(pageSize * 0.2)); // 20% or 2, whichever is higher ``` ### Optional Archival **After 6 Months:** - Move oldest official posts to "archived" status - Still accessible via direct link - No longer appear in feeds - Preserves history without clutter --- ## Engagement Integrity ### Rule: No Synthetic Engagement **All Metrics Start at Zero:** ```sql INSERT INTO post_metrics (post_id, like_count, save_count, comment_count, view_count) VALUES (post_id, 0, 0, 0, 0); ``` **Why:** - Faking engagement = lying - Lies erode trust - Trust is Sojorn's only asset - Zero is honest ### Comments Disabled Official accounts **cannot receive comments**: ```sql CREATE POLICY "Official accounts cannot receive comments" ON comments FOR INSERT WITH CHECK ( NOT EXISTS ( SELECT 1 FROM posts p JOIN profiles pr ON pr.id = p.author_id WHERE p.id = post_id AND pr.is_official = true ) ); ``` **Why:** - Official accounts never reply (not real users) - Prevents fake dialogue - No "community manager" persona - Maintains honesty --- ## Content Examples ### ✅ Good Seed Content **@sojorn (Transparency):** > "Your feed has two tabs: Following shows posts from people you follow, chronologically. Sojorn shows posts ranked by calm velocity from everyone. You control which categories you see." **Why:** Factual, useful, transparent **@sojorn_read (Observation):** > "Reading before bed is different than reading in the morning. One settles you down. The other wakes you up in a quiet way." **Why:** Observational, relatable, no instruction **@sojorn_write (Invitation):** > "Write about something ordinary you noticed today." **Why:** Gentle prompt, no pressure, present tense ### ❌ Bad Seed Content **Fake Persona:** > "Hi everyone! I'm Sarah and I just joined Sojorn. What are you all reading?" **Why:** Deceptive, pretends to be real user **Engagement Bait:** > "What's your favorite book? Let me know in the comments!" **Why:** Solicits performance, implies conversation **Moral Instruction:** > "Remember: you should always take time for self-care. Here are 5 ways to practice mindfulness today." **Why:** Preachy, instructional, "should" language --- ## Monitoring & Adjustment ### Monthly Review **Check:** 1. What % of feed is official content? 2. Are official posts still useful? 3. Is user content growing? 4. Should we archive old official posts? ### User Feedback **Listen For:** - "These posts feel fake" → Review tone - "Too much Sojorn content" → Increase penalty - "I don't know what to post" → Add more prompts - "Official accounts are helpful" → Continue --- ## Summary ### What This Accomplishes **For New Users:** - ✅ Never dropped into emptiness - ✅ Immediately see what tone is expected - ✅ Have content to interact with - ✅ Understand "what belongs here" **For Platform:** - ✅ Honest onboarding through presence - ✅ Trust preserved through transparency - ✅ No deception or fake activity - ✅ Gradual transition to user content ### The Commitment **Sojorn will:** - ✅ Always label official content - ✅ Never fake users or engagement - ✅ Reduce official content as platform grows - ✅ Maintain transparency about seeding **Sojorn will never:** - ❌ Create fake personas - ❌ Inflate metrics - ❌ Hide content origin - ❌ Pretend official accounts are users --- ## Implementation Checklist - [ ] Run `seed_official_accounts.sql` (create @sojorn, @sojorn_read, @sojorn_write) - [ ] Run `seed_content.sql` (insert ~55 posts backdated over 14 days) - [ ] Update Profile model with `isOfficial` field - [ ] Add official badge to PostCard UI - [ ] Implement feed weighting for official posts - [ ] Schedule monthly review of official content ratio - [ ] Plan archival after 6 months --- **Philosophy:** Seeding is not deception. It is honest hospitality. **Execution:** Clearly labeled, authentically useful, gradually diluted. **Result:** New users welcomed into calm, not emptiness.