All Tasks

0/58
Showing 58 tasks

1. Auth: Never Roll Your Own Auth

criticalSample

Verify authentication uses established providers (Supabase Auth / Clerk / Auth0).

Why it matters: Custom authentication code or manual JWT checks are the #1 source of data leaks in vibe-coded apps.
Claude Code / Cursor Prompt:
Audit the authentication and session management in this project. 1. Verify that we are using a standard provider (e.g. Supabase Auth / Clerk / Auth0) and not rolling custom password hashing or JWT verification. 2. Ensure all private API routes and server actions verify authentication before processing any request. 3. Check if unauthenticated users can access any private pages or endpoints. 4. List any route or server action that is missing explicit auth checks, and write the code to protect them.

2. Secrets & Env Vars Isolation

critical Locked

Audit source code and bundle outputs for exposed private API keys or database credentials.

Why it matters: Automated GitHub bots scrape hardcoded API keys within minutes, leading to massive billing spikes or database wipes.
Prompt included in the full pack

3. Row-Level Security (RLS) Data Isolation

critical Locked

Ensure PostgreSQL tables enforce Row-Level Security so User A cannot read or modify User B data.

Why it matters: Without RLS, anyone can inspect network requests in DevTools and query other users private data.
Prompt included in the full pack

4. Server-Side Input Validation (Zod)

high Locked

Validate all API request bodies, query params, and form inputs with strict Zod schemas.

Why it matters: Unvalidated client inputs cause crashes, SQL injections, and cross-site scripting (XSS).
Prompt included in the full pack

5. Rate Limiting Paid Endpoints & Forms

high Locked

Cap request frequencies on OpenAI/Resend endpoints and public auth forms to block bot attacks.

Why it matters: Malicious scripts can spam paid AI routes, incurring thousands of dollars in bill overages within hours.
Prompt included in the full pack

6. Dependency Hygiene & NPM Audit

medium Locked

Audit installed npm packages for known vulnerabilities and clean up unused dependencies.

Why it matters: Outdated third-party packages introduce critical remote code execution exploits.
Prompt included in the full pack

7. CSRF Protection on State-Changing Requests

high Locked

Verify cookie-based session requests are protected against cross-site request forgery.

Why it matters: Without CSRF protection, a malicious site can trick a logged-in user's browser into firing unwanted actions on your app.
Prompt included in the full pack

8. File Upload Validation & Storage Isolation

high Locked

Restrict uploaded file types, sizes, and storage paths to prevent malicious uploads.

Why it matters: Unrestricted file uploads let attackers upload executable scripts or oversized files that crash your server or storage bill.
Prompt included in the full pack

9. Webhook Signature Verification

critical Locked

Verify Stripe/other webhook payloads using signature checks before trusting them.

Why it matters: An unverified webhook endpoint lets anyone fake a "payment succeeded" event and unlock paid features for free.
Prompt included in the full pack

10. Admin & Role-Based Access Control

critical Locked

Confirm admin-only routes and actions check user role server-side, not just hide UI elements.

Why it matters: Hiding an "Admin" button in the UI does nothing if the underlying API route does not check the user's role.
Prompt included in the full pack

11. Client-Side API Calls to Paid Third-Party Services

critical Locked

Ensure OpenAI/Anthropic/paid API calls are proxied through your server, never called directly from the browser.

Why it matters: Calling a paid AI API directly from client-side code requires shipping the API key to the browser, where anyone can extract and abuse it.
Prompt included in the full pack

12. XSS via Rendered User Content

high Locked

Check for unsafe rendering of user-generated content (markdown, HTML, rich text).

Why it matters: Rendering unsanitized user content with dangerouslySetInnerHTML or similar lets an attacker inject scripts that run in other users' browsers.
Prompt included in the full pack

13. Password Reset & Email Verification Token Security

high Locked

Ensure password reset and email verification tokens expire and are single-use.

Why it matters: Long-lived or reusable reset tokens let an attacker take over an account if a token is ever leaked or guessed.
Prompt included in the full pack

14. Sensitive Data in Logs & Error Messages

medium Locked

Ensure passwords, tokens, and PII are never written to logs or returned in error responses.

Why it matters: Logs are often less protected than databases, and leaked logs can expose credentials or personal data long after the fact.
Prompt included in the full pack

15. Multi-Tenant / Workspace Data Isolation

critical Locked

If the app has organizations/workspaces, confirm one tenant cannot access another tenant's data.

