407 lines
9.8 KiB
Markdown
407 lines
9.8 KiB
Markdown
# How to Follow (Subscribe to) Fediverse Users in Solar Network
|
|
|
|
## Overview
|
|
|
|
In ActivityPub terminology, "subscribing" to a user is called **"following"**. This guide explains how users in Solar Network can follow users from other federated services (Mastodon, Pleroma, etc.).
|
|
|
|
## User Guide: How to Follow Fediverse Users
|
|
|
|
### Method 1: Via Search (Recommended)
|
|
|
|
1. **Search for the user**:
|
|
- Type their full address in the search bar: `@username@domain.com`
|
|
- Example: `@alice@mastodon.social`
|
|
- Example: `@bob@pleroma.site`
|
|
|
|
2. **View their profile**:
|
|
- Click on the search result
|
|
- You'll see their profile, bio, and recent posts
|
|
|
|
3. **Click "Follow" button**:
|
|
- Solar Network sends a Follow activity to their instance
|
|
- The remote instance will send back an Accept
|
|
- The user now appears in your "Following" list
|
|
|
|
### Method 2: Via Profile URL
|
|
|
|
1. **Visit their profile directly**:
|
|
- If you know their profile URL, visit it directly
|
|
- Example: `https://mastodon.social/@alice`
|
|
|
|
2. **Look for "Follow" button**:
|
|
- Click it to follow
|
|
|
|
3. **Confirm the follow**:
|
|
- Solar Network will send the follow request
|
|
- Wait for acceptance (usually immediate)
|
|
|
|
## What Happens Behind the Scenes
|
|
|
|
### The Follow Flow
|
|
|
|
```
|
|
User clicks "Follow"
|
|
↓
|
|
Solar Network creates Follow Activity
|
|
↓
|
|
Solar Network signs with publisher's private key
|
|
↓
|
|
Solar Network sends to remote user's inbox
|
|
↓
|
|
Remote instance verifies signature
|
|
↓
|
|
Remote instance processes the Follow
|
|
↓
|
|
Remote instance sends Accept Activity back
|
|
↓
|
|
Solar Network receives and processes Accept
|
|
↓
|
|
Relationship is established!
|
|
```
|
|
|
|
### Timeline Integration
|
|
|
|
Once you're following a user:
|
|
- ✅ Their public posts appear in your "Home" timeline
|
|
- ✅ Their posts are federated to your followers
|
|
- ✅ Their likes, replies, and boosts are visible
|
|
- ✅ You can interact with their content
|
|
|
|
## Following Different Types of Accounts
|
|
|
|
### Individual Users
|
|
- **What**: Regular users like you
|
|
- **Example**: `@alice@mastodon.social`
|
|
- **Works**: ✅ Full support
|
|
|
|
### Organizational/Bot Accounts
|
|
- **What**: Groups, bots, or organizations
|
|
- **Example**: `@official@newsbot.site`
|
|
- **Works**: ✅ Full support
|
|
|
|
### Locked Accounts
|
|
- **What**: Users who manually approve followers
|
|
- **Example**: `@private@pleroma.site`
|
|
- **Works**: ✅ Follow request sent, waits for approval
|
|
|
|
## Managing Your Follows
|
|
|
|
### View Who You're Following
|
|
|
|
**API Endpoint**: `GET /api/activitypub/following`
|
|
|
|
**Response Example**:
|
|
```json
|
|
{
|
|
"users": [
|
|
{
|
|
"actorUri": "https://mastodon.social/users/alice",
|
|
"username": "alice",
|
|
"displayName": "Alice Smith",
|
|
"bio": "I love tech and coffee! ☕",
|
|
"avatarUrl": "https://cdn.mastodon.social/avatars/...",
|
|
"followedAt": "2024-01-15T10:30:00Z",
|
|
"isLocal": false,
|
|
"instanceDomain": "mastodon.social"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### Unfollowing Someone
|
|
|
|
**API Endpoint**: `POST /api/activitypub/unfollow`
|
|
|
|
**Request Body**:
|
|
```json
|
|
{
|
|
"targetActorUri": "https://mastodon.social/users/alice"
|
|
}
|
|
```
|
|
|
|
**Response**:
|
|
```json
|
|
{
|
|
"success": true,
|
|
"message": "Unfollowed successfully"
|
|
}
|
|
```
|
|
|
|
## Searching Fediverse Users
|
|
|
|
**API Endpoint**: `GET /api/activitypub/search?query=@username@domain.com`
|
|
|
|
**Response Example**:
|
|
```json
|
|
{
|
|
"users": [
|
|
{
|
|
"actorUri": "https://mastodon.social/users/alice",
|
|
"username": "alice",
|
|
"displayName": "Alice Smith",
|
|
"bio": "Software developer | Mastodon user",
|
|
"avatarUrl": "https://cdn.mastodon.social/avatars/...",
|
|
"isLocal": false,
|
|
"instanceDomain": "mastodon.social"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
## Follow States
|
|
|
|
| State | Meaning | What User Sees |
|
|
|--------|---------|----------------|
|
|
| Pending | Follow request sent, waiting for response | "Following..." (loading) |
|
|
| Accepted | Remote user accepted | "Following" ✓ |
|
|
| Rejected | Remote user declined | "Follow" button available again |
|
|
| Failed | Error occurred | "Error following" message |
|
|
|
|
## Privacy & Visibility
|
|
|
|
### Public Posts
|
|
- ✅ Federate to your followers automatically
|
|
- ✅ Appear in remote instances' timelines
|
|
- ✅ Can be boosted/liked by remote users
|
|
|
|
### Private Posts
|
|
- ❌ Do not federate
|
|
- ❌ Only visible to your local followers
|
|
- ❌ Not sent to remote instances
|
|
|
|
### Unlisted Posts
|
|
- ⚠️ Federate but not in public timelines
|
|
- ⚠️ Only visible to followers
|
|
|
|
## Best Practices for Users
|
|
|
|
### When Following Someone
|
|
|
|
1. **Check their profile first**:
|
|
- Make sure they're who you think they are
|
|
- Read their bio to understand their content
|
|
|
|
2. **Start with a few interactions**:
|
|
- Like a few posts
|
|
- Reply to something interesting
|
|
- Don't overwhelm their timeline
|
|
|
|
3. **Respect their instance's rules**:
|
|
- Each instance has its own guidelines
|
|
- Read community rules before interacting
|
|
|
|
4. **Report spam/harassment**:
|
|
- Use instance blocking features
|
|
- Report to instance admins
|
|
|
|
### Following Across Instances
|
|
|
|
1. **Use their full address**:
|
|
- `@username@instance.com`
|
|
- This helps identify which instance they're on
|
|
|
|
2. **Be aware of instance culture**:
|
|
- Each instance has its own norms
|
|
- Some are more technical, others more casual
|
|
|
|
3. **Check if they're from your instance**:
|
|
- Local users show `isLocal: true`
|
|
- Usually faster interaction
|
|
|
|
## Troubleshooting
|
|
|
|
### "Follow button doesn't work"
|
|
|
|
**Possible Causes**:
|
|
1. User doesn't exist
|
|
2. Instance is down
|
|
3. Network issue
|
|
|
|
**Solutions**:
|
|
1. Verify the user's address is correct
|
|
2. Check if the instance is accessible
|
|
3. Check your internet connection
|
|
4. Try again in a few minutes
|
|
|
|
### "User doesn't appear in Following list"
|
|
|
|
**Possible Causes**:
|
|
1. Follow was rejected
|
|
2. Still waiting for acceptance (locked accounts)
|
|
3. Error in federation
|
|
|
|
**Solutions**:
|
|
1. Check the follow status via API
|
|
2. Try following again
|
|
3. Check if their account is locked
|
|
4. Contact support if issue persists
|
|
|
|
### "Can't find a user"
|
|
|
|
**Possible Causes**:
|
|
1. Wrong username or domain
|
|
2. User doesn't exist
|
|
3. Instance blocking your instance
|
|
|
|
**Solutions**:
|
|
1. Double-check the address
|
|
2. Try searching from a different instance
|
|
3. Contact the user directly for their handle
|
|
|
|
## API Reference
|
|
|
|
### Follow a Remote User
|
|
|
|
**Endpoint**: `POST /api/activitypub/follow`
|
|
|
|
**Request**:
|
|
```json
|
|
{
|
|
"targetActorUri": "https://mastodon.social/users/alice"
|
|
}
|
|
```
|
|
|
|
**Response**: `200 OK`
|
|
```json
|
|
{
|
|
"success": true,
|
|
"message": "Follow request sent. Waiting for acceptance.",
|
|
"targetActorUri": "https://mastodon.social/users/alice"
|
|
}
|
|
```
|
|
|
|
### Get Following List
|
|
|
|
**Endpoint**: `GET /api/activitypub/following?limit=50`
|
|
|
|
**Response**: `200 OK`
|
|
```json
|
|
{
|
|
"users": [
|
|
{
|
|
"actorUri": "https://mastodon.social/users/alice",
|
|
"username": "alice",
|
|
"displayName": "Alice Smith",
|
|
"bio": "...",
|
|
"avatarUrl": "...",
|
|
"followedAt": "2024-01-15T10:30:00Z",
|
|
"isLocal": false,
|
|
"instanceDomain": "mastodon.social"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### Get Followers List
|
|
|
|
**Endpoint**: `GET /api/activitypub/followers?limit=50`
|
|
|
|
**Response**: `200 OK`
|
|
```json
|
|
{
|
|
"users": [
|
|
{
|
|
"actorUri": "https://mastodon.social/users/alice",
|
|
"username": "alice",
|
|
"displayName": "Alice Smith",
|
|
"bio": "...",
|
|
"avatarUrl": "...",
|
|
"isLocal": false,
|
|
"instanceDomain": "mastodon.social"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### Search Users
|
|
|
|
**Endpoint**: `GET /api/activitypub/search?query=alice&limit=20`
|
|
|
|
**Response**: `200 OK`
|
|
```json
|
|
{
|
|
"users": [
|
|
{
|
|
"actorUri": "https://mastodon.social/users/alice",
|
|
"username": "alice",
|
|
"displayName": "Alice Smith",
|
|
"bio": "...",
|
|
"avatarUrl": "...",
|
|
"isLocal": false,
|
|
"instanceDomain": "mastodon.social"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
## What's Different About ActivityPub Following?
|
|
|
|
Unlike traditional social media:
|
|
|
|
| Feature | Traditional Social | ActivityPub |
|
|
|---------|------------------|-------------|
|
|
| Central server | ✅ Yes | ❌ No - federated |
|
|
| All users on same platform | ✅ Yes | ❌ No - multiple platforms |
|
|
| Blocked instances | ❌ No | ✅ Yes - instance blocking |
|
|
| Following across platforms | ❌ No | ✅ Yes - works with Mastodon, Pleroma, etc. |
|
|
| Your data stays on your server | ❌ Maybe | ✅ Yes - you control your data |
|
|
|
|
## User Experience Considerations
|
|
|
|
### Making It Easy
|
|
|
|
1. **Auto-discovery**:
|
|
- When users search for `@username`, suggest `@username@domain.com`
|
|
- Offer to search the fediverse
|
|
|
|
2. **Clear UI feedback**:
|
|
- Show "Follow request sent..."
|
|
- Show "They accepted!" notification
|
|
- Show "Follow request rejected" message
|
|
|
|
3. **Helpful tooltips**:
|
|
- Explain what ActivityPub is
|
|
- Show which instance a user is from
|
|
- Explain locked accounts
|
|
|
|
4. **Profile badges**:
|
|
- Show instance icon/logo
|
|
- Show if user is from same instance
|
|
- Show if user is verified
|
|
|
|
## Examples
|
|
|
|
### Following a Mastodon User
|
|
|
|
**User searches**: `@alice@mastodon.social`
|
|
|
|
**What happens**:
|
|
1. Solar Network fetches Alice's actor profile
|
|
2. Solar Network stores Alice in `fediverse_actors`
|
|
3. Solar Network sends Follow to Alice's inbox
|
|
4. Alice's instance accepts
|
|
5. Solar Network stores relationship in `fediverse_relationships`
|
|
6. Alice's posts now appear in user's timeline
|
|
|
|
### Following a Local User
|
|
|
|
**User searches**: `@bob`
|
|
|
|
**What happens**:
|
|
1. Solar Network finds Bob's publisher
|
|
2. Relationship created locally (no federation needed)
|
|
3. Bob's posts appear in user's timeline immediately
|
|
4. Same as traditional social media following
|
|
|
|
## Summary
|
|
|
|
Following fediverse users in Solar Network:
|
|
|
|
1. **Search by `@username@domain.com`** - Works for any ActivityPub instance
|
|
2. **Click "Follow"** - Sends federated follow request
|
|
3. **Wait for acceptance** - Remote user can approve or auto-accept
|
|
4. **See their posts in your timeline** - Content federates to you
|
|
5. **Interact normally** - Like, reply, boost, etc.
|
|
|
|
All of this is handled automatically by the ActivityPub implementation!
|