Files
immish/docs/partners.md

10 KiB

Partners

This document describes the partner sharing functionality.

Partner Overview

Partners allow two-way photo sharing between users:

  • Share your library with another user
  • View photos from users who share with you
  • Optionally include partner photos in your timeline

Partner Types

Shared With (Inbound)

Users who share their photos with you.

  • You can view their photos
  • Cannot modify their photos
  • Can include in your timeline

Shared By (Outbound)

Users you share your photos with.

  • They can view your photos
  • Cannot modify your photos
  • You control the sharing

Partner API

Get Partners Sharing With You

GET /partners?direction=shared-with

Response:
[
  {
    "id": "user-uuid",
    "email": "partner@example.com",
    "name": "Jane Doe",
    "profileImagePath": "/path/to/image",
    "inTimeline": true
  }
]

Get Partners You Share With

GET /partners?direction=shared-by

Response:
[
  {
    "id": "user-uuid",
    "email": "friend@example.com",
    "name": "John Smith",
    "profileImagePath": "/path/to/image",
    "inTimeline": false
  }
]

Add Partner (Share Your Library)

POST /partners/{userId}

Response: Partner user object

Remove Partner

DELETE /partners/{userId}

Update Partner Settings

PUT /partners/{userId}

Body:
{
  "inTimeline": true
}

Partner Screen

Layout

┌─────────────────────────────────────────────────────────────┐
│  ←  Partners                                                │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Sharing with you                                           │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ 👤 Jane Doe                                          │   │
│  │    partner@example.com                               │   │
│  │    Include in timeline: [Toggle: ON]            [>]  │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ 👤 Bob Wilson                                        │   │
│  │    bob@example.com                                   │   │
│  │    Include in timeline: [Toggle: OFF]           [>]  │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  You're sharing with                                        │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ 👤 John Smith                                        │   │
│  │    friend@example.com                       [Remove] │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  [+ Add Partner]                                            │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Adding a Partner

User Selection Screen

┌─────────────────────────────────────────────────────────────┐
│  ←  Select Partner                                          │
├─────────────────────────────────────────────────────────────┤
│  [Search users...]                                          │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Available Users                                            │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ 👤 Alice Johnson                                     │   │
│  │    alice@example.com                                 │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ 👤 Charlie Brown                                     │   │
│  │    charlie@example.com                               │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Available Users API

GET /users

Returns users on the same server who can be added as partners

Partner Detail View

View a partner's photos:

┌─────────────────────────────────────────────────────────────┐
│  ←  Jane Doe's Photos                                       │
├─────────────────────────────────────────────────────────────┤
│  December 2024                                              │
│  ┌─────┬─────┬─────┬─────┐                                 │
│  │     │     │     │     │                                 │
│  │ 📷  │ 📷  │ 🎥  │ 📷  │                                 │
│  │     │     │     │     │                                 │
│  ├─────┼─────┼─────┼─────┤                                 │
│  │     │     │     │     │                                 │
│  │ 📷  │ 📷  │ 📷  │ 🎥  │                                 │
│  │     │     │     │     │                                 │
│  └─────┴─────┴─────┴─────┘                                 │
│  ...                                                        │
└─────────────────────────────────────────────────────────────┘

Getting Partner's Assets

Partner assets are fetched during normal sync and filtered by user ID.

Timeline Integration

Include in Timeline

When inTimeline: true:

  • Partner's photos appear in your main timeline
  • Mixed chronologically with your photos
  • Small avatar indicator shows owner

Multi-User Timeline

Timeline Provider:
  - If single user: Show only your assets
  - If multiple users (partners with inTimeline):
    - Fetch assets for all users
    - Merge and sort chronologically
    - Add user indicator to each asset

Asset Owner Indicator

┌─────┐
│ 📷  │
│  👤 │  ← Small avatar showing partner
└─────┘

Partner Sync

How Partner Assets Sync

  1. Fetch partner list on login
  2. For each partner with inTimeline: true:
    • Fetch their assets via sync API
    • Store in local database with owner ID
  3. Timeline queries include partner assets

Sync Endpoint

GET /sync/full-sync?userId={partnerId}

Or included in normal sync with partner IDs

Privacy Considerations

What Partners Can See

  • Your uploaded photos and videos
  • Metadata (location, date, etc.)
  • Albums you've shared

What Partners Cannot Do

  • Delete your photos
  • Edit your photos
  • See your favorites/archive
  • Access your locked folder

Removing a Partner

Stop Sharing Your Library

  1. Go to Partners screen
  2. Find user in "You're sharing with"
  3. Tap Remove
  4. Confirm removal

Behavior After Removal

  • Partner can no longer see your photos
  • Their local cache may still have thumbnails
  • No data is deleted from your server

Partner vs Album Sharing

Feature Partner Sharing Album Sharing
Scope Entire library Specific album
New photos Automatically included Must add manually
Timeline integration Optional No
Bidirectional Yes (if both share) No
Granular control No Yes (roles)

Previous: Sharing | Next: Activities