|
| 1 | +# Featured content: design and requirements |
| 2 | + |
| 3 | +This document thinks through how to present Flexion's featured projects — Forms, Messaging (Notify), Document Extractor, and Forms Lab — within the existing site structure. |
| 4 | + |
| 5 | +## Goals |
| 6 | + |
| 7 | +1. **Signal intentionality.** Visitors should immediately understand that these four repos represent Flexion's deliberate, invested product work — not just code that happens to be public. |
| 8 | +2. **Stay part of the collection.** Featured projects are *members* of the broader catalog, not a separate silo. They should feel like the "front shelf" of the same library. |
| 9 | +3. **Invite exploration.** A visitor drawn in by a featured project should naturally discover the rest of the work index, and vice versa. |
| 10 | +4. **Scale gracefully.** The design should work today with 4 featured projects and still work with 6–8 later, without requiring a layout overhaul. |
| 11 | + |
| 12 | +## Current state |
| 13 | + |
| 14 | +- The home page has a "Featured labs" section with a 3-column grid, but no repos are marked `featured: true` in `overrides.yml` yet — so it renders empty. |
| 15 | +- The work index already sorts featured repos first. |
| 16 | +- `document-extractor` exists in `repos.json`. `forms`, `messaging`, and `forms-lab` do **not** yet appear in the GitHub snapshot (they may be private or pending creation). |
| 17 | +- Rich content overlays already exist for `forms`, `messaging`, and `document-extractor` in `content/work/`. |
| 18 | + |
| 19 | +## Data model gap |
| 20 | + |
| 21 | +The merge logic (`src/catalog/merge.ts`) only produces entries for repos present in `repos.json`. This means: |
| 22 | + |
| 23 | +- If `forms`, `messaging`, or `forms-lab` don't exist as public repos in the Flexion org, they can't appear on the site at all under the current pipeline. |
| 24 | +- Their overlay content is currently orphaned. |
| 25 | + |
| 26 | +### Options for handling missing repos |
| 27 | + |
| 28 | +| Approach | Pros | Cons | |
| 29 | +|----------|------|------| |
| 30 | +| **A. Create the public repos first, let refresh pick them up** | Zero code changes needed. Data model stays simple. Overlays immediately attach. | Requires the repos to actually exist and be public before the site can show them. | |
| 31 | +| **B. Add synthetic entries to `repos.json` by hand** | Quick unblock. | Breaks the invariant that `repos.json` is machine-generated and refreshed daily — hand-edits get overwritten. | |
| 32 | +| **C. Extend merge logic to create entries from overlays alone** | Allows content-first authoring (write the overlay, mark featured, even before the repo goes public). | Adds complexity. Synthetic entries lack GitHub metadata (stars, license, last push). Need sentinel values or nullable display logic. | |
| 33 | +| **D. Add a `data/manual-entries.yml` file for curated repos not yet in the org** | Separates concerns from `repos.json`. Supports a "coming soon" or "private-with-public-face" pattern cleanly. | Another data source to merge. Needs clear lifecycle (remove entry once repo goes public and refresh picks it up). | |
| 34 | + |
| 35 | +**Recommendation:** Approach **A** is simplest if the repos will be public soon. If we need to ship the featured section before they go public, approach **D** gives the cleanest separation — a small, hand-authored file that explicitly owns synthetic entries and can be retired per-repo as they appear in the refresh pipeline. |
| 36 | + |
| 37 | +--- |
| 38 | + |
| 39 | +## Layout and presentation |
| 40 | + |
| 41 | +### Home page: featured section |
| 42 | + |
| 43 | +The current `home-featured__grid` (3-column at 48rem+) is appropriate for 3–4 cards. But the standard `RepoCard` — name, one-line summary, tier/category badges — is designed for browsing, not for *selling* a product. Featured projects deserve more presence. |
| 44 | + |
| 45 | +#### Option 1: Enhanced card (recommended) |
| 46 | + |
| 47 | +Keep the grid layout but introduce a `FeaturedCard` variant that provides: |
| 48 | + |
| 49 | +- **Title** (from overlay, e.g. "Forms" not "forms") |
| 50 | +- **Tagline/summary** (the overlay's `summary` field, already written to be compelling) |
| 51 | +- **2–3 bullet "value props"** — a new optional field in the overlay front-matter, e.g. `highlights: [...]` |
| 52 | +- **CTA link** to the detail page |
| 53 | + |
| 54 | +Why: The featured section lives on the home page, which is a marketing surface. The current RepoCard is neutral/informational; a featured card should persuade. |
| 55 | + |
| 56 | +#### Option 2: Hero spotlight + carousel |
| 57 | + |
| 58 | +One project dominates above the fold; others are secondary. More dramatic, but: |
| 59 | +- Introduces ordering politics (which one is "first"?) |
| 60 | +- Doesn't scale to 6+ without pagination |
| 61 | +- Adds JS complexity for carousel behavior |
| 62 | + |
| 63 | +#### Option 3: Keep current RepoCard, just mark them featured |
| 64 | + |
| 65 | +Simplest change (just set `featured: true`), but doesn't visually distinguish featured work from the catalog list below. Misses the goal of signaling intentionality. |
| 66 | + |
| 67 | +**Recommendation:** Option 1 — an enhanced card in the existing grid. It's the minimum change that achieves the "front shelf" feeling without adding interaction complexity. |
| 68 | + |
| 69 | +### Work index: integration between featured and full catalog |
| 70 | + |
| 71 | +The work index currently sorts featured repos to the top, which is good. But there's no visual break between them and the rest. Options: |
| 72 | + |
| 73 | +#### A. Visual separator with section heading (recommended) |
| 74 | + |
| 75 | +Add a lightweight heading ("Featured" or "Highlighted work") above the featured cluster, with a subtle divider before the rest. Featured repos still live *in* the list (same filter/sort controls apply), but they're visually grouped. |
| 76 | + |
| 77 | +- Preserves "part of the same collection" feeling |
| 78 | +- Featured repos still respond to tier/category filters (if a user filters to "Tool" and a featured repo is a Tool, it stays; if not, it correctly disappears) |
| 79 | +- Low implementation cost |
| 80 | + |
| 81 | +#### B. Separate "pinned" section outside the filter |
| 82 | + |
| 83 | +Featured repos get a fixed section above the filterable list, unaffected by filters. |
| 84 | + |
| 85 | +- Guarantees visibility regardless of filter state |
| 86 | +- But breaks the "same collection" mental model — they become a separate thing |
| 87 | + |
| 88 | +#### C. Visual emphasis only (border/background) |
| 89 | + |
| 90 | +Featured repos get a subtle highlight (accent border, background tint) but stay in normal sort flow with no heading. |
| 91 | + |
| 92 | +- Lightest touch |
| 93 | +- May be too subtle; visitors won't understand *why* some cards look different |
| 94 | + |
| 95 | +**Recommendation:** Option A — section heading within the list. Featured repos are still part of the filterable collection, but the heading signals "start here." If filtered out by tier/category, the heading hides too, which is correct behavior. |
| 96 | + |
| 97 | +### Detail pages: connecting back |
| 98 | + |
| 99 | +Each featured repo already gets a full detail page from the existing `WorkDetail` template. No structural change needed there. But consider: |
| 100 | + |
| 101 | +- **Cross-linking between featured projects.** If Forms and Forms Lab are related, a "Related projects" section at the bottom of each detail page would help visitors discover the family. This can be driven by a `related: [forms-lab]` field in the overlay front-matter. |
| 102 | +- **"Back to featured" breadcrumb vs. "Back to all work."** Since featured repos are *part of* the catalog, the breadcrumb should go to `/work/` (the full index), not to a separate featured page. This reinforces the "same collection" principle. |
| 103 | + |
| 104 | +--- |
| 105 | + |
| 106 | +## Content requirements per featured project |
| 107 | + |
| 108 | +Each featured overlay should communicate: |
| 109 | + |
| 110 | +| Field | Purpose | Example | |
| 111 | +|-------|---------|---------| |
| 112 | +| `title` | Human-friendly name | "Forms" | |
| 113 | +| `summary` | One-sentence value prop (used on cards) | "Accessible, USWDS-aligned form experiences..." | |
| 114 | +| `highlights` (new) | 2–3 bullet differentiators for the featured card | ["WCAG 2.1 AA conformant", "Multi-step with save-and-resume", "Agency-agnostic"] | |
| 115 | +| Body `## What it solves` | Problem framing | (already written for 3 of 4) | |
| 116 | +| Body `## Who it's for` | Audience | (already written for 3 of 4) | |
| 117 | +| Body `## Status` | Maturity signal | (already written for 3 of 4) | |
| 118 | +| Body `## Get started` | Entry point for developers | (already written for 3 of 4) | |
| 119 | + |
| 120 | +**Forms Lab** still needs its overlay (`content/work/forms-lab.md`). |
| 121 | + |
| 122 | +--- |
| 123 | + |
| 124 | +## What "Forms Lab" is relative to "Forms" |
| 125 | + |
| 126 | +This needs clarification for content purposes: |
| 127 | + |
| 128 | +- If Forms Lab is an **experimental playground** (try components, submit designs), it should be positioned as a companion/sandbox — "where agencies experiment before committing to Forms." |
| 129 | +- If it's a **documentation/demo site**, it's more of a resource than a product — maybe not "featured" on its own but linked from the Forms detail page. |
| 130 | +- If it's a **separate product** (different use case, different audience), it deserves its own full overlay with distinct positioning. |
| 131 | + |
| 132 | +The layout accommodates any of these — the question is purely content/positioning. |
| 133 | + |
| 134 | +--- |
| 135 | + |
| 136 | +## Navigation and discovery flow |
| 137 | + |
| 138 | +``` |
| 139 | +Home page |
| 140 | +├── Featured labs (4 enhanced cards) ──→ /work/{name}/ (detail) |
| 141 | +├── "Explore our work" CTA ──────────→ /work/ (full index) |
| 142 | +└── Stats section (public projects count, etc.) |
| 143 | +
|
| 144 | +Work index (/work/) |
| 145 | +├── [Featured heading] |
| 146 | +│ ├── Featured repo card ──────────→ /work/{name}/ |
| 147 | +│ ├── Featured repo card ──────────→ /work/{name}/ |
| 148 | +│ └── ... |
| 149 | +├── [All work heading] |
| 150 | +│ ├── Repo card ───────────────────→ /work/{name}/ |
| 151 | +│ └── ... |
| 152 | +└── Filter controls (tier, category) |
| 153 | +
|
| 154 | +Detail page (/work/{name}/) |
| 155 | +├── Full content (overlay body) |
| 156 | +├── Stewardship sidebar |
| 157 | +├── "View on GitHub" link |
| 158 | +└── Related projects (optional, future) |
| 159 | +``` |
| 160 | + |
| 161 | +This means: |
| 162 | +- Home → featured detail: 1 click |
| 163 | +- Home → full catalog: 1 click |
| 164 | +- Featured detail → full catalog: 1 click (breadcrumb / header nav) |
| 165 | +- Full catalog → featured detail: 0 extra clicks (they're in the list) |
| 166 | + |
| 167 | +No dead ends. Featured content is always reachable from the catalog, and the catalog is always reachable from featured content. |
| 168 | + |
| 169 | +--- |
| 170 | + |
| 171 | +## Implementation sequence |
| 172 | + |
| 173 | +1. **Data:** Ensure repos exist in `repos.json` (wait for public repos) or implement approach D (manual entries). |
| 174 | +2. **Overrides:** Mark the four repos as `featured: true`, `tier: active`, `category: product` in `overrides.yml`. |
| 175 | +3. **Content:** Write `content/work/forms-lab.md`. Add `highlights` field to all four overlays. |
| 176 | +4. **Component:** Build `FeaturedCard` component (or extend `RepoCard` with a `variant` prop). |
| 177 | +5. **Home page:** Wire `FeaturedCard` into the existing `home-featured__grid`. |
| 178 | +6. **Work index:** Add section heading logic for featured cluster. |
| 179 | +7. **Stretch:** Add `related` field support and render cross-links on detail pages. |
| 180 | + |
| 181 | +--- |
| 182 | + |
| 183 | +## Open questions |
| 184 | + |
| 185 | +1. Are `forms`, `messaging`, and `forms-lab` going to be public repos in the Flexion org? If not, which data approach (A–D) do we want? |
| 186 | +2. What is Forms Lab's relationship to Forms — companion sandbox, docs site, or independent product? |
| 187 | +3. Should the featured section on the home page have its own heading/intro copy, or just the grid? |
| 188 | +4. Do we want a cap on featured projects (e.g., max 6) to protect the home page layout? |
| 189 | +5. For the `highlights` field — should these be auto-derived from the overlay body, or always hand-authored? |
0 commit comments