Front-End-Checklist

by thedaviddiasVerified

🗂 The essential checklist for modern web development, for humans and AI agents

73,612
Stars
6,661
Forks
MDX
Language
8/23/2026
Added
View on GitHubDownload ZIP

⚠️ Third-Party Software Notice

This skill is third-party open-source software developed and hosted independently on GitHub. SkillTip is an informational directory and does not control or maintain the underlying repository. Any security checks displayed are automated and limited in scope. Review the source code before installing.

Read the Terms of Service

Installation

Add to your Claude Code skills directory:

# Add to your Claude Code skills
git clone https://github.com/thedaviddias/Front-End-Checklist

Getting Started

Guides for using skills like Front-End-Checklist.

Security Report

Verified

Last scanned: —

{
  "status": "PASSED",
  "issues": []
}

README.md

Front-End Checklist

Backers on Open Collective Support via Open Collective

Front-End Checklist is the open-source front-end quality system for humans and AI agents. It turns front-end best practices into a practical review workflow you can browse on the web, run through with MCP-compatible tools, or work through directly in this README.

Companion project: UX Patterns for Devs helps developers choose the right UI pattern before using Front-End Checklist to verify implementation quality.

[!IMPORTANT] Use the website for browsing and filtering, the MCP server for agent workflows, and this README when you want the checklist in one place.

What you get

  • 385 English rules across 11 active categories
  • 11 MCP tools exposed by the hosted server
  • Rule pages with explanations, remediation guidance, and verification steps

How to use this checklist

  1. Start with the category navigator below and jump straight to the part of the checklist you need.
  2. Work through the checkbox items that apply to your project, audit, or pull request.
  3. Open the linked rule pages when you need the full guidance, examples, verification steps, and AI prompts.
  4. Use frontendchecklist.io for interactive browsing, and mcp.frontendchecklist.io when you want agents to use the same rule corpus directly.

Priority legend

  • ![Critical][critical_img] means site-breaking, compliance-sensitive, or security-sensitive issues that should be fixed first.
  • ![High][high_img] means issues with major impact on user experience, accessibility, performance, or discoverability.
  • ![Medium][medium_img] means strong best practices that should be part of normal frontend quality review.
  • ![Low][low_img] means useful improvements that are situational or lower urgency.

Choose your workflow

Browse online

Choose the right pattern first

Front-End Checklist helps you review implementation quality. If you are still deciding what interface to build, use UX Patterns for Devs to compare common UI patterns, understand tradeoffs, and find practical guidance for forms, navigation, data display, feedback states, authentication, and AI interfaces.

Contribute to the checklist

  • Install dependencies: pnpm install
  • Run local development: pnpm dev
  • Validate structure: pnpm validate:rule-structure
  • Score the corpus: pnpm score:rules
  • Regenerate derived artifacts: pnpm generate:skills and pnpm generate:readme

Use with MCP

Connect an MCP-capable agent to Front-End Checklist for frontend code review, structured rule lookup, audits, and remediation workflows across React, Next.js, HTML, CSS, JavaScript, accessibility, performance, SEO, security, images, privacy, i18n, and testing.

[!TIP] Best first use: point an MCP-capable agent at a real component, page, or public URL and explicitly ask it to use the Front-End Checklist MCP for the highest-confidence frontend findings first. Some clients discover installed MCP tools lazily, so naming the server in the prompt helps.

What you can do:

  • Review pasted code or file contents against the checklist
  • Audit a live public URL
  • Fetch a specific rule with remediation guidance
  • Search rules by keyword, category, or priority
  • Get a workflow or quick reference for a focused audit

Agent usage guidance:

  • Use review_code first for pasted HTML, CSS, JavaScript, React, or Next.js code
  • Use search_rules before making frontend accessibility, performance, SEO, security, or image recommendations
  • Use get_workflow or get_checklist_rules for launch, accessibility, SEO, security, and performance audits
  • Use audit_url for public https:// pages

Example prompts:

  • Use the Front-End Checklist MCP to review this React component and report the highest-confidence findings first.
  • Use the Front-End Checklist MCP to audit https://example.com for accessibility, performance, and SEO issues.
  • Use the Front-End Checklist MCP to explain the canonical URL rule and suggest a fix with code examples.

