Skip to content
Back to skills

Nextjs Production Bug Audit

CSecurity

Use when reviewing a Next.js marketing site or app for production readiness, before go-live, or when users report visual or functional bugs. Covers 26-point checklist across CRITICAL, HIGH, MEDIUM, LOW severity.

  • 7 stars
  • 0 votes
  • 0 copies
  • 5 views
  • Added June 14, 2026
developmenttypescriptrustgobashnextjsnodegitapidatabasesecurity

Works with

  • cli
  • api

Security analysis

C67/100
  • mediumUses curl or wget to download content
  • criticalExfiltrates credentials via HTTP — exact pattern from Snyk ToxicSkills study

Pro shows the line behind each finding and how to fix it

Scanned June 14, 2026

npx -y skills add fratilanico/apex-os-bad-boy --skill nextjs-production-bug-audit --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Nextjs Production Bug Audit?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Nextjs Production Bug Audit
[![Security: C — Skills Directory](https://www.skillsdirectory.com/api/skills/fratilanico-nextjs-production-bug-audit/badge)](https://www.skillsdirectory.com/skills/fratilanico-nextjs-production-bug-audit)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: nextjs-production-bug-audit
description: Use when reviewing a Next.js marketing site or app for production readiness, before go-live, or when users report visual or functional bugs. Covers 26-point checklist across CRITICAL, HIGH, MEDIUM, LOW severity.
---

# Next.js Production Bug Audit

## Overview

Systematic bug-finding checklist for Next.js sites before or after deployment. Finds broken forms, dead links, mobile overflow, accessibility gaps, security issues, and content inconsistencies.

## When to Use

- Before deploying a Next.js site to production
- After user reports "something looks wrong"
- When inheriting a codebase and need to assess quality
- Quarterly production health checks

## Audit Procedure

1. **Run the build** — `npm run build` catches TypeScript errors and build failures
2. **Fetch the live page** — `curl -s https://site.com` and check content
3. **Read every component** — systematic file-by-file review
4. **Classify by severity** — CRITICAL (broken functionality) to LOW (polish)

## 26-Point Checklist

### CRITICAL — Blocks user actions

| # | Check | What to look for |
|---|-------|-----------------|
| 1 | **Form actions** | Placeholder URLs like `YOUR_FORM_ID`, `your-link`, `example.com` |
| 2 | **Auth security** | Raw passwords in cookies, missing httpOnly/secure flags |
| 3 | **Embed URLs** | Calendly/Stripe/third-party embeds pointing to profile pages not booking/checkout |
| 4 | **API endpoints** | Routes returning 500, missing env vars, broken integrations |

### HIGH — Major UX or data issues

| # | Check | What to look for |
|---|-------|-----------------|
| 5 | **Client vs Server components** | `notFound()` in `"use client"` (crashes), `useParams` where server props work |
| 6 | **Navigation links on sub-pages** | Hash links (`#contact`) that only work on homepage — need `/#contact` |
| 7 | **Semantic HTML** | Missing `<main>` wrapper, broken heading hierarchy |
| 8 | **Data consistency** | Same metric shown as different numbers across components |
| 9 | **metadataBase URL** | Pointing to `.vercel.app` instead of production domain |

### MEDIUM — Visual or mobile issues

| # | Check | What to look for |
|---|-------|-----------------|
| 10 | **Invalid Tailwind classes** | Non-standard opacity values (`bg-white/97`), deprecated utilities |
| 11 | **Mobile grid overflow** | `grid-cols-4` without responsive breakpoint on small screens |
| 12 | **Dead components** | Imported nowhere, adds to bundle for nothing |
| 13 | **Font variable mismatch** | CSS var named `--font-geist` loading Inter font |
| 14 | **Iframe error handling** | `onError` doesn't fire for HTTP errors, only network failures |
| 15 | **Footer dead links** | Privacy Policy, Terms, GitHub, LinkedIn as `<span>` not `<a>` |
| 16 | **Carousel indicators** | Dots not tracking scroll position correctly |

### LOW — Polish and best practices

| # | Check | What to look for |
|---|-------|-----------------|
| 17 | **Missing `rel="noopener"`** | External links without `target="_blank" rel="noopener noreferrer"` |
| 18 | **Missing aria-labels** | Password inputs, icon buttons, carousel dots without labels |
| 19 | **Suspense without fallback** | `<Suspense>` with no `fallback` prop = blank flash |
| 20 | **`<a>` vs `next/link`** | Internal links causing full page reloads |
| 21 | **Stale closures in effects** | `useEffect` deps missing callback references |
| 22 | **Fixed elements on light sections** | Dark-themed fixed nav dots invisible over white sections |
| 23 | **Email inconsistency** | Different contact emails on different pages |
| 24 | **Console.log in production** | Debug statements left in shipped code |
| 25 | **Missing env var handling** | `process.env.X` used without undefined fallback |
| 26 | **Middleware auth bypass** | `pathname.includes('.')` letting crafted paths through |

## Quick Commands

```bash
# Build check
npm run build 2>&1 | tail -20

# TypeScript check
npx tsc --noEmit

# Fetch and check live content
curl -s https://site.com | grep -o 'YOUR_FORM_ID\|your-link\|example\.com\|TODO\|FIXME\|lorem'

# Check all hash links
grep -rn 'href="#' src/components/ | grep -v node_modules

# Find dead imports
grep -rn 'from.*@/components' src/ | sed 's/.*from.*@\/components\///' | sort | uniq -c | sort -n

# Check for console.log
grep -rn 'console\.log' src/ --include='*.tsx' --include='*.ts' | grep -v node_modules
```

## Content Credibility Check

When a site claims "real production numbers", verify consistency:

```bash
# Find all instances of a claimed metric
grep -rn '3,849\|3,816\|3849\|3816' src/
# Every file should show the SAME number
```

Inconsistent metrics destroy credibility for a site that emphasizes "real data, not benchmarks."

## Common Mistakes

| Mistake | Why it happens | Fix |
|---------|---------------|-----|
| `notFound()` in client component | Developer adds `"use client"` for hooks | Convert to server component, extract interactive parts |
| Hash links break on sub-pages | Works on homepage, never tested from /course | Use absolute paths: `/#section` |
| Placeholder form URLs shipped | Developer planned to add Formspree later, forgot | Search for `YOUR_`, `your-`, `example.com` before deploy |
| Showing cost structure to customers | "Transparency builds trust" | It undermines pricing — save for investor decks |

*Last updated: 2026-02-23. Derived from a 26-bug audit of a real Next.js production site.*

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.