A portfolio project impresses when it shows judgement, not just that you can follow a tutorial. Reviewers have seen a thousand to-do apps. What they have not seen is your solution to a problem you actually had, built to a finish, with a readme that explains the decisions. Here are nine project types that do that, and the three things that make any of them count.
What a reviewer wants to see#
Someone looking at your portfolio is asking four questions. Can this person finish things? Can they make sensible choices under constraints? Can they explain what they did? Would I want to work with the code they write? A project answers those questions or it does not; the technology it uses is secondary.
Nine project types that work#
1. A tool that solves your own problem#
A script that renames your photo library by date, a browser extension that hides a website’s clutter, a bot that tells you when a product is back in stock. The problem being real is what makes it good: the requirements came from you, not a tutorial, and you can explain every decision. These are often small, and that is fine.
2. A data project with a question#
Take a public dataset — transport, weather, sport, your own bank statements — and answer one specific question with it. Load, clean, analyse, chart, write up. The write-up is the deliverable. “Which London stations have the most delays and when” beats “an exploration of transport data” every time.
3. An API with a client#
Build a small REST or GraphQL API with real persistence, authentication, validation and tests, then a minimal front end or command-line client that uses it. This demonstrates the whole shape of a web application, and the tests demonstrate you know why they matter.
4. A clone of something, done properly#
Clones are fine when they go beyond the surface. A Markdown editor with live preview and file saving, a Pomodoro timer with statistics, a URL shortener with analytics. Pick a product with one hard part — the parser, the state, the concurrency — and do that part well.
5. Something with a real deployment#
A project that is live at a URL, with a domain, HTTPS, a database, error handling and a way to see logs. Deployment is where most tutorials stop and most jobs begin. A modest app that is genuinely running says more than an elaborate one on localhost.
6. A contribution to an open-source project#
A merged pull request — even a small one — shows you can read someone else’s code, follow their conventions, and communicate in a review. Link the PR. Documentation fixes count, and they are a sensible first contribution.
7. A game with a mechanic#
Not a full game; one mechanic done well. A physics-based puzzle, a procedurally generated map, a turn-based combat system. Games force you into state management, timing and user input at once, and they are visibly impressive in a way a CRUD app is not.
8. An automation that runs on a schedule#
A daily job that collects something, transforms it and sends a report or updates a dashboard. It demonstrates scheduling, error handling for unreliable inputs, and idempotency — running it twice should not double the data. These are the projects that most resemble real work.
9. A rewrite that measures something#
Take an earlier project and make it meaningfully faster, smaller or more reliable, with before-and-after numbers and a short explanation of what changed. This shows growth, which is exactly what someone hiring a junior wants to see.
The three non-negotiables#
It runs. A reviewer will try to run it. If the readme’s instructions do not work on a clean machine, the project counts against you. Test the setup steps on a fresh clone.
It is documented. The readme answers: what is this, why did I build it, how do I run it, what would I do next. Two screenshots. A short section on the hardest problem and how you solved it. This is where judgement becomes visible.
It is finished. Finished means the scope you set is complete, not that every possible feature exists. Cut scope ruthlessly and ship. Three finished small projects beat one ambitious half-built one, without exception.
# README structure that works
## What it does - two sentences and a screenshot
## Why I built it - the actual problem
## Running it - copy-pasteable, tested on a clean machine
## How it works - architecture in a paragraph, key decisions
## The hard part - one problem, how you solved it, what you would change
## Next steps - honest, short
How many projects#
Two or three, chosen to show range: one with a user interface, one with data or an API, one deployed. A portfolio with fifteen tutorial follow-alongs is weaker than one with three real projects, because the reviewer’s time is limited and the tutorials dilute the signal. Archive the rest rather than deleting it; you may want it later.
What to leave out#
- Tutorial projects with no changes of your own. Everyone recognises them.
- Anything that does not run.
- Anything with secrets committed to the repository, even historically. Check with a scanning tool before publishing.
- Half-finished ambitious projects. Either finish a reduced version or leave it out.
- Coursework you cannot legally share, or that is identical to fifty other students’ submissions.
Questions people ask#
Should projects be in the language of the job I want?
At least one should. The others can show breadth. Judgement and finish transfer across languages; a reviewer for a Python role will still respect a well-built Go tool.
Is a personal website a portfolio project?
It is the container, not a project, unless you built something non-trivial into it. Keep it simple and let it point at the projects.
Do I need tests?
For the API and automation projects, yes; their absence is noticed. For a small script or a game prototype, a few tests for the tricky logic is enough.
What if my best work is private or from a job?
Describe it in the readme of a small public project that uses the same ideas, without the confidential details. “I built a similar pipeline at work; this is the pattern” is entirely acceptable.
Where to go next#
- What a good developer portfolio looks like — the site around the projects.
- Your first real project after the tutorials — getting started.
- Build a REST API with FastAPI — project type 3, step by step.