Why it matters: A missing tenant_id/org_id filter on a single query can leak an entire customer's data to a different customer.
Prompt included in the full pack

16. Error Handling & Fallback UI

highSample

Wrap UI in Error Boundaries and return clean JSON errors from API routes.

Why it matters: Unhandled errors result in blank white screens or raw technical stack traces shown to buyers.
Claude Code / Cursor Prompt:
Audit error handling across the client and server code in this repository. 1. Check if React Error Boundaries are wrapped around main page routes and dynamic components to prevent full-page crashes. 2. Ensure all asynchronous fetch/API calls have try...catch blocks with user-friendly toast or banner notifications. 3. Verify server endpoints catch internal exceptions and return clean 500 error responses without exposing raw database or stack trace details. 4. Add missing try-catch blocks and Error Boundary components where needed.

17. Database Backups & Recovery Test

critical Locked

Confirm automated daily database backups and perform a 5-minute restoration drill.

Why it matters: One wrong prompt or migration can wipe your database. Without backups, your data is gone forever.
Prompt included in the full pack

18. Zero-Cost Uptime Monitoring & Error Tracking

medium Locked

Set up automated uptime ping alerts and error tracking (Sentry / Highlight).

Why it matters: You should know your app is down before your paying customers send angry emails.
Prompt included in the full pack

19. Domain, SSL & Env Config Sanity Check

high Locked

Verify CORS origin headers, production env keys, and HTTPS redirect rules.

Why it matters: Missing production variables or wrong CORS origins break authentication and checkout webhooks on launch.
Prompt included in the full pack

20. Database Query & Performance Audit

medium Locked

Add missing database indexes on foreign keys and paginate large table lists.

Why it matters: Unindexed tables slow database queries to a crawl as user traffic grows.
Prompt included in the full pack

21. Security Headers (CSP, X-Frame-Options, HSTS)

medium Locked

Add baseline HTTP security headers to prevent clickjacking and reduce injection attack surface.

Why it matters: Missing security headers make an app more vulnerable to clickjacking, MIME sniffing, and script injection attacks.
Prompt included in the full pack

22. Payment & Fulfillment Idempotency

critical Locked

Ensure duplicate payment events or double-clicked checkout buttons cannot double-charge or double-fulfill.

Why it matters: Network retries and webhook redelivery are common — without idempotency, customers can be charged twice or given duplicate access.
Prompt included in the full pack

23. Account & Data Deletion Handling

medium Locked

Provide a real way for users to delete their account and associated data.

Why it matters: Many jurisdictions legally require honoring data deletion requests, and buyers increasingly expect a working "delete my account" option.
Prompt included in the full pack

24. Basic SEO & Social Preview Metadata

medium Locked

Verify meta tags, sitemap, robots.txt, and OpenGraph previews are correctly configured.

Why it matters: Missing metadata means your app shows a blank or broken preview when shared on social media, and won't get indexed properly by search engines.
Prompt included in the full pack

25. Email Deliverability (SPF/DKIM/DMARC)

medium Locked

Confirm transactional emails (signup, reset, receipts) actually land in the inbox, not spam.

Why it matters: Without proper email authentication, password reset and receipt emails silently land in spam, causing invisible churn.
Prompt included in the full pack

26. Cloud Cost & Usage Budget Alerts

medium Locked

Set spending alerts on hosting, database, and AI API usage to avoid surprise bills.

Why it matters: A bug, bot attack, or viral spike can run up thousands of dollars in AI or infrastructure costs overnight without an alert.
Prompt included in the full pack

27. Separate Staging/Dev Environment from Production

medium Locked

Confirm changes are tested in a non-production environment before deploying to real users.

Why it matters: Testing new features directly in production risks breaking the live app or corrupting real user data.
Prompt included in the full pack

28. Timeout & Graceful Degradation for Slow Dependencies

medium Locked

Ensure slow third-party API calls (AI, payment, email) have timeouts and don't hang the whole request.

Why it matters: A slow or down third-party API without a timeout can hang requests indefinitely, exhausting server resources and freezing the app for all users.
Prompt included in the full pack

29. Mobile Responsiveness Check

medium Locked

Verify core flows (signup, checkout, main dashboard) work on mobile viewport sizes.

Why it matters: A large share of first-time visitors arrive on mobile; a broken mobile layout on signup or checkout directly costs conversions.
Prompt included in the full pack

30. Accessibility Basics (Contrast, Alt Text, Keyboard Nav)

medium Locked

Check color contrast, image alt text, and basic keyboard navigation across core pages.