Use with skills

Install Front-End Checklist skills when you want reusable audit workflows or focused rule-specific guidance in tools that support them.

Install:

npx skills add frontendchecklist/skills
npx skills add frontendchecklist/skills --skill https

Useful entry points:

Example uses:

  • Run a broad frontend audit against the full Front-End Checklist corpus
  • Use a focused skill like https for security review on one concern
  • Use rule-specific skills to explain why a rule matters and how to fix it

Checklist

Jump to a category

Categories

HTML

25 rules. Semantic markup, metadata, forms, and document structure rules.

Browse HTML on frontendchecklist.io

  • Add Subresource Integrity to external scripts ![High][high_img]: Use Subresource Integrity (SRI) hash attributes on external scripts and stylesheets loaded from CDNs to ensure the content hasn't been tampered with.
  • Add thumbnail images to videos ![Medium][medium_img]: HTML5 video elements should have a poster attribute providing a thumbnail image displayed before the video loads or is played.
  • Create a custom 404 error page ![Medium][medium_img]: A custom 404 error page is designed with helpful navigation options for lost users.
  • Declare UTF-8 character encoding ![Critical][critical_img]: The charset (UTF-8) is declared correctly as the first element in the head.
  • Ensure all IDs are unique ![High][high_img]: All ID attributes are unique within the document. No duplicate IDs exist on the page.
  • Implement accessible breadcrumb navigation ![Medium][medium_img]: Breadcrumb navigation is implemented with proper semantic markup and ARIA attributes for accessibility.
  • Implement favicons for all devices ![Medium][medium_img]: All necessary favicon formats are implemented for browsers, devices, and PWA support.
  • Link a Web App Manifest for installability ![Medium][medium_img]: Include a Web App Manifest (manifest.json) linked from the HTML head to enable Progressive Web App features like home screen installation, standalone display, and splash screens.
  • Load scripts with defer, async, or type=module ![High][high_img]: Prevent JavaScript from blocking HTML parsing by using defer, async, or type=module attributes on script tags so the browser can continue building the DOM while scripts download.
  • Make custom elements and Web Components accessible ![Medium][medium_img]: Custom elements must implement ARIA reflection via ElementInternals, keyboard interaction, and form association so that screen readers and assistive technologies can interpret them correctly.
  • Make file uploads accessible ![Medium][medium_img]: File upload components are accessible with proper labels, file type restrictions, and progress feedback.
  • Make pagination accessible ![Medium][medium_img]: Pagination controls are accessible with proper ARIA labels, keyboard navigation, and current page indication.
  • Make search inputs accessible ![Medium][medium_img]: Search functionality is accessible with proper input type, label, role, and autocomplete suggestions.
  • Make videos accessible with captions ![High][high_img]: Videos have captions, audio descriptions, transcripts, pause controls, and avoid autoplay for users with hearing, vision, or cognitive impairments.
  • Meet PWA installability criteria ![Low][low_img]: The web app satisfies the browser's minimum PWA installability requirements: a valid web app manifest, a registered service worker, HTTPS, and maskable icons.
  • Provide noscript fallback content ![Medium][medium_img]: A noscript tag provides fallback content for users with JavaScript disabled.
  • Remove comments and debug code in production ![Medium][medium_img]: Unnecessary code, comments, and debug elements are removed before deploying to production.
  • Set text direction for RTL languages ![Medium][medium_img]: The dir attribute is used for languages that read right-to-left (RTL) or mixed content.
  • Set the page lang attribute ![High][high_img]: The element must have a lang attribute with a valid BCP 47 language code so screen readers, translation tools, and search engines know the primary language of the page.
  • Set the responsive viewport meta tag ![Critical][critical_img]: The viewport meta tag is declared correctly for responsive design.
  • Use semantic HTML elements ![High][high_img]: HTML5 Semantic Elements are used appropriately (header, section, footer, main, article, aside...).
  • Use semantic input type attributes ![High][high_img]: Set the correct type attribute on input elements to trigger the right mobile keyboard, enable browser validation, and improve autofill accuracy.
  • Use the HTML5 doctype ![Critical][critical_img]: The HTML5 doctype declaration must appear as the first line of every HTML document to trigger standards mode rendering in all browsers.
  • Validate forms accessibly ![High][high_img]: Forms provide clear validation feedback with accessible error messages and proper ARIA attributes.
  • Validate HTML against W3C standards ![High][high_img]: HTML markup is validated against W3C standards for cross-browser compatibility.

