Skip to content

Commit f2efa02

Browse files
committed
Implement comprehensive Home page
Features implemented: - Dataset status section showing: - Generated timestamp from manifest/snapshot - Publisher repository with GitHub link - Commit SHA with link to commit (first 7 chars displayed) - Schema version - Clean grid layout with labels and values - Overall readiness metrics (filter-aware): - Average readiness % (prominent primary card) - Total extensions count - Successes, failures, skipped counts - Total builds count - Filter indicator shows when filters are active - Top 10 failing extensions: - Sorted by failure count (highest first) - Shows rank number, extension name - Displays failure count and readiness % - Visual progress bar showing readiness - Links to /ext/:name with filters preserved - Hover animation with arrow transition - Red left border for visual emphasis - All builds passing celebration: - Large green checkmark icon - Success message when no failures - Adapts message based on filter state - CTA button to view matrix - Primary 'Open Matrix' button in hero - Links to /matrix with filters preserved - Prominent placement in hero section - Quick Start section with feature highlights - Filter & search capabilities - Matrix view explanation - Extension details info - Share links feature CSS updates: - .dataset-status section with status-grid - .overall-stats with filter-indicator - .stat-card-primary with gradient background - .top-failing section with failing-extension-card - Failing extension cards with hover effects - Progress bars with gradient (red to green) - .no-failures-home celebration section - .success-icon-large checkmark - Publisher and commit link styles - Mobile responsive grid layouts Type updates: - Added optional generated_at to Manifest and Snapshot - Added optional publisher object with repo and commit Sample data: - Added generated_at to manifest - Added publisher with sample repo and commit SHA Integration: - Uses useMatrixModel hook for accurate stats - Respects all current filters - Preserves filters in all navigation links - Computes top failing from matrix model data - Shows filter indicator when filters active
1 parent 247cac2 commit f2efa02

4 files changed

Lines changed: 455 additions & 67 deletions

File tree

public/sample-data/manifest.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,10 @@
1717
"channels": ["stable", "dev"],
1818
"platforms": ["alpine", "debian"],
1919
"arches": ["amd64", "arm64"]
20+
},
21+
"generated_at": "2024-01-01T00:00:00Z",
22+
"publisher": {
23+
"repo": "php/extensions",
24+
"commit": "abc123def456789012345678901234567890abcd"
2025
}
2126
}

src/index.css

Lines changed: 251 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,92 @@ body {
177177
background: var(--primary-dark);
178178
}
179179

