feat: community feed — browse, publish, fork, mDNS LAN federation, Hall of Chaos #76

Open
opened 2026-04-12 17:12:18 -07:00 by pyr0ball · 0 comments
Owner

Summary

Implement the community feed feature: browse published meal plans and recipe outcomes, publish your own, fork into your week (exact copy Free / LLM-adapted Paid+BYOK), and discover nearby Kiwi instances via mDNS.

Implementation plan: circuitforge-plans/kiwi/superpowers/plans/2026-04-12-community-feature.md (10 tasks)

What ships

  • Migration 028: community_pseudonyms table in per-user kiwi.db (pseudonym ↔ Directus user_id, local only — never in community PG)
  • Element snapshot: allergen flags, dietary tags, SFAH element scores, USDA FDC macros — computed from corpus at publish time, stored denormalized
  • API endpoints (/api/v1/community/): browse, publish, delete, fork (Free), fork-adapt (Paid/BYOK), RSS 2.0, AP JSON-LD scaffold, local-feed (LAN peer)
  • mDNS advertisement: _kiwi._tcp.local via zeroconf — defaults OFF, opt-in (a11y requirement)
  • Vue frontend: CommunityFeedPanel, CommunityPostCard, PublishPlanModal, PublishOutcomeModal, Community tab in MealPlanView
  • Easter egg: Hall of Chaos (/community/hall-of-chaos) — Konami code, highest-chaos bloopers by chaos score

Tier gates

Feature Tier
Browse feed, fork (exact), RSS, local-feed Free
Publish, fork-adapt Paid / BYOK-unlockable

A11y (cf-a11y audit 2026-04-12)

  • No countdown timers — delete undo is a persistent button, no countdown
  • mDNS defaults OFF — opt-in consent prompt on first community tab access
  • Pseudonym setup inline in publish modal (pre-populated, invitation framing)
  • Focus trap in both publish modals; aria-live on results count, peer count, loading state
  • Error states described in text (WCAG 3.3.1)
  • Blooper copy flagged for cf-comms-dev review before going live
  • "Hall of Chaos" (not "Hall of Shame" — shame is a rejection-sensitivity trigger)

Dependencies (build order)

  1. Circuit-Forge/circuitforge-core#46 — community module (CommunityDB, CommunityPost, SharedStore)
  2. Circuit-Forge/circuitforge-orch#36 — postgres container up + COMMUNITY_DB_URL set
  3. This issue

BSL boundary

All service/API/frontend code is MIT. The fork-adapt endpoint calls llm_planner (BSL 1.1) — gated behind can_use("community_fork_adapt", tier, has_byok).

## Summary Implement the community feed feature: browse published meal plans and recipe outcomes, publish your own, fork into your week (exact copy Free / LLM-adapted Paid+BYOK), and discover nearby Kiwi instances via mDNS. **Implementation plan:** `circuitforge-plans/kiwi/superpowers/plans/2026-04-12-community-feature.md` (10 tasks) ## What ships - **Migration 028:** `community_pseudonyms` table in per-user kiwi.db (pseudonym ↔ Directus user_id, local only — never in community PG) - **Element snapshot:** allergen flags, dietary tags, SFAH element scores, USDA FDC macros — computed from corpus at publish time, stored denormalized - **API endpoints** (`/api/v1/community/`): browse, publish, delete, fork (Free), fork-adapt (Paid/BYOK), RSS 2.0, AP JSON-LD scaffold, local-feed (LAN peer) - **mDNS advertisement:** `_kiwi._tcp.local` via zeroconf — **defaults OFF, opt-in** (a11y requirement) - **Vue frontend:** `CommunityFeedPanel`, `CommunityPostCard`, `PublishPlanModal`, `PublishOutcomeModal`, Community tab in `MealPlanView` - **Easter egg:** Hall of Chaos (`/community/hall-of-chaos`) — Konami code, highest-chaos bloopers by chaos score ## Tier gates | Feature | Tier | |---|---| | Browse feed, fork (exact), RSS, local-feed | Free | | Publish, fork-adapt | Paid / BYOK-unlockable | ## A11y (cf-a11y audit 2026-04-12) - No countdown timers — delete undo is a persistent button, no countdown - mDNS defaults OFF — opt-in consent prompt on first community tab access - Pseudonym setup inline in publish modal (pre-populated, invitation framing) - Focus trap in both publish modals; `aria-live` on results count, peer count, loading state - Error states described in text (WCAG 3.3.1) - Blooper copy flagged for `cf-comms-dev` review before going live - "Hall of Chaos" (not "Hall of Shame" — shame is a rejection-sensitivity trigger) ## Dependencies (build order) 1. `Circuit-Forge/circuitforge-core#46` — community module (CommunityDB, CommunityPost, SharedStore) 2. `Circuit-Forge/circuitforge-orch#36` — postgres container up + `COMMUNITY_DB_URL` set 3. This issue ## BSL boundary All service/API/frontend code is MIT. The `fork-adapt` endpoint calls `llm_planner` (BSL 1.1) — gated behind `can_use("community_fork_adapt", tier, has_byok)`. ## Related - Spec: `circuitforge-plans/kiwi/superpowers/specs/2026-04-12-shared-meal-plan-design.md` - Meal planner PR: #75 - cf-ingest signals (downstream): Circuit-Forge/circuitforge-orch#35
pyr0ball added the
enhancement
label 2026-04-12 17:12:18 -07:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Circuit-Forge/kiwi#76
No description provided.