Back to top

CSS

32 rules. Layout, typography, responsive design, and styling rules.

Browse CSS on frontendchecklist.io

  • Apply Flexbox best practices ![Medium][medium_img]: Use Flexbox for one-dimensional layouts with the right properties, avoiding common mistakes like overusing flex:1, ignoring min-width:0, and misunderstanding flex-basis.
  • Avoid embedded and inline CSS ![High][high_img]: Embedded and inline CSS are avoided except for critical CSS and performance optimization.
  • Avoid intrusive interstitials ![Medium][medium_img]: Full-screen interstitials (pop-ups, overlays, cookie banners) that block the main content on mobile are a ranking penalty signal and accessibility barrier. Use non-intrusive alternatives.
  • Do not disable pinch zoom ![High][high_img]: The viewport meta tag must not set user-scalable=no or maximum-scale=1 as these prevent users from zooming in to read content, violating WCAG 2.1 SC 1.4.4 (Resize Text).
  • Include a print stylesheet ![Medium][medium_img]: A print stylesheet is provided and correctly optimized for printed pages.
  • Inline critical CSS for faster rendering ![High][high_img]: Critical CSS (above-the-fold content) is inlined in the head for faster initial render.
  • Keep CSS specificity low and flat ![High][high_img]: Write selectors at the lowest specificity that works, avoiding ID selectors and deep nesting, so styles can be overridden cleanly without resorting to !important.
  • Lint CSS and SCSS files ![Medium][medium_img]: All CSS/SCSS files are linted with Stylelint to detect errors and enforce standards.
  • Load CSS without blocking render ![High][high_img]: Non-critical CSS is loaded asynchronously to avoid blocking DOM rendering.
  • Minify all CSS files ![High][high_img]: All CSS files are minified to reduce file size and improve page load performance.
  • Optimize web font formats ![Medium][medium_img]: Web fonts use modern formats (WOFF2, WOFF) with proper fallbacks and loading strategies.
  • Order CSS files correctly ![Medium][medium_img]: All CSS files are loaded before JavaScript files to prevent render blocking.
  • Prevent horizontal scrolling ![Medium][medium_img]: Web pages must not require horizontal scrolling at standard viewport widths. Horizontal overflow breaks responsive layouts and makes content inaccessible to low-vision users who zoom in.
  • Provide visible custom focus indicators ![High][high_img]: Ensure all interactive elements have a clearly visible focus indicator for keyboard navigation — never just remove the default outline without providing a better alternative.
  • Register CSS custom properties with @property for animation and type safety ![Low][low_img]: Use @property to register CSS custom properties with a type, initial value, and inheritance control — enabling animation of custom properties and providing compile-time validation for design tokens.
  • Remove unused CSS rules ![High][high_img]: Unused CSS is removed to reduce bundle size and improve performance.
  • Support dark mode with prefers-color-scheme ![Medium][medium_img]: Implement dark mode using the prefers-color-scheme media query and CSS custom properties so the site automatically adapts to the user's system preference.
  • Use :has() to style parent elements based on their descendants ![Low][low_img]: Use the CSS :has() relational pseudo-class to select and style an element based on what it contains, replacing JavaScript DOM manipulation for many common styling scenarios.
  • Use @layer to manage CSS cascade order explicitly ![Low][low_img]: CSS Cascade Layers (@layer) are used to give the codebase explicit, predictable control over specificity and cascade order, eliminating the need to fight specificity with !important.
  • Use a CSS reset or normalize stylesheet ![Medium][medium_img]: A CSS reset or normalize is used to ensure consistent styling across browsers.
  • Use consistent CSS naming conventions ![Medium][medium_img]: Adopt a consistent class naming methodology (BEM, CUBE CSS, or a team-agreed pattern) to make class names self-documenting and prevent style conflicts.
  • Use container queries for component-level responsiveness ![Medium][medium_img]: Use CSS container queries to make components respond to their own container's size rather than the viewport, enabling truly reusable responsive components.
  • Use CSS containment to limit repaint scope ![Medium][medium_img]: Apply the contain property to components to tell the browser they are independent from the rest of the page, enabling rendering optimizations that reduce repaint and reflow scope.
  • Use CSS custom properties for design tokens ![High][high_img]: Define design system values (colors, spacing, typography) as CSS custom properties on :root to enable consistent theming, dynamic updates, and dark mode support.
  • Use CSS Grid for two-dimensional layouts ![Medium][medium_img]: Use CSS Grid when you need to control both rows and columns simultaneously, such as page layouts, card grids, and complex component arrangements.
  • Use CSS logical properties for i18n and RTL support ![Medium][medium_img]: Use CSS logical properties (margin-inline, padding-block, border-inline-start) instead of physical properties (margin-left, padding-top) to support right-to-left languages automatically.
  • Use CSS subgrid to align nested grid items to parent tracks ![Low][low_img]: Use grid-template-columns: subgrid (or subgrid for rows) to make nested grid items participate in the parent grid's tracks, solving the card-content alignment problem without JavaScript height matching.
  • Use oklch() and oklab() for perceptually uniform colour palettes ![Low][low_img]: Colour values in the design system use oklch() or oklab() colour functions to produce perceptually uniform palettes where equal numeric steps produce equal perceived lightness changes.
  • Use readable font sizes on mobile ![Medium][medium_img]: Text must be large enough to read without zooming on mobile devices. Using relative units (rem/em) allows browser font size preferences to be respected.
  • Use relative units for responsive layouts ![High][high_img]: Use rem, em, %, vw, vh, and clamp() instead of fixed px values to build layouts that scale with user font size preferences and viewport dimensions.
  • Use the View Transitions API for smooth page and component transitions ![Low][low_img]: The View Transitions API is used to animate between page states or navigations with cross-fade or custom animations, providing a native-app quality transition without JavaScript animation libraries.
  • Use transform and opacity for animations ![High][high_img]: Animate with CSS transform and opacity properties to keep animations running on the GPU compositor thread at 60fps, avoiding layout-triggering properties like top, left, width, and height.

