Skip to content
Home/Trust Center/Polls proof
PUBLIC PROOF ARTIFACT

Polls ship end-to-end: create → feed render → vote (MVP).

This MVP proves that polls are attached to real posts, rendered via the shared feed surface, and enforced via authenticated vote rules. Multi-select polls, closing controls, and richer analytics remain future work.

Polls/Interactive (MVP)Attachment + votingUpdated 2026-04-03
1
Vote endpoint
3
Proof checks
0
Parallel feed stacks
WHAT THIS IS (AND IS NOT)
Real capability, minimal rules.

The goal is to ship a safe, testable poll primitive without inventing a second content system. Polls reuse the existing post lifecycle and feed pipeline.

  • Polls are stored in the primary database schema (Prisma) and attached to posts
  • Feed payload includes poll metadata for UI rendering
  • Vote rules are server-enforced + rate-limited
1Vote endpoint
3Proof checks
0Parallel feed stacks

Published checks

Polls are real post attachments (no parallel content system)

Creating a poll uses the shared POST /api/posts endpoint with a poll payload. Polls can be text-only, media+poll, or poll-only posts, and they reuse the existing post + moderation enqueue path.

  • `prisma/schema.prisma`
  • `src/app/api/posts/route.ts`
Feeds include poll metadata for rendering and voting

GET /api/feed/* returns poll payloads alongside media attachments so the UI can render and interact without guessing or scraping.

  • `src/app/api/feed/[feedType]/route.ts`
  • `src/components/os/feed/feedTypes.ts`
  • `src/components/os/feed/FeedCard.tsx`
  • `src/components/social/PollAttachment.tsx`
Vote rules + anti-abuse are enforced server-side (MVP)

Voting is authenticated, same-origin protected, rate-limited, and single-choice by design (one vote per user per poll). Changing your vote updates the stored vote (no double-counting).

  • `src/app/api/polls/[pollId]/vote/route.ts`
  • `tests/integration/polls.interactive.integration.spec.ts`
Dock