Aetherio Logo

Technical Audit Checklist for Vibe-Coded Projects (Lovable, Bolt, Cursor)

12 minutes mins to read

Share article

Introduction

The emergence of "vibe coding" and generative AI tools like Lovable, Bolt, or Cursor is revolutionizing development, allowing projects to launch at unprecedented speeds. But what happens when this code, generated in minutes or hours, needs to move from experimentation to production, integrate into an existing codebase, or simply be audited for robustness and security? Promises of speed can quickly clash with complex technical realities. Based on our experience in taking over and optimizing numerous critical projects, we've observed that AI-generated code, while a fantastic accelerator, still requires rigorous auditing.

This guide is for CTOs, developers, and project managers facing this new reality: how to evaluate the quality, security, and maintainability of a project whose foundational code has been "vibe-coded"? "Vibe" is great for ideation, but a rigorous "audit list" is essential for sustainability. We provide an actionable technical audit checklist, designed to help you regain control and ensure a smooth transition to a stable and secure production environment, even for the most innovative code. This guarantees transforming speed into sustainable agility, not future technical debt. By the end of this article, you'll know exactly where to look and what to check to turn a PoC into a reliable product.

Developer examining AI-generated code on a screen

Why auditing a "vibe-coded" project is vital?

"Vibe coding," a term popularized by tools like Lovable and Bolt, involves using conversational interfaces or AI assistants (such as Cursor, Claude Code, or Windsurf) to rapidly generate code, features, and even entire applications. While this approach offers unparalleled productivity for MVPs (Minimum Viable Products) and prototypes, it introduces unique challenges in terms of quality, security, and maintainability.

