Project Info
Inspiration
Traditional programming assessments test memorizing algorithms and solving puzzles in isolation. This does not reflect how engineers write code anymore. Instead, developers use ai tools like Cursor and Claude code. It's time to assess what actually matters which is how candidates think, prompt, debug, and build with AI. Because that's the future of software engineering.
What it does
VibeCheck is an AI-powered coding assessment platform that tests candidates on real-world software engineering skills rather than algorithmic puzzles. Key Features: Full IDE Experience - Candidates code in a WebContainer-powered browser IDE with file management, terminal access, and live preview Full IDE Experience - Candidates code in a WebContainer-powered browser IDE with file management, terminal access, and live preview AI-Assisted Coding - Tests how well candidates leverage AI tools (like Cursor/Copilot), mirroring modern development workflows AI-Assisted Coding - Tests how well candidates leverage AI tools (like Cursor/Copilot), mirroring modern development workflows AI-Generated Realistic Challenges - Claude creates browser-based coding problems that simulate actual product features (e.g., build a recipe manager, create an e-commerce cart) AI-Generated Realistic Challenges - Claude creates browser-based coding problems that simulate actual product features (e.g., build a recipe manager, create an e-commerce cart) Holistic AI Grading - Claude Sonnet 4.5 evaluates submissions based on framework-specific rubrics, code quality, UI/UX, and effective AI utilization Holistic AI Grading - Claude Sonnet 4.5 evaluates submissions based on framework-specific rubrics, code quality, UI/UX, and effective AI utilization Time-Travel Debugging - Records every keystroke, AI interaction, and file change for session replay—see HOW candidates think and problem-solve Time-Travel Debugging - Records every keystroke, AI interaction, and file change for session replay—see HOW candidates think and problem-solve Detailed Feedback - Provides category-by-category scoring, strengths, areas for improvement, and AI effectiveness analysis Detailed Feedback - Provides category-by-category scoring, strengths, areas for improvement, and AI effectiveness analysis The Flow: 1) Candidate selects their preferred framework (React Router v7 or Next.js) 2) AI generates a realistic, practical coding challenge 3) Candidate builds the solution in the browser IDE with AI assistance 4) AI grades their ability to code with AI 5) Employer reviews detailed results and can replay the entire session
How we built it
frontend Stack: Next.js 16 with App Router for the application framework WebContainer API for running a full development environment in the browser Monaco Editor for code editing with syntax highlighting XTerm.js for terminal emulation TailwindCSS + shadcn/ui for beautiful, responsive UI Backend Stack: Next.js API Routes for serverless endpoints Drizzle ORM with PostgreSQL (Neon) Better Auth for authentication AI Integration: OpenRouter with Claude Sonnet 4.5 for challenge generation and grading AI SDK from Vercel for streaming AI responses
Challenges we ran into
WebContainer Limitations - Running a full Node.js environment in the browser had constraints. We had to filter out node_modules, .next, and build artifacts when collecting code for grading. WebContainer Limitations - Running a full Node.js environment in the browser had constraints. We had to filter out node_modules, .next, and build artifacts when collecting code for grading. Database Relations - Drizzle ORM required explicit relation definitions for nested queries. We had to properly define assessmentSubmissionRelations and assessmentSessionRelations. Database Relations - Drizzle ORM required explicit relation definitions for nested queries. We had to properly define assessmentSubmissionRelations and assessmentSessionRelations. Filesystem Implementation - The filesystem is implemented with the zen-fs library. However, the webcontainer also has it's own filesystem, and the editor ui needs to maintain a copy of the file tree. Keeping all three in sync was a challenge. Especially when it came to editing the files. Filesystem Implementation - The filesystem is implemented with the zen-fs library. However, the webcontainer also has it's own filesystem, and the editor ui needs to maintain a copy of the file tree. Keeping all three in sync was a challenge. Especially when it came to editing the files. Race Conditions in Rubric Generation - The rubric took 40+ seconds to generate, causing grading to fail if users submitted too quickly. We implemented a retry mechanism with 50-second polling intervals. Race Conditions in Rubric Generation - The rubric took 40+ seconds to generate, causing grading to fail if users submitted too quickly. We implemented a retry mechanism with 50-second polling intervals. Markdown Rendering - Initially used Streamdown but it failed silently. Switched to react-markdown for reliable rendering of coding challenges. Markdown Rendering - Initially used Streamdown but it failed silently. Switched to react-markdown for reliable rendering of coding challenges. AI Response Parsing - AI sometimes returned malformed JSON. We implemented robust regex extraction and error handling to parse grading results. AI Response Parsing - AI sometimes returned malformed JSON. We implemented robust regex extraction and error handling to parse grading results.
Accomplishments we're proud of
Built a full WebContainer IDE that runs entirely in the browser—no backend servers for code execution! Created an AI-powered assessment pipeline from challenge generation → IDE coding → automated grading Framework-specific evaluation that adapts grading rubrics based on whether candidates use React Router v7 or Next.js
What we learned
AI is the future of technical evaluation - Traditional tests are outdated; AI can assess code quality, architecture, and problem-solving holistically Browser capabilities are incredible - WebContainers let us run Node.js, package managers, and dev servers entirely in the browser Real-world tests are more valuable - Building a recipe manager reveals more about a candidate than solving "Two Sum" AI-assisted coding is a skill - How well someone prompts and leverages AI is as important as raw coding ability Event sourcing enables powerful features - Recording state changes as events unlocked session replay without complex infrastructure
Create T3 App
This is a T3 Stack project bootstrapped with create-t3-app.
What's next? How do I make an app with this?
We try to keep this project as simple as possible, so you can start with just the scaffolding we set up for you, and add additional things later when they become necessary.
If you are not familiar with the different technologies used in this project, please refer to the respective docs. If you still are in the wind, please join our Discord and ask for help.
Learn More
To learn more about the T3 Stack, take a look at the following resources:
- Documentation
- Learn the T3 Stack — Check out these awesome tutorials
You can check out the create-t3-app GitHub repository — your feedback and contributions are welcome!
How do I deploy this?
Follow our deployment guides for Vercel, Netlify and Docker for more information.
Analysis
View
Metric
- 29
- 27
- 14
- 7
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- CSSIn code
- JavaScriptIn code
- Next.jsIn code
- OpenAIIn code
- ReactIn code
- SQLIn code
- Tailwind CSSIn code
- TypeScriptIn code
- Vercel AI SDKIn code
9 of 9 appear in the indexed code.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
718 KB
Source files
106
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
ngethan/vibecheck
125 files · 1.4 MB · @ 9ea81b8
Structure
Interface
36 files · 29%Screens, components and styles rendered to the user.
API & routing
19 files · 15%Request entry points: routes, handlers and controllers.
Application logic
42 files · 34%Domain rules, services and shared utilities.
+1 moreData & schema
9 files · 7%Schema definitions, migrations and data access.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- TypeScript55%
- YAML43%
- CSS1%
- SQL0%
- JavaScript0%
- Markdown0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
package.json
npm · 65- @ai-sdk/openai
- @ai-sdk/react
- @better-fetch/fetch
- @monaco-editor/react
- @radix-ui/react-alert-dialog
- @radix-ui/react-context-menu
- @radix-ui/react-dialog
- @radix-ui/react-dropdown-menu
- @radix-ui/react-progress
- @radix-ui/react-scroll-area
- @radix-ui/react-separator
- @radix-ui/react-slot
- @radix-ui/react-tabs
- @radix-ui/react-tooltip
- @t3-oss/env-nextjs
- @tanstack/react-query
- @trpc/client
- @trpc/react-query
- +47 more
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.