Why it matters: Poor accessibility excludes real users, can trigger legal complaints in some regions, and often signals broader UI quality issues.
Prompt included in the full pack

31. Open-Source License & Attribution Compliance

medium Locked

Check dependencies for copyleft licenses (GPL/AGPL) that may conflict with a closed-source product.

Why it matters: Using a GPL/AGPL-licensed package in a closed commercial product can create real legal exposure or force you to open-source your own code.
Prompt included in the full pack

32. User Data Export Functionality

medium Locked

Give users a way to export their own data, separate from account deletion.

Why it matters: Users expect to be able to get their own data out at any time, and some regulations require it as a standing right, not just at account closure.
Prompt included in the full pack

33. Two-Factor Authentication for Higher-Value Accounts

medium Locked

Offer 2FA (TOTP or email code) at least for admin or high-value accounts.

Why it matters: Password-only auth is a single point of failure; 2FA meaningfully reduces account takeover risk, especially for admin or paying-customer accounts.
Prompt included in the full pack

34. Privacy Policy Accuracy & Subprocessor Disclosure

medium Locked

Confirm the privacy policy actually lists every third-party service that processes user data.

Why it matters: A privacy policy that doesn't match the real third parties in use (AI providers, analytics, email tools) is a compliance gap and an easy thing for a user or regulator to catch.
Prompt included in the full pack

35. Session Invalidation on Password Change

high Locked

Ensure changing a password kills all other active sessions/tokens for that account.

Why it matters: If a password change doesn't invalidate existing sessions, an attacker who already has a stolen session token stays logged in even after the user "secures" their account.
Prompt included in the full pack

36. Content Moderation & Abuse Reporting

medium Locked

If users can post content visible to others, provide a way to report and remove abusive content.

Why it matters: Without a reporting/removal mechanism, a single bad actor can post harmful content that stays up indefinitely, creating legal and reputational risk.
Prompt included in the full pack

37. N+1 Queries & Bad Database Access Patterns

high Locked

Find N+1 query loops, missing joins, and repeated per-item database calls that silently tank performance.

Why it matters: N+1 query patterns work fine with 10 test records and fall over completely once real users generate real data volume — often the single biggest cause of a vibe-coded app feeling "slow" in production.
Prompt included in the full pack

38. Insecure Direct Object References (IDOR)

critical Locked

Check if changing a predictable ID in a URL or API call lets a user access someone else's resource.

Why it matters: Sequential or guessable IDs (e.g. /invoice/1042) let anyone view or edit another user's data just by changing a number, even with auth in place.
Prompt included in the full pack

39. Server-Side Request Forgery (SSRF)

high Locked

Check if the server fetches URLs supplied by users (e.g. for previews or webhooks) without restriction.

Why it matters: A server that fetches any user-supplied URL can be tricked into hitting internal services, cloud metadata endpoints, or private network resources.
Prompt included in the full pack

40. Mass Assignment on Protected Fields

critical Locked

Check if a client can set protected fields like role, isAdmin, or price directly in a request body.

Why it matters: If an update endpoint blindly saves the entire request body, a user can add "role": "admin" or "price": 0 to a request and the server will happily save it.
Prompt included in the full pack

41. Excessive Data Exposure in API Responses

high Locked

Check if API responses return entire database rows, including password hashes or internal-only fields.

Why it matters: Returning a full user object because it was convenient often leaks password hashes, internal flags, or other users' emails to the client.
Prompt included in the full pack

42. Public Cloud Storage Bucket Misconfiguration

critical Locked

Check if S3/R2/storage buckets are set to public read or write when they should be private.

Why it matters: A misconfigured public bucket can expose every uploaded file — including private user documents — to anyone with the URL, or let anyone write/overwrite files.
Prompt included in the full pack

43. Exposed Debug Panels, Admin Tools & .git Folders

high Locked

Check that debug routes, framework admin panels, and .git folders are not reachable in production.

Why it matters: Debug endpoints and exposed .git folders left on by default can leak source code, environment details, or give direct database/admin access to anyone who finds the URL.
Prompt included in the full pack

44. Insecure Cookie Flags (HttpOnly / Secure)

medium Locked

Confirm session cookies are set with HttpOnly and Secure flags so they can't be read by JavaScript or sent over plain HTTP.

Why it matters: A session cookie without HttpOnly can be stolen by any injected script (XSS); without Secure, it can be intercepted over an unencrypted connection.
Prompt included in the full pack

45. Race Conditions on Concurrent Writes

high Locked

