Repository navigation
PBS frontend redesign - #12
Conversation
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
📊 Code Quality Score: 76/100
Was this score accurate? 👍 Yes · 👎 No Scored by GitVelocity · How are scores calculated? |
There was a problem hiding this comment.
🟡 Changes recommended
Visible focus, keyboard scrolling, and zero-value chart rendering issues remain unresolved.
4 open findings
What changed in this PR
Rebuilds the PBS dashboard as a TypeScript, responsive React application with accessible browsing, project dialogs, analytics, routing, and expanded testing.
Changes:
- Introduces normalized project data, URL-backed filtering, sorting, and responsive views.
- Adds reusable UI/layout components and redesigned analytics charts.
- Migrates testing and tooling to Vitest, Playwright, TypeScript, and stricter CI.
| File | Description |
|---|---|
vite.config.ts |
Adds typed Vite/Vitest configuration. |
vite.config.js |
Removes JavaScript Vite configuration. |
tsconfig.node.json |
Configures Node-side TypeScript. |
tsconfig.json |
Adds TypeScript project references. |
tsconfig.app.json |
Configures strict application TypeScript. |
src/utils/sortProjects.js |
Removes legacy sorting utility. |
src/utils/sefariaTools.js |
Removes legacy endpoint utility. |
src/utils/projectPreview.js |
Removes iframe preview utility. |
src/utils/projectDetail.js |
Removes legacy detail helpers. |
src/utils/pagination.js |
Removes page-number pagination. |
src/utils/keywords.js |
Removes legacy keyword aggregation. |
src/utils/experience.js |
Removes legacy experience mapping. |
src/utils/categories.js |
Removes legacy category utility. |
src/utils/__tests__/techUsed.test.js |
Removes legacy technology tests. |
src/utils/__tests__/sortProjects.test.js |
Removes legacy sorting tests. |
src/utils/__tests__/sefariaTools.test.js |
Removes legacy endpoint tests. |
src/utils/__tests__/projectPreview.test.js |
Removes preview tests. |
src/utils/__tests__/projectDetail.test.js |
Removes detail helper tests. |
src/utils/__tests__/pagination.test.js |
Removes pagination tests. |
src/utils/__tests__/experience.test.js |
Removes legacy experience tests. |
src/utils/__tests__/categories.test.js |
Removes legacy category tests. |
src/Title.jsx |
Removes old dashboard header. |
src/test/vitest-axe.d.ts |
Adds axe matcher typings. |
src/test/setup.ts |
Configures DOM test shims. |
src/test/factories.ts |
Adds normalized project factories. |
src/styles/tokens.css |
Defines semantic design tokens. |
src/styles/reset.css |
Adds global CSS reset. |
src/styles/global.css |
Adds global typography and focus styles. |
src/main.tsx |
Adds typed application entry point. |
src/main.jsx |
Removes legacy entry point. |
src/lib/url.ts |
Implements query-state serialization. |
src/lib/tech.ts |
Adds typed technology parsing. |
src/lib/sort.ts |
Adds typed project sorting. |
src/lib/reach.ts |
Adds reach parsing and labels. |
src/lib/format.ts |
Adds date and number formatting. |
src/lib/filter.ts |
Adds search and filtering logic. |
src/lib/experience.ts |
Adds typed experience mapping. |
src/lib/endpoints.ts |
Adds endpoint normalization and grouping. |
src/lib/categories.ts |
Adds category metadata and parsing. |
src/lib/api.ts |
Adds normalized API client. |
src/lib/__tests__/url.test.ts |
Tests query-state behavior. |
src/lib/__tests__/tech.test.ts |
Tests technology parsing. |
src/lib/__tests__/sort.test.ts |
Tests typed sorting. |
src/lib/__tests__/reach.test.ts |
Tests reach parsing. |
src/lib/__tests__/format.test.ts |
Tests formatting helpers. |
src/lib/__tests__/filter.test.ts |
Tests search and filters. |
src/lib/__tests__/experience.test.ts |
Tests experience parsing. |
src/lib/__tests__/endpoints.test.ts |
Tests endpoint grouping. |
src/lib/__tests__/categories.test.ts |
Tests category parsing. |
src/lib/__tests__/api.test.ts |
Tests API behavior. |
src/hooks/useProjects.ts |
Adds cached project loading. |
src/hooks/useProjectQueryState.ts |
Connects browse state to URLs. |
src/hooks/useMediaQuery.ts |
Adds reactive media queries. |
src/hooks/useDocumentMeta.ts |
Manages route metadata. |
src/hooks/useDebouncedValue.ts |
Adds reusable debouncing. |
src/features/project/ProjectDialog.tsx |
Adds responsive project dialog. |
src/features/project/ProjectDialog.module.css |
Styles project dialog layout. |
src/features/project/ProjectDetail.module.css |
Styles project details. |
src/features/charts/YearBarChart.tsx |
Adds yearly submissions chart. |
src/features/charts/HBarChart.tsx |
Adds horizontal bar chart. |
src/features/charts/HBarChart.module.css |
Styles horizontal bars. |
src/features/charts/DataTable.tsx |
Adds accessible chart tables. |
src/features/charts/DataTable.module.css |
Styles chart tables. |
src/features/charts/CumulativeLineChart.tsx |
Adds cumulative projects chart. |
src/features/charts/chartTheme.ts |
Centralizes chart styling. |
src/features/charts/ChartsPage.module.css |
Styles analytics page. |
src/features/charts/chartNotes.ts |
Configures chart annotations. |
src/features/charts/ChartCard.tsx |
Adds reusable chart container. |
src/features/charts/ChartCard.module.css |
Styles chart cards. |
src/features/charts/__tests__/ChartsPage.test.tsx |
Tests analytics page. |
src/features/browse/TopicTags.tsx |
Adds clipped topic rows. |
src/features/browse/TopicTags.module.css |
Styles topic rows. |
src/features/browse/ShowMore.tsx |
Adds incremental loading control. |
src/features/browse/ShowMore.module.css |
Styles show-more control. |
src/features/browse/ResultsToolbar.tsx |
Adds search and view controls. |
src/features/browse/ResultsToolbar.module.css |
Styles results toolbar. |
src/features/browse/ResultsSkeleton.tsx |
Adds loading placeholders. |
src/features/browse/ProjectList.module.css |
Styles responsive project lists. |
src/features/browse/ProjectGrid.tsx |
Adds project grid rendering. |
src/features/browse/ProjectGrid.module.css |
Styles project grid. |
src/features/browse/ProjectCard.tsx |
Adds redesigned project cards. |
src/features/browse/ProjectCard.module.css |
Styles project cards. |
src/features/browse/FilterSheet.tsx |
Adds mobile filter sheet. |
src/features/browse/FilterSheet.module.css |
Styles filter sheet. |
src/features/browse/FilterPanel.tsx |
Adds category filter panel. |
src/features/browse/FilterPanel.module.css |
Styles filter controls. |
src/features/browse/BrowsePage.module.css |
Styles browse-page layout. |
src/features/browse/ActiveFilters.tsx |
Adds removable filter chips. |
src/features/browse/ActiveFilters.module.css |
Styles active filters. |
src/features/browse/__tests__/ProjectCard.test.tsx |
Tests project cards. |
src/features/browse/__tests__/FilterSheet.test.tsx |
Tests filter-sheet behavior. |
src/data/fetchProjects.js |
Removes legacy API client. |
src/components/ui/VisuallyHidden.tsx |
Adds assistive-only content. |
src/components/ui/VisuallyHidden.module.css |
Styles visually hidden content. |
src/components/ui/Tag.tsx |
Adds reusable tags. |
src/components/ui/Tag.module.css |
Styles tag variants. |
src/components/ui/Skeleton.tsx |
Adds loading skeleton primitive. |
src/components/ui/Skeleton.module.css |
Styles skeleton animation. |
src/components/ui/Select.tsx |
Adds labelled select control. |
src/components/ui/Select.module.css |
Styles select control. |
src/components/ui/SegmentedControl.tsx |
Adds view toggle control. |
src/components/ui/SegmentedControl.module.css |
Styles segmented control. |
src/components/ui/SearchField.tsx |
Adds accessible search field. |
src/components/ui/SearchField.module.css |
Styles search input. |
src/components/ui/IconButton.tsx |
Adds icon-button primitive. |
src/components/ui/IconButton.module.css |
Styles icon buttons. |
src/components/ui/ExternalLink.tsx |
Standardizes external links. |
src/components/ui/EmptyState.tsx |
Adds reusable empty state. |
src/components/ui/EmptyState.module.css |
Styles empty states. |
src/components/ui/Dialog.tsx |
Adds native dialog primitive. |
src/components/ui/Dialog.module.css |
Styles modal and sheet dialogs. |
src/components/ui/cx.ts |
Adds class-name helper. |
src/components/ui/Checkbox.tsx |
Adds custom checkbox control. |
src/components/ui/Checkbox.module.css |
Styles checkbox control. |
src/components/ui/Button.tsx |
Adds button and link variants. |
src/components/ui/Button.module.css |
Styles button variants. |
src/components/ui/__tests__/SegmentedControl.test.tsx |
Tests segmented control. |
src/components/ui/__tests__/Dialog.test.tsx |
Tests dialog behavior. |
src/components/SortDropdown.jsx |
Removes legacy sort dropdown. |
src/components/Sidebar.jsx |
Removes tab sidebar. |
src/components/ProjectGrid.jsx |
Removes legacy grid. |
src/components/ProjectCard.jsx |
Removes legacy card. |
src/components/Pagination.jsx |
Removes pagination component. |
src/components/layout/SkipLink.tsx |
Adds keyboard skip link. |
src/components/layout/SkipLink.module.css |
Styles skip link. |
src/components/layout/SiteHeader.module.css |
Styles responsive site header. |
src/components/layout/SiteFooter.tsx |
Adds redesigned footer. |
src/components/layout/SiteFooter.module.css |
Styles site footer. |
src/components/layout/SamekhLogo.tsx |
Adds developer logo link. |
src/components/layout/SamekhLogo.module.css |
Styles logo tile. |
src/components/layout/Hero.tsx |
Adds redesigned hero. |
src/components/layout/Container.tsx |
Adds shared content container. |
src/components/layout/Container.module.css |
Styles content container. |
src/components/layout/Constellation.tsx |
Adds decorative hero graphic. |
src/components/layout/Constellation.module.css |
Positions constellation graphic. |
src/components/layout/__tests__/SiteHeader.test.tsx |
Tests header behavior. |
src/components/icons/topics/index.tsx |
Adds custom topic icons. |
src/components/icons/CategoryIcon.tsx |
Adds category icon mapping. |
src/components/icons/CategoryIcon.module.css |
Styles category tiles. |
src/components/Dashboard.jsx |
Removes legacy dashboard. |
src/components/Controls.jsx |
Removes legacy controls. |
src/components/ChartsAndAnalytics.jsx |
Removes legacy analytics view. |
src/components/charts/VibeCodedTrendChart.jsx |
Removes legacy vibe chart. |
src/components/charts/types/PieChart.jsx |
Removes legacy pie wrapper. |
src/components/charts/types/LineChart.jsx |
Removes legacy line wrapper. |
src/components/charts/types/BarChart.jsx |
Removes legacy bar wrapper. |
src/components/charts/ToolUsagePieChart.jsx |
Removes endpoint pie chart. |
src/components/charts/TechUsedChart.jsx |
Removes legacy technology chart. |
src/components/charts/SubmissionsTrendChart.jsx |
Removes legacy trend chart. |
src/components/charts/KeywordFrequencyChart.jsx |
Removes legacy keyword chart. |
src/components/charts/ExperienceTrendChart.jsx |
Removes legacy experience chart. |
src/assets/samech-logo.svg |
Adds Samekh vector asset. |
src/app/routes.tsx |
Adds application routes. |
src/app/PageLayout.tsx |
Adds shared page landmarks. |
src/app/NotFound.tsx |
Adds client-side 404 page. |
src/app/NotFound.module.css |
Styles the 404 page. |
src/app/App.tsx |
Adds routed application shell. |
src/App.jsx |
Removes legacy application shell. |
README.md |
Documents architecture and operation. |
playwright.config.ts |
Configures responsive E2E tests. |
package.json |
Adds redesigned app dependencies and scripts. |
index.html |
Adds metadata and typed entry point. |
eslint.config.js |
Enables strict TypeScript and accessibility linting. |
e2e/support.ts |
Adds deterministic E2E fixtures. |
e2e/screenshots.spec.ts |
Adds responsive screenshot generation. |
e2e/charts.spec.ts |
Adds analytics E2E coverage. |
.prettierrc |
Adds formatting rules. |
.prettierignore |
Excludes generated and fixture files. |
.gitignore |
Ignores Playwright artifacts. |
.github/workflows/ci.yml |
Adds typecheck, tests, and E2E CI. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
- restore visible focus ring on skip-link heading (NotFound, ChartsPage) - make the projects table scroller a keyboard-focusable named region - draw no bar for zero-valued HBarChart rows, with a regression test Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Drops the checkbox, the active-filter chip, the ?open=1 URL param and the openSourceOnly filter logic. The project dialog's View source code button is unchanged. Departs from spec 5.5 and 7.1. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
📊 Code Quality Score: 73/100
Was this score accurate? 👍 Yes · 👎 No Scored by GitVelocity · How are scores calculated? |

Frontend redesign for the PBS dashboard.