diff --git a/context.md b/context.md index 00d1ab5..aa22154 100644 --- a/context.md +++ b/context.md @@ -46,12 +46,12 @@ No database. No Prisma. No Redis. OAuth session/state stores are in-memory Maps ### `/` — Landing / Home - **Logged out**: Full hero with murmuration boids animation, 2-col desktop layout (text + MockupCard), features grid below. CTA: "Sign In" button + "with your Atmosphere Account" label. -- **Logged in**: Centered wordmark, subtitle ("Paste a Bluesky* post URL to get started." with appview tooltip), URL input, "→ View block history" link. +- **Logged in**: Two sections — "Block a post" (URL input → `/block`) and "Import a list" (URL input → `/list?url=...`), each with description and secondary link. ### `/block` — Block Flow -- URL input + Preview button +- URL input + Preview button; empty state shows "Your FlockOff Blocks" (up to 5 recent events) - Post preview card (author, text, engagement counts) -- CriteriaSelector (OP / Likes / Reposts / Quotes / Replies / ☢ Nuclear) — emoji chips +- CriteriaSelector (OP / Likes / Reposts / Quotes / Replies / ☢ Nuclear) — emoji chips, all selected = ember, Nuclear = red - AccountList with relationship highlighting (mutual/following/follower/none) - Time estimate + Block button (sticky bottom bar on mobile) - SSE progress bar during blocking (striped ember fill) @@ -66,12 +66,26 @@ No database. No Prisma. No Redis. OAuth session/state stores are in-memory Maps - 2×2 stat grid (total / blocked / failed / pending) - Criteria chips (read-only) - Shared block list link (if shared) + Unlink option -- Undo / redo / resume actions +- Undo / redo / resume — Resume hidden while job is running (shows sky "⋯ Job is running" + "Check status" instead) - Collapsible "Check for new engagement" drawer ### `/list` — List Editor - **Import a list** section: paste a list URL, load members, add/remove - **Your Lists** section: FlockOff-created + external lists, load/delete +- Accepts `?url=` searchParam (set by LandingListForm on homepage) + +### `/stats` — Personal Stats +- Block events run / accounts blocked / lists created (from PDS repo via `fetchPersonalStats()`) +- Global stats section present as dimmed placeholder (needs Postgres post-Railway) + +### `/about` — About +- "How it works" (5 steps) + 10-question FAQ + +### `/contact` — Contact +- Bluesky link, help@flockoff.app, mailto-based feedback form + +### `/legal` — Terms & Privacy +- Terms of Use + Privacy Policy one-pager, linked from footer ### `/login` — Login - Wordmark + tagline ("Sign in with your Atmosphere Account to get started.") @@ -99,6 +113,14 @@ src/ │ │ ├── page.tsx │ │ └── ListEditorClient.tsx │ ├── login/page.tsx +│ ├── stats/page.tsx # Personal stats (fetchPersonalStats from lexicon.ts) +│ ├── about/page.tsx # How it works + FAQ +│ ├── contact/page.tsx # Contact + feedback form +│ ├── legal/page.tsx # Terms of Use + Privacy Policy +│ ├── opengraph-image.tsx # OG image (Next.js ImageResponse, edge runtime) +│ ├── icon.svg # Favicon (adaptive dark mode) +│ ├── favicon.ico +│ ├── apple-icon.png │ └── api/ │ ├── blocks/ │ │ ├── route.ts # POST — start block job @@ -137,8 +159,10 @@ src/ │ ├── AccountCard.tsx # Single account row with relationship badge │ ├── BlockProgress.tsx # SSE-driven progress bar │ ├── EventCard.tsx # History list card (compact PostPreview inside) -│ ├── LandingUrlForm.tsx # URL input on logged-in landing +│ ├── LandingUrlForm.tsx # "Block a post" URL input on logged-in landing +│ ├── LandingListForm.tsx # "Import a list" URL input on logged-in landing │ ├── LoginForm.tsx # Handle input + submit +│ ├── Footer.tsx # Site footer (Contact / About / Terms & Privacy links) │ ├── ListPreview.tsx # Member list view in list editor │ ├── ListResultClient.tsx # Post-create list result view │ └── LinkButton.tsx # Next.js Link + buttonVariants (shadcn asChild workaround) @@ -271,6 +295,10 @@ SESSION_SECRET=<32+ char random string> - [x] **README cleanup** — proper README: what FlockOff is, feature list, tech stack, local setup (env vars, dev server), OAuth private key generation via `jose`, architecture notes. - [x] **About page (`/about`)** — 4-step "How it works" section + 9-question FAQ covering data storage, permissions, undo/redo, Nuclear, list sharing, re-check, revocation. Linked from footer. +### Language +- [x] **"Atmosphere" vs "AT Protocol"** — user-facing copy uses "Atmosphere" when referring to the network/apps. "AT Protocol" kept for technical references (lexicons, scopes, specs). "Bluesky*" retained with tooltip "Alternate AppView compatibility coming soon." on appview-specific references. + ### Quality -- [ ] **Mobile walkthrough** — blocked until deployment (dev server is localhost-only). Full manual pass through the entire flow on a real mobile device: re-check drawer, event detail stat grid, list editor are the areas that had less mobile attention. -- [x] **Session expiry during block job** — documented in About page FAQ: job stops silently, progress is saved to PDS, recover via Resume button after signing back in. +- [ ] **Mobile walkthrough** — blocked until deployment (dev server is localhost-only). Full manual pass through the entire flow: re-check drawer, event detail stat grid, list editor are the areas that had less mobile attention. +- [ ] **Global stats on `/stats`** — personal stats live; global stats (total blocks across all users) needs Railway + Postgres. Currently shows as dimmed placeholder. +- [x] **Session expiry during block job** — documented in About FAQ: job stops silently, progress saved to PDS, recover via Resume after signing back in.