Post your build ideas
LocalASO Track App Store keyword ranks in every countryFind your vibe. Find you job which is just for you and your dataDealtab Brand Deal Tracker That Does The Work For YouIs Major Cooked? Free AI risk score + roast for your college majorWiral.Social LinkedIn, Scheduler, Scheduling Tool, Ghostwriter
Solo Era solo activities, solo maxxing, sidequests, challengeCadentiq daily routine, wellbeing, self care, healthy habitsTexeva Your businessKeepsake Project Management, Freelancers, DesignersOrvyx AI You create

Coding project ideas: 18 projects by level, each with a first version and a stretch goal

The best coding projects are small enough to finish and specific enough that someone would use them. Start with a tool you would use yourself: a bill splitter, a habit tracker, a time zone planner. Move to a URL shortener, a chat room or a booking page once you can ship something that runs. Below are 18 projects across three levels, each with a stack, a first version, a stretch goal and a time estimate in hours.

How do I pick a coding project?

Pick for what the project teaches, not for how impressive it sounds. A weather dashboard and a bill splitter look different, but the weather dashboard mostly teaches you to read one API response, while the bill splitter teaches rounding, validation and testing. Three questions filter most bad choices.

  1. Can you describe the first version in two sentences? If not, the project is too big. Cut until you can.
  2. Can you tell when it is right? Write down one worked example with real numbers before you write any code. If you cannot, you will never know whether a bug is a bug.
  3. Does it add one new thing? A new language, a database and a deployment target in the same project is three projects. Change one variable at a time.
Which level to start at
Where you areStart atGood first pickWhat it proves
Never wrote a programBeginnerBill splitter or habit streak trackerYou can turn a rule into code and test it
Finished a course, stuck in tutorialsEnd of beginnerTime zone planner, then a deployed links pageYou can build without a script to follow
Can build a page, never a backendIntermediateURL shortenerYou understand requests, a database and a redirect
Need something to show employersIntermediateJob tracker or booking pageUsers, data ownership, dates, email: what real apps need
Want to know how tools work insideAdvancedQuery engine or version storeYou can read a spec and build the thing the tools are made of
Learning with an AI coding toolAny levelSame projects, but write the tests firstYou can judge the code the tool wrote

Time estimates below are hours of focused work for someone at that level, from empty folder to a first version that runs. They do not include reading about the topic. Treat them as a rough guide: if a beginner project takes twice as long, that is normal.

Project brief to write before you start (works for you or for an AI coding tool)
Project name:
Who uses it (one sentence):
First version does exactly this (two sentences):
It is right when (one worked example with real numbers):
I will not build in this version (three things):
The one new thing I am learning:
Where it will run (my laptop, a static host, a server):

If you build with Claude Code, Cursor or Lovable, the brief above is also your first prompt. How to write an app build prompt covers the longer version, and vibe coding for beginners covers how to check what the tool wrote.

What are good coding projects for beginners?

Beginner projects fit in a few files, keep their data in memory or in one file, and have no server. You can finish one in a weekend. The goal is not novelty. It is to meet the same four problems every program has: input you cannot trust, rules with edge cases, state that has to survive a restart, and output a person can read. These six are language-neutral, so use whichever language you are learning.

01 Bill splitter with uneven shares

A form that splits a restaurant bill between people who ate different amounts, with tax and tip shared in proportion.

Stack
Any language; one web page or a command line.
Teaches
Functions, input validation, money as integer cents, rounding.
First version
Names and item prices in, each person’s total out.
Stretch goal
Shares add up to the bill to the cent, and past bills are saved.
Time
3 to 6 hours.

The trap is rounding. Three people splitting USD 100.00 evenly get 33.33 each, and the three amounts add up to 99.99. Decide where the missing cent goes, write the rule down and test it. Store money as whole cents, never as decimals, so 33.33 is 3333. The same habit protects every payment system you will ever touch.

First prompt
Write a function split_bill(items, tax_cents, tip_cents) where items is a list of (person, price_cents). Tax and tip are shared in proportion to what each person ordered. Return a dict of person to total cents. The totals must add up to exactly the bill: give leftover cents to the people with the largest remainders. Do not build a user interface yet.
Tests to pass: two people with items 1000 and 3000 and tax 400 give 1100 and 3300. Three people sharing one item of 10000 cents give 3334, 3333 and 3333.

02 Habit streak tracker

A page or script where you tick off habits each day and see the current streak and the longest streak.

