civic habit.
Verified voters. Real results.
VOTD Insights — Breaker Comp
Chart styles: W6 Area Line (B1) · T3 Rank + % (B2) · "votd insights" eyebrow throughout
VOTD Insights — Chart Styles
W6 Area Line · T3 Rank + % · Hero (Purple Dark + Amber) · Companion (Mauve + Purple Dark)
════════════════════════════════════════ SERIES REFERENCE ════════════════════════════════════════Archived from design-system-proposal.html. The problem statement and proposal sections that led to the current feed design. Kept for reference only — the live prototype is in design-system-proposal.html.
The feed has 12 card shell styles with no consistent logic. Proposal: collapse to two tiers.
Most differ by only 2px of radius or a shadow tweak
| Style | BG | Radius | Shadow | → |
|---|---|---|---|---|
heroCard | WHITE | r(16) | 0.07/12 | → cardFeat |
topVoteCard | WHITE | r(14) | none | → cardFeat |
urgentCard | WHITE | r(14) | 0.07/10 | → cardFeat |
insightFeatureCard | WHITE | r(14) | 0.08/10 | → cardFeat |
featureCard | WHITE | r(12) | 0.06/8 | → cardFeat |
standBanner | WHITE | r(12) | 0.06/8 | → cardFeat |
card | OFF_WHITE | r(12) | 0.06/8 | → cardStd |
closedCard | WHITE | r(12) | 0.06/8 | → cardStd |
insightCard | WHITE | r(12) | 0.06/6 | remove — unused |
stubCard | WHITE | r(12) | none | keep |
compactCard | WHITE | r(12) | 0.06/6 | keep |
Everything reads at the same visual weight
card using OFF_WHITE) is inconsistently applied — closedCard, featureCard etc. are still WHITE. No rule for when a card earns a white background.Five configs, no hierarchy logic
cardStd and cardFeat replace all redundant shells
| Property | cardStd | cardFeat |
|---|---|---|
| Background | OFF_WHITE #FAF9F8 | WHITE #FFFFFF |
| Border | 1px rgba(200,80,20,0.12) | 1px rgba(200,80,20,0.18) |
| Radius | r(12) | r(14) |
| Shadow opacity | 0.05 | 0.08 |
| Shadow radius | 6px | 12px |
| Shadow offset | 0, 2 | 0, 3 |
| Margin bottom | r(4) | r(8) |
Feed = WHITE · Standard card = OFF_WHITE · Feature card = WHITE
brkComp / brkCompNoPad stay exactly as-is
brkHero is defined but never used in the current feed and can be removed until a hero-theme insight slot is built.12 shells → 6 styles
| Current name | Becomes | Why |
|---|---|---|
card | cardStd | Rename for clarity. OFF_WHITE bg stays. |
closedCard | → cardStd | Identical shadow/border. BG → OFF_WHITE. |
heroCard | → cardFeat | r(16) radius not enough to justify own style. |
topVoteCard | → cardFeat | Missing shadow was accidental. |
urgentCard | → cardFeat | Same logic as topVoteCard. |
featureCard | → cardFeat | Was missing border. Merges cleanly. |
standBanner | → cardFeat | CTA card earns feature treatment. |
insightFeatureCard | → cardFeat | Shadow diff was imperceptible. |
insightCard | remove | Unused legacy style. |
stubCard | keep | Dashed border = intentionally distinct. |
compactCard | keep | Fixed width + carousel context. |
brkComp/NoPad | keep | Full-width structural dividers. |
brkHero | remove/reserve | Defined but never rendered in feed. |
cardStd · cardFeat · stubCard · compactCard · brkComp · brkCompNoPad · proposeCardAll 27 slots assigned
| # | Slot | Style |
|---|---|---|
| 1 | Closing Soon | cardFeat |
| 2 | Top Votes · USA / State (couplet) | cardFeat |
| 3 | Your Side Is Losing | cardFeat |
| 4 | Neighbor Proposals | cardStd |
| 5 | VOTD Insights · Tuesdays | brkCompNoPad |
| 6 | Top Votes · Local / Topic (couplet) | cardFeat |
| 7 | Your Community Voted | cardStd |
| 8 | Add Research | cardFeat |
| 9 | VOTD Insights · Housing leads | brkComp |
| 10+11 | Top Votes · State / Local (couplet) | cardFeat |
| 12 | Just Closed | cardStd |
| 13 | Top Votes · USA / Topic (couplet) | cardFeat |
| 14 | Your Milestones | cardStd |
| 15 | Stand and Be Counted | cardFeat |
| 16 | Your Backlog | compactCard |
| 17+18 | Top Votes · #2 USA / State (couplet) | cardFeat |
| 19 | Your Side Is Winning | cardFeat |
| 19 | Neighbors Want to Know #2 | cardStd |
| 20 | VOTD Insights · 3 pts apart | brkComp |
| 21 | Top Votes · #2 Local / Topic (couplet) | cardFeat |
| 22 | Add Research #2 | cardFeat |
| 23 | Top Issues by Topic | cardStd |
| 24 | VOTD Insights · top 14% | brkComp |
| 25 | Top Votes · #2 State / Local (couplet) | cardFeat |
| 26 | You're up to date | — |
| 27 | Propose a Vote | proposeCard |
showSkipOnEntry=true passed from verify-otp. "Complete Sign Up" dismisses overlay, stays on name screen. "Skip for now" → tabs (guest mode).| Screen | Gate | Prompt | Sequence | Outcome Status | Target | Outcome |
|---|---|---|---|---|---|---|
| Onboarding (F1) | ||||||
| Onboarding | Sign Up | Sign Up | A1–A6 | verifying | Vote of the Day | All actions saved in account; votes counting, open tallies, proposed votes going live, research going live, and share vote how only available after verification |
| Onboarding | Explore / Skip | Explore first | n/a | guest | Vote of the Day | — |
| Onboarding | Log In | Already have an account? | B1, B2, B3, (B3b), (B3c) | any (depending on outcome) | Vote of the Day if clear; A1 if sign up; support if need help; onboarding if skip | — |
| Vote of the Day | ||||||
| Vote of the Day | Vote / Yes/No | Confirm your mobile number to continue Add My Number · Skip for now |
A1, A2, (C1), [C2, A3, (A4), (A4B), A5, A6] | phone · [verifying] | Vote of the Day — conf | phone = have an account, votes save, but votes don't count and can't see open vote tallies unless verified |
| Vote of the Day | Follow | Confirm your mobile number to continue Add My Number · Skip for now |
A1, A2, (C1), [C2, A3, (A4), (A4B), A5, A6] | phone · [verifying] | Vote of the Day (with save selected) | phone = have an account, follows save, but votes don't count and can't see open vote tallies unless verified |
| Vote of the Day | Propose — guest | Proposing votes requires verification Sign Up · Skip for now |
A1–A6 | [verifying] | Vote of the Day | Proposed vote saved until voter is verified — then reviewed |
| Vote of the Day | Propose — phone | Proposing votes requires verification Finish Sign Up · Skip for now |
D2, A4, (A4B), A5, A6 | [verifying] | Vote of the Day | Proposed vote saved until voter is verified — then reviewed |
| Vote of the Day | Add Research — guest | Adding Research requires verification Sign Up · Skip for now |
A1–A6 | [verifying] | Vote of the Day | Research saved until voter is verified — then reviewed |
| Vote of the Day | Add Research — phone | Adding Research requires verification Finish Sign Up · Skip for now |
D2, A4, (A4B), A5, A6 | [verifying] | Vote of the Day | Research saved until voter is verified — then reviewed |
| Vote of the Day — Confirmation | ||||||
| VOTD — conf | Finish | Want your votes to make a difference? Finish Sign Up |
D2, A4, (A4B), A5, A6 | [verifying] | Vote of the Day — conf | All actions saved in account; votes counting, open tallies, proposed votes going live, research going live, and share vote how only available after verification |
| VOTD — conf | Propose — guest | Proposing votes requires verification Sign Up · Skip for now |
A1–A6 | [verifying] | Vote of the Day — conf | Proposed vote saved until voter is verified — then reviewed |
| VOTD — conf | Propose — phone | Proposing votes requires verification Finish Sign Up · Skip for now |
D2, A4, (A4B), A5, A6 | [verifying] | Vote of the Day — conf | Proposed vote saved until voter is verified — then reviewed |
| Votes — Open | ||||||
| Votes — Open | Vote Now | Confirm your mobile number to continue Add My Number · Skip for now |
A1, A2, (C1), [C2, A3, (A4), (A4B), A5, A6] | phone · [verifying] | Vote Item | phone = have an account, votes save, but votes don't count and can't see open vote tallies unless verified |
| Votes — Open | Follow | Confirm your mobile number to continue Add My Number · Skip for now |
A1, A2, (C1), [C2, A3, (A4), (A4B), A5, A6] | phone · [verifying] | Votes — Open | phone = have an account, follows save, but votes don't count and can't see open vote tallies unless verified |
| Votes — Open | Share | Confirm your mobile number to continue Add My Number · Skip for now |
A1, A2, (C1), [C2, A3, (A4), (A4B), A5, A6] | phone · [verifying] | Votes — Open | phone = can share vote; verified = can share all including vote how |
| Votes — Open | Sign up for tally — phone | Faded CTA on voted card Sign up for tally |
D2, A4, (A4B), A5, A6 | [verifying] | Votes — Open | phone = voted but can't see open vote tallies unless verified; card shows faded "Sign up for tally" CTA instead of tally bar |
| Vote Item | ||||||
| Vote Item | Vote / Yes/No | Confirm your mobile number to continue Add My Number · Skip for now |
A1, A2, (C1), [C2, A3, (A4), (A4B), A5, A6] | phone · [verifying] | Vote Item — conf | phone = have an account, votes save, but votes don't count and can't see open vote tallies unless verified |
| Vote Item | Follow | Confirm your mobile number to continue Add My Number · Skip for now |
A1, A2, (C1), [C2, A3, (A4), (A4B), A5, A6] | phone · [verifying] | Vote Item (with save selected) | phone = have an account, follows save, but votes don't count and can't see open vote tallies unless verified |
| Vote Item | Propose — guest | Proposing votes requires verification Sign Up · Skip for now |
A1–A6 | [verifying] | Vote Item | Proposed vote saved until voter is verified — then reviewed |
| Vote Item | Propose — phone | Proposing votes requires verification Finish Sign Up · Skip for now |
D2, A4, (A4B), A5, A6 | [verifying] | Vote Item | Proposed vote saved until voter is verified — then reviewed |
| Vote Item | Add Research — guest | Adding Research requires verification Sign Up · Skip for now |
A1–A6 | [verifying] | Vote Item | Research saved until voter is verified — then reviewed |
| Vote Item | Add Research — phone | Adding Research requires verification Finish Sign Up · Skip for now |
D2, A4, (A4B), A5, A6 | [verifying] | Vote Item | Research saved until voter is verified — then reviewed |
| Vote Item — Confirmation | ||||||
| Vote Item — conf | Finish | Want your votes to make a difference? Finish Sign Up |
D2, A4, (A4B), A5, A6 | [verifying] | Vote Item — conf | All actions saved in account; votes counting, open tallies, proposed votes going live, research going live, and share vote how only available after verification |
| Vote Item — conf | Propose — guest | Proposing votes requires verification Sign Up · Skip for now |
A1–A6 | [verifying] | Vote Item — conf | Proposed vote saved until voter is verified — then reviewed |
| Vote Item — conf | Propose — phone | Proposing votes requires verification Finish Sign Up · Skip for now |
D2, A4, (A4B), A5, A6 | [verifying] | Vote Item — conf | Proposed vote saved until voter is verified — then reviewed |
| Feed | ||||||
| Feed | Vote Now | Confirm your mobile number to continue Add My Number · Skip for now |
A1, A2, (C1), [C2, A3, (A4), (A4B), A5, A6] | phone · [verifying] | Vote Item | phone = have an account, votes save, but votes don't count and can't see open vote tallies unless verified |
| Feed | Follow | Confirm your mobile number to continue Add My Number · Skip for now |
A1, A2, (C1), [C2, A3, (A4), (A4B), A5, A6] | phone · [verifying] | Back on Feed — with follow selected | phone = have an account, follows save, but votes don't count and can't see open vote tallies unless verified |
| Feed | Propose — guest | Proposing votes requires verification Sign Up · Skip for now |
A1–A6 | [verifying] | Back on Feed | Proposed vote saved until voter is verified — then reviewed |
| Feed | Propose — phone | Proposing votes requires verification Finish Sign Up · Skip for now |
D2, A4, (A4B), A5, A6 | [verifying] | Back on Feed | Proposed vote saved until voter is verified — then reviewed |
| Feed | Add Research — guest | Adding Research requires verification Sign Up · Skip for now |
A1–A6 | [verifying] | Back on Feed | Research saved until voter is verified — then reviewed |
| Feed | Add Research — phone | Adding Research requires verification Finish Sign Up · Skip for now |
D2, A4, (A4B), A5, A6 | [verifying] | Back on Feed | Research saved until voter is verified — then reviewed |
| Feed | Share This Vote | Confirm your mobile number to continue Add My Number · Skip for now |
A1, A2, (C1), [C2, A3, (A4), (A4B), A5, A6] | phone · [verifying] | Back on Feed | phone = can share vote; verified = can share all including vote how |
| My Profile | ||||||
| My Profile | Phone conf (E2) | Finish Sign Up | D2, A4, (A4B), A5, A6 | [verifying] | Back on My Profile | — |
| My Profile | Awaiting verification (E3) | — | — | — | — | All actions saved in account; votes counting, open tallies, proposed votes going live, research going live, and share vote how only available after verification |
| My Profile | Verified (E4) | — | — | — | — | All actions saved in account, votes count, can see open tallies, propose votes go for review, research goes for review, and share all types including vote how |
| My Profile | Propose — guest | Proposing votes requires verification Sign Up · Skip for now |
A1–A6 | [verifying] | Back on My Profile | Proposed vote saved until voter is verified — then reviewed |
| My Profile | Propose — phone | Proposing votes requires verification Finish Sign Up · Skip for now |
D2, A4, (A4B), A5, A6 | [verifying] | Back on My Profile | Proposed vote saved until voter is verified — then reviewed |
| My Profile | Sign up for tally — phone | Faded CTA on voted card (Votes tab) Sign up for tally |
D2, A4, (A4B), A5, A6 | [verifying] | Back on My Profile | phone = voted but can't see open vote tallies unless verified; card shows faded "Sign up for tally" CTA instead of tally bar. Closed items show tally normally. |
| Routing Rules | ||||||
A — Sign Up (Full): A1 phone → A2 OTP → A3 "One more step" → A4 address → A5 photo → A6 complete. No skip overlay. Used for: onboarding, Propose (guest), Add Research (guest). sequence=A threaded through signup → verify-otp → profile-setup.B — Account Recovery: B1 sign-in → B2 OTP → exits to B3a (found) / B3b (wrong code) / B3c (failed). C — Phone Confirmation: Guest vote/follow/save/share gates → /signup → phone + OTP → profile-setup with showSkipOnEntry overlay on arrival. Heading: "One more step". Skip returns to caller via returnTo. "Complete Sign Up" dismisses overlay, user continues to A4–A6. sequence=C threaded through; verify-otp sets showSkipOnEntry=true only when sequence=C.D — Finish Sign Up: Phone-verified user hits a verification-required gate (Propose, Research, Profile nudge, tally gate) → /profile-setup directly. Heading: "Finish signing up". No skip overlay. Skips A1–A2 since phone is already confirmed. sequence=D passed as param.Key rule: Skip overlay shows ONLY for C sequence (phone/Add My Number gates). A sequence (propose, research, onboarding) and D sequence (finish signup) never show skip overlay. The sequence param determines behavior, not returnTo.
|
||||||
| Action | Guest | Phone Verified | Verifying | Verified |
|---|---|---|---|---|
| View votes + tally | ✓ | ✓ | ✓ | ✓ |
| Share vote item (neutral) | ✓ Open | ✓ | ✓ | ✓ |
| Vote (counted) | ⬆ Prompt | ⬆ Prompt | ⏳ Queued | ✓ |
| Save / follow | ⬆ Prompt | ✓ | ✓ | ✓ |
| Share that you voted | natural gate¹ | ✓ | ✓ | ✓ |
| Share how you voted | natural gate¹ | ✓ | ✓ | ✓ |
| Add research | ⬆ Prompt | ⬆ Prompt | ⬆ Prompt | ✓ only |
¹ Natural gate — share-with-attribution only reachable after voting, which already requires phone verification. · Research requires voter roll match (verified only) — public attribution demands confirmed identity.
This table has moved. The authoritative copy inventory covering all flows A–F is in the Sign-Up & Auth Flows section → Master Copy Inventory — All Flows A–F.
| Flow | Entry Point | Steps | Expected End State | Key Things to Verify |
|---|---|---|---|---|
| A · Guest 1st tap (VOTD) | Index · Vote card · Vote Now | Tap Vote Now → overlay slides up | Overlay: "Verify your number to continue" + Verify + Skip | Message wording correct. "Verify" → /signup. "Skip for now" dismisses with no state change. |
| A · Guest 1st tap (vote item) | Vote Item · Yes or No button | Open vote item as guest → tap Yes or No | Overlay rises over dimmed Yes/No buttons | Yes/No dims to 25% opacity behind overlay. "Verify" → /signup. Tap scrim dismisses. |
| B · Guest 2nd+ tap | Index · Vote Now (after prior skip) | Skip overlay → tap Vote Now again same session | Overlay: message in orange-dark "Voting requires phone verification." | Only the message changes vs. A — buttons and skip link identical. Resets each session. |
| C · Full sign-up flow | Any overlay "Verify" CTA → /signup | Phone → OTP → Name → Address → USPS → Photo → app | Profile: amber "Verifying" badge, address shown, no CTA |
C1 Phone: Send dims until 10 digits. Cancel → prior screen. C2 OTP: Verify dims until all 6 digits. Sets phone_verified. C3 Name: "Skip for now" → skip overlay (C3b). Continue dims until name filled. C3b Skip overlay: "Complete now" stays on name. "Skip for now" advances to address anyway. C4 Address: "Confirm" triggers USPS suggestion. Either path sets verifying. C4b USPS: "Yes, use this" or "No, keep mine" — both save and advance to photo. C5 Photo: "Remind me later" and "Add a photo" both land in app. Photo is optional. |
| D · Phone-verified votes (vote item) | Vote Item · phone_verified user · Yes/No | Tap Yes or No → skip overlay rises from bottom | Overlay: "Complete Registration for votes to count and to see live results" — no skip link | No skip link (unlike guest). "Complete Registration" → /address-setup. Tap scrim or back arrow dismisses. |
| D · Phone-verified votes (VOTD) | VOTD overlay card · phone_verified user · voted | Cast vote on VOTD → tally locked → "Finish Sign Up" shown | Locked tally (no bar), nudge pushed down, "Finish Sign Up" CTA | "Finish Sign Up" → /profile-setup (name screen), NOT phone screen. Returning from profile-setup restores voted state + tally + share panel. |
| E1 · Guest profile | Profile tab · guest | Tap Profile tab | Full-screen: ballot emoji, "Make your voice count", Sign Up + Sign in link | "Sign Up" → /signup. No profile card, no back arrow. |
| E2 · Phone-verified profile | Profile tab · phone_verified | Tap Profile tab | Profile card: blue "Phone # Verified" badge + orange "Complete Registration" prompt | "Complete Registration" → /address-setup. No address shown yet. |
| E3 · Verifying profile | Profile tab · after address submitted | Tap Profile tab | Profile card: amber "Verifying" badge + address + "Matching your voter registration — votes are queued" | No CTA — user has nothing left to do. No "Complete Registration" prompt. |
| E4 · Verified profile | Profile tab · fully verified | Tap Profile tab | Profile card: orange "Voter Verified" badge + address — clean, no prompts | No nudge, no orange prompt text. About / Votes / Follows tabs all present. |
| Profile · About tab reset | Profile tab · any verified state | Go to Votes or Follows tab → navigate away → return to Profile | Always opens on About tab on re-focus | useFocusEffect resets to About. Never remembers last visited sub-tab. |
| Profile · Follows tab starring | Index · vote card dot-stack → Save/Follow | Star a vote from index → open Profile → Follows tab | Starred item appears in Follows — including items already voted on | Previously, items with a cast vote were excluded. Now all starred items show regardless of voted status. |
✕ Bug — builds before 48
Star is white on white — invisible
✓ Build 48 target
Star orange, centered above the V
votd.tsx (ss.*) exactly.| Variant | Top Stop | Bottom Stop | Opacity | Blur |
|---|---|---|---|---|
| A (current) | #E8873A | #C85014 | 93% | none |
| B | #E8873A | #C85014 | 82% | none |
| C (frosted) | #E8873A | #C85014 | 70% | blur(24px) saturate(1.4) |
| D (deeper) | #C85014 | #A5411E | 85% | none |
rgba(0,0,0,0.22) · text rgba(255,255,255,0.50)#FFF1EA · text #C85014#FFD9BC · text #A5411E · scale 0.97Three share contexts × three outputs. Each persona drives a distinct message, share sheet state, and OG link preview. Open votes never show tallies to non-voters — the tally is the reward for casting a vote.
| Field | Value |
|---|---|
| Variant | "Share the vote" (only option pre-vote) |
| Access | Any user — guest, phone-verified, verified |
| Entry point | ↑ icon in feed card / vote-item header |
| Field | Value |
|---|---|
| Hook | "Today's vote:" — establishes daily rhythm |
| Question | Full poll question in quotes |
| Social proof | Vote count ✓ — no tally, no percentages |
| CTA | "Where do you stand?" |
| Link | votd.io/v/[id] |
| OG field | Value |
|---|---|
| og:title | Poll question |
| og:desc | Vote count + invitation — no tally |
| og:image | Orange gradient + question text + "Today's Vote of the Day" |
| og:url | votd.io/v/[id] |
| Field | Value |
|---|---|
| Variant | "Promote the vote" — post-vote, no stance revealed |
| Access | Any verified voter (post-vote) |
| Entry point | Share sheet after voting, "Promote" tab |
| Field | Value |
|---|---|
| Hook | "I just voted on today's VOTD" — personal but neutral |
| Question | Full poll question in quotes |
| Social proof | Vote count + "and counting" — momentum signal |
| Stance | Not revealed |
| CTA | "Cast yours:" |
| OG field | Value |
|---|---|
| og:title | Poll question |
| og:desc | Vote count + "Cast your vote and see where everyone stands" |
| og:image | Orange gradient + question + vote count + "Voting open" |
| Field | Value |
|---|---|
| Variant | "Share how I voted" — verified only, stance revealed |
| Access | Voter Verified only |
| Entry point | Share sheet after voting, default tab for verified users |
| Field | Value |
|---|---|
| Hook | "I voted YES/NO on today's VOTD" — personal, clear stance |
| Question | Full poll question in quotes |
| Tally | Sharer's side percentage shown — "I'm with the X% who agree/disagree" |
| CTA | "Where do you stand?" |
| OG field | Value |
|---|---|
| og:title | Poll question |
| og:desc | Sharer's side % + "Cast your vote to see full results" |
| og:image | Orange gradient + question + partial tally bar + sharer's side % |
Three share contexts × three outputs. Each persona drives a distinct message, share sheet state, and OG link preview. Open votes never show tallies to non-voters — the tally is the reward for casting a vote.
| Field | Value |
|---|---|
| Variant | "Share the vote" (only option pre-vote) |
| Access | Any user — guest, phone-verified, verified |
| Entry point | ↑ icon in feed card / vote-item header |
| Field | Value |
|---|---|
| Hook | "Today's vote:" — establishes daily rhythm |
| Question | Full poll question in quotes |
| Social proof | Vote count ✓ — no tally, no percentages |
| CTA | "Where do you stand?" |
| Link | votd.io/v/[id] |
| OG field | Value |
|---|---|
| og:title | Poll question |
| og:desc | Vote count + invitation — no tally |
| og:image | Orange gradient + question text + "Today's Vote of the Day" |
| og:url | votd.io/v/[id] |
| Field | Value |
|---|---|
| Variant | "Promote the vote" — post-vote, no stance revealed |
| Access | Any verified voter (post-vote) |
| Entry point | Share sheet after voting, "Promote" tab |
| Field | Value |
|---|---|
| Hook | "I just voted on today's VOTD" — personal but neutral |
| Question | Full poll question in quotes |
| Social proof | Vote count + "and counting" — momentum signal |
| Stance | Not revealed |
| CTA | "Cast yours:" |
| OG field | Value |
|---|---|
| og:title | Poll question |
| og:desc | Vote count + "Cast your vote and see where everyone stands" |
| og:image | Orange gradient + question + vote count + "Voting open" |
| Field | Value |
|---|---|
| Variant | "Share how I voted" — verified only, stance revealed |
| Access | Voter Verified only |
| Entry point | Share sheet after voting, default tab for verified users |
| Field | Value |
|---|---|
| Hook | "I voted YES/NO on today's VOTD" — personal, clear stance |
| Question | Full poll question in quotes |
| Tally | Sharer's side percentage shown — "I'm with the X% who agree/disagree" |
| CTA | "Where do you stand?" |
| OG field | Value |
|---|---|
| og:title | Poll question |
| og:desc | Sharer's side % + "Cast your vote to see full results" |
| og:image | Orange gradient + question + partial tally bar + sharer's side % |