Back to top

JavaScript

26 rules. Client-side behavior, async patterns, and runtime quality rules.

Browse JavaScript on frontendchecklist.io

  • Avoid implicit type coercion ![Medium][medium_img]: Use strict equality (===), explicit type conversion, and Number/String/Boolean constructors to avoid JavaScript's implicit type coercion producing unexpected results.
  • Avoid inline JavaScript ![High][high_img]: Inline JavaScript is avoided. JavaScript is kept in external files for caching and maintainability.
  • Avoid the any type — use unknown, generics, or type guards instead ![Medium][medium_img]: Replace TypeScript's any type with unknown, proper generics, or narrowed type assertions to preserve type safety without sacrificing expressiveness.
  • Debounce and throttle event handlers ![High][high_img]: Use debounce or throttle for high-frequency events like scroll, resize, and input to improve performance.
  • Enable noUncheckedIndexedAccess to catch out-of-bounds array bugs ![Medium][medium_img]: Enable noUncheckedIndexedAccess in tsconfig.json to make array and object index access return T | undefined, forcing explicit null checks that prevent out-of-bounds runtime errors.
  • Enable TypeScript strict mode in tsconfig.json ![High][high_img]: Enable "strict": true in tsconfig.json to activate the full suite of TypeScript type-checking flags and catch the most common runtime bugs at compile time.
  • Handle cross-origin requests securely ![High][high_img]: Use CORS correctly, validate message origins with postMessage, and understand the Same-Origin Policy to prevent cross-origin attacks.
  • Implement proper error handling ![High][high_img]: Use try-catch blocks and error boundaries to gracefully handle errors in async operations and UI components.
  • Lint JavaScript code ![Medium][medium_img]: JavaScript code is linted with ESLint to detect errors and enforce coding standards.
  • Minify all JavaScript files ![High][high_img]: All JavaScript files are minified to reduce file size and improve loading performance.
  • Minimize costly DOM read/write operations ![High][high_img]: Batch DOM reads and writes separately to avoid layout thrashing — the performance problem caused by alternating between reading and writing layout properties.
  • Never use eval() or unsafe dynamic code execution ![Critical][critical_img]: Avoid eval(), new Function(), setTimeout/setInterval with string arguments, and innerHTML with untrusted content — they execute arbitrary code and create critical XSS vulnerabilities.
  • Parse JSON safely with error handling ![Medium][medium_img]: Always wrap JSON.parse() in try/catch and validate the parsed structure before use, as invalid JSON or unexpected data shapes cause runtime errors.
  • Prefer const and let over var ![High][high_img]: Use block-scoped const and let declarations instead of function-scoped var to avoid hoisting bugs and unintended variable mutations.
  • Prefer immutable data patterns ![Medium][medium_img]: Use spread operators, Object.assign, and array methods that return new values instead of mutating objects and arrays in place, to make data flow predictable and debugging easier.
  • Prevent common memory leak patterns ![High][high_img]: Identify and avoid the most common JavaScript memory leak sources: forgotten event listeners, retained DOM references, closures holding large objects, and uncleared timers.
  • Remove console statements in production ![Medium][medium_img]: Remove or disable console.log, console.debug, and other console statements before deploying to production.
  • Split large JavaScript bundles ![High][high_img]: Use dynamic imports and route-based code splitting to break large bundles into smaller chunks that load on demand, reducing initial page load time.
  • Use ES modules (import/export) ![High][high_img]: Use native ES module syntax for imports and exports instead of CommonJS require() to enable static analysis, tree-shaking, and better tooling support.
  • Use event delegation for dynamic content ![Medium][medium_img]: Attach event listeners to stable parent elements rather than individual dynamic children to reduce memory usage and handle elements added to the DOM after page load.
  • Use import type for type-only imports ![Low][low_img]: Use the import type syntax for imports that are only needed as TypeScript types, ensuring they are fully erased at compile time with zero runtime cost.
  • Use modern array and object methods ![Medium][medium_img]: Use ES2015+ array methods (map, filter, reduce, find, flatMap) and object methods (Object.entries, Object.fromEntries, structuredClone) for cleaner, more expressive code.
  • Use scheduler.yield() to keep the main thread responsive during long tasks ![Medium][medium_img]: Break up tasks longer than 50 ms by yielding to the browser with scheduler.yield() or a MessageChannel fallback so that user input is never blocked.
  • Use Web Storage API safely ![Medium][medium_img]: Use localStorage and sessionStorage with proper serialization, error handling, and security awareness to avoid data corruption and storage quota errors.
  • Validate external data at runtime with a schema library ![High][high_img]: Use Zod or Valibot to validate data from API responses, form inputs, localStorage, and environment variables — TypeScript types are erased at runtime and cannot protect against unexpected shapes.
  • Write internationalisation-friendly translation strings ![Medium][medium_img]: Translation strings use message format patterns (ICU or similar) rather than string concatenation, and correctly handle pluralisation, gender, and variable interpolation.