Stack
HTML and JavaScript with browser storage, or Python with a JSON file.
Teaches
Dates, persistence, one pure function for the streak logic.
First version
A list of habits, a tick for today, a current streak computed from ticked dates.
Stretch goal
Allow skip days (for example five of seven) and draw a 12-week grid.
Time
4 to 8 hours.

Streak logic breaks at midnight, at month ends and when someone forgets for a day. Write streak(ticked_dates, today) as a function with no screen code in it, and test it: ticks on yesterday and today give 2; a tick on yesterday only gives 1, because the streak is alive until today ends; a last tick two days ago gives 0.

03 Recipe scaler

Paste a recipe, say how many servings you want, and get every quantity rescaled in fractions you can measure.

Stack
Python or JavaScript; plain text in, plain text out.
Teaches
String parsing, fractions, units, deciding what to do with edge cases.
First version
Lines like “1 1/2 cups flour” are multiplied by a factor and printed as tidy fractions.
Stretch goal
Convert cups to grams for ten ingredients you list yourself.
Time
6 to 10 hours.

Python’s fractions module does exact arithmetic, so 1 1/2 times 2/3 is exactly 1. In JavaScript you write a small greatest-common-divisor function yourself, which is a good exercise. The interesting part is the rules: 2 eggs scaled by 1.5 is 3, but 1 egg scaled by 1.5 is 1.5. Do you round to the nearest half? Your answer is the project.

04 Time zone meeting planner

Pick two to four cities and see which hours work for all of them, with daylight saving time handled correctly.

Stack
JavaScript with the built-in Intl API, or Python with zoneinfo.
Teaches
Dates and time zones, why you never do the arithmetic by hand, lookup tables.
First version
A 24-hour grid for the first city, the matching local times for the others, and the hours that fall between 9:00 and 18:00 everywhere highlighted.
Stretch goal
A shareable link that stores the cities and the date in the URL.
Time
6 to 10 hours.

Use a library or built-in that reads the IANA time zone database. Then test with dates where clocks change. In 2027 the United States moves its clocks on March 14 and most of Europe on March 28, so for two weeks New York is 4 hours behind London instead of 5. If your grid shows 5 hours on March 20, 2027, it is wrong.

05 Dice scorer for a Yahtzee-style game

Given five dice, return every scoring category and its points: pairs, full house, straights and the five-of-a-kind.

Stack
Any language; command line.
Teaches
Loops, counting with dictionaries, unit tests, pure functions.
First version
score(dice) returns a mapping of category to points under the rules you write down.
Stretch goal
A computer player that picks the best category each turn; compare it with random play over 10,000 games.
Time
4 to 8 hours.

This is the best project for learning tests, because the right answers are easy to write by hand. Under the standard rules a full house scores 25, a small straight 30, a large straight 40 and a five-of-a-kind 50. Write twenty examples first: [2,2,3,3,3] is a full house, [1,2,3,4,5] is a large straight, [4,4,4,4,4] is a five-of-a-kind and also a full house in some rule sets. Pick a rule and keep it.

06 Personal links page, deployed

A one-page site with your name, a short bio and five links, live on a public URL that you did not have to pay for.

Stack
HTML and CSS, git, a free static host such as GitHub Pages or Cloudflare Pages.
Teaches
HTML structure, CSS layout, responsive design, git, deployment.
First version
One index.html that reads well on a phone and is live.
Stretch goal
Dark mode with prefers-color-scheme, a custom domain, and the issues that Lighthouse in Chrome DevTools flags fixed.
Time
3 to 6 hours.

Do this one early. Most beginner projects die on the laptop where they were built, and deploying once removes the mystery. The MDN learning area covers the HTML and CSS you need. Put the project in git on day one and commit each time something works.

What are good intermediate coding projects?

Intermediate projects add a server, a database and users. They take ten to forty hours and can be shown to another person. Each one here adds exactly one hard thing, so when something breaks you know where to look.

What each intermediate project adds
ProjectNew hard thingBug you will meet
URL shortenerRedirects and a unique database columnTwo links getting the same code
Chat roomLong-lived connectionsA user who stays online after closing the tab
Job trackerAccounts and per-user dataOne user reading another’s rows
Booking pageTime zones and concurrent writesTwo visitors booking the same slot
Static blog generatorParsing and build pipelinesBroken links between generated pages
Webhook receiverSignatures and retriesThe same event processed twice

01 URL shortener with click counts

A service that turns a long link into a short code, redirects visitors and counts the clicks.

Stack
Node with Express, or Python with Flask or FastAPI; SQLite or Postgres.
Teaches
HTTP redirects, routing, schema design, unique constraints, input validation.
First version
POST a URL and get a code; GET /code redirects and adds one to a counter.
Stretch goal
Custom aliases, expiry dates, a stats page with clicks per day, and a block on redirect loops.
Time
12 to 20 hours.