Check for double-booking, overselling, or duplicate-submission bugs caused by concurrent requests.

Why it matters: Two nearly-simultaneous requests (two users booking the same slot, or a user double-clicking checkout) can both pass a check and both succeed, causing overselling or duplicate records.
Prompt included in the full pack

46. Storing Money as Floating-Point Numbers

high Locked

Check if prices/balances are stored as floats instead of integer cents or a decimal type.

Why it matters: Floating-point math causes rounding errors in financial calculations — small discrepancies compound over many transactions and cause balance mismatches or support disputes.
Prompt included in the full pack

47. Missing Database Transactions on Multi-Step Writes

high Locked

Check that multi-step operations (create order + charge payment + update inventory) are wrapped in a transaction.

Why it matters: Without a transaction, a crash or error halfway through a multi-step write leaves the database in an inconsistent state — e.g. a charged customer with no order record.
Prompt included in the full pack

48. Caching for Read-Heavy Endpoints

high Locked

Add caching to frequently-read, rarely-changing data instead of hitting the database on every request.

Why it matters: Endpoints that get read far more often than they change (public profiles, product listings, dashboards) needlessly hammer the database on every single request, which is often the first thing to fall over as traffic grows.
Prompt included in the full pack

49. Cache Stampede (Thundering Herd) Protection

high Locked

Prevent a cache expiry from causing every concurrent request to hit the database at once.

Why it matters: When a popular cached item expires, dozens or hundreds of simultaneous requests can all miss the cache at the same moment and slam the database with identical duplicate queries — sometimes hard enough to take the whole app down.
Prompt included in the full pack

50. Database Connection Pooling & Overload Protection

high Locked

Confirm the app uses connection pooling and won't exhaust the database's max connections under load.

Why it matters: Serverless/edge functions that open a new raw database connection per request can exhaust the database's connection limit within seconds under real traffic, causing every user to get connection errors at once.
Prompt included in the full pack

51. Session Fixation on Login

high Locked

Confirm a new session ID is issued on login, rather than reusing the pre-login session.

Why it matters: If a session ID is issued before login and reused after, an attacker who plants a known session ID on a victim (e.g. via a link) can hijack their account the moment they log in.
Prompt included in the full pack

52. Auth Token Storage Location (localStorage vs. Cookie)

high Locked

Check if JWTs or session tokens are stored in localStorage/sessionStorage instead of an HttpOnly cookie.

Why it matters: Tokens stored in localStorage are readable by any JavaScript on the page, so a single XSS bug anywhere in the app lets an attacker steal every logged-in user's token directly.
Prompt included in the full pack

53. Cookie Domain & Path Scope Misconfiguration

medium Locked

Check that cookies aren't scoped broader than necessary (e.g. set on a parent domain, exposing them to unrelated subdomains).

Why it matters: A cookie set with too broad a Domain attribute can be read by any subdomain, including ones you don't fully control or trust (staging, marketing sites, third-party-hosted subdomains).
Prompt included in the full pack

54. Session Expiry & Idle Timeout

medium Locked

Confirm sessions expire after a reasonable absolute lifetime and after a period of inactivity.

Why it matters: A session that never expires means a stolen token or an abandoned logged-in device stays valid indefinitely.
Prompt included in the full pack

55. Least-Privilege Scoping on API Keys & Service Credentials

high Locked

Check that service credentials (DB, storage, third-party APIs) use the minimum permissions needed, not full admin access.

Why it matters: A leaked full-access key does far more damage than a leaked key scoped to only what the app actually needs — least privilege limits the blast radius of any single credential leak.
Prompt included in the full pack

56. Timezone & UTC Storage Bugs

medium Locked

Confirm timestamps are stored in UTC and converted to local time only for display.

Why it matters: Storing local time instead of UTC causes subtle bugs around midnight, daylight saving transitions, and any comparison across users in different timezones.
Prompt included in the full pack

57. Missing Foreign Key Constraints & Orphaned Records

medium Locked

Check that related tables have proper foreign key constraints instead of relying on application code alone.

Why it matters: Without database-level foreign key constraints, a bug or a deleted parent record can leave orphaned child rows that silently corrupt data or cause confusing errors later.
Prompt included in the full pack

58. Unbounded List Endpoints Without Pagination Limits

high Locked

Check that list endpoints have an enforced maximum page size, not just an optional one.

Why it matters: An endpoint that returns "all rows" when no limit is specified will work fine in testing and then return a massive, slow, memory-heavy payload once the table has real production data.
Prompt included in the full pack