Back to top

Performance

43 rules. Loading speed, rendering, optimization, and Core Web Vitals rules.

Browse Performance on frontendchecklist.io

Back to top

Accessibility

95 rules. Keyboard, screen reader, ARIA, and inclusive UX rules.

Browse Accessibility on frontendchecklist.io

Back to top

SEO

94 rules. Crawlability, metadata, structured data, and search visibility rules.

Browse SEO on frontendchecklist.io

Back to top

Security

22 rules. Headers, transport, safe linking, and frontend security rules.

Browse Security on frontendchecklist.io

  • Adblock Element Hiding ![Low][low_img]: Checks for HTML elements and CSS classes that would be hidden by common adblockers, causing layout breaks or missing functionality for users with ad blocking enabled.
  • Audit dependencies for known vulnerabilities ![High][high_img]: Dependencies are regularly scanned for known security vulnerabilities using automated tooling, and critical findings are remediated before deployment.
  • Avoid mixed content on HTTPS pages ![High][high_img]: An HTTPS page that loads resources over HTTP has mixed content — browsers block or warn about these requests, breaking functionality and undermining transport security.
  • Blocked Tracking Links ![Low][low_img]: Links and resources pointing to known tracking or advertising domains may be blocked by adblockers, breaking navigation and functionality for a significant portion of users.
  • External Link Security ![Medium][medium_img]: Links that open in a new tab using target='_blank' must include rel='noopener noreferrer' to prevent the opened page from accessing the opener's window context.
  • Implement a content security policy ![High][high_img]: A Content Security Policy is implemented to prevent XSS attacks and control resource loading.
  • Leaked Environment Variables ![Critical][critical_img]: Checks for exposed API keys, tokens, passwords, and other secrets embedded in HTML source, JavaScript bundles, or client-accessible files.
  • Link to your terms of service in the footer ![Medium][medium_img]: Websites offering services to users should publish Terms of Service and link to them from every page — this establishes the legal agreement governing use of the service.
  • Prevent stack trace exposure in production error responses ![High][high_img]: Production error responses never include stack traces, internal file paths, framework internals, or other debugging detail that could aid an attacker (OWASP A09).
  • Protect public forms with CAPTCHA ![Medium][medium_img]: Public forms that accept user input without authentication must include bot protection to prevent spam, credential stuffing, and automated abuse.
  • Redirect HTTP to HTTPS ![Critical][critical_img]: All HTTP requests must be permanently redirected (301) to HTTPS to prevent users from accessing your site over an insecure connection.
  • Secure password input fields ![High][high_img]: Password fields implement security best practices including proper autocomplete, show/hide toggle, and strength indicators.
  • Serve all pages over HTTPS ![Critical][critical_img]: Every page and resource on your site must be delivered over HTTPS to protect user data in transit and enable modern browser features.
  • Set a Permissions-Policy header ![Medium][medium_img]: The Permissions-Policy header lets servers restrict which browser features (camera, microphone, geolocation, etc.) can be used in a page or its embedded iframes.
  • Set a Referrer-Policy header ![Medium][medium_img]: The Referrer-Policy header controls how much referrer information is sent when navigating from your site to another, protecting user privacy and preventing leaking sensitive URL parameters.
  • Set an HSTS header ![High][high_img]: The Strict-Transport-Security response header tells browsers to always use HTTPS for your domain, preventing protocol downgrade attacks and cookie hijacking.
  • Set an X-Frame-Options header ![High][high_img]: The X-Frame-Options header controls whether your page can be embedded in an iframe, frame, or object — preventing clickjacking attacks.
  • Set Secure, HttpOnly, and SameSite flags on session cookies ![High][high_img]: All session and authentication cookies are issued with the Secure, HttpOnly, and an appropriate SameSite flag to prevent interception, JavaScript exfiltration, and cross-site request forgery.
  • Set X-Content-Type-Options: nosniff ![High][high_img]: The X-Content-Type-Options: nosniff header prevents browsers from MIME-sniffing a response away from the declared Content-Type, blocking a class of drive-by download and XSS attacks.
  • Store authentication tokens securely ![High][high_img]: Sensitive authentication tokens are stored in httpOnly cookies rather than localStorage or sessionStorage to prevent theft via cross-site scripting attacks (OWASP A07).
  • Submit forms over HTTPS ![Critical][critical_img]: All HTML form actions must point to HTTPS URLs to ensure form data is encrypted in transit and cannot be intercepted by network attackers.
  • Use COOP, COEP, and CORP for cross-origin isolation when needed ![Medium][medium_img]: Sensitive or high-capability applications use COOP, COEP, and CORP deliberately, audit third-party embeds, and verify cross-origin isolation in the browser before relying on it.

