Design + build spec
Brand, tokens, type scale, button system — the design contract.
ACTS — Design + Build spec
The one source of truth. Build to THIS, not from scratch. Ground everything in Bryan's Phase 1 v2 deck (docs/…Phase 1- V2 Bryan.pdf) and Steve's notes.
0. FIGMA IS THE SOURCE OF TRUTH (Bryan, 2026-08-12)
The Figma files are mostly right — when a screen differs from Figma, match Figma (token-mapped per skin, never raw hex). Rules of engagement:
- Files: "acts playground" (design frames) + the Make files ("Prayer Request Designs" v64+, "Pray Screen Variations", "Prayer Help Screen"). Newest iteration wins; the Make file's live version is newest of all.
- Known-good frames (node ids in acts playground): Ask wizard = "Prayer Request Designs" 18:1280 (+ Make v64 Classic variant). Pull via the Figma desktop MCP (
get_design_contexton design frames; Make files render live only — screenshot the desktop app). - How Bryan flags the right frame: EITHER right-click the frame → Copy link (the node-id pins it exactly), OR prefix the frame name with "✅", OR keep current-truth frames on one page named "CURRENT". Any of these beats describing the design in words.
- CTA spec (v64): massive 40px emoji flush left w/ soft drop shadow, no inner circles, title + reward stacked LEFT-justified after the icon, full-width, asymmetric padding.
.btn-bigimplements this — never fork it. - Old-style screens are bugs, not variants. When touching a screen, check it against its Figma frame and bring it forward.
1. Design rules (non-negotiable)
Brand. Cormorant Garamond (display, italic for feeling) + Instrument Sans (UI/body). Signature #ec612b vermillion. Four ring/layer colors: Me #ec612b · Another #e08a52 · Parish #4e8f5f · World #6d95c4. Warm gradient canvas (cream→terracotta), floating white cards with soft shadow, vermillion gradient Pray button. Photography of hands/people ("every image shows the helpers").
8pt grid (Apple). Spacing = multiples of 8, 4pt sub-step only. Tailwind p-2/p-4/p-6/p-8, gap-2/gap-4, mt-2/mt-4/mt-6. Never mt-1.5, p-5, or arbitrary -[..px] spacing. Touch targets ≥ 44pt.
Type scale (named, never arbitrary). largeTitle 34 · title 28 · headline 20 · body 17 · subhead 15 · caption 13. Classes: .t-hero .t-title .t-headline .t-body .t-sub .t-caption .eyebrow. Body line-height ~1.5.
One token source. app/globals.css @theme + [data-skin]. No hardcoded hex in components.
Pills, not dropdowns. For small option sets, use pill selectors (components/PillSelect / the .pill class), not <select>. Applies across the app forms (ask, offer, upload).
Selection + CTA consolidation (Bryan, 2026-08-11).
- Selected pill = black (ink) everywhere — no per-section accent on selection.
- CTA buttons = the selected skin's brand color (
--color-brand/--pray-gradient), one CTA color per design system. Section accents survive only in small identity cues (marks, eyebrows, counts). - View switcher = the deck's icon segmented control (grid · play · map pill, active = filled ink circle) on Home, Immersive, and Map.
- Pills are multi-select where several can be true (e.g. relationships — a mother AND a father). First code fills the FK column; the full list is kept in the activity log.
2. Screens — "the meat" (from the deck, 13 screens)
Native app (/app/*), skinnable. Home has three views; a persistent bottom nav Give · Receive · Donate.
- Home — Cards — one feed mixing open requests + answered-prayer stories. Card: photo · ACT TYPE eyebrow · title · "N people prayed" · I'll pray. Top switch: Cards / Immersive / Map.
- Home — Immersive — full-screen, one act fills the display, story overlaid, right-rail actions (pray count · Share · Next), big I'll pray, swipe up for next. This IS the 18–25 "night/immersive" skin.
- Home — Map — nearby acts on a map (selected pin big/bold), filters Nearby / Completed / Requests, list with distances.
- Act Detail — Open — hero photo · "PRAYER · ON BEHALF" · title · "Asked by Linda · for her mom" · "12 people have prayed" · I'll pray + Share + Invite.
- Act Detail — Geographic — hero · "CANDLE · AT A PLACE" · map+pin · "1.2 mi away" + Directions · "4 people have visited" · I'll light a candle + Share + Invite.
- Request — "I Need an Act" — dominant PRAY, then layer (me/another/parish/world), ask (Prayer/Candle/Visit), mode (once/group), "I have a different act ›".
- Completion loop — four candidates, testable side-by-side: SMS reply · two-tap · trust · timer (5:00 auto-complete). Trust is the default/lead (agree to pray, no tracking — fits the no-surveillance ethos). Completion creates the story.
- Story Card — "Susie prayed for Linda's mom", photo, "12 prayed · acts.app/a/linda", Share to Facebook + Copy link. Every completed act makes one.
- Helper Offer flow — "I'm headed to [place]; who wants [act] while I'm there?"
- Parish room — "12 praying right now", avatar stack, Join, "Fr. Miguel asked the parish to pray at 8:00 PM".
- Widget — daily "Pray at noon" moment + day-streak ring + Near You.
- Guest → member ladder, Witness / signup, Two sides + moderator.
- Donate + sponsor-donor (pledge per act / per pilgrimage day).
3. Steve's required features (his notes — must be present)
Gap list Steve flagged (Phase 1 missing vs. pitch):
- Place-anchored acts (candle at a named church, grave visit, shrine).
- Helper offer flow (two-sided, not just seeker requests).
- Proof of act — photo confirmation + shareable saint/prayer cards.
- Explicit mission catalog (Rosary, novena, candle, adoration, pilgrimage) — not one generic Pray.
- Gamification economy — points ("Heaven/Mission Credits"), effort-scaled rewards, category badges (Pilgrim, Hospital Intercessor, …), levels.
- Donation micro-gifts + sponsor-donor / walk-a-thon pledges.
- Geo-targeted tags — hospitals, airports, test centers, prisons, stadiums.
4. Skins (native app only, not admin hub)
acts (default brand) · modern · night(=immersive 18–25). lib/skins.ts + [data-skin] blocks. Hub picks which skin tester links open in.
5. Build order (proposed)
- Lock the grid/type system (globals type scale) — foundation.
- Home — Cards (the center) + bottom Give·Receive·Donate nav.
- Act Detail — Open + Geographic.
- Story Card + completion (start with two-tap + trust).
- Home — Immersive (night skin) + Map.
- Request flow polish · Parish room · Offer flow · Donate · gamification surfacing.