Generate codes from seven random letters and digits: that is 62 to the power of 7, about 3.5 trillion combinations. Put a unique index on the code and retry when an insert collides, instead of checking first. Redirect with a 302, not a 301: browsers may cache a 301 and skip your server, which stops the click count. Accept only http and https links, or someone will shorten a javascript: URL.

First prompt
Build a URL shortener with FastAPI and SQLite. POST /links with a JSON body {url} returns {code}. GET /{code} responds 302 to the stored URL and increments clicks. Rules: only http and https URLs are accepted (400 otherwise); codes are 7 random characters from a-z, A-Z, 0-9; the code column has a unique index and the insert retries on conflict; unknown codes return 404.
Do not build: accounts, a front end, analytics beyond one counter.
Write pytest tests for each rule, including a javascript: URL and a forced code collision.

02 Real-time chat room with presence

A single chat room where messages appear instantly for everyone and a list shows who is online.

Stack
Node or Python on the server, plain JavaScript in the page, the WebSocket API.
Teaches
Persistent connections, broadcasting, reconnection, shared state across clients.
First version
One room, a nickname, messages sent to every connected client, an online list.
Stretch goal
Several rooms, the last 50 messages on join, reconnect with backoff, a rate limit per connection.
Time
15 to 25 hours.

The bug everyone meets is a dead connection that never sends a close event, such as a laptop lid shut on a train. The user stays online forever. The fix is a heartbeat: send a ping every 30 seconds and drop any connection that misses two in a row. Test it by killing the client process rather than closing the tab.

03 Job application tracker with reminders

A private board where you log each application, move it through statuses and get a reminder when nothing has happened for a week.

Stack
A full-stack framework (Next.js, Django, Rails or Laravel), Postgres, an email service.
Teaches
Sign-in, CRUD, per-user data, scheduled jobs, sending email.
First version
Sign up, add an application (company, role, status, date), change its status, filter by status.
Stretch goal
A reminder seven days after “applied” with no update, CSV import, an .ics export for interviews.
Time
25 to 40 hours.

A related idea, JobsFlow, is posted on the board and goes further: tailoring the resume and drafting follow-ups. The test that matters here is plain. User A must not be able to read user B’s application by changing the ID in the URL. Write that test before you build the second screen. OWASP lists broken access control among the most common web risks, and this is the simplest form of it.

Read “Job application tracker with reminders” on the board and copy its build prompt →

04 Booking page for one person

A public page where visitors pick a free slot from your availability, and both of you get a confirmation.

Stack
A full-stack framework, Postgres, an email service, an .ics attachment.
Teaches
Time zones, availability rules, transactions, unique constraints, race conditions.
First version
Availability of Monday to Friday, 9:00 to 17:00, 30-minute slots; booking stores a name and email; a taken slot disappears.
Stretch goal
Buffers between meetings, blocked holidays, a cancel link, Google Calendar sync.
Time
25 to 40 hours.

Two visitors will click the same slot within a second. Put a unique index on the slot start time and let the database refuse the second insert, then show that visitor a message such as “that slot was just taken” instead of an error page. Store every time in UTC and convert only when you display it.

First prompt
Build a booking page for one host. Tables: bookings(id, slot_start_utc unique, name, email, created_at). Availability is Monday to Friday 09:00 to 17:00 in the host’s time zone, in 30-minute slots, shown to the visitor in their own time zone.
Rules: a slot already in bookings is not offered; if two requests book the same slot, the second gets a 409 and a friendly message; no slot in the past.
Do not build: accounts, payments, calendar sync, cancellation.
Write a test that fires two bookings for the same slot at once and expects exactly one success.

05 Static blog generator from Markdown

A command that reads a folder of Markdown files and writes a complete website with an index page and an RSS feed.

Stack
Node or Python, a Markdown library, a template engine such as Jinja.
Teaches
File input and output, front matter parsing, templates, command line design, build pipelines.
First version
Each .md file with a title and date at the top becomes an HTML page; the index lists them newest first.
Stretch goal
Tag pages, syntax highlighting, rebuild only changed files, a dev server with live reload.
Time
15 to 25 hours.

Keep three things apart: content (the Markdown), layout (the templates) and output (the generated folder, which you never edit by hand). Add a link checker as the last step of the build. A generator that publishes broken links between its own pages has failed at the one thing it was for.

06 Webhook receiver that processes each event once