Back to top

Images

25 rules. Formats, responsive delivery, optimization, and media quality rules.

Browse Images on frontendchecklist.io

  • Compress images without quality loss ![High][high_img]: All images are compressed without significant quality loss to reduce file sizes.
  • Fix broken images ![High][high_img]: No images return 404 errors or display broken-image icons to users.
  • Handle image loading errors gracefully ![Low][low_img]: Broken images are handled gracefully with fallback images or placeholder content.
  • Implement responsive images with srcset ![High][high_img]: Images use srcset and sizes attributes for responsive delivery across devices.
  • Keep image file sizes within recommended limits ![High][high_img]: Individual image files are compressed to reasonable sizes to avoid wasted bandwidth and slow load times, especially on mobile networks.
  • Lazy load offscreen images ![High][high_img]: Images below the visible viewport use loading="lazy" to defer download until the user scrolls near them, reducing initial page load time.
  • Manage inline SVG size and complexity ![Medium][medium_img]: Large or complex SVGs inlined in HTML are extracted to external files or components, preventing them from bloating the HTML document and blocking parsing.
  • Optimise images for faster loading ![High][high_img]: All images are compressed and metadata-stripped before deployment, removing unnecessary bytes without visible quality loss.
  • Optimize all images for web ![High][high_img]: Images are optimized with appropriate formats, compression, and modern techniques.
  • Optimize SVG files ![Medium][medium_img]: SVG files are optimized with SVGO to remove unnecessary metadata and reduce size.
  • Prioritize loading critical images ![High][high_img]: Hero and above-the-fold images are preloaded with high fetch priority for LCP.
  • Provide meaningful alt text for images ![Critical][critical_img]: Every informative image has a descriptive alt attribute; decorative images use alt="" to be ignored by screen readers.
  • Serve images at the correct display size ![High][high_img]: Images are not significantly larger than their display dimensions—serving a 2000px image for a 400px container wastes bandwidth and hurts LCP.
  • Serve images from a CDN ![High][high_img]: Images are served from a CDN with automatic optimization, resizing, and format conversion.
  • Set explicit width and height on images ![High][high_img]: All elements have explicit width and height attributes so browsers can reserve space before the image loads, preventing layout shift.
  • Support high-DPI retina displays ![Medium][medium_img]: High-resolution images (2x, 3x) are provided for retina and high-DPI displays.
  • Use and for image captions ![Medium][medium_img]: Images with visible captions are wrapped in with a child, creating a semantic association between image and caption.
  • Use with an fallback ![High][high_img]: Every element contains a required fallback as its last child, ensuring images display in all browsers including those that don't support .
  • Use AVIF format for modern browsers ![Medium][medium_img]: Images support AVIF format for superior compression with proper browser fallbacks.
  • Use descriptive image filenames ![Low][low_img]: Image filenames are descriptive and human-readable, using lowercase letters, hyphens as separators, and meaningful words that reflect the image content.
  • Use image sprites where appropriate ![Low][low_img]: Small images and icons use sprites or SVG to reduce HTTP requests.
  • Use modern image formats (WebP, AVIF) ![High][high_img]: Images are served in modern formats (WebP or AVIF) instead of legacy JPEG/PNG where browser support allows, reducing file size without visible quality loss.
  • Use progressive JPEG encoding ![Low][low_img]: JPEG images use progressive format for better perceived loading performance.
  • Use srcset for responsive images ![High][high_img]: Images wider than 100px use the srcset attribute to offer multiple resolution variants, letting the browser download the optimal size for the user's viewport and device pixel ratio.
  • Use WebP format with fallbacks ![High][high_img]: Images are served in WebP format with fallbacks for older browsers.

