eutopic/docs/OPEN-QUESTIONS.md

4.3 KiB

OPEN-QUESTIONS.md — eutopic

decision log. open = not yet decided. closed = locked, with resolution noted.


open

priority 0:

  • exact reaction palette (design collab pending)
  • branding + visual identity (design collab pending)
  • RSVP interaction model (deferred, not designed yet)
  • email notification format/timing for RSVPs (deferred)
  • PWA — day one alongside native, or v1.5?
  • DMs — websockets/simple in-app vs matrix vs no DMs ever. decide before v2 launch.
  • social handle platform list expansion (signal + telegram primaries. custom covers edge cases. expand tbd.)
  • server/media migration path — which host migration is least painful for media storage (filesystem → s3-compatible). greenhost/hetzner candidates.
  • which njalla plan tier?
  • comment hearts/likes — do comments get a heart reaction? tension with "no hierarchy" value. deferred.
  • compose — modal sheet over current screen, or full dedicated screen?
  • stories — filters applied at capture time or view time?
  • posters — tag filter UI: tab strip or dropdown?
  • stories access — purely via tab, or also accessible from own profile?

closed

  • no push notifications ever → v1: none. v2: DM notifications only if DMs land. never for feed activity.
  • federation UI → locked off. activitypub via fedify active in stack, flag OFF. UI stays invisible always.
  • reaction model → poster defines up to 5 emoji as their reaction set. open emoji picker always available as fallback. reactions stored as user + post + emoji + timestamp (not counters).
  • bulletin board as separate entityis_event flag on regular posts. event fields: event_date, event_location, event_ends_at. auto-archives 1 day after event_ends_at.
  • event reactions visibility → visible to post author only. no public counts on bulletin board. no class hierarchy.
  • who can post to bulletin board → anyone. filters/subpages handle noise.
  • save/bookmark → optional, toggled by poster at compose time. default off for personal posts.
  • story interaction model → no replies. "witnessed" metadata: private, per-viewer row in story_witness table, expires with story (24h). story author can view flat witness list (like ig). no public count.
  • comments → flat, chronological, on posts only. not on stories.
  • DMs in v1 → not shipping. replaced by display_social_handle user flag. may become vestigial if DMs land in v2.
  • social handle as booleandisplay_social_handle: none | mutuals | all. single field, three states.
  • social handle structure → array of { platform, handle, label?, active }. one entry per platform. label only used for custom platform. active hides without deleting. plus free text contact_prefs ("bad texter", "weekends only" etc).
  • third-party auth / handle linking → rejected. store strings, display them, done.
  • social handle onboarding → opt-in during onboarding. if skipped: "re-enable at any time in settings."
  • bulletin board layout → 2-column grid (FlatList numColumns={2}), infinite scroll, paginated fetch.
  • survey creator → admin only (you). is_admin flag on user record, used only for this.
  • survey format → multiple choice only. separate /feedback subpage always has free text field.
  • survey visibility → dev use only. no results shown to users, no public engagement metrics.
  • survey feature → v1, non-negotiable. community sees product is actively iterated on their feedback.
  • survey delivery → slot 1 in feed as injected card (not a real post). GIF cover image. tapping routes to /feedback where active survey renders above permanent free text field. card drops from slot 1 per-user once they've responded (checks survey_response on feed load). no modal.
  • survey expiry → ephemeral, 36h.
  • bulletin board route + name/posters. scope is broader than events: three post types, single required tag (choose one): event, fundraiser, current affairs.
  • event tags — max count → max 1 tag per poster post. single required tag forces a clear primary classification, reduces compose cognitive load.
  • nav structure → five-slot bottom tab bar: home / posters / compose (center) / stories / stories / profile. stories as dedicated tab, not top strip — intentional destination, not ambient check-in prompt.