LeetCode-style practice tracker with AI feedback on your attempts
CodeTrail is a full-stack web app that helps you track coding interview practice over time.
You can add problems from LeetCode (or any source), log multiple attempts per question, and get AI feedback on where you’re going wrong and how to improve.
You can:
- Add questions with title, link, difficulty, and notes
- Log multiple attempts per question with time spent and whether you needed help
- Request AI feedback on a single attempt or all attempts for a question
- Build a history of how your understanding improves every time you revisit a problem
👉 Try CodeTrail here:
https://code-trail.vercel.app
-
Secure authentication
- Email + password login via BetterAuth
- Session management with secure cookies
-
Question management
- Store problem title, URL (e.g. LeetCode link), difficulty, and notes
- Edit questions as your understanding of the problem evolves
-
Attempt logging
- Log multiple attempts for each question
- Track time spent, whether you needed hints/solutions, and what you struggled with
- Use notes to capture patterns, edge cases, and “gotchas” in your own words
-
AI feedback on attempts
- Request AI feedback on a single attempt to understand what went wrong
- Or analyze all attempts for a question to see overall patterns and recurring mistakes
- Get suggestions for alternative approaches, things to focus on, and what to practice next
-
Progress & organization
- Question Details page with a full attempt history and AI feedback
- Designed to act like a personal learning log rather than just a checklist
- Frontend & Backend: Next.js (App Router), React, TypeScript
- Styling: Tailwind CSS + shadcn/ui components
- Auth: BetterAuth with PostgreSQL adapter
- Database: PostgreSQL (e.g. Neon) via Drizzle ORM
- AI:
- AI provider (e.g. OpenAI / Gemini / similar) for attempt analysis
- Server-side routes for securely calling the AI API
- Other:
- Next.js Server Actions for data mutations
- Strong TypeScript types for users, questions, attempts, and AI feedback
CodeTrail revolves around a few key data models:
- User – The authenticated user profile
- Question – A coding problem with title, URL, difficulty, and notes
- Attempt – One practice run at a question:
- Time spent
- Whether you needed help
- What you struggled with
- Your own reflections
- AI Feedback – Model-generated analysis tied to a question and/or specific attempts:
- Explanation of what you’re doing wrong
- Suggestions for improving your approach
- Patterns across multiple attempts
Together, these make CodeTrail a learning log, not just a list of problems you’ve solved.
.
├─ app/ # Next.js App Router pages & routes
│ ├─ (auth)/ # Sign-in / sign-up / reset password screens
│ ├─ (root)/ # Main app views (dashboard, questions, details, etc.)
│ └─ api/ # Route handlers for server actions / AI feedback APIs
├─ components/ # Reusable UI components (forms, tables, layouts)
├─ constants/ # Shared constants (routes, difficulty levels, etc.)
├─ database/ # Drizzle schema & database config
├─ lib/ # Utilities, validation, auth wrappers, AI helpers
├─ migrations/ # SQL migrations generated by Drizzle
├─ public/ # Static assets (logos, icons, etc.)
└─ types/ # Shared TypeScript types (User, Question, Attempt, Feedback...)