150 coding problems
Practise algorithms and data structures across Easy, Medium and Hard difficulty levels.
About Codey
Codey is a full-stack coding challenge platform where users can practise algorithmic problems, execute code in the browser, submit solutions and analyse their progress over time.
Why I built it
I started building Codey while preparing for technical interviews. I wanted to understand not only how to solve coding problems, but also how platforms such as online judges execute code, evaluate outputs, store submissions and measure user progress.
The project developed into a complete coding-practice application with authentication, multi-language execution, public and hidden test cases, persistent submissions, progress tracking and a personal analytics dashboard.
Codey is inspired by platforms such as LeetCode and by the structured topic-based approach of NeetCode. It is an independent personal learning project and is not affiliated with either platform.
What you can do
Codey combines a coding workspace with persistent progress and performance insights.
Practise algorithms and data structures across Easy, Medium and Hard difficulty levels.
Write and execute solutions in JavaScript, Python, Java and C# using a browser-based Monaco editor.
Test solutions against visible or custom cases, then submit them for evaluation against the complete test suite.
Review previous attempts, accepted solutions, failed cases, runtime, memory usage and submitted code.
Track solved problems, acceptance rates, language usage, submission trends and problem-solving performance.
Measure active problem-solving time, average submission time and time taken to reach an accepted solution.
Submission evaluation is handled by the server rather than being decided by the browser.
The editor sends the source code, selected language and problem identifier to the submission route.
The server verifies the authenticated user and loads the problem test cases.
A language-specific wrapper calls the submitted solution and produces structured output.
The generated script is executed through the JDoodle API.
The server parses and normalises the returned output before comparing it with the expected result.
The submission is saved in Supabase and the user's completion status is updated when accepted.
Engineering challenges
JavaScript, Python, Java and C# each require different handling for method calls, data structures, return values, booleans, null values and runtime errors.
Execution results may be returned as JSON, language-specific literals or plain text. Codey normalises these formats before comparing them with expected outputs.
Run is designed for visible and custom test cases, while Submit performs authenticated evaluation, records the result and updates user progress.
Raw submission and completion records are transformed into metrics that describe consistency, language performance, problem difficulty and active practice time.
Technology
Frequently asked questions
Run executes your code against the visible or custom test cases without saving a submission. Submit evaluates the solution against the complete test suite, stores the result and updates your progress.
Codey currently supports JavaScript, Python 3, Java and C#. Each language uses its own execution wrapper while returning results in a shared format.
Authenticated users can review their previous submissions, including the submitted code, result, language, runtime, memory usage and test-case counts.
Codey records completed problems and submission activity. The analytics dashboard calculates metrics such as acceptance rate, completion rate, attempts per problem, language performance and active practice time.
No. Codey is a personal learning project created to explore the engineering behind coding platforms. Code execution relies on the JDoodle API, so external request, usage and output limits apply.
Due to the current JDoodle API tier used by Codey, code executions are limited to 22 per day. If this limit has been reached, please try again the following day. I apologise for any inconvenience caused.
This means that too many authentication emails have been requested within a short period of time. Please wait a while before trying again. If the issue persists, please contact me through the Contact page.
Browse the problem catalogue, try the editor or review the source code to see how the application is structured.