180+
/* Dataset Status */
181+
.dataset-status {
182+
background: white;
183+
padding: 2rem;
184+
border-radius: 0.5rem;
185+
box-shadow: var(--shadow);
186+
margin-bottom: 2rem;
187+
}
188+
189+
.dataset-status h2 {
190+
font-size: 1.25rem;
191+
font-weight: 600;
192+
margin-bottom: 1.5rem;
193+
color: var(--gray-900);
194+
}
195+
196+
.status-grid {
197+
display: grid;
198+
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
199+
gap: 1.5rem;
200+
}
201+
202+
.status-item {
203+
display: flex;
204+
flex-direction: column;
205+
gap: 0.5rem;
206+
}
207+
208+
.status-label {
209+
font-size: 0.75rem;
210+
font-weight: 600;
211+
text-transform: uppercase;
212+
letter-spacing: 0.05em;
213+
color: var(--gray-500);
214+
}
215+
216+
.status-value {
217+
font-size: 0.875rem;
218+
color: var(--gray-900);
219+
font-weight: 500;
220+
}
221+
222+
.status-value code {
223+
background: var(--gray-100);
224+
padding: 0.25rem 0.5rem;
225+
border-radius: 0.25rem;
226+
font-family: monospace;
227+
font-size: 0.875rem;
228+
}
229+
230+
.publisher-link,
231+
.commit-link {
232+
color: var(--primary);
233+
text-decoration: none;
234+
transition: color 0.2s;
235+
}
236+
237+
.publisher-link:hover,
238+
.commit-link:hover {
239+
color: var(--primary-dark);
240+
text-decoration: underline;
241+
}
242+
243+
/* Overall Stats */
244+
.overall-stats {
245+
background: white;
246+
padding: 2rem;
247+
border-radius: 0.5rem;
248+
box-shadow: var(--shadow);
249+
margin-bottom: 2rem;
250+
}
251+
252+
.overall-stats h2 {
253+
font-size: 1.25rem;
254+
font-weight: 600;
255+
margin-bottom: 1.5rem;
256+
color: var(--gray-900);
257+
}
258+
259+
.filter-indicator {
260+
font-size: 0.875rem;
261+
font-weight: 400;
262+
color: var(--primary);
263+
font-style: italic;
264+
}
265+
180266
.stats-grid {
181267
display: grid;
182268
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
@@ -192,6 +278,19 @@ body {
192278
text-align: center;
193279
}
194280

281+
.stat-card-primary {
282+
background: linear-gradient(135deg, var(--primary) 0%, var(--primary-dark) 100%);
283+
color: white;
284+
}
285+
286+
.stat-card-primary .stat-number {
287+
color: white;
288+
}
289+
290+
.stat-card-primary .stat-label {
291+
color: rgba(255, 255, 255, 0.9);
292+
}
293+
195294
.stat-number {
196295
font-size: 2.5rem;
197296
font-weight: 700;
@@ -205,6 +304,158 @@ body {
205304
font-weight: 500;
206305
}
207306

307+
/* Top Failing Extensions */
308+
.top-failing {
309+
background: white;
310+
padding: 2rem;
311+
border-radius: 0.5rem;
312+
box-shadow: var(--shadow);
313+
margin-bottom: 2rem;
314+
}
315+
316+
.top-failing h2 {
317+
font-size: 1.25rem;
318+
font-weight: 600;
319+
margin-bottom: 0.5rem;
320+
color: var(--gray-900);
321+
}
322+
323+
.section-subtitle {
324+
color: var(--gray-600);
325+
font-size: 0.875rem;
326+
margin-bottom: 1.5rem;
327+
}
328+
329+
.failing-extensions-list {
330+
display: flex;
331+
flex-direction: column;
332+
gap: 0.75rem;
333+
}
334+
335+
.failing-extension-card {
336+
display: flex;
337+
align-items: center;
338+
gap: 1rem;
339+
padding: 1rem;
340+
background: var(--gray-50);
341+
border: 1px solid var(--gray-200);
342+
border-left: 4px solid var(--danger);
343+
border-radius: 0.375rem;
344+
text-decoration: none;
345+
transition: all 0.2s;
346+
}
347+
348+
.failing-extension-card:hover {
349+
background: white;
350+
box-shadow: var(--shadow);
351+
transform: translateX(4px);
352+
}
353+
354+
.failing-rank {
355+
font-size: 1.25rem;
356+
font-weight: 700;
357+
color: var(--gray-400);
358+
min-width: 40px;
359+
text-align: center;
360+
}
361+
362+
.failing-info {
363+
flex: 1;
364+
min-width: 0;
365+
}
366+
367+
.failing-name {
368+
font-size: 1rem;
369+
font-weight: 600;
370+
color: var(--gray-900);
371+
margin-bottom: 0.25rem;
372+
}
373+
374+
.failing-stats {
375+
font-size: 0.875rem;
376+
color: var(--gray-600);
377+
display: flex;
378+
align-items: center;
379+
gap: 0.5rem;
380+
}
381+
382+
.failing-count {
383+
color: var(--danger);
384+
font-weight: 600;
385+
}
386+
387+
.failing-separator {
388+
color: var(--gray-400);
389+
}
390+
391+
.failing-readiness {
392+
color: var(--gray-600);
393+
}
394+
395+
.failing-progress {
396+
width: 100px;
397+
height: 8px;
398+
background: var(--gray-200);
399+
border-radius: 4px;
400+
overflow: hidden;
401+
}
402+
403+
.failing-progress-bar {
404+
height: 100%;
405+
background: linear-gradient(90deg, var(--danger) 0%, var(--success) 100%);
406+
transition: width 0.3s;
407+
}
408+
409+
.failing-arrow {
410+
font-size: 1.5rem;
411+
color: var(--gray-400);
412+
transition: transform 0.2s;
413+
}
414+
415+
.failing-extension-card:hover .failing-arrow {
416+
transform: translateX(4px);
417+
color: var(--primary);
418+
}
419+
420+
/* No Failures Home */
421+
.no-failures-home {
422+
background: white;
423+
padding: 4rem 2rem;
424+
border-radius: 0.5rem;
425+
box-shadow: var(--shadow);
426+
text-align: center;
427+
margin-bottom: 2rem;
428+
}
429+
430+
.success-icon-large {
431+
width: 96px;
432+
height: 96px;
433+
background: var(--success);
434+
color: white;
435+
font-size: 3rem;
436+
font-weight: bold;
437+
border-radius: 50%;
438+
display: flex;
439+
align-items: center;
440+
justify-content: center;
441+
margin: 0 auto 1.5rem;
442+
}
443+
444+
.no-failures-home h2 {
445+
font-size: 1.75rem;
446+
margin-bottom: 1rem;
447+
color: var(--gray-900);
448+
}
449+
450+
.no-failures-home p {
451+
color: var(--gray-600);
452+
font-size: 1rem;
453+
margin-bottom: 2rem;
454+
max-width: 500px;
455+
margin-left: auto;
456+
margin-right: auto;
457+
}
458+
208459
.info-section {
209460
background: white;
210461
padding: 2rem;

0 commit comments

Comments
 (0)