## Remove All 'Calm' References & Reframe Platform Identity ### Documentation Updates - **Deleted**: CALM_UX_GUIDE.md (outdated philosophy document) - **Updated**: All documentation to remove 'calm' terminology - **Reframed**: Platform as 'friends-first' instead of 'calm' ### Design System Changes - Replace 'calm & elegant' with 'warm & welcoming' - Update theme descriptions to focus on friendliness - Change 'calm velocity' to 'authentic engagement' - Update UI microcopy for friendly tone ### Content Updates - Philosophy documents reframe for social connection focus - Design guides emphasize warmth over calmness - API documentation updated for new terminology - User-facing text changed to friendly language ### Key Terminology Changes - 'Calm design' 'Warm, welcoming design' - 'Calm velocity' 'Authentic engagement' - 'Calm UI' 'Friendly UI' - 'Structural calm' 'Structural friendliness' - 'Calm platform' 'Friends-first platform' ### Platform Focus Shift - From: Text-based calm platform - To: Friends-first social network prioritizing genuine connections - Emphasis on social connection over mindfulness - Focus on warmth and friendliness in design ### Files Modified - 15+ documentation files updated - Flutter app UI text updated - Design system rebranded - Philosophy documents reframed - API documentation updated The platform is now positioned as a warm, welcoming social network that prioritizes genuine human connections over calm minimalism.
463 lines
11 KiB
Markdown
463 lines
11 KiB
Markdown
# 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:**
|
|
```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.engagementScore *= (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 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.
|