Back to top

Testing

13 rules. Unit, integration, E2E, monitoring, and quality assurance rules.

Browse Testing on frontendchecklist.io

  • Enforce performance budgets in CI ![Medium][medium_img]: Define measurable performance thresholds (bundle size, Lighthouse scores, Core Web Vitals) and fail CI builds automatically when they're exceeded.
  • Follow mocking best practices ![Medium][medium_img]: Use mocks strategically to isolate units under test without over-mocking.
  • Implement consumer-driven contract testing for API boundaries ![Medium][medium_img]: Consumer-driven contract tests (Pact) define and verify the API contracts between the frontend consumer and backend provider, catching integration mismatches before they reach production.
  • Implement end-to-end testing ![High][high_img]: Use E2E testing frameworks like Playwright or Cypress to test critical user journeys.
  • Include accessibility testing ![High][high_img]: Automate accessibility testing with tools like axe-core, jest-axe, or Playwright's accessibility testing.
  • Integrate real-time error monitoring in production ![High][high_img]: A real-time error monitoring service captures, groups, and alerts on unhandled exceptions and promise rejections in production so issues are discovered before users report them.
  • Maintain test coverage thresholds ![Medium][medium_img]: Set and enforce minimum code coverage thresholds to ensure adequate test coverage.
  • Test across all major browsers ![High][high_img]: Website works correctly across major browsers (Chrome, Firefox, Safari, Edge).
  • Test on real mobile devices and viewports ![High][high_img]: Verify your application on real mobile devices and browser DevTools device emulation to catch touch interaction issues, viewport bugs, and mobile-specific rendering problems.
  • Use mutation testing to measure how well tests detect bugs ![Medium][medium_img]: Run Stryker mutation testing on critical business logic to verify that your test suite will actually catch real bugs, not just achieve line coverage.
  • Use visual regression testing ![Medium][medium_img]: Capture screenshots of components and pages, then automatically compare them against approved baselines to detect unintended visual changes before they reach production.
  • Write integration tests for key workflows ![High][high_img]: Test how multiple units of code work together — API routes with their database queries, form submissions with validation, and component trees with their state management.
  • Write unit tests ![High][high_img]: Critical functionality has unit tests with good coverage for reliability.

