Skip to content

Commit cb3eef6

Browse files
committed
docs: think through featured content requirements and layout trade-offs
Analyzes the data model gap (repos not yet in snapshot), evaluates layout options for the home page and work index, and proposes an implementation sequence for highlighting Forms, Messaging, Document Extractor, and Forms Lab.
1 parent f85cb00 commit cb3eef6

1 file changed

Lines changed: 189 additions & 0 deletions

File tree

docs/featured-content.md

Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
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

Comments
 (0)