This repository contains the results of a comparative test between three AI coding assistants, all tasked with building the same HR Platform MVP from a single concept document.
- Droid (using Claude Sonnet 4.5)
- Claude Code (using Claude Sonnet 4.5)
- Codex (still processing... ☕)
The task was to build a complete HR Platform MVP with the following specifications:
- Tech Stack: Bun runtime, Next.js 15, React, TypeScript, Prisma, PostgreSQL, ShadCN/UI
- Unique Feature: QR-code-based employee interaction system (employees never log in)
- Admin Dashboard: Full CRUD operations for employee management
- Email Automation: Automated emails with embedded QR codes
- Database Models: Employee, FormToken, Document, KPI, Review, Training, Admin
- Onboarding Flow: Admin adds employee → QR generated → Email sent → Employee scans → Form filled → Data saved
- Performance Management: KPI tracking, quarterly reviews, 360° feedback
- Learning & Development: Training assignments and completion tracking
- Document Management: Upload and distribution of employee documents
- Working Next.js application
- Complete database schema with Prisma
- QR code generation utility
- Email templates (4 types: onboarding, reviews, training, documents)
- Seed script with sample data
- Full documentation
- Turn-key solution ready to run
CLI Tool | Model | Time to Complete | Status | Notes |
---|---|---|---|---|
Droid | Sonnet 4.5 | 12 minutes | ✅ Complete | Clean execution, database worked first try |
Claude Code | Sonnet 4.5 | 15-16 minutes | ✅ Complete | Had database schema issues (see below) |
Codex | Unknown | 38+ minutes | ⏳ Still running | Perhaps it's writing a novel instead of code? 📚 |
- Location:
/droid-myHR/
- Completion Time: 12 minutes
- Database Setup: Worked perfectly on first attempt
- Issues: None reported
- Status: Production ready
- Location:
/Claude-myHR/
- Completion Time: 15-16 minutes
- Database Setup: Required manual intervention
- Issues: Multiple (detailed below)
- Status: Production ready after fixes
- Location: TBD
- Completion Time: Still waiting...
- Status: 🤷♂️ Taking a coffee break?
Problem: When attempting to run the application, the database schema was incomplete/outdated.
Error Message:
Invalid `prisma.kPI.count()` invocation:
The column `KPI.status` does not exist in the current database.
Root Cause: The database had an old schema that didn't match the Prisma schema definition. Multiple columns were missing across different tables (e.g., KPI.targetValue
, Admin.role
).
Resolution Required: Manual database reset using:
bunx prisma db push --force-reset --accept-data-loss
Problem: The seed script failed because it tried to insert data into a database with an incorrect schema.
Error Message:
PrismaClientKnownRequestError:
Invalid `prisma.admin.upsert()` invocation
The column `role` does not exist in the current database.
Impact: User had to manually execute database setup commands that should have been automated.
Problem: Unlike Droid, Claude Code didn't properly initialize the database state before attempting to run the application.
What Droid Did Right: Droid automatically handled database initialization in the correct order without requiring manual intervention.
What Claude Code Did Wrong:
- Generated Prisma schema ✅
- Failed to automatically run
prisma db push
❌ - Failed to check database state before running ❌
- Required user to manually execute setup scripts ❌
Problem: TypeScript compilation errors related to Next.js 15's new async params pattern.
Error Message:
Type '{ params: { id: string; }; }' does not satisfy the constraint 'PageProps'.
Types of property 'params' are incompatible.
Resolution: Had to update dynamic route params to use Promise<>
wrapper for Next.js 15 compatibility.
Problem: Initial Tailwind CSS setup used v4 syntax which wasn't compatible with the PostCSS configuration.
Error Message:
Error: It looks like you're trying to use `tailwindcss` directly as a PostCSS plugin.
The PostCSS plugin has moved to a separate package...
Resolution: Downgraded to Tailwind CSS v3.4.17 for compatibility.
✅ Complete feature implementation matching requirements ✅ Clean, well-structured code ✅ Comprehensive documentation ✅ Production-ready applications ✅ Same tech stack (Bun, Next.js 15, Prisma, PostgreSQL)
- Droid: Seamless, automatic, zero issues
- Claude Code: Multiple manual interventions required
- Droid: 12 minutes (faster)
- Claude Code: 15-16 minutes (3-4 minutes slower, mostly due to troubleshooting)
- Droid: No errors to recover from
- Claude Code: Successfully recovered from all errors, but required user intervention
- Droid: "Just works" out of the box
- Claude Code: Required understanding of Prisma and database management
Strengths:
- Excellent code quality and architecture
- Comprehensive error handling in final code
- Great documentation
- Successfully recovered from all issues
Areas for Improvement:
- Database Initialization: Should automatically run
prisma db push
before first use - State Checking: Should verify database state before running application
- Setup Automation: Database setup should be part of the build process, not manual
- Testing: Should test the complete flow before declaring success
Strengths:
- Flawless execution
- Proper initialization sequence
- No manual intervention required
- Faster completion time
Status: Still contemplating the meaning of life, the universe, and async/await... 🤔
Both Droid and Claude Code successfully completed the task and delivered production-ready applications using the same underlying model (Sonnet 4.5). The key difference was in execution workflow and automation:
- Droid excelled at proper initialization and automation
- Claude Code excelled at code quality but stumbled on database initialization
- Codex is still working on it (we'll update this when it finishes!)
The test demonstrates that while the underlying AI model is important, the tooling, workflow automation, and error prevention built around the model are equally crucial for developer productivity.
- Start: T+0
- Complete: T+12 minutes
- Database Issues: 0
- Manual Interventions: 0
- Start: T+0
- First Run: T+15 minutes
- Database Errors: T+15 minutes (multiple errors)
- Manual Database Reset: T+16 minutes
- Final Working State: T+16 minutes
- Database Issues: 5
- Manual Interventions: 3 (db:generate, db:push --force-reset, db:seed)
- Start: T+0
- Status at T+38 minutes: Still running
- Expected Completion: TBD
- Coffee Breaks Taken: Unknown ☕
cd droid-myHR
bun install
cp .env.example .env
# Edit .env with your database credentials
bun run dev
# Just works! ✨
cd Claude-myHR
bun install
cp .env.example .env
# Edit .env with your database credentials
bun run db:generate
bun run db:push
bun run db:seed
bun run dev
# Works after setup! ✅
# Still waiting for code generation...
# Check back later! ⏰
- Test Date: October 8, 2025
- Test Duration: 38+ minutes (ongoing for Codex)
- Model Used: Claude Sonnet 4.5 (Droid & Claude Code)
- Test Environment: MacOS, Bun v1.2.22, PostgreSQL
- Evaluator: @jarvis
- Repository: github.com/48Nauts-Operator/cli-tester
- Concept Design: Original concept for HR Platform MVP
- Droid Implementation: 12 minutes of efficient execution
- Claude Code Implementation: 16 minutes including troubleshooting
- Codex Implementation: Still in progress... any decade now! 🎬
Last Updated: October 8, 2025
"In a world where AI agents compete to build HR platforms, only one can claim the fastest completion time... but all learn from their mistakes." 🎬