Skip to content

Commit 8d28219

Browse files
authored
Merge pull request #6 from flexion/worktree-work-page-navigation
feat(work): classify repos and fix sort order
2 parents d15b225 + 4465592 commit 8d28219

4 files changed

Lines changed: 184 additions & 14 deletions

File tree

data/overrides.yml

Lines changed: 167 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# Hand-authored overrides keyed by repo name.
22
# See docs/catalog.md for supported fields.
33

4+
# ─── Active Flexion-originated projects ───────────────────────────────────────
5+
46
forms:
57
tier: active
68
category: product
@@ -11,12 +13,175 @@ forms-lab:
1113
category: product
1214
featured: true
1315

14-
document-extractor:
16+
flexion-notify:
1517
tier: active
1618
category: product
1719
featured: true
1820

19-
flexion-notify:
21+
devops-deployment-metrics:
22+
tier: active
23+
category: tool
24+
featured: true
25+
26+
flexion.github.io:
27+
tier: active
28+
category: tool
29+
30+
claude-domestique:
31+
tier: active
32+
category: tool
33+
34+
aws-codebuild-runner-project-tf-module:
35+
tier: active
36+
category: tool
37+
38+
odoo-ai-assistant:
39+
tier: active
40+
category: tool
41+
42+
flexcoins:
43+
tier: active
44+
category: product
45+
46+
# ─── Active forks (significant project contributions) ─────────────────────────
47+
48+
ef-cms:
49+
tier: active
50+
51+
ef-cms-ustc:
52+
tier: active
53+
54+
notifications-admin:
55+
tier: active
56+
57+
notifications-api:
58+
tier: active
59+
60+
document-extractor:
2061
tier: active
2162
category: product
2263
featured: true
64+
65+
uswds:
66+
tier: active
67+
68+
uswds-site:
69+
tier: active
70+
71+
uswds-elements:
72+
tier: active
73+
74+
# ─── Active prototypes (bid/design work) ──────────────────────────────────────
75+
76+
Destin-Municipal-Prototype:
77+
tier: active
78+
category: prototype
79+
80+
Destin-Design-Repo:
81+
tier: active
82+
category: prototype
83+
84+
# ─── Categorized (unreviewed tier, but with a useful category) ────────────────
85+
86+
bash_shell_script_starter:
87+
category: tool
88+
89+
flexion-sig-security:
90+
category: tool
91+
92+
flexion-sig-security-tf-modules:
93+
category: tool
94+
95+
msab-arts-locator:
96+
category: product
97+
98+
tech-radar-generator:
99+
category: tool
100+
101+
check-contributor-allowlist-action:
102+
category: tool
103+
104+
strapi-provider-upload-aws-s3-auth:
105+
category: tool
106+
107+
jubilant-computing-machine:
108+
category: tool
109+
110+
10x-uswds-forms:
111+
category: prototype
112+
113+
10x-uswds-dataviz:
114+
category: prototype
115+
116+
epa-prototype:
117+
category: prototype
118+
119+
flexion-ads-18f-response:
120+
category: prototype
121+
122+
flexion-ads-18f-save-my-picnic:
123+
category: prototype
124+
125+
qpp-design-exercise:
126+
category: prototype
127+
128+
Planet-Express:
129+
category: tool
130+
131+
asset-manager:
132+
category: prototype
133+
134+
# ─── Hidden (no portfolio value, visible only on Health page) ─────────────────
135+
136+
# Dead forks (2012–2015, no stars, no meaningful contribution)
137+
node-js-crate:
138+
hidden: true
139+
140+
coffeescript-koans:
141+
hidden: true
142+
143+
javascript-koans:
144+
hidden: true
145+
146+
pallet:
147+
hidden: true
148+
149+
django-axes:
150+
hidden: true
151+
152+
django-ckeditor:
153+
hidden: true
154+
155+
custom-post-type-ui:
156+
hidden: true
157+
158+
django:
159+
hidden: true
160+
161+
docker-karma-protractor:
162+
hidden: true
163+
164+
hubot-google-hangouts:
165+
hidden: true
166+
167+
lookml:
168+
hidden: true
169+
170+
# Dead non-forks (no README, no license, no description, or clearly abandoned)
171+
pig-latin-cli:
172+
hidden: true
173+
174+
mini-project-1:
175+
hidden: true
176+
177+
cdk-playground:
178+
hidden: true
179+
180+
mob-timer:
181+
hidden: true
182+
183+
uswds-react:
184+
hidden: true
185+
186+
radar:
187+
hidden: true

