sojorn/sojorn_docs/philosophy/SEEDING_PHILOSOPHY.md

11 KiB

Sojorn Seeding Philosophy

Core Principle: Honest Onboarding

The Problem: New users dropped into an empty platform experience confusion, not connection. 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
  • Community guidelines
  • Feature updates
  • Transparency notes

Tone: Neutral, factual, direct

Example:

"Welcome to Sojorn. This is a friends-first social platform designed for genuine connections. Posts are ranked by authentic engagement—real 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:

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:

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.engagementScore *= (1 - officialPenalty);
}

Cap Per Feed Window:

// 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:

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:

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 authentic engagement 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 connection, not emptiness.