Back to top

Privacy

5 rules. Consent, tracking, retention, and user data rights rules.

Browse Privacy on frontendchecklist.io

  • Avoid third-party cookies ![Medium][medium_img]: Third-party cookies set by external domains track users across sites without their knowledge. Modern browsers are phasing them out, and regulations like GDPR and CCPA require consent before setting them.
  • Collect only the minimum personal data necessary ![Medium][medium_img]: Limit data collection to only what is strictly required for the stated purpose, in line with GDPR Article 5(1)(c) data minimisation principles.
  • Implement a user-facing data deletion mechanism ![Medium][medium_img]: Provide users with a clear way to request deletion of their personal data, fulfilling GDPR Article 17 (right to erasure / right to be forgotten).
  • Link to your privacy policy in the footer ![High][high_img]: Websites that collect any personal data must publish a privacy policy and link to it prominently — this is a legal requirement under GDPR, CCPA, and most other privacy regulations.
  • Show a cookie consent notice ![High][high_img]: Websites that set non-essential cookies must obtain prior, informed user consent under GDPR, CCPA, and similar privacy regulations before cookies are placed.

Back to top

Internationalization

5 rules. Localization, RTL, language handling, and translation workflow rules.

Browse Internationalization on frontendchecklist.io

Frequently Asked Questions

What is Front-End-Checklist?

Front-End-Checklist is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by thedaviddias. 🗂 The essential checklist for modern web development, for humans and AI agents. It has 73,612 GitHub stars.

Is Front-End-Checklist safe to use?

Yes. Front-End-Checklist passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.

How do I install Front-End-Checklist?

Clone the repository with "git clone https://github.com/thedaviddias/Front-End-Checklist" and add it to your Claude Code skills directory (see the Installation section above).

What programming language is Front-End-Checklist written in?

Front-End-Checklist is primarily written in MDX. It is open-source under thedaviddias on GitHub, so you can review or fork the full source.

Are there alternatives to Front-End-Checklist?

Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh Front-End-Checklist against similar tools.

Comments (0)

No comments yet. Be the first to share your thoughts!

ECC

by affaan-m

10

The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

242,21936,702JavaScript
AI Agentsai-agentsanthropicclaude-code
View details
15

An agentic skills framework & software development methodology that works.

234,96620,863Shell
AI Agentsai-agentsbrainstorming
View details

The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

185,94028,768JavaScript
AI Agentsai-agentsanthropicclaude-code
View details

cc-switch

by farion1231

3

A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io

128,8688,826Rust
AI Agentsclaude-codeai-tools
View details

claude-code

by anthropics

Claude Code is an agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster by executing routine tasks, explaining complex code, and handling git workflows - all through natural language commands.

120,03119,897Shell
AI Agents
View details

Developers Also Liked

Based on votes and bookmarks from developers who liked this skill

ECC

by affaan-m

10

The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

242,21936,702JavaScript
AI Agentsai-agentsanthropicclaude-code
View details
15

An agentic skills framework & software development methodology that works.

234,96620,863Shell
AI Agentsai-agentsbrainstorming
View details

n8n

by n8n-io

12

Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

201,88160,308TypeScript
MCP Serversapisai-tools
View details

The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

185,94028,768JavaScript
AI Agentsai-agentsanthropicclaude-code
View details

cc-switch

by farion1231

3

A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io

128,8688,826Rust
AI Agentsclaude-codeai-tools
View details