// programs-index.jsx — RoCo Arts Council programs directory const PI = { paper: "#FBF7EE", stone: "#E8E2D3", navy: "#01234B", ink: "#1F1B2E", mute: "#6B6577", council: "#45217A", councilDeep: "#2B1450", councilLight: "#B59FD4", councilWhisper: "#EFE7F8", pine: "#2F7A2E", meadow: "#78BE4D", yellow: "#F3CF03", coral: "#FF7A5C", }; const PROGRAMS_MOCK = [ { id: "barn-quilt-wall", years: "2014 — ongoing", title: "The Barn Quilt Wall", subtitle: "Painted barn-quilt panels you can see from the highway", status: "open-call", statusLabel: "Open call · 2027 panels", currentWork: "Six new panels. Proposals due Mar 14.", description: "Twelve large-scale painted quilt blocks on barns and grain elevators across Rooks County. Designed by neighbors, painted by volunteers, mounted with a borrowed lift. Six more going up in 2027.", stats: [{ n: "12", l: "panels up" }, { n: "7", l: "towns" }], }, { id: "downtown-mural-project", years: "2019 — ongoing", title: "The Downtown Mural Project", subtitle: "Painted walls on Main Street and the alley behind it", status: "in-progress", statusLabel: "In progress", currentWork: "The Garrison Avenue mural · finishing this fall", description: "Eight murals on the buildings of downtown Stockton and Plainville — most of them painted with the building owner's permission and a folding ladder. We commission one new one a year.", stats: [{ n: "8", l: "murals up" }, { n: "2", l: "downtowns" }], }, { id: "vending-machine-art-shop", years: "Opening Spring 2027", title: "The Vending Machine Art Shop", subtitle: "A converted cigarette machine, dispensing $5 art, in the Annex lobby", status: "coming-soon", statusLabel: "Opening Spring 2027", currentWork: "We'll tell you when it opens.", description: "A 1970s cigarette machine, restored to working order, dispensing tiny artworks by RoCo artists for $5 each. Pulled by hand. Twenty-two slots. Opening at the Annex in Spring 2027.", stats: [{ n: "22", l: "slots" }, { n: "$5", l: "per pull" }], }, { id: "silhouette-project", years: "2008 — 2014", title: "The Silhouette Project", subtitle: "Every kindergartner's profile, cut from black paper, 2008 – 2014", status: "retired", statusLabel: "Retired · 2014", currentWork: null, description: "For six years, every kindergartner in Rooks County sat for a silhouette — a profile traced from a shadow on a sheet, cut from black paper, sent home with a frame. We made 412 of them. Then we stopped.", stats: [{ n: "412", l: "silhouettes cut" }, { n: "6", l: "school years" }], }, ]; const STATUS_CONFIG = { "open-call": { bg: PI.yellow, color: PI.councilDeep, dot: PI.councilDeep, label: "Open call" }, "in-progress": { bg: PI.pine, color: "#FBF7EE", dot: PI.meadow, label: "In progress" }, "coming-soon": { bg: PI.councilWhisper,color: PI.council, dot: PI.councilLight,label: "Opening soon" }, "retired": { bg: PI.stone, color: PI.mute, dot: PI.mute, label: "Retired" }, }; function ProgramsNav() { const items = [ { label: "What's on", stream: "events", path: "#/events" }, { label: "Artists", stream: "artists", path: "#/artists" }, { label: "Programs", stream: "council", path: "#/programs", active: true }, { label: "News", stream: "news", path: "#/news" }, { label: "Visit", stream: "council", path: "#/about" }, ]; return (
News See what's on
); } function ProgramsFooter() { return ( ); } function ProgramCard({ p, index }) { const imageRight = index % 2 === 0; // even = content left / image right, odd = image left / content right const contentCol = (
{/* Year + subtitle */}
{p.years} {p.subtitle}
{/* Title */}

{p.title}

{/* Description */}

{p.description}

{/* Stats + CTA */}
{p.stats.map((s, i) => (
{s.n} {s.l}
))}
{p.status === "coming-soon" ? ( Get notified ) : ( Read the program → )}
); const imageCol = (
{p.title}
); return (
{imageRight ? <>{contentCol}{imageCol} : <>{imageCol}{contentCol}}
); } function ProgramsIndex() { const [programs, setPrograms] = React.useState(PROGRAMS_MOCK); React.useEffect(() => { if (!ROCO_WP.useMockData) { API.programs().then(data => { if (data && data.length) setPrograms(data); }).catch(() => {}); } }, []); const openCall = programs.find(p => p.status === "open-call"); return (
{/* Hero */}
{/* Left: headline + body + CTAs */}
The Council · Programs

Long, slow,
county-wide.

Programs are the bigger things — the ones that aren't done after one Saturday. They take years, they outlast volunteers, and they're the reason the Council exists.

{/* Right: big stat */}
{programs.length}
Programs on the page
Some running, some on the kitchen table, some retired into the archive.
{/* Open call strip */} {openCall && (
Open call · live now
{openCall.title}
Postmarked Mar 14, 2027 · $250 honorarium · open to Rooks County residents
Read the open call →
)} {/* List header */}
The list

Every program, listed.

Sorted by what's most active first. Each card shows when it's running and what's happening right now.

{/* Program cards */}
{programs.map((p, i) => )}
{/* How it works */}
How it works

What makes a program a program.

A program is bigger than a class and longer-lived than a season. It outlasts volunteers, gets a name people repeat, and turns into a thing the county does.

Anyone can propose one. Most don't make it past the kitchen table. The ones that do, get put on this page.

{[ { n: "01", title: "A name and a sketch.", body: "Two sentences and a paper bag drawing. Email it or drop it at the Annex." }, { n: "02", title: "A small first try.", body: "We give it one Saturday. If nobody comes, we know." }, { n: "03", title: "A second year.", body: "If a program makes it to year two it gets a budget line and a page on this site." }, { n: "04", title: "A retirement, eventually.", body: "Most programs end well before they end badly. The archive is where they live after." }, ].map((step, i) => (
{step.n}
{step.title}
{step.body}
))}
); } window.ProgramsIndex = ProgramsIndex; window.ProgramsNav = ProgramsNav; window.ProgramsFooter = ProgramsFooter;