As we explored in our article on vibe coding security flaws, AI-generated code can unintentionally embed vulnerabilities, suboptimal coding practices, or outdated dependencies. A lack of rigorous auditing can turn an initial time-saving into a mountain of future problems, ranging from critical security flaws to maintenance difficulties, and even excessive infrastructure costs. Ignoring this audit risks accumulating technical debt from day one of the project. As experts in custom web application development in Lyon, France (we've also delivered projects in the US), we assist companies in securing and optimizing their codebases, whether "vibe-coded" or traditionally written. We’ve seen the vital importance of deeply understanding how to integrate AI into your applications with pragmatism and rigor.

Understanding "Vibe Coding": A Revolution with Limitations

To contextualize, vibe coding powered by tools like Cursor, Claude Code, or Windsurf represents a true revolution, accelerating development like never before. However, speed should not equate to negligence. The "magic" of AI comes with a need for vigilant human review. Our checklist is designed to be your technical safety net.

Technical Audit Checklist for AI-Generated (Vibe-Coded) Projects

Here are the essential points to check when auditing a project whose codebase has been generated by AI tools like Lovable, Bolt, or Cursor. Each item includes the associated risk and a quick verification method.

1. Authentication and Authorization (Auth) Management

Risk: Unauthorized access, data breaches. AI can generate basic but vulnerable authentication systems (e.g., JWT without expiration, lax session management, easy privilege escalation).

5-Minute Check:

  • JWT / Sessions: Is JWT token expiration correctly configured? Are sessions invalidated on logout or after an inactivity period? (Search for jwt.verify and expiresIn or session.destroy).
  • Roles and Permissions: Is there server-side role verification logic for sensitive actions? (Look for middleware or @Roles or isAdmin decorators before critical function execution).
  • Passwords: Are passwords hashed with a robust algorithm (bcrypt, Argon2, scrypt)? (Search for argon2, bcrypt.hash, password_hash).

2. Data Isolation (Row-Level Security/Multi-tenant)

Risk: Data leakage between users or tenants, insecure access to other entities' information. Essential for SaaS or multi-user applications.

5-Minute Check:

  • tenant_id: Does every read/write request include filtering by tenant_id (or equivalent)? (Check WHERE clauses in database queries).
  • RLS (PostgreSQL): If PostgreSQL is used, is Row-Level Security enabled and correctly configured for sensitive tables? (Verify RLS policy definitions CREATE POLICY).

3. Secrets and Environment Variable Management

Risk: API key leaks, database credentials, etc., exposed in source code or insecure .env files, compromising the entire system.

5-Minute Check:

  • .env: Is the .env file present at the root? Is it excluded from version control (.gitignore)? (Check for the existence and content of .gitignore).
  • Secret Access: Are secrets accessed via process.env.VAR_NAME (Node.js) or equivalent, and not hardcoded? (Look for string patterns like sk- for OpenAI, full DB URLs, or AWS credentials in project files).

4. Presence and Quality of Tests (Unit/Integration)

Risk: Inability to guarantee proper functioning of generated features, easy regressions, inability to refactor without breaking things. AI rarely generates relevant or exhaustive tests.

5-Minute Check:

  • test folders: Are there test, spec, or __tests__ folders? (Check for .test.js, .spec.ts files, etc.).
  • Coverage: Is there a code coverage report? (Run npm test -- --coverage or equivalent if a tool like Jest is configured).
  • Basic Tests: Do crucial entry points (authentication, resource creation) have at least one simple unit or integration test? (Examine a few key test files).

5. Dependency Audit and Vulnerabilities (Libraries)

Risk: Use of outdated libraries or those with known vulnerabilities, which attackers could exploit. AI can use outdated versions.

5-Minute Check:

  • package.json/requirements.txt: Are dependency versions fixed or with major versions specified (e.g., ^1.2.3 or 1.x.x)? (Examine the files).
  • Dependency Audit: Does the project pass a dependency security audit? (Run npm audit or pip install safety && safety check -r requirements.txt).

6. Monitoring, Logging, and Error Handling

Risk: Inability to understand what's happening in production, diagnose problems, or detect intrusion attempts. Unhandled errors can expose sensitive information.

5-Minute Check:

  • Logs: Are meaningful logs generated for key events (login, errors, important actions)? Do logs contain sensitive information? (Search for console.log, winston, loguru calls and their content).
  • Error Handling: Are errors globally caught and do they return generic messages to clients? (Look for global error middleware or try/catch blocks on main routes).
  • Monitoring: Is there basic integration with an error monitoring tool (Sentry, New Relic, etc.)? (Search for SDK initializations).

7. Basic GDPR Compliance (Personal Data)

Risk: Unencrypted storage of sensitive data, absence of processes for user data deletion/modification, non-compliance with regulations.

5-Minute Check:

  • Sensitive Data: Where is personal data (names, emails, IPs, etc.) stored? Is it encrypted at rest if particularly sensitive? (Check database schemas).
  • CRUD Endpoints: Are there endpoints for users to view, modify, or delete their data? (Look for routes like /users/:id with PUT/DELETE).
  • Consent: Does the project manage consent for cookies or personal data usage? (Check for a consent banner presence).

8. Code Quality and Maintainability

Risk: Spaghetti code, excessive duplication, overly long functions, lack of comments, making the project impossible to evolve or debug. AI is known to generate sometimes less elegant code.

5-Minute Check:

  • File Structure: Is the project logically organized by modules/functions? (Browse the directory structure).
  • SOLID Principles/Architecture: Are SOLID principles at least partially respected? Is the general architecture clear (e.g., MVC, hexagonal)? (Examine key files, especially services or controllers).
  • Linting/Formatting Tools: Are tools like ESLint, Prettier, Black configured? (Look at .eslintrc, .prettierrc, pyproject.toml files).

9. Infrastructure and Deployment

Risk: Manual and risky deployment, lack of scalability, misconfigured production environment.

5-Minute Check:

  • Dockerfile / CI/CD: Is there a Dockerfile? Is a basic CI/CD pipeline (GitHub Actions, GitLab CI) configured for deployment? (Look for corresponding files).
  • Production Configuration: Did AI generate specific configuration for production (e.g., DEBUG modes deactivated, correct ports, TLS)? (Check application or web server configuration files).

10. Database Query Performance

Risk: Unoptimized queries leading to slowdowns, high infrastructure costs, or Timeouts under load.

5-Minute Check:

  • Indexes: Do frequently used fields in WHERE, JOIN, and ORDER BY clauses have indexes? (Examine database schemas or migrations).
  • N+1: Do complex queries avoid the N+1 problem? (Check ORMs like TypeORM/Prisma with selectRelation/include or explicit SQL queries to perform JOINs rather than individual queries in a loop).

Conclusion

The technical audit of a "vibe-coded" project is not a luxury, but an absolute necessity for any CTO or developer aiming to transform a quick prototype into a robust and secure application. Moving from "vibe" to reliability requires expert and methodical scrutiny. By following this checklist, you can not only identify and correct the inherent weaknesses in AI-generated code but also lay the foundation for a sustainable and scalable project.

At Aetherio, our role as CTO as a Service and technical partner in Lyon is precisely to support you in this endeavor. Whether you need a comprehensive audit, a project takeover with AI (Lovable, Bolt, Cursor), or custom application development from conception, we combine technical expertise, strategic vision, and transparency to ensure the success of your projects. Don't let initial speed turn into insurmountable technical debt. Let's audit together to build the future of your applications.

Further Reading:

FAQ - Questions fréquentes