src/pages/work/health.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,14 @@ export function Health({
3737
config: SiteConfig
3838
showPerRepo: boolean
3939
}) {
40-
const visible = catalog.filter((e) => !e.hidden)
41-
const evaluations = visible.map((e) => ({ entry: e, evaluation: evaluateRepo(e, now) }))
40+
const evaluations = catalog.map((e) => ({ entry: e, evaluation: evaluateRepo(e, now) }))
4241
const passing = evaluations.filter(({ evaluation }) => evaluation.overallPass).length
4342

4443
return (
4544
<Layout title="Repo health" config={config}>
4645
<h1>Repo health</h1>
4746
<p class="health-summary">
48-
<strong>{passing}</strong> of <strong>{visible.length}</strong> repos meet the documented standards.
47+
<strong>{passing}</strong> of <strong>{catalog.length}</strong> repos meet the documented standards.
4948
</p>
5049

5150
{showPerRepo ? (

src/pages/work/index.tsx

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Layout } from '../../design/common/layout'
22
import { RepoCard } from '../../design/components/repo-card'
33
import { Select } from '../../design/components/select'
44
import type { Catalog, CatalogEntry } from '../../catalog/types'
5+
import { url } from '../../build/config'
56
import type { SiteConfig } from '../../build/config'
67

78
declare module 'hono/jsx' {
@@ -26,9 +27,11 @@ export function WorkIndex({
2627
<Layout title="Work" config={config}>
2728
<h1>Our work</h1>
2829
<p class="work-index__intro">
29-
Every public repository Flexion maintains. Active projects are stewarded; as-is
30-
projects are available without promised maintenance; archived projects are no
31-
longer updated.
30+
Flexion's public portfolio — tools we've built, prototypes we've shipped, and
31+
open-source projects we actively contribute to. Use the filters to explore by
32+
tier or category. See our{' '}
33+
<a href={url('/work/health/', config.basePath)}>stewardship scorecard</a> for
34+
how each repo measures up.
3235
</p>
3336
<catalog-filter>
3437
<form class="catalog-filter">
@@ -37,9 +40,9 @@ export function WorkIndex({
3740
<Select name="tier" label="Tier">
3841
<option value="">All</option>
3942
<option value="active">Active</option>
43+
<option value="unreviewed">Unreviewed</option>
4044
<option value="as-is">As-is</option>
4145
<option value="archived">Archived</option>
42-
<option value="unreviewed">Unreviewed</option>
4346
</Select>
4447
<Select name="category" label="Category">
4548
<option value="">All</option>
@@ -80,8 +83,8 @@ function defaultSort(a: CatalogEntry, b: CatalogEntry): number {
8083
if (a.featured !== b.featured) return a.featured ? -1 : 1
8184
const tierRank: Record<CatalogEntry['tier'], number> = {
8285
active: 0,
83-
'as-is': 1,
84-
unreviewed: 2,
86+
unreviewed: 1,
87+
'as-is': 2,
8588
archived: 3,
8689
}
8790
if (tierRank[a.tier] !== tierRank[b.tier]) return tierRank[a.tier] - tierRank[b.tier]

tests/views/health.test.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,14 @@ describe('Health', () => {
1313
expect(html).toMatch(/of\s+<strong>\d+<\/strong>\s+repos meet the documented standards/)
1414
})
1515

16-
test('renders a table with one row per non-hidden repo', async () => {
16+
test('renders a table with one row per repo including hidden', async () => {
17+
const catalog = fixtureCatalog.map((e, i) =>
18+
i === 0 ? { ...e, hidden: true } : e,
19+
)
1720
const html = await renderToHtml(
18-
<Health catalog={fixtureCatalog} now={fixtureNow} config={config} showPerRepo={true} />,
21+
<Health catalog={catalog} now={fixtureNow} config={config} showPerRepo={true} />,
1922
)
20-
for (const entry of fixtureCatalog.filter((e) => !e.hidden)) {
23+
for (const entry of catalog) {
2124
expect(html).toContain(`data-repo="${entry.name}"`)
2225
}
2326
})

0 commit comments

Comments
 (0)