A small service that accepts payment events from a provider’s test mode, checks the signature and stores each event exactly once.

Stack
Any HTTP framework, SQLite or Postgres, a payment provider’s test mode.
Teaches
HMAC signatures, idempotency, retries, reading the raw request body.
First version
An endpoint that verifies the signature, inserts the event ID under a unique constraint and answers 200 quickly.
Stretch goal
A replay command, a dead-letter table for events whose handler failed, a small dashboard.
Time
10 to 20 hours.

Providers retry deliveries, so the same event will arrive more than once. A unique constraint on the event ID makes the second delivery harmless. The classic failure is a JSON middleware that parses the body before you verify the signature: the bytes change and every check fails. Stripe’s webhook documentation shows the pattern, and the same idea applies to any provider that signs its requests.

What are good advanced coding projects?

Advanced projects rebuild something you normally use as a black box. They take 30 to 100 hours, they have a specification you can test against, and they leave you able to explain how the real tool works. They are also the projects that stand out in a portfolio, because few people finish them.

01 Offline-first notes app with sync

A notes app that works without a connection, then syncs to a server and resolves edits made on two devices.

Stack
A browser app with IndexedDB and a service worker, plus a small server API.
Teaches
Local-first design, sync protocols, conflict resolution, versioning.
First version
Notes saved locally and usable offline; on reconnect, changes are pushed and the newest edit wins.
Stretch goal
Merge text changes instead of overwriting, show real conflicts to the user, encrypt notes before they leave the device.
Time
40 to 70 hours.

Device clocks are wrong often enough to matter, so do not decide “newest” by a timestamp from the client. Have the server hand out a version number per note and reject an update that is based on an old one. Then write the test that proves it: two clients edit the same note offline, both reconnect, and nothing is silently lost.

02 Background job queue with retries and a dashboard

A queue built on a database table, with workers that claim jobs safely, retry failures with backoff and report their state.

Stack
Postgres, a worker in any language, a small web dashboard.
Teaches
Concurrency, row locking, retries with exponential backoff, idempotency, dead letters, metrics.
First version
A jobs table with status, run_at and attempts; a worker claims one job and marks it done or failed.
Stretch goal
Several workers at once, per-job timeouts, a dead-letter list, charts of queue depth and age of the oldest job.
Time
30 to 50 hours.

The core trick is that two workers must never take the same job. Postgres supports this with a locking clause, FOR UPDATE SKIP LOCKED, described in the SELECT documentation. A failed job gets run_at set to now plus 2 to the power of attempts seconds, so retries slow down instead of hammering a broken service. Test with ten workers and a thousand jobs, and count that each job ran once.

First prompt
Build a job queue on Postgres. Table jobs(id, payload jsonb, status, run_at, attempts, last_error). A worker loop claims one due job with SELECT ... FOR UPDATE SKIP LOCKED, runs a handler, and sets status to done; on error it increments attempts and sets run_at to now + 2^attempts seconds; after 5 attempts status becomes dead.
Do not build: a dashboard, priorities, scheduling by cron.
Test: enqueue 1000 jobs, start 10 workers, assert every job ran exactly once and the total handler calls equal 1000.

03 Query engine over CSV files

A tiny SQL-like engine that runs statements such as SELECT name FROM people WHERE age > 30 LIMIT 10 against CSV files.

Stack
Any language with good string handling: Python, Go, Rust or TypeScript.
Teaches
Tokenizing, parsing into a tree, evaluating, query plans, streaming rows.
First version
A tokenizer, a parser for SELECT, WHERE and LIMIT, and an evaluator that streams rows.
Stretch goal
ORDER BY, GROUP BY with COUNT and SUM, a join on one key, an EXPLAIN command that prints the plan.
Time
40 to 80 hours.

You have a free test oracle: load the same CSV into SQLite, run the same 50 queries in both and compare the results. Every difference is a bug in your engine or a decision you should write down. Parse into a tree before you evaluate. Engines that evaluate while parsing cannot support GROUP BY later.

04 Multi-tenant app skeleton with billing

The parts every paid product needs and tutorials skip: organizations, roles, permissions and a plan that limits what an organization can do.

Stack
A full-stack framework, Postgres with row-level security or strict query scoping, a payment provider’s test mode.
Teaches
Tenancy modeling, authorization, billing state, webhooks, migrations.
First version
Organizations with owner and member roles, every query scoped by organization ID, a plan field set by a webhook event.
Stretch goal
Invites, an audit log, seat limits, a downgrade that keeps data, automated cross-tenant tests.
Time
60 to 100 hours.

