Home
Softono
Front-End-Checklist

Front-End-Checklist

Open source MDX
72.9K
Stars
6.6K
Forks
2
Issues
1.4K
Watchers
1 week
Last Commit

About Front-End-Checklist

# Front-End Checklist [![Backers on Open Collective](https://opencollective.com/front-end-checklist/backers/badge.svg)](#backers) [![Support via Open Collective](https://opencollective.com/front-end-checklist/sponsors/badge.svg)](https://opencollective.com/front-end-checklist) 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. - Website: [frontendchecklist.io](https://frontendchecklist.io) - Rules: [frontendchecklist.io/rules](https://frontendchecklist.io/rules) - MCP server: [mcp.frontendchecklist.io](https://mcp.frontendchecklist.io) Companion project: [UX Patterns for Devs](https://uxpatterns.dev/) 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 ...

Platforms

Web Self-hosted

Languages

MDX

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 means site-breaking, compliance-sensitive, or security-sensitive issues that should be fixed first.
  • High means issues with major impact on user experience, accessibility, performance, or discoverability.
  • Medium means strong best practices that should be part of normal frontend quality review.
  • Low 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

Back to top

CSS

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

Browse CSS on frontendchecklist.io

Back to top

JavaScript

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

Browse JavaScript on frontendchecklist.io

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

  • [ ] 4XX Pages in Sitemap High: Checks for sitemap URLs that return 4XX HTTP status codes, indicating broken or removed pages.
  • [ ] Add a favicon to every page Medium: Checks for favicon presence and correct link element configuration
  • [ ] Add disclaimers to sensitive content Medium: Checks for appropriate disclaimers on sensitive content types such as medical, legal, financial, and affiliate pages
  • [ ] Add FAQPage schema markup Medium: Validates FAQPage JSON-LD structured data for question-and-answer content
  • [ ] Add internal links to key pages Medium: Validates that key pages receive adequate internal links from other site pages
  • [ ] Add internal links to orphan pages Medium: Detects pages with no internal links pointing to them
  • [ ] Add LocalBusiness schema markup Medium: Validates LocalBusiness schema for local SEO
  • [ ] Add Organization schema markup Medium: Validates Organization schema for brand presence
  • [ ] Add outgoing links to dead-end pages Medium: Pages with no outgoing internal links, potentially trapping users and crawlers
  • [ ] Add Product schema markup Medium: Validates Product schema for e-commerce
  • [ ] Add relevant external links Medium: Validates that pages include outgoing links to authoritative external sources where appropriate
  • [ ] Add Review schema markup Medium: Validates Review and AggregateRating schema on product, service, and business pages to enable star-rating rich results.
  • [ ] Add share buttons to content pages Low: Checks for social sharing buttons on articles, blog posts, and other shareable content pages.
  • [ ] Add structured data markup High: Schema.org structured data (JSON-LD) is implemented for rich search results.
  • [ ] Add Twitter Card meta tags Medium: Validates Twitter (X) Card meta tags for correct card type, image dimensions, and required fields.
  • [ ] Add VideoObject schema to video pages Medium: Checks for VideoObject structured data on pages containing video content to enable video rich results in Google Search.
  • [ ] Audit all noindex pages Medium: Lists and reviews all pages blocked from indexing to ensure critical content is accessible.
  • [ ] Audit and refine AI-generated content Medium: Detects and reviews content that appears to be primarily AI-generated to ensure quality.
  • [ ] Avoid conflicting indexability signals Medium: Detects conflicting signals between robots.txt, meta robots, X-Robots-Tag headers, and canonical tags
  • [ ] Avoid duplicate meta descriptions Medium: Checks for duplicate meta descriptions across the site
  • [ ] Avoid keyword stuffing Medium: Detects excessive keyword repetition in content, titles, or meta tags that signals manipulative SEO
  • [ ] Avoid multi-hop redirect chains High: Detects multi-hop redirect chains that waste crawl budget
  • [ ] Avoid nofollow on internal links Medium: Flags internal links with rel=nofollow
  • [ ] Avoid nosnippet on important pages Medium: Detects pages preventing search engine snippets
  • [ ] Avoid redirect chains on canonical URLs Medium: Ensures that canonical tags point directly to the final destination URL without intermediate redirects.
  • [ ] Avoid thin content on key pages Medium: Checks content length on key pages to identify thin content that may underperform in search results.
  • [ ] Check for broken links Medium: All links are tested and none are broken. Links redirect to intended destinations.
  • [ ] Cite authoritative external sources Medium: Checks for citations to reputable external websites to back up factual claims and build trust.
  • [ ] Create a comprehensive Contact page Medium: Checks for a dedicated contact page with multiple methods for users to reach out.
  • [ ] Create a dedicated About page Medium: Checks for a dedicated about or company page with meaningful content.
  • [ ] Create and submit an XML sitemap High: An XML sitemap is available at /sitemap.xml and includes all important pages.
  • [ ] Display a physical business address Medium: Checks for visible physical address information
  • [ ] Display clear author bylines Medium: Checks for visible author names on content pages to establish transparency and trust.
  • [ ] Do not link from HTTPS to HTTP Medium: Detects links from HTTPS pages to HTTP destinations, which trigger mixed content warnings and lose ranking signals
  • [ ] Fix invalid links Medium: Detects malformed, empty, or syntactically invalid link formats on the page
  • [ ] Fix malformed HTML structure Medium: Ensures that the HTML document is well-formed with correctly nested and closed tags.
  • [ ] Fix or remove broken external links Medium: Detects and resolves external links that return error codes or have timed out.
  • [ ] Geo Meta Tags Medium: Checks for geographic meta tags for local or regional targeting
  • [ ] Highlight author credentials and expertise Medium: Checks for author bios and credentials to establish expertise and trust.
  • [ ] Identify YMYL content on your site High: Detects Your Money or Your Life (YMYL) content that is subject to Google's elevated E-E-A-T quality standards.
  • [ ] Implement comprehensive author markup Medium: Uses structured data to provide machine-readable metadata about content authors.
  • [ ] Implement valid Article structured data High: Validates that articles use the correct Schema.org properties for improved search visibility.
  • [ ] Implement valid BreadcrumbList schema Medium: Adds structured data to breadcrumb navigation for better site hierarchy and search appearance.
  • [ ] Include indexable pages in your sitemap Medium: Checks for canonical-url, indexable pages that are missing from the XML sitemap.
  • [ ] Include keywords in URL slugs Medium: Checks if URL slugs contain descriptive, keyword-relevant words instead of IDs, random strings, or vague terms.
  • [ ] Keep HTML documents under crawl limits Medium: Checks HTML document size against Googlebot crawl limits
  • [ ] Keep linked PDFs under 60 MB Medium: Checks linked PDF sizes against Googlebot 60MB truncation limit
  • [ ] Keep NAP details consistent Medium: Checks for consistent Name, Address, Phone across site
  • [ ] Keep page titles unique High: Checks that the tag is unique across all pages of the site to avoid duplicate title SEO issues.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/sitemap-domain">Keep sitemap URLs on the correct domain</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Checks that all URLs in the sitemap belong to the same domain and protocol as the sitemap itself.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/length">Keep URLs concise</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Checks URL length for optimal crawlability and usability</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/sitemap-valid">Keep XML sitemaps valid</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Validates sitemap XML structure against the sitemaps.org protocol, URL limits, and encoding requirements.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/parameters">Limit unnecessary URL parameters</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Checks for excessive URL parameters</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/redirect-chains">Link directly to final destination URLs</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Detects URLs that redirect and links pointing to redirects</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/social-profiles">Link to active social profiles</a> <img src="./apps/web/public/priority/low.svg" alt="Low" />: Checks for links to the organization's social media profiles to help search engines connect the site to its social entity and build E-E-A-T signals.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/llm-parsability">Make content easy for LLMs to parse</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Analyzes how well LLMs can parse and understand the content</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/indexability">Make important pages indexable</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Identifies important pages blocked from search engine indexing by noindex, robots.txt, or other directives</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/meta-in-body">Meta Tags in Body</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Detects meta tags incorrectly placed in document body</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/mime-type">MIME Type Validation</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Detects Content-Type header mismatches with file extensions</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/noindex-in-sitemap">Noindex in Sitemap</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Checks for noindexed pages listed in sitemap</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/og-image-size">OG Image Size</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Checks og:image meets recommended size (1200x630)</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/og-url-match">OG URL Match</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Checks that og:url matches canonical URL</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/og-tags">Open Graph Tags</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Validates Open Graph meta tags for social sharing</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/article-links">Optimize article link density</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Ensures articles have a healthy balance of internal and external links relative to their length.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/affiliate-disclosure">Provide clear affiliate disclosures</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Checks for affiliate and sponsored content disclosures to maintain transparency.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/robots-txt">Publish a robots.txt file</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Checks if robots.txt exists at the root, is accessible, and contains valid directives.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/editorial-policy">Publish an editorial policy page</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Checks for editorial and content policy pages that demonstrate site-wide trustworthiness</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/quality">Publish high-quality content</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: LLM-based content quality analysis for SEO</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/llms-txt">Publish llms.txt for documentation-heavy sites</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Offer an optional llms.txt index that points AI tools to high-value documentation pages and, when useful, a fuller llms-full.txt companion.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/broken-links">Resolve internal broken links</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Detects and fixes internal links that return 404 or 5xx errors to improve user experience.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/robots-meta-conflict">Robots Meta Conflict</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Detects pages blocked by robots.txt that also carry noindex meta tags, creating a paradox where the directive is never read.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/schema-noindex-conflict">Schema + Noindex Conflict</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Detects pages that carry rich result schema markup but are blocked from indexing via noindex or robots.txt.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/service-area">Service Area Pages</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Checks for properly structured service-area or location pages for businesses serving multiple geographic regions.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/canonical-url">Set canonical URLs for all pages</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: A canonical URL tag is present to prevent duplicate content issues.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/robots-meta">Set robots meta directives correctly</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Checks robots meta tag for valid indexing directives in the page head.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/freshness">Show content freshness signals</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Checks for last-modified and published date signals that help Google assess content currency</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/content-dates">Show published and updated dates</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Checks for published and modified dates on content pages</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/trust-signals">Show trust signals on key pages</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Checks for trust badges, certifications, client logos, testimonials, and social proof on high-conversion pages.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/canonical-header">Sync HTML canonical tags and Link headers</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Ensures consistency between HTML rel="canonical" tags and HTTP Link canonical-url headers.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/tel-mailto">Tel & Mailto Links</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Validates that phone numbers use the tel: scheme and email addresses use the mailto: scheme for one-click contact on mobile devices.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/special-chars">URL Special Characters</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Checks for problematic special characters in URL paths that can cause crawling, parsing, or canonicalization issues.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/stop-words">URL Stop Words</a> <img src="./apps/web/public/priority/low.svg" alt="Low" />: Flags common stop words in URL slugs that add length without improving keyword relevance.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/h1">Use a single descriptive H1</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Validates that each page has exactly one H1 tag containing a descriptive, keyword-relevant heading</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/pagination">Use canonicals on paginated pages</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Checks that paginated pages have proper canonicals</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/anchor-text">Use descriptive anchor text</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Checks for descriptive, keyword-rich anchor text that provides context for users and search engines.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/hyphens">Use hyphens in URLs</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Checks that URL slugs use hyphens as word separators, not underscores or spaces</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/lowercase">Use lowercase URLs</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Checks that URLs are lowercase</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/trailing-slash">Use trailing slashes consistently</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Checks for consistent trailing slash usage across all URLs to avoid duplicate content and canonicalization issues.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/json-ld-valid">Use valid JSON-LD structured data</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Validates JSON-LD structured data for syntax correctness, required properties, and schema.org compliance</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/weak-internal-links">Weak Internal Links</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Detects pages with very few dofollow internal links pointing to them, indicating poor link equity distribution and crawl discoverability.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/website-search">WebSite Search Schema</a> <img src="./apps/web/public/priority/low.svg" alt="Low" />: Checks for WebSite schema with SearchAction to enable the Sitelinks Searchbox in Google Search results.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/meta-title">Write a descriptive page title</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Validates page title presence and length</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/meta-description">Write a meta description for each page</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Validates meta description presence and length</li> <li>[ ] <a href="https://frontendchecklist.io/rules/seo/reading-level">Write at a clear reading level</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Analyzes content readability using Flesch-Kincaid</li> </ul> <p><strong><a href="#front-end-checklist">Back to top</a></strong></p> <h3>Security</h3> <p><em>22 rules. Headers, transport, safe linking, and frontend security rules.</em></p> <p><a href="https://frontendchecklist.io/rules/security">Browse Security on frontendchecklist.io</a></p> <ul> <li>[ ] <a href="https://frontendchecklist.io/rules/security/element-hiding">Adblock Element Hiding</a> <img src="./apps/web/public/priority/low.svg" alt="Low" />: 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.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/security/dependency-audit">Audit dependencies for known vulnerabilities</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Dependencies are regularly scanned for known security vulnerabilities using automated tooling, and critical findings are remediated before deployment.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/security/mixed-content">Avoid mixed content on HTTPS pages</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: An HTTPS page that loads resources over HTTP has mixed content — browsers block or warn about these requests, breaking functionality and undermining transport security.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/security/blocked-links">Blocked Tracking Links</a> <img src="./apps/web/public/priority/low.svg" alt="Low" />: 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.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/security/new-tab">External Link Security</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: 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.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/security/content-security-policy">Implement a content security policy</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: A Content Security Policy is implemented to prevent XSS attacks and control resource loading.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/security/leaked-secrets">Leaked Environment Variables</a> <img src="./apps/web/public/priority/critical.svg" alt="Critical" />: Checks for exposed API keys, tokens, passwords, and other secrets embedded in HTML source, JavaScript bundles, or client-accessible files.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/security/terms-of-service">Link to your terms of service in the footer</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: 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.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/security/stack-trace-exposure">Prevent stack trace exposure in production error responses</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Production error responses never include stack traces, internal file paths, framework internals, or other debugging detail that could aid an attacker (OWASP A09).</li> <li>[ ] <a href="https://frontendchecklist.io/rules/security/form-captcha">Protect public forms with CAPTCHA</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Public forms that accept user input without authentication must include bot protection to prevent spam, credential stuffing, and automated abuse.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/security/http-to-https">Redirect HTTP to HTTPS</a> <img src="./apps/web/public/priority/critical.svg" alt="Critical" />: All HTTP requests must be permanently redirected (301) to HTTPS to prevent users from accessing your site over an insecure connection.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/security/password-field-security">Secure password input fields</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Password fields implement security best practices including proper autocomplete, show/hide toggle, and strength indicators.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/security/https">Serve all pages over HTTPS</a> <img src="./apps/web/public/priority/critical.svg" alt="Critical" />: Every page and resource on your site must be delivered over HTTPS to protect user data in transit and enable modern browser features.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/security/permissions-policy">Set a Permissions-Policy header</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: The Permissions-Policy header lets servers restrict which browser features (camera, microphone, geolocation, etc.) can be used in a page or its embedded iframes.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/security/referrer-policy">Set a Referrer-Policy header</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: 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.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/security/hsts">Set an HSTS header</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: The Strict-Transport-Security response header tells browsers to always use HTTPS for your domain, preventing protocol downgrade attacks and cookie hijacking.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/security/x-frame-options">Set an X-Frame-Options header</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: The X-Frame-Options header controls whether your page can be embedded in an iframe, frame, or object — preventing clickjacking attacks.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/security/session-cookie-flags">Set Secure, HttpOnly, and SameSite flags on session cookies</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: 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.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/security/x-content-type">Set X-Content-Type-Options: nosniff</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: 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.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/security/token-storage-security">Store authentication tokens securely</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Sensitive authentication tokens are stored in httpOnly cookies rather than localStorage or sessionStorage to prevent theft via cross-site scripting attacks (OWASP A07).</li> <li>[ ] <a href="https://frontendchecklist.io/rules/security/form-https">Submit forms over HTTPS</a> <img src="./apps/web/public/priority/critical.svg" alt="Critical" />: All HTML form actions must point to HTTPS URLs to ensure form data is encrypted in transit and cannot be intercepted by network attackers.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/security/cross-origin-isolation">Use COOP, COEP, and CORP for cross-origin isolation when needed</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: 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.</li> </ul> <p><strong><a href="#front-end-checklist">Back to top</a></strong></p> <h3>Images</h3> <p><em>25 rules. Formats, responsive delivery, optimization, and media quality rules.</em></p> <p><a href="https://frontendchecklist.io/rules/images">Browse Images on frontendchecklist.io</a></p> <ul> <li>[ ] <a href="https://frontendchecklist.io/rules/images/image-compression">Compress images without quality loss</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: All images are compressed without significant quality loss to reduce file sizes.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/images/broken-images">Fix broken images</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: No images return 404 errors or display broken-image icons to users.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/images/error-images">Handle image loading errors gracefully</a> <img src="./apps/web/public/priority/low.svg" alt="Low" />: Broken images are handled gracefully with fallback images or placeholder content.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/images/responsive-images">Implement responsive images with srcset</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Images use srcset and sizes attributes for responsive delivery across devices.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/images/image-file-size">Keep image file sizes within recommended limits</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Individual image files are compressed to reasonable sizes to avoid wasted bandwidth and slow load times, especially on mobile networks.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/images/offscreen-lazy">Lazy load offscreen images</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Images below the visible viewport use loading="lazy" to defer download until the user scrolls near them, reducing initial page load time.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/images/svg-inline">Manage inline SVG size and complexity</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Large or complex SVGs inlined in HTML are extracted to external files or components, preventing them from bloating the HTML document and blocking parsing.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/images/optimized">Optimise images for faster loading</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: All images are compressed and metadata-stripped before deployment, removing unnecessary bytes without visible quality loss.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/images/image-optimization">Optimize all images for web</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Images are optimized with appropriate formats, compression, and modern techniques.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/images/svg-optimization">Optimize SVG files</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: SVG files are optimized with SVGO to remove unnecessary metadata and reduce size.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/images/critical-images">Prioritize loading critical images</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Hero and above-the-fold images are preloaded with high fetch priority for LCP.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/images/alt-text">Provide meaningful alt text for images</a> <img src="./apps/web/public/priority/critical.svg" alt="Critical" />: Every informative image has a descriptive alt attribute; decorative images use alt="" to be ignored by screen readers.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/images/responsive-size">Serve images at the correct display size</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Images are not significantly larger than their display dimensions—serving a 2000px image for a 400px container wastes bandwidth and hurts LCP.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/images/image-cdn">Serve images from a CDN</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Images are served from a CDN with automatic optimization, resizing, and format conversion.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/images/dimensions">Set explicit width and height on images</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: All <img> elements have explicit width and height attributes so browsers can reserve space before the image loads, preventing layout shift.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/images/retina-display">Support high-DPI retina displays</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: High-resolution images (2x, 3x) are provided for retina and high-DPI displays.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/images/figure-figcaption">Use <figure> and <figcaption> for image captions</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Images with visible captions are wrapped in <figure> with a <figcaption> child, creating a semantic association between image and caption.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/images/picture-element">Use <picture> with an <img> fallback</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Every <picture> element contains a required <img> fallback as its last child, ensuring images display in all browsers including those that don't support <picture>.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/images/avif-format">Use AVIF format for modern browsers</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Images support AVIF format for superior compression with proper browser fallbacks.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/images/filename-quality">Use descriptive image filenames</a> <img src="./apps/web/public/priority/low.svg" alt="Low" />: Image filenames are descriptive and human-readable, using lowercase letters, hyphens as separators, and meaningful words that reflect the image content.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/images/sprite-generation">Use image sprites where appropriate</a> <img src="./apps/web/public/priority/low.svg" alt="Low" />: Small images and icons use sprites or SVG to reduce HTTP requests.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/images/modern-format">Use modern image formats (WebP, AVIF)</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: 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.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/images/progressive-jpeg">Use progressive JPEG encoding</a> <img src="./apps/web/public/priority/low.svg" alt="Low" />: JPEG images use progressive format for better perceived loading performance.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/images/srcset">Use srcset for responsive images</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: 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.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/images/webp-format">Use WebP format with fallbacks</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Images are served in WebP format with fallbacks for older browsers.</li> </ul> <p><strong><a href="#front-end-checklist">Back to top</a></strong></p> <h3>Testing</h3> <p><em>13 rules. Unit, integration, E2E, monitoring, and quality assurance rules.</em></p> <p><a href="https://frontendchecklist.io/rules/testing">Browse Testing on frontendchecklist.io</a></p> <ul> <li>[ ] <a href="https://frontendchecklist.io/rules/testing/performance-budget">Enforce performance budgets in CI</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Define measurable performance thresholds (bundle size, Lighthouse scores, Core Web Vitals) and fail CI builds automatically when they're exceeded.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/testing/mock-best-practices">Follow mocking best practices</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Use mocks strategically to isolate units under test without over-mocking.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/testing/contract-testing">Implement consumer-driven contract testing for API boundaries</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: 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.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/testing/e2e-testing">Implement end-to-end testing</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Use E2E testing frameworks like Playwright or Cypress to test critical user journeys.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/testing/accessibility-testing">Include accessibility testing</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Automate accessibility testing with tools like axe-core, jest-axe, or Playwright's accessibility testing.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/testing/error-monitoring">Integrate real-time error monitoring in production</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: 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.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/testing/test-coverage">Maintain test coverage thresholds</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Set and enforce minimum code coverage thresholds to ensure adequate test coverage.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/testing/cross-browser-testing">Test across all major browsers</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Website works correctly across major browsers (Chrome, Firefox, Safari, Edge).</li> <li>[ ] <a href="https://frontendchecklist.io/rules/testing/mobile-testing">Test on real mobile devices and viewports</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Verify your application on real mobile devices and browser DevTools device emulation to catch touch interaction issues, viewport bugs, and mobile-specific rendering problems.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/testing/mutation-testing">Use mutation testing to measure how well tests detect bugs</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Run Stryker mutation testing on critical business logic to verify that your test suite will actually catch real bugs, not just achieve line coverage.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/testing/visual-regression">Use visual regression testing</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Capture screenshots of components and pages, then automatically compare them against approved baselines to detect unintended visual changes before they reach production.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/testing/integration-testing">Write integration tests for key workflows</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: 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.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/testing/unit-tests">Write unit tests</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Critical functionality has unit tests with good coverage for reliability.</li> </ul> <p><strong><a href="#front-end-checklist">Back to top</a></strong></p> <h3>Privacy</h3> <p><em>5 rules. Consent, tracking, retention, and user data rights rules.</em></p> <p><a href="https://frontendchecklist.io/rules/privacy">Browse Privacy on frontendchecklist.io</a></p> <ul> <li>[ ] <a href="https://frontendchecklist.io/rules/privacy/third-party-cookies">Avoid third-party cookies</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: 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.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/privacy/data-minimisation">Collect only the minimum personal data necessary</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Limit data collection to only what is strictly required for the stated purpose, in line with GDPR Article 5(1)(c) data minimisation principles.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/privacy/right-to-erasure">Implement a user-facing data deletion mechanism</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Provide users with a clear way to request deletion of their personal data, fulfilling GDPR Article 17 (right to erasure / right to be forgotten).</li> <li>[ ] <a href="https://frontendchecklist.io/rules/privacy/privacy-policy">Link to your privacy policy in the footer</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: 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.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/privacy/cookie-consent">Show a cookie consent notice</a> <img src="./apps/web/public/priority/high.svg" alt="High" />: Websites that set non-essential cookies must obtain prior, informed user consent under GDPR, CCPA, and similar privacy regulations before cookies are placed.</li> </ul> <p><strong><a href="#front-end-checklist">Back to top</a></strong></p> <h3>Internationalization</h3> <p><em>5 rules. Localization, RTL, language handling, and translation workflow rules.</em></p> <p><a href="https://frontendchecklist.io/rules/i18n">Browse Internationalization on frontendchecklist.io</a></p> <ul> <li>[ ] <a href="https://frontendchecklist.io/rules/i18n/hreflang">Add hreflang tags for multilingual sites</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Hreflang tags indicate language and regional variations for multilingual sites.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/i18n/text-expansion">Design UI components to accommodate text expansion from translation</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Ensure that layouts use flexible sizing so that translated text — which can be 30–50% longer than English — does not overflow, clip, or break the UI.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/i18n/pluralization">Handle plural forms with Intl.PluralRules or ICU MessageFormat</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Select the correct grammatical plural category for every language using Intl.PluralRules or an ICU-aware i18n library instead of simple singular/plural branching.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/i18n/currency-formatting">Use Intl APIs for currency, number, and date formatting</a> <img src="./apps/web/public/priority/medium.svg" alt="Medium" />: Format monetary values, numbers, and dates using the browser's built-in Intl.NumberFormat and Intl.DateTimeFormat APIs instead of manual string manipulation.</li> <li>[ ] <a href="https://frontendchecklist.io/rules/i18n/locale-images">Use locale-neutral images and provide cultural overrides when needed</a> <img src="./apps/web/public/priority/low.svg" alt="Low" />: Default to abstract, culture-neutral icons and illustrations, and supply locale-specific image variants only when visual content carries meaning that differs across regions.</li> </ul> <p><strong><a href="#front-end-checklist">Back to top</a></strong></p> <!-- rules-catalog:end --> <h2>Monorepo overview</h2> <table> <thead> <tr> <th>Area</th> <th>Purpose</th> </tr> </thead> <tbody> <tr> <td><code>apps/web</code></td> <td>Public website, rule pages, checklists, and MCP HTTP entrypoints</td> </tr> <tr> <td><code>packages/content</code></td> <td>Source MDX content for rules and checklists</td> </tr> <tr> <td><code>packages/mcp</code></td> <td>MCP server and tool definitions</td> </tr> <tr> <td><code>packages/rules</code></td> <td>Public rules package for external consumers</td> </tr> <tr> <td><code>packages/design-system</code></td> <td>Shared UI primitives and custom components</td> </tr> <tr> <td><code>packages/auth</code>, <code>packages/data-layer</code>, <code>packages/schemas</code>, <code>packages/types</code></td> <td>Shared auth, data, schema, and type infrastructure</td> </tr> </tbody> </table> <h2>Common commands</h2> <ul> <li><code>pnpm dev</code> - Run local development tasks</li> <li><code>pnpm build</code> - Build all apps and packages with Turborepo</li> <li><code>pnpm lint</code> - Run Biome linting</li> <li><code>pnpm typecheck</code> - Run TypeScript checks across the repo</li> <li><code>pnpm test</code> - Run the test suite</li> <li><code>pnpm validate:rule-structure</code> - Validate rule heading structure</li> <li><code>pnpm score:rules</code> - Score the rule corpus against the quality gate</li> <li><code>pnpm generate:skills</code> - Regenerate installable skills from the rules</li> <li><code>pnpm generate:readme</code> - Regenerate the root README checklist and the generated catalog copy</li> </ul> <h2>Contributing</h2> <p>Most content work happens in <code>packages/content/rules/en</code>. A typical rule-editing flow is:</p> <ol> <li>Edit or add the relevant rule MDX files.</li> <li>Run <code>pnpm score:rules</code>.</li> <li>Run <code>pnpm validate:rule-structure</code>.</li> <li>Run <code>pnpm validate:sources</code> when source metadata changes.</li> <li>Run <code>pnpm generate:skills</code>.</li> <li>Run <code>pnpm generate:readme</code> if rule titles or descriptions changed.</li> </ol> <p>See <a href="AGENTS.md"><code>AGENTS.md</code></a>, <a href="scripts/README.md"><code>scripts/README.md</code></a>, and <a href="docs/generated/rules-catalog.md"><code>docs/generated/rules-catalog.md</code></a> for repo conventions, script docs, and the generated standalone catalog copy.</p> <h2>Contributors</h2> <p>Thanks goes to these wonderful people (<a href="https://allcontributors.org/docs/en/emoji-key">emoji key</a>):</p> <p><a href="https://github.com/thedaviddias/Front-End-Checklist/graphs/contributors"></p> <img src="https://contrib.rocks/image?repo=thedaviddias/Front-End-Checklist" /> </a> <h2>Support</h2> <ul> <li>GitHub repo: <a href="https://github.com/thedaviddias/Front-End-Checklist">thedaviddias/Front-End-Checklist</a></li> <li>Issues: <a href="https://github.com/thedaviddias/Front-End-Checklist/issues">open an issue</a></li> <li>License: <a href="LICENSE">MIT</a></li> </ul> </article> </div> </div> </div> </div> </section> </div> </div> </main> <!-- ========================= Footer v3 ===========================--> <footer class="footer footer-three dark:bg-background-8 {=$class} relative overflow-hidden bg-white"> <div class="main-container"> <div class="grid grid-cols-12 justify-between gap-x-0 gap-y-16 pt-16 pb-16 lg:gap-x-8 xl:gap-x-0 xl:pt-[100px]"> <div class="col-span-12 lg:col-span-4"> <div data-ns-animate data-delay="0.3" class="xl:max-w-[306px]"> <figure> <img src="https://img.softono.com/qoj701ib3Ld4bDgb-icIWTSfvTWeTYajWDUdTPwHgQ0/aHR0cHM6Ly9zb2Z0b25vLmNvbS91cGxvYWQvbG9nby9sb2dvLnBuZw" class="dark:hidden" alt="Nexsass" /> <img src="https://img.softono.com/qoj701ib3Ld4bDgb-icIWTSfvTWeTYajWDUdTPwHgQ0/aHR0cHM6Ly9zb2Z0b25vLmNvbS91cGxvYWQvbG9nby9sb2dvLnBuZw" class="hidden dark:block" alt="Nexsass" /> </figure> <p class="text-secondary dark:text-accent mt-4 mb-7"> Turpis tortor nunc sed amet et faucibus vitae morbi congue sed id mauris. </p> <div class="flex items-center gap-3"> <a href="#" class="footer-social-link"> <span class="sr-only">Facebook</span> <svg xmlns="http://www.w3.org/2000/svg" width="7" height="16" viewBox="0 0 7 16" fill="none"> <path d="M2.25 15C2.25 15.4142 2.58579 15.75 3 15.75C3.41421 15.75 3.75 15.4142 3.75 15H2.25ZM3.75 7C3.75 6.58579 3.41421 6.25 3 6.25C2.58579 6.25 2.25 6.58579 2.25 7H3.75ZM6 1.75C6.41421 1.75 6.75 1.41421 6.75 1C6.75 0.585786 6.41421 0.25 6 0.25V1.75ZM3 4H2.25H3ZM2.25 7C2.25 7.41421 2.58579 7.75 3 7.75C3.41421 7.75 3.75 7.41421 3.75 7H2.25ZM3 6.25C2.58579 6.25 2.25 6.58579 2.25 7C2.25 7.41421 2.58579 7.75 3 7.75V6.25ZM5 7.75C5.41421 7.75 5.75 7.41421 5.75 7C5.75 6.58579 5.41421 6.25 5 6.25V7.75ZM3 7.75C3.41421 7.75 3.75 7.41421 3.75 7C3.75 6.58579 3.41421 6.25 3 6.25V7.75ZM1 6.25C0.585786 6.25 0.25 6.58579 0.25 7C0.25 7.41421 0.585786 7.75 1 7.75V6.25ZM3 15H3.75V7H3H2.25V15H3ZM6 1V0.25C3.92893 0.25 2.25 1.92893 2.25 4H3H3.75C3.75 2.75736 4.75736 1.75 6 1.75V1ZM3 4H2.25V7H3H3.75V4H3ZM3 7V7.75H5V7V6.25H3V7ZM3 7V6.25H1V7V7.75H3V7Z" class="fill-secondary dark:fill-accent" /> </svg> </a> <div class="bg-stroke-1 dark:bg-stroke-8 h-5 w-px"></div> <a href="#" class="footer-social-link"> <span class="sr-only">Instagram</span> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none"> <path fill-rule="evenodd" clip-rule="evenodd" d="M11 1H5C2.79086 1 1 2.79086 1 5V11C1 13.2091 2.79086 15 5 15H11C13.2091 15 15 13.2091 15 11V5C15 2.79086 13.2091 1 11 1Z" class="stroke-secondary dark:stroke-accent" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" /> <path fill-rule="evenodd" clip-rule="evenodd" d="M8 11C6.34315 11 5 9.65685 5 8C5 6.34315 6.34315 5 8 5C9.65685 5 11 6.34315 11 8C11 8.79565 10.6839 9.55871 10.1213 10.1213C9.55871 10.6839 8.79565 11 8 11Z" class="stroke-secondary dark:stroke-accent" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" /> <rect x="11" y="5" width="2" height="2" rx="1" transform="rotate(-90 11 5)" class="fill-secondary dark:fill-accent" /> <rect x="11.5" y="4.5" width="1" height="1" rx="0.5" transform="rotate(-90 11.5 4.5)" class="stroke-secondary dark:stroke-accent" stroke-linecap="round" /> </svg> </a> <div class="bg-stroke-1 dark:bg-stroke-8 h-5 w-px"></div> <a href="#" class="footer-social-link"> <span class="sr-only">Youtube</span> <svg xmlns="http://www.w3.org/2000/svg" width="22" height="16" viewBox="0 0 22 16" fill="none"> <path fill-rule="evenodd" clip-rule="evenodd" d="M16.668 15.0028C18.9724 15.0867 20.91 13.29 21 10.9858V5.01982C20.91 2.71569 18.9724 0.918929 16.668 1.00282H5.332C3.02763 0.918929 1.08998 2.71569 1 5.01982V10.9858C1.08998 13.29 3.02763 15.0867 5.332 15.0028H16.668Z" class="stroke-secondary dark:stroke-accent" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" /> <path fill-rule="evenodd" clip-rule="evenodd" d="M10.508 5.17711L13.669 7.32511C13.8738 7.44468 13.9997 7.66398 13.9997 7.90111C13.9997 8.13824 13.8738 8.35754 13.669 8.47711L10.508 10.8271C9.908 11.2341 9 10.8871 9 10.2511V5.75111C9 5.11811 9.909 4.77011 10.508 5.17711Z" class="stroke-secondary dark:stroke-accent" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" /> </svg> </a> <div class="bg-stroke-1 dark:bg-stroke-8 h-5 w-px"></div> <a href="#" class="footer-social-link"> <span class="sr-only">LinkedIn</span> <svg xmlns="http://www.w3.org/2000/svg" width="13" height="11" viewBox="0 0 13 11" fill="none"> <path d="M2.25 4C2.25 3.58579 1.91421 3.25 1.5 3.25C1.08579 3.25 0.75 3.58579 0.75 4H2.25ZM0.75 10C0.75 10.4142 1.08579 10.75 1.5 10.75C1.91421 10.75 2.25 10.4142 2.25 10H0.75ZM10.75 10C10.75 10.4142 11.0858 10.75 11.5 10.75C11.9142 10.75 12.25 10.4142 12.25 10H10.75ZM5.5 7H4.75H5.5ZM4.75 10C4.75 10.4142 5.08579 10.75 5.5 10.75C5.91421 10.75 6.25 10.4142 6.25 10H4.75ZM2.25 1C2.25 0.585786 1.91421 0.25 1.5 0.25C1.08579 0.25 0.75 0.585786 0.75 1H2.25ZM0.75 2C0.75 2.41421 1.08579 2.75 1.5 2.75C1.91421 2.75 2.25 2.41421 2.25 2H0.75ZM1.5 4H0.75V10H1.5H2.25V4H1.5ZM11.5 10H12.25V7H11.5H10.75V10H11.5ZM11.5 7H12.25C12.25 4.92893 10.5711 3.25 8.5 3.25V4V4.75C9.74264 4.75 10.75 5.75736 10.75 7H11.5ZM8.5 4V3.25C6.42893 3.25 4.75 4.92893 4.75 7H5.5H6.25C6.25 5.75736 7.25736 4.75 8.5 4.75V4ZM5.5 7H4.75V10H5.5H6.25V7H5.5ZM1.5 1H0.75V2H1.5H2.25V1H1.5Z" class="fill-secondary dark:fill-accent" /> </svg> </a> <div class="bg-stroke-1 dark:bg-stroke-8 h-5 w-px"></div> <a href="#" class="footer-social-link"> <span class="sr-only">Dribbble</span> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none"> <path fill-rule="evenodd" clip-rule="evenodd" d="M9.81146 14.7617C6.69789 15.5957 3.41731 14.1957 1.86521 11.3707C0.313116 8.54567 0.890795 5.02595 3.26447 2.84524C5.63814 0.66452 9.19411 0.386619 11.8777 2.1721C14.5614 3.95759 15.6788 7.34483 14.5845 10.3767C13.8079 12.532 12.0248 14.1702 9.81146 14.7617Z" class="stroke-secondary dark:stroke-accent" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" /> <path d="M9.06142 14.7162C9.03653 15.1297 9.35153 15.485 9.765 15.5099C10.1785 15.5348 10.5338 15.2198 10.5587 14.8063L9.06142 14.7162ZM6.84286 0.874373C6.64188 0.512186 6.18534 0.381502 5.82315 0.582483C5.46097 0.783464 5.33028 1.24 5.53126 1.60219L6.84286 0.874373ZM13.2187 2.9035C13.3591 2.5138 13.157 2.08408 12.7673 1.94368C12.3776 1.80328 11.9479 2.00537 11.8075 2.39506L13.2187 2.9035ZM7.74006 7.03428L7.54644 6.30971L7.54546 6.30997L7.74006 7.03428ZM1.89802 5.05032C1.58158 4.78304 1.10838 4.82289 0.841101 5.13932C0.573819 5.45576 0.613667 5.92896 0.930105 6.19624L1.89802 5.05032ZM2.77955 13.0958C2.63901 13.4855 2.84095 13.9153 3.23059 14.0558C3.62023 14.1963 4.05003 13.9944 4.19057 13.6048L2.77955 13.0958ZM8.25822 8.96384L8.06412 8.23939L8.25822 8.96384ZM14.1013 10.9494C14.4178 11.2166 14.891 11.1766 15.1582 10.8601C15.4254 10.5435 15.3854 10.0703 15.0688 9.80317L14.1013 10.9494ZM9.81006 14.7613L10.5587 14.8063C10.7186 12.1509 10.1178 9.27114 9.32769 6.78072C8.53534 4.28333 7.53363 2.11922 6.84286 0.874373L6.18706 1.23828L5.53126 1.60219C6.17449 2.76135 7.13628 4.83373 7.89793 7.23434C8.66179 9.64192 9.20557 12.3216 9.06142 14.7162L9.81006 14.7613ZM12.5131 2.64928L11.8075 2.39506C11.1142 4.31922 9.52233 5.7817 7.54644 6.30971L7.74006 7.03428L7.93369 7.75886C10.3844 7.10397 12.3588 5.29004 13.2187 2.9035L12.5131 2.64928ZM7.74006 7.03428L7.54546 6.30997C5.57029 6.84064 3.46046 6.37005 1.89802 5.05032L1.41406 5.62328L0.930105 6.19624C2.86801 7.83311 5.48485 8.41679 7.93467 7.75859L7.74006 7.03428ZM3.48506 13.3503L4.19057 13.6048C4.88464 11.6805 6.47642 10.2177 8.45232 9.68829L8.25822 8.96384L8.06412 8.23939C5.614 8.89585 3.64019 10.7097 2.77955 13.0958L3.48506 13.3503ZM8.25822 8.96384L8.45232 9.68829C10.4282 9.15889 12.5381 9.62992 14.1013 10.9494L14.5851 10.3763L15.0688 9.80317C13.1305 8.16701 10.5142 7.58293 8.06412 8.23939L8.25822 8.96384Z" class="fill-secondary dark:fill-accent" /> </svg> </a> <div class="bg-stroke-1 dark:bg-stroke-8 h-5 w-px"></div> <a href="#" class="footer-social-link"> <span class="sr-only">Behance</span> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="14" viewBox="0 0 16 14" fill="none"> <path fill-rule="evenodd" clip-rule="evenodd" d="M1 7V1H4C5.65685 1 7 2.34315 7 4C7 5.65685 5.65685 7 4 7C5.65685 7 7 8.34315 7 10C7 11.6569 5.65685 13 4 13H1V7Z" class="stroke-secondary dark:stroke-accent" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" /> <path fill-rule="evenodd" clip-rule="evenodd" d="M15 10C15 8.34315 13.6569 7 12 7C10.3431 7 9 8.34315 9 10H15Z" class="stroke-secondary dark:stroke-accent" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" /> <path d="M1 6.25C0.585786 6.25 0.25 6.58579 0.25 7C0.25 7.41421 0.585786 7.75 1 7.75V6.25ZM4 7.75C4.41421 7.75 4.75 7.41421 4.75 7C4.75 6.58579 4.41421 6.25 4 6.25V7.75ZM9.75 9.99998C9.74999 9.58577 9.41419 9.24999 8.99998 9.25C8.58577 9.25001 8.24999 9.58581 8.25 10L9.75 9.99998ZM10.9295 12.8024L10.6619 13.5031L10.9295 12.8024ZM14.795 12.5C15.0712 12.1913 15.0447 11.7172 14.736 11.441C14.4273 11.1648 13.9532 11.1913 13.677 11.5L14.795 12.5ZM14 5.75C14.4142 5.75 14.75 5.41421 14.75 5C14.75 4.58579 14.4142 4.25 14 4.25V5.75ZM10 4.25C9.58579 4.25 9.25 4.58579 9.25 5C9.25 5.41421 9.58579 5.75 10 5.75V4.25ZM1 7V7.75H4V7V6.25H1V7ZM9 10L8.25 10C8.25004 11.5548 9.20948 12.9483 10.6619 13.5031L10.9295 12.8024L11.1971 12.1018C10.3257 11.7689 9.75002 10.9328 9.75 9.99998L9 10ZM10.9295 12.8024L10.6619 13.5031C12.1143 14.0578 13.7584 13.6588 14.795 12.5L14.236 12L13.677 11.5C13.0551 12.1953 12.0686 12.4347 11.1971 12.1018L10.9295 12.8024ZM14 5V4.25H10V5V5.75H14V5Z" class="fill-secondary dark:fill-accent" /> </svg> </a> </div> </div> </div> <div class="col-span-12 grid grid-cols-12 gap-x-0 gap-y-8 lg:col-span-8"> <div class="col-span-12 md:col-span-4"> <div data-ns-animate data-delay="0.4" class="space-y-8"> <p class="sm:text-heading-6 text-tagline-1 text-secondary dark:text-accent font-normal"> Company </p> <ul class="space-y-3"> <li> <a href="page/about-us" class="footer-link-v2 router pjax"> About Us </a> </li> <li> <a href="himanshu" class="footer-link-v2 router pjax"> About Founder </a> </li> <li> <a href="services" class="footer-link-v2 router pjax"> Our Services </a> </li> <li> <a href="testimonials" class="footer-link-v2 router pjax"> Testimonials </a> </li> <li> <a href="contact" class="footer-link-v2 router pjax"> Contact Us </a> </li> </ul> </div> </div> <div class="col-span-12 md:col-span-4"> <div data-ns-animate data-delay="0.5" class="space-y-8"> <p class="sm:text-heading-6 text-tagline-1 text-secondary dark:text-accent font-normal"> Explore </p> <ul class="space-y-3"> <li> <a href="softwares" class="footer-link-v2 router pjax"> Softwares </a> </li> <li> <a href="vendors" class="footer-link-v2 router pjax"> Software Vendors </a> </li> <li> <a href="blog" class="footer-link-v2 router pjax"> Tech Blog </a> </li> </ul> </div> </div> <div class="col-span-12 md:col-span-4"> <div data-ns-animate data-delay="0.6" class="space-y-8"> <p class="sm:text-heading-6 text-tagline-1 text-secondary dark:text-accent font-normal"> Legal Policies </p> <ul class="space-y-3"> <li> <a href="page/terms-condition" class="footer-link-v2 router pjax"> Terms & Conditions </a> </li> <li> <a href="page/privacy-policy" class="footer-link-v2 router pjax"> Privacy Policy </a> </li> </ul> </div> </div> </div> </div> <div class="relative overflow-hidden pt-6 pb-[60px] text-center"> <div class="footer-divider bg-stroke-2 dark:bg-accent/5 absolute top-0 right-0 left-0 mx-auto h-px w-0 origin-center"></div> <p data-ns-animate data-delay="0.7" data-offset="10" data-start="top 105%" class="text-secondary dark:text-accent/60"> ©2026 , made by <a href="http://softono.com" target="_blank" class="text-secondary dark:text-accent">Softono</a> </p> </div> </div> <div class="{=$hide-theme-toggle}"> <!-- ========================= Theme Toggle Button ===========================--> <button id="theme-toggle" data-default-theme="{=$default-theme}" aria-label="Theme toggle button" class="size-12 bg-background-8 !z-[9999] dark:bg-white rounded-l-2xl cursor-pointer flex items-center justify-center fixed right-0 bottom-5"> <span id="dark-theme-icon"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6 stroke-black"> <path stroke-linecap="round" stroke-linejoin="round" d="M12 3v2.25m6.364.386-1.591 1.591M21 12h-2.25m-.386 6.364-1.591-1.591M12 18.75V21m-4.773-4.227-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0Z" /> </svg> </span> <span id="light-theme-icon"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" class="size-6 stroke-white"> <path stroke-linecap="round" stroke-linejoin="round" d="M21.752 15.002A9.72 9.72 0 0 1 18 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 0 0 3 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 0 0 9.002-5.998Z" /> </svg> </span> </button> </div> <div id="common-modal" class="modal fade"> <div class="modal-dialog"> <div class="modal-content" id="common-modal-content"> </div> </div> </div> </footer> <script src="https://code.jquery.com/jquery-4.0.0.min.js" integrity="sha256-OaVG6prZf4v69dPg6PhVattBXkcOWQB62pdZ3ORyrao=" crossorigin="anonymous"></script> <script src="theme/vendor/swiper.min.js"></script> <script src="theme/vendor/leaflet.min.js"></script> <script src="theme/vendor/vanilla-infinite-marquee.min.js"></script> <script src="theme/vendor/split-text.min.js"></script> <script src="theme/vendor/gsap.min.js"></script> <script src="theme/vendor/scroll-trigger.min.js"></script> <script src="theme/vendor/draw-svg.min.js"></script> <script src="theme/vendor/scroll-trigger.min.js"></script> <script src="theme/vendor/motionpathplugin.min.js"></script> <script src="theme/vendor/lenis.min.js"></script> <script src="theme/vendor/springer.min.js"></script> <script src="theme/vendor/number-counter.js"></script> <script src="theme/vendor/stack-card.min.js"></script> <script src="theme/assets/main.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.21.0/jquery.validate.min.js" integrity="sha512-KFHXdr2oObHKI9w4Hv1XPKc898mE4kgYx58oqsc/JqqdLMDI4YjOLzom+EMlW8HFUd0QfjfAvxSL6sEq/a42fQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script src="assets/js/app.js?v=4"></script> <script src="assets/js/pjax.js?v=8"></script> <script src="assets/js/common.js"></script> <script> $(document).ready(function() { pjax.onLinkClick = function(target){ updateActiveMenu(target); }; pjax.onPageLoaded = function(url){ initRevealElements(); }; pjax.init(); }); </script> <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/orestbida/cookieconsent@3.0.1/dist/cookieconsent.css"> <script type="module"> import 'https://cdn.jsdelivr.net/gh/orestbida/cookieconsent@3.0.1/dist/cookieconsent.umd.js'; window.addEventListener('load', function() { if (window.templateCustomizer?.settings?.style === 'dark') { document.documentElement.classList.add('cc--darkmode'); } CookieConsent.run({ // root: 'body', // autoShow: true, //disablePageInteraction: true, // hideFromBots: true, // mode: 'opt-in', //revision: 100, cookie: { name: 'cc_cookie', // domain: location.hostname, // path: '/', // sameSite: "Lax", expiresAfterDays: 365, }, // https://cookieconsent.orestbida.com/reference/configuration-reference.html#guioptions guiOptions: { consentModal: { layout: 'cloud inline', position: 'bottom right', equalWeightButtons: true, flipButtons: false }, preferencesModal: { layout: 'box', equalWeightButtons: true, flipButtons: false } }, onChange: ({changedCategories, changedServices}) => { alert(changedCategories); alert(changedServices,changedServices); if(CookieConsent.getUserPreferences().rejectedCategories.indexOf('necessary')<0){ app.setCookie('cookie_consent',1); } }, onModalHide: ({modalName}) => { if(CookieConsent.getUserPreferences().rejectedCategories.indexOf('necessary')<0){ app.setCookie('cookie_consent',1); } }, categories: { necessary: { enabled: true, // this category is enabled by default readOnly: true // this category cannot be disabled }, analytics: { autoClear: { cookies: [ { name: /^_ga/, // regex: match all cookies starting with '_ga' }, { name: '_gid', // string: exact cookie name } ] }, // https://cookieconsent.orestbida.com/reference/configuration-reference.html#category-services services: { ga: { label: 'Google Analytics', onAccept: () => {}, onReject: () => {} }, youtube: { label: 'Youtube Embed', onAccept: () => {}, onReject: () => {} }, } }, //ads: {} }, language: { default: 'en', translations: { en: { consentModal: { title: 'We use cookies', description: 'We use cookies to provide our services and for analytics and marketing. To find out more about our use of cookies, please see our Privacy Policy. By continuing to browse our website, you agree to our use of cookies. <a href="page/cookie-policy">Cookie policy</a>', acceptAllBtn: 'Accept all', acceptNecessaryBtn: 'Accept Necessary', showPreferencesBtn: 'Manage Individual preferences', // closeIconLabel: 'Reject all and close modal', footer: ``, }, preferencesModal: { title: 'Manage cookie preferences', acceptAllBtn: 'Accept all', acceptNecessaryBtn: 'Accept Necessary', savePreferencesBtn: 'Accept current selection', closeIconLabel: 'Close modal', serviceCounterLabel: 'Service|Services', sections: [ { title: 'Your Privacy Choices', description: `In this panel you can express some preferences related to the processing of your personal information. You may review and change expressed choices at any time by resurfacing this panel via the provided link. To deny your consent to the specific processing activities described below, switch the toggles to off or use the “Reject all” button and confirm you want to save your choices.`, }, { title: 'Strictly Necessary', description: 'These cookies are essential for the proper functioning of the website and cannot be disabled.', //this field will generate a toggle linked to the 'necessary' category linkedCategory: 'necessary', cookieTable: { caption: 'Cookie table', headers: { name: 'Cookie', domain: 'Domain', desc: 'Description' }, body: [ { name: 'XSRF-TOKEN', domain: location.hostname, desc: 'csrf security', }, { name: APP_UID+'_session', domain: location.hostname, desc: 'user session', }, { name: APP_UID+'_token', domain: location.hostname, desc: 'user remember', }, { name: APP_UID+'_tz', domain: location.hostname, desc: 'timezone', } ] } }, { title: 'Performance and Analytics', description: 'These cookies collect information about how you use our website. All of the data is anonymized and cannot be used to identify you.', linkedCategory: 'analytics', cookieTable: { caption: 'Cookie table', headers: { name: 'Cookie', domain: 'Domain', desc: 'Description' }, body: [ { name: '_ga', domain: location.hostname, desc: 'Description 1', }, { name: '_gid', domain: location.hostname, desc: 'Description 2', } ] } }, { title: 'More information', description: 'For any queries in relation to my policy on cookies and your choices, please <a href="contact">contact us</a>' } ] } } } } }); }); </script> </body> </html>