
Review Frontend
- 1 installs
- Updated June 28, 2026
- dudick123/gitiops-dashboard
Perform a senior React/TypeScript review checking strict tsconfig flags, ESLint plugins, React Query defaults, error boundaries, WCAG AA, and bundle limits.
About
Reviews React/TypeScript code or OpenSpec proposals against detailed frontend standards covering strictness, accessibility, performance, and testing. A developer uses it for a deep frontend review before merge.
- Checks five strict tsconfig flags and six ESLint plugins
- Enforces error boundaries, WCAG AA, and bundle-size limits
Review Frontend by the numbers
- 1 all-time installs (skills.sh)
- Ranked #984 of 1,352 Code Review & Quality skills by installs in the Skillselion catalog
- Data as of Jul 8, 2026 (Skillselion catalog sync)
npx skills add https://github.com/dudick123/gitiops-dashboard --skill review-frontendAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1 |
|---|---|
| Last updated | June 28, 2026 |
| Repository | dudick123/gitiops-dashboard ↗ |
What it does
Perform a senior React/TypeScript review checking strict tsconfig flags, ESLint plugins, React Query defaults, error boundaries, WCAG AA, and bundle limits.
Files
Senior Frontend Developer Review
Perform a deep technical review from the perspective of a Senior Frontend Developer. Examine either an OpenSpec proposal (proposal.md, design.md, tasks.md, specs/) or implemented React/TypeScript code. Validate against docs/TECH-STANDARDS.md section 2.
When to Use
- A frontend module proposal is ready for review
- React/TypeScript code changes need review
- The user asks for a "frontend review", "React review", or "UI review"
- The
/reviewrouter delegates to this skill
Execution Steps
Step 1: Identify the target
Determine what to review:
- If the user specifies a proposal, read
openspec/changes/<proposal-name>/artifacts (proposal.md, design.md, tasks.md, specs/) - If the user specifies code, read the relevant TypeScript/React files under
frontend/ - If neither is specified, check for the most recent proposal in
openspec/changes/
Step 2: Read the standards
Read the following from docs/TECH-STANDARDS.md:
- Section 2: TypeScript / React Code Style (Frontend) — tsconfig, ESLint, naming, component patterns, React Query, accessibility, performance, security
Also read CLAUDE.md for project-level context (team has no prior React experience, auto-generated API clients).
Step 3: Create the output directory
mkdir -p docs/tech-reviewStep 4: Perform the review
Evaluate the proposal or code against these focus areas:
TypeScript Configuration (5 Enhanced Strict Flags)
strict: truein tsconfig.jsonnoUncheckedIndexedAccess— critical for dashboard consuming external API dataexactOptionalPropertyTypes— catches connector response mismatchesnoPropertyAccessFromIndexSignature— forces bracket notation for dynamic keysforceConsistentCasingInFileNames— prevents cross-platform import bugsverbatimModuleSyntax— ensuresimport typefor type-only imports- No
anytypes except in auto-generated API client code. Useunknown+ type narrowing.
ESLint Configuration (6 Required Plugins)
@typescript-eslint— TypeScript-aware lintingeslint-plugin-react-hooks— Rules of Hooks, dependency arrayseslint-plugin-react— JSX best practices, prop validationeslint-plugin-jsx-a11y— accessibility (missing alt, broken ARIA, non-interactive handlers)eslint-plugin-security— DOM XSS patterns, unsafe innerHTML, regex DoSeslint-plugin-import— import ordering, no unused imports, no circular dependencies- No blanket
// eslint-disable— must specify rule name and justification
React Query Defaults
staleTime: 30 * 60_000(30 minutes, matches uniform connector TTL)gcTime: 60 * 60_000(60 minutes garbage collection)refetchIntervalInBackground: falseon all polling queries — no wasted load from hidden tabs- Query keys follow hierarchical factory pattern in
query-keys.ts - Manual refresh button per module calls
queryClient.invalidateQueries()
Error Boundaries
- Every dashboard module wrapped in
react-error-boundary - Connector failure must not crash the entire dashboard (PRD §4.6 Degraded State)
- Fallback shows module name, "data unavailable" message, and retry button
resetKeystied to project scope selector for automatic recovery- No stack traces or technical details shown to the user
Code Splitting and Performance
React.lazy()+Suspensefor each dashboard module- Initial bundle MUST NOT exceed 200KB gzipped. Module chunks under 100KB.
@tanstack/react-virtualfor large lists (850+ applications)- Skeleton loaders (not spinners) for initial data loading
- Background refetches update silently — no loading indicators
Accessibility (WCAG 2.1 Level AA)
- Colour alone is insufficient for status — must include text label or icon
- Colour contrast ratios: 4.5:1 normal text, 3:1 large text and UI components
- All interactive elements keyboard-accessible. No tab traps.
- Semantic HTML (
<table>,<nav>,<main>,<section>) — not div soup aria-live="polite"for data refresh timestamps and status changes- Sparkline charts include
aria-labelwith trend summary
Component Patterns
- No default exports (except
React.lazy()route components) - kebab-case file names (
app-status-grid.tsx) - One component per file
- Functional components only with explicit return types
- Props defined as dedicated
typewithreadonlyon props and arrays - No prop spreading (
<Component {...props} />is banned)
Testing Infrastructure
- Vitest as test runner
- React Testing Library (RTL) for component tests
- MSW (Mock Service Worker) for API mocking
vitest-axefor accessibility assertions on module-level components@axe-core/reactin development mode for console accessibility warnings
Step 5: Write the review
Write the review to docs/tech-review/{proposal}-frontend-review.md using this exact format:
---
reviewer: Senior Frontend Developer
proposal: <proposal-name>
date: <YYYY-MM-DD>
status: Review Complete
---
# Senior Frontend Developer — Review: <proposal-name>
## Summary
(2-3 sentence overall assessment. Be direct about severity.)
## Critical Findings
(Must-fix items. Use FE- prefix for finding IDs.)
### Finding FE-<N>: <Title>
- **Artifact**: (which file: design.md, tasks.md, spec.md, proposal.md, or source file path)
- **Location**: (section, task number, or line reference)
- **Issue**: (what is wrong — quote the specific TECH-STANDARDS section violated)
- **Impact**: (concrete consequences if not fixed)
- **Recommendation**: (specific fix, not vague guidance)
## Recommendations
(Should-fix improvements. Same structure as findings.)
### Recommendation FE-<N>: <Title>
- **Artifact**:
- **Location**:
- **Issue**:
- **Impact**:
- **Recommendation**:
## Observations
(Nice-to-have notes, minor items, things to watch in future proposals.)
## Standards Compliance
| Standard | Status | Notes |
|----------|--------|-------|
| TECH-STANDARDS §2.1 — tsconfig strict + 5 enhanced flags | Met / Partial / Not Met / N/A | |
| TECH-STANDARDS §2.2 — ESLint 6 plugins configured | Met / Partial / Not Met / N/A | |
| TECH-STANDARDS §2.3 — No default exports | Met / Partial / Not Met / N/A | |
| TECH-STANDARDS §2.4 — kebab-case file names | Met / Partial / Not Met / N/A | |
| TECH-STANDARDS §2.5 — Error boundaries per module | Met / Partial / Not Met / N/A | |
| TECH-STANDARDS §2.6 — React Query defaults (staleTime/gcTime) | Met / Partial / Not Met / N/A | |
| TECH-STANDARDS §2.7 — refetchIntervalInBackground: false | Met / Partial / Not Met / N/A | |
| TECH-STANDARDS §2.8 — React.lazy code splitting | Met / Partial / Not Met / N/A | |
| TECH-STANDARDS §2.9 — 200KB initial bundle budget | Met / Partial / Not Met / N/A | |
| TECH-STANDARDS §2.10 — @tanstack/react-virtual for large lists | Met / Partial / Not Met / N/A | |
| TECH-STANDARDS §2.11 — WCAG AA colour + text indicators | Met / Partial / Not Met / N/A | |
| TECH-STANDARDS §2.12 — Keyboard navigation | Met / Partial / Not Met / N/A | |
| TECH-STANDARDS §2.13 — aria-live for status updates | Met / Partial / Not Met / N/A | |
| TECH-STANDARDS §2.14 — Vitest + RTL + MSW testing | Met / Partial / Not Met / N/A | |Step 6: Report results
After writing the review file, report to the user:
- Number of critical findings and recommendations
- Top 2-3 most important issues
- Overall standards compliance assessment
- Path to the full review file