you are helping design the frontend of eutopic — a photo-first social app for small, invite-only communities. it runs on flutter (dart). it has five main screens: home feed, posters (bulletin board), compose (center tab), stories, and profile. it also has secondary screens for onboarding, settings, and feedback. here's specs:
- **compose** — center slot, filled/distinct treatment. opens compose flow (modal or full screen — TBD)
- **stories** — dedicated tab, not a top strip. intentional destination, not ambient anxiety ring.
- **profile** — own profile. viewing others' profiles navigates within the app but doesn't change the active tab.
stories as a bottom tab (vs instagram-style top strip) is a deliberate choice: it frames stories as something you visit, not something that nags you to check.
---
## screens
### onboarding (unauthenticated)
```
invite gate
└── invite code prefilled from deep link, or entered manually
email + username entry
magic link sent / confirm screen
social handle opt-in
└── signal / telegram / custom. skippable. "re-enable anytime in settings."
follow suggestions
└── friends-of-inviter auto-suggested. skippable.
```
zero technology decisions for the user. no server picker. no handle explanation. no fediverse vocabulary.
---
### feed (`/`)
- chronological. no algorithm. no ranked content.
- posts with 1–10 photos (swipeable within the post card).
- reactions inline below each post.
- comments accessible via tap (flat, chronological thread).
- **survey card** injected at slot 1 when an active survey exists. GIF cover. taps to `/feedback`. disappears per-user once responded. not a real post.
- no unread indicators. no "new posts" banner. pull to refresh is fine.
---
### posters (`/posters`)
formerly "bulletin board". renamed because the scope is broader than events:
draw an ASCII tree diagram of the flutter frontend folder and file structure. include lib/ as the root. show actual filenames (*.dart), not just folder names.