/* Jancie Vinson campaign site — main React app */ const { useState, useEffect, useMemo } = React; const ELECTION_DATE = new Date('2026-08-18T07:00:00-04:00'); const CAMPAIGN_EMAIL = 'jvcampaign@yahoo.com'; const CAMPAIGN_PHONE = '(352) 214-7502'; const CAMPAIGN_PHONE_TEL = '+13522147502'; const CAMPAIGN_ADDRESS_LINE1 = '5350 SW 62nd Avenue'; const CAMPAIGN_ADDRESS_LINE2 = 'Gainesville, FL 32608'; const TWEAKS_DEFAULTS = /*EDITMODE-BEGIN*/{ "palette": "hybrid", "heroLayout": "split", "showCountdown": true, "headlineVariant": "protect" }/*EDITMODE-END*/; /* ---------- Icons ---------- */ const Icon = { Calendar: () => , Pin: () => , Mail: () => , Phone: () => , School: () => , Teacher: () => , Shield: () => , Star: () => , Sign: () => , Megaphone: () => , Heart: () => , Check: () => , FB: () => , X: () => , IG: () => , }; /* ---------- Countdown ---------- */ function useCountdown(target) { const [now, setNow] = useState(Date.now()); useEffect(() => { const id = setInterval(() => setNow(Date.now()), 1000); return () => clearInterval(id); }, []); const diff = Math.max(0, target.getTime() - now); const days = Math.floor(diff / 86400000); const hours = Math.floor((diff % 86400000) / 3600000); const mins = Math.floor((diff % 3600000) / 60000); const secs = Math.floor((diff % 60000) / 1000); return { days, hours, mins, secs }; } function Countdown() { const { days, hours, mins, secs } = useCountdown(ELECTION_DATE); return (
Election Day · Aug 18, 2026
{days}
Days
{hours}
Hours
{mins}
Mins
{secs}
Secs
); } /* ---------- Nav ---------- */ function Nav() { const [open, setOpen] = useState(false); const close = () => setOpen(false); return ( ); } /* ---------- Hero ---------- */ const HEADLINES = { protect: { lead: 'Protect Our', accent: 'Neighborhood Schools', tail: '' }, fresh: { lead: 'Fresh Ideas.', accent: 'Real Accountability.', tail: '' }, serve: { lead: 'A Lifetime of Service.', accent: 'A Future for Our Kids.', tail: '' }, }; function Hero({ tweaks }) { const headline = HEADLINES[tweaks.headlineVariant] || HEADLINES.protect; return (
Vote Tuesday, August 18, 2026

{headline.lead} {headline.accent}

"If we do not protect our neighborhood schools now, we may not have them tomorrow."
Integrity
Common Sense
Commitment
See Her Plan Get Involved
Jancie Vinson, Candidate for Alachua County School Board, District 5
Elect 2026
); } /* ---------- Brand Band (full logo) ---------- */ function BrandBand() { return (
Jancie Vinson — Alachua County School Board, District 5
); } /* ---------- Values strip ---------- */ function ValuesStrip() { return (
INTEGRITY
COMMON SENSE
COMMITMENT
); } /* ---------- About ---------- */ function About() { return (
Integrity · Common Sense · Commitment
Meet the Candidate

About Jancie Vinson

A lifetime Gainesville resident, retired law-enforcement officer, and lifelong advocate for our public schools.

Jancie Vinson
Her Story

Born here. Raised here. Ready to lead here.

Jancie Vinson was born and raised in Southwest Gainesville on a small farm — the tenth of eleven children. She attended Alachua County public schools, graduated from Buchholz High School, and earned her Bachelor of Science in Business Administration from the University of Florida.

For more than 36 years, Jancie served our community through the Florida Department of Corrections, retiring as a Probation Supervisor. As a retired law-enforcement officer, she understands prevention, intervention, accountability — and one essential truth: it is cheaper to educate than to incarcerate.

Jancie is the proud sister of three former Alachua County teachers, the godmother raising her 9-year-old godchild, and a member of Wesley Chapel United Methodist Church. She has served the community as Vice President of the Gainesville NAACP, a member of the Alachua County Local Planning Commission, an appointed member of the Alachua County Housing — AHAC Advisory Board, and currently as an elected Soil & Water Conservation District supervisor.

36+
Years Public Service
100%
Lifetime Gainesville
D5
School Board District
); } /* ---------- Priorities ---------- */ const PRIORITIES = [ { icon: , title: 'Strong Neighborhood Schools', bullets: [ 'Keep Eastside and Alachua elementary schools open', 'Fight unfair zoning that weakens communities', 'Schools as community anchors, not bargaining chips', ], }, { icon: , title: 'Invest in Educators', bullets: [ 'Competitive pay for teachers, paraprofessionals & staff', 'Recruit and retain quality educators', 'Cut waste — fund the classroom first', ], }, { icon: , title: 'Protect & Redirect Our Children', bullets: [ 'Early intervention, mentoring, and tutoring', 'Stop the school-to-prison pipeline', 'Anonymous reporting for student safety concerns', ], }, { icon: , title: 'High-Quality Education', bullets: [ 'Accountability, balance, and respect in policy', 'Career, college, and workforce readiness', 'Close the achievement gap with proven programs', ], }, ]; function Priorities() { return (
A Clear Plan for Our Schools

Her Commitment to You

Four priorities. Real solutions. Built from a lifetime of listening to families, students, and educators across Alachua County.

{PRIORITIES.map((p, i) => (
{p.icon}

{p.title}

    {p.bullets.map((b, j) =>
  • {b}
  • )}
))}
); } /* ---------- Quote section ---------- */ function QuoteSection() { return (
Our schools should be pipelines to opportunity — not pathways into the criminal justice system. Leadership requires visibility. It requires accessibility. It requires courage. I will be present. I will listen. And I will act.
— Jancie Vinson
); } /* ---------- Get Involved ---------- */ function Involved() { return (
Join the Movement

Get Involved

This campaign belongs to the community. Whether you give a dollar or an hour, your involvement matters.

Display a Yard Sign

Show your support to neighbors. Request a sign for your yard or business.

Request Sign

Host a Meet & Greet

Invite neighbors over to meet Jancie. Coffee, conversation, and community.

Host Event

Volunteer

Knock doors, make calls, or help at events. Every hour brings us closer to victory.

Sign Up

); } /* ---------- Campaign Song Player ---------- */ function SongPlayer() { const audioRef = React.useRef(null); const [playing, setPlaying] = useState(false); const [time, setTime] = useState(0); const [duration, setDuration] = useState(0); const [loaded, setLoaded] = useState(false); useEffect(() => { const a = audioRef.current; if (!a) return; const onTime = () => setTime(a.currentTime); const onMeta = () => { setDuration(a.duration); setLoaded(true); }; const onEnd = () => setPlaying(false); a.addEventListener('timeupdate', onTime); a.addEventListener('loadedmetadata', onMeta); a.addEventListener('ended', onEnd); return () => { a.removeEventListener('timeupdate', onTime); a.removeEventListener('loadedmetadata', onMeta); a.removeEventListener('ended', onEnd); }; }, []); const toggle = () => { const a = audioRef.current; if (!a) return; if (playing) { a.pause(); setPlaying(false); } else { a.play(); setPlaying(true); } }; const seek = (e) => { const a = audioRef.current; if (!a || !duration) return; const rect = e.currentTarget.getBoundingClientRect(); const pct = (e.clientX - rect.left) / rect.width; a.currentTime = pct * duration; }; const fmt = (s) => { if (!s || isNaN(s)) return '0:00'; const m = Math.floor(s / 60); const ss = Math.floor(s % 60).toString().padStart(2, '0'); return `${m}:${ss}`; }; const pct = duration ? (time / duration) * 100 : 0; return (
JV
Campaign Song

Vote Vinson

Press play. Turn it up. Share it with a neighbor.

{fmt(time)} {loaded ? fmt(duration) : '—:—'}
Political advertisement paid for and approved by Jancie Vinson, Candidate for Alachua County School Board, District 5.
); } /* ---------- Song Share Buttons ---------- */ function SongShare() { const [copied, setCopied] = useState(false); const songUrl = 'https://jancievinson.com/#campaign-song'; const shareText = "Listen to Jancie Vinson's campaign song — vote August 18, 2026 for Alachua County School Board, District 5!"; const links = { facebook: `https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(songUrl)}`, twitter: `https://twitter.com/intent/tweet?url=${encodeURIComponent(songUrl)}&text=${encodeURIComponent(shareText)}`, sms: `sms:?&body=${encodeURIComponent(shareText + ' ' + songUrl)}`, email: `mailto:?subject=${encodeURIComponent("Jancie Vinson's Campaign Song")}&body=${encodeURIComponent(shareText + '\n\n' + songUrl)}`, }; const copyLink = async () => { try { await navigator.clipboard.writeText(songUrl); setCopied(true); setTimeout(() => setCopied(false), 2000); } catch (e) { // fallback const ta = document.createElement('textarea'); ta.value = songUrl; document.body.appendChild(ta); ta.select(); document.execCommand('copy'); document.body.removeChild(ta); setCopied(true); setTimeout(() => setCopied(false), 2000); } }; return (
Share the Song
); } /* ---------- Support (donate by mail) ---------- */ function Support() { return (
Power the Campaign

Support Jancie

This is a grassroots campaign — powered by neighbors, families, and friends. Mail your contribution today.

Mail Your Contribution
Make checks payable to
Jancie Vinson Campaign
Send to
{CAMPAIGN_ADDRESS_LINE1}
{CAMPAIGN_ADDRESS_LINE2}

Every gift moves us forward.

Please include the following with your check so we can comply with Florida campaign-finance law:

  • Full legal name
  • Home address (street, city, zip)
  • Occupation
  • Employer

Suggested levels: $25 · $50 · $100 · $250 · $500 · $1,000

Contributions to Jancie Vinson for Alachua County School Board are not tax-deductible. Florida law prohibits contributions in excess of $1,000 per individual per election from any source.

); } /* ---------- Voter Info ---------- */ function VoterInfo() { return (
Mark Your Calendar

Key Election Dates

Make a plan. Vote your values.

Voter Registration Deadline

Last Day to Register

Jul 20
Monday · 2026

Register or update your registration online or in person.

Register to Vote →
Vote-by-Mail / Early Voting

Early Voting Period

Aug 8 – 16
Saturday – Sunday

Request a vote-by-mail ballot or vote early in person at any Alachua County early-voting site.

Find a Location →
Primary Election Day

Vote at Your Precinct

Aug 18
Tuesday · 7am – 7pm

Polls open from 7am to 7pm. Bring a valid photo and signature ID.

Find My Precinct →
); } /* ---------- Contact ---------- */ function ContactForm() { const [form, setForm] = useState({ name: '', email: '', phone: '', subject: 'General', message: '' }); const [submitted, setSubmitted] = useState(false); function handleSubmit(e) { e.preventDefault(); const body = `Name: ${form.name}%0D%0A` + `Email: ${form.email}%0D%0A` + `Phone: ${form.phone}%0D%0A%0D%0A` + `${encodeURIComponent(form.message)}`; window.location.href = `mailto:${CAMPAIGN_EMAIL}?subject=${encodeURIComponent('[Website] ' + form.subject)}&body=${body}`; setSubmitted(true); } return (
{submitted && (
✓ Your email client should have opened. If not, please email {CAMPAIGN_EMAIL} directly.
)}
setForm({ ...form, name: e.target.value })} />
setForm({ ...form, email: e.target.value })} />
setForm({ ...form, phone: e.target.value })} />