Run it in the provider’s test mode only. The work is in the tests: for every route, log in as a member of organization A and request organization B’s data, and assert a 404 or 403. Generate those tests from your route list so a new route cannot ship without one.

05 Content-addressed version store

A command line tool that saves snapshots of a folder by the hash of their contents, lists history and restores any version.

Stack
Go, Rust, Python or Node; SHA-256 from the standard library; plain files on disk.
Teaches
Hashing, content-addressed storage, trees, deduplication, diffing.
First version
save writes each file into an objects folder named by its hash; log lists snapshots; restore writes one back.
Stretch goal
Identical files stored once across versions, a diff between two snapshots, cleanup of unreachable objects.
Time
30 to 60 hours.

Git itself works this way, and the Git Internals chapter of the Pro Git book walks through the object model. A related idea is posted on the board: version history for people who will never use git. A friendly interface on top of this store would answer it.

Read “Content-addressed version store” on the board and copy its build prompt →

06 Mini CI runner

A service that watches a repository, runs a command on every new commit and shows a pass or fail page.

Stack
Any backend language, subprocess handling, a git binary; Docker optional.
Teaches
Process management, timeouts, isolation, queues, streaming logs.
First version
Every 60 seconds run git fetch; on a new commit run ./test.sh with a 5-minute timeout and store the exit code and output.
Stretch goal
GitHub webhooks instead of polling, runs inside a container with CPU and memory limits, a status badge, parallel jobs.
Time
30 to 50 hours.

How do I finish a coding project instead of abandoning it?

Most projects stop at the same three points: the first boring part, the first bug you cannot explain, and the moment a better idea arrives. These habits get you past each of them.

  1. Write the done-when line on day one. One worked example with real numbers, in the README. The project is finished when it passes.
  2. Commit daily, even for twenty minutes. A project with a commit from yesterday feels alive. One with a three-week gap feels like a chore.
  3. Deploy by the second session. A live URL turns a folder into something you can show.
  4. Keep a not-now list. Every new feature goes on it. You may open the list only after the first version works.
  5. Cut, do not extend. If you are behind, remove a feature. Moving the deadline is how a weekend project becomes a year-long one.
  6. Ship, then write three sentences. What it does, what you learned, what you would change. That is the README, and it is also what an interviewer asks.

If you have a pile of half-built repos already, an idea posted on the board covers the opposite problem: which of your abandoned repos is closest to finished. Until a tool like that exists, sort them by how many of the six habits above they already have, and finish the top one.

Where can I find coding projects for a specific language or topic?

The 18 projects above work in any language. When you want a list built around one language or one skill, use these:

For a project where someone else has already described the problem, browse the developer tools ideas and the rest of the board. Every idea there has a generated build prompt you can paste into Claude Code, Cursor or Lovable, or read as a plain spec and build by hand. If you have an idea you will never build, post it so someone else can.

Frequently asked questions

What are some good coding projects for beginners?

Good beginner coding projects are a bill splitter, a habit streak tracker, a recipe scaler, a time zone meeting planner, a dice scorer and a deployed links page. Each fits in a weekend, needs no server and has an answer you can check by hand. Pick one in the language you are learning and write one worked example before you start.

What are good coding projects for beginners to put on a resume?

Put two projects on a resume: one small tool that is deployed and works, and one intermediate project with users, a database and tests, such as a booking page or a job tracker. Add a README with what it does, how to run it and one thing you would change. Finished and explained beats large and abandoned.

How long should a coding project take?

A beginner project takes 3 to 10 hours, an intermediate one 10 to 40 hours and an advanced one 30 to 100 hours. Those are hours of focused work, so spread over evenings it is a few weeks. If your first version is not running after twice the estimate, cut scope instead of extending the deadline.

What programming project should I build first?

Build something with one rule you can test by hand, like a bill splitter or a dice scorer. It teaches input, logic, output and testing without a server or a database. Choose the language you plan to keep learning, and finish before you start a second project.

Where do I find programming project ideas that real people need?

Look at problems people describe, not tutorials. The board at postyourbuildideas.com lists app ideas posted by people who will not build them, grouped by category, and each has a generated build prompt. Your own annoyances, a friend’s spreadsheet or a small business’s manual process are also good sources.

Can I use AI tools like Claude Code or Cursor for coding projects?

Yes, and it is a good way to learn if you stay in charge. Write the brief and the worked example yourself, let the tool write the first draft, then read every file and ask it to explain what you do not follow. Write the tests before the code so you can judge whether the output is right.

Created with AI assistance and edited for this site. Examples are illustrative and do not represent customer research. About the publisher.