# PRODUCT_SPEC.md ## Product name placeholder Use a neutral working name in code and UI, such as **GroupHome**. Keep it easy to rename. ## Product thesis Groups remain stuck on WhatsApp-like messengers because switching costs are social, not technical. The product lowers switching costs by making the group itself movable and by making the new home materially better than chat: structured events, files, announcements, member management, tasks, polls, commitments, migration tracking, browser-first access, and no mandatory account on first use. The product must not become a universal inbox. It must become a command center for group life. ## Target users Primary: - sports clubs; - school and parent groups; - tenant associations; - volunteer organizations; - local campaigns and civic groups; - small professional or nonprofit communities. Secondary: - members who belong to several groups and need a unified action view; - admins who want to leave WhatsApp without excluding people. ## Positioning For organizations: > Run your group professionally without forcing members onto WhatsApp. For members: > See what matters across all your groups without reading every chat. For admins: > Announcements, events, files, RSVPs, and members in one place. For anti-lock-in positioning: > Your group should not depend on one company's messenger. ## Required product flows ### Flow A: Admin creates a group and starts migration 1. Admin opens app. 2. Admin creates group with name, description, visibility, and default permissions. 3. Admin adds seed members manually or imports a simple CSV. 4. Admin creates invite link. 5. Admin gets QR-ready URL and WhatsApp reminder copy. 6. Migration dashboard tracks invited/opened/joined/verified/notification-enabled. 7. Admin can mark the WhatsApp channel as legacy and set a transition deadline. ### Flow B: Member joins without login 1. Member taps invite link from WhatsApp/email/SMS/QR. 2. Browser opens join screen. 3. Member sees group preview and official reason for moving. 4. Member enters/accepts display name. 5. Member is assigned a browser session/device. 6. Member can immediately read official updates and perform one useful action, such as RSVP. 7. Member is then nudged to save access via recovery email, passkey-ready protection, or browser notifications. ### Flow C: Multi-group home 1. Anna belongs to FC Kreuzberg U12, Class 4B Parents, Tenant Association, and Food Bank Volunteers. 2. Anna opens Home. 3. Home shows: - missing RSVPs; - open votes; - tasks assigned to Anna; - changed events; - important announcements; - catch-up summary of chatter. 4. Anna does not need to open every group chat. ### Flow D: Multi-device access 1. Anna joined on phone. 2. On PC, Anna opens the app and chooses “Link from existing device.” 3. PC displays code/QR. 4. Phone approves the pending device. 5. PC receives a session. 6. Anna sees both devices in Me → Devices. 7. Anna can revoke a device. ### Flow E: Self-hosted remote aggregation 1. Club runs `club.example` as a group server. 2. Anna's home server is `home.example` or the hosted default. 3. Club server creates a scoped connection token for Anna. 4. Anna connects `club.example` to her home server. 5. Home server syncs structured objects through `/api/sync`. 6. Anna's Home dashboard shows club actions alongside other groups. 7. No group data is replicated peer-to-peer between unrelated servers. ## Top-level navigation Use these nav items: ```text Home Calendar Groups Files Me ``` Chat must not be top-level navigation. ## Home screen details The Home screen must include the following cards/sections: ### Needs me High priority, actionable objects: - RSVP required; - vote required; - task assigned; - file requires acknowledgement; - direct mention; - admin request. Each card must show: - group name; - type badge; - due date/time if any; - primary action button; - source server when remote. ### Today / Upcoming Unified agenda with: - events; - deadlines; - changed locations/times; - RSVP status; - attached file indicators. ### Changed since last visit Examples: - event changed; - new official announcement; - task reassigned; - poll result finalized; - file uploaded. ### Official updates Announcements and admin posts, separated from discussion chatter. ### Catch up Rule-based summary in MVP: ```text While you were away: - 2 official announcements - 1 event changed - 3 open actions - 47 discussion messages ``` Do not require AI to implement catch-up. AI hooks can be future work. ## Group page details Default group dashboard sections: ```text Important now Upcoming Open actions Announcements Files Discussions Members/Admin tools ``` Example for sports team: ```text FC Kreuzberg U12 Parents - Match Saturday, RSVP open - Training moved to Pitch 2 - 3 drivers still needed - Files: Season schedule, Emergency contacts - Discussions: Snacks, Carpool ``` ## Composer behavior When creating group content, allow explicit content types: ```text Announcement Event Task Poll Question/thread File Chat message ``` MVP can implement simple forms for each type. Later AI can suggest structure from natural language; do not block MVP on that. ## Notifications Implement preferences by type, not only by group. User settings: ```text Immediate - direct mentions - event changes - urgent announcements - tasks assigned to me Digest - normal discussions - new files - photos/general chatter Muted - reactions - off-topic chatter ``` UI must make the pitch clear: > Mute the noise, not the group. ## Search and files At MVP level: - global file list; - by-group filter; - simple text search over names/descriptions; - upload/download local files; - show source server for remote files. Later enhancements can include full-text search across messages. ## Migration kit details Admin dashboard should show: ```text 31 invited 24 opened 21 joined 14 enabled notifications 4 verified recovery 7 not reached ``` Generate reminder copy, for example: ```text 23 of 31 people have joined our new group space. The match schedule, RSVP, and files are now here: {link} From {date}, official announcements will only be posted there. ``` WhatsApp export import: - accept `.txt` export; - parse basic lines if format is recognized; - store as archive items; - do not treat imported messages as active verified members; - make archive clearly read-only. ## Self-hosting and aggregation Definitions: - Group server: canonical owner of one or more groups. - Home server: stores a user's personal dashboard config and remote server connections. - Remote server connection: scoped link from a home server to a group server. - Federation: server-to-server peer network. Explicitly not included. V2 self-hosting target: - A server can be self-hosted by an organization. - A user can connect multiple servers to their home profile. - A home server aggregates structured objects. - Servers expose an open, documented, versioned sync API. - Users can export their data/config. ## Copy guidelines Avoid words that create friction: - Avoid “register” as first action. - Avoid “create account” before value. - Avoid “federation” in end-user UI. - Avoid “token” in end-user UI. Use: - “Open group” - “Join this group” - “Save access” - “Protect access” - “Link another device” - “Connect another group server” - “Get updates without WhatsApp” ## What not to build - Do not put chat as the whole product. - Do not require the native app. - Do not bridge or scrape WhatsApp. - Do not make localStorage the source of identity. - Do not force all self-hosted servers into one federation. - Do not hide important state in chronological messages.