Skip to main content
Published / updated

Projects and Portfolio

Before you start

You need: to be past month three of your route, with something running.

Time: about 40 minutes to read. The work itself runs alongside your whole programme.

Learning objective

Build one project that proves you can do the job, and present it so a hiring manager can see that in two minutes.

Topics

  • One deep project beats five shallow ones
  • What to build, month by month
  • What makes a project credible
  • The README that decides whether anyone looks further
  • Your GitHub as evidence
  • Deploying it, and why it matters
  • What not to put in a portfolio

One deep project beats five shallow ones

The instinct is to build many things. Resist it.

Five tutorial projectsOne project you own
Each stops where the tutorial stoppedHits the problems tutorials skip
No edge cases, no auth, no deploymentAbsent students, duplicate roll numbers, tokens
"I followed a course""I built this and here is a decision I made"
Interview lasts one questionInterview lasts twenty minutes

A reviewer looks at one project. They will not open five. So the question is not how many you have — it is whether the one they open survives a follow-up question.

Depth means the awkward parts. Anyone can list students. Handling a student with two fee accounts, a class where everyone was absent, and a user from another school trying to read your data — that is the part that took you real time, and it is the part worth talking about.

What to build, month by month

The School Management System runs through every track on this site, so you are building it anyway. Build it deliberately.

MonthAddProves
1Console application with testsYou can write and verify logic
2The database — schema, constraints, proceduresYou can design data
3Repository layer over real dataYou can connect the two safely
4REST API with JWT and validationYou can build a real backend
5Frontend, connected to your APIYou can build a full stack
6AI feature, deployment, documentationYou can ship

Each month's work stays in the same repository. Six months of commits on one growing project tells a story that six separate repositories do not.

Do not restart it. Around month four the month-one code will embarrass you. Leave it, or refactor it in a commit that says why — a visible improvement is better evidence than a clean slate.

What makes a project credible

A reviewer forms a judgement in about ninety seconds. These are what they check.

It runs. Clone, follow the README, and it works. This is the single most common failure — a project that cannot be started by anyone but its author is not evidence of anything. Test it: fresh folder, fresh clone, follow your own instructions exactly.

It has the hard cases. Not just the happy path:

CaseWhy it counts
An absent studentShows Absent, is excluded from the average
A student with two fee accountsPicks the right one, not an arbitrary one
A duplicate roll numberRejected at the API and by a database constraint
A user from another schoolCannot see your data — demonstrable from Postman
A class where everyone was absentNo crash, average shows zero

It has tests, and they mean something. Nine focused tests beat sixty that assert the happy path. Comment out a fix and confirm the test fails — a test that passes either way tests nothing.

Secrets are not in it. git log -p | grep -i "password\|connectionstring\|apikey" returns nothing. A connection string in the history is a finding a reviewer will mention.

Commits look like work. Small, frequent, with messages that explain why. A single commit called "final project" tells a reviewer you did not use version control; you archived a folder.

The README that decides whether anyone looks further

Most of the time this is all that gets read. Write it last, and write it properly.

# NexCoding School Portal

A multi-tenant school management system — students, fees, exam results
and attendance — built as a full-stack application.

**Stack:** ASP.NET Core 9 · Dapper · SQL Server · React 18 · JWT

![Student list](docs/screenshots/students.png)

## What it does
- Staff sign in and see only their own school's students
- Search by name or roll number, filtered and paged
- Record fee payments; receipts print with the running balance
- Enter exam marks, including absences, and generate a class report
- Draft a report-card comment with an LLM, which the teacher edits

## Running it
1. `sqlcmd -S . -i database/01-schema.sql` then `02-seed.sql`
2. Set the connection string in User Secrets (see RUNNING.md)
3. Open the solution, press F5
4. `cd web && npm ci && npm run dev`
5. Sign in as admin@nca.test / Password123!

Full setup: [RUNNING.md](RUNNING.md)

## Decisions worth explaining
- **Dapper over EF Core** — reporting-heavy; I wanted to see and tune the SQL
- **Absent marks stored as NULL, not 0** — storing zero drags every class
average down by about 12% with no error anywhere
- **SchoolId read from the JWT claim, never from the request** — a caller who
can send it can send someone else's
- **The AI comment is a draft a teacher edits** — the model does not know the
student, and a person stays accountable

## Testing
40 tests. Grading logic, fee calculation, multi-tenant isolation.
`dotnet test`

## What I would add next
Pagination on the fee report, an audit trail on fee changes,
and a second-approval step on discounts.

The "decisions" section is what makes it a portfolio piece. Anyone can list features. Explaining why is the thing a reviewer cannot get from the code quickly, and it is exactly what the interview will be about.

"What I would add next" shows judgement. Knowing what is missing reads as more senior than claiming nothing is.

Screenshots matter more than you think. A reviewer who cannot run it will still look at an image.

Your GitHub as evidence

What they seeWhat it tells them
Commit history over monthsYou worked steadily, not in one weekend
Small commits with real messagesYou understand version control
Branches and pull requestsYou have worked the way a team works
A README that explains the projectYou can communicate
Tests in the repositoryYou verify your work
A pinned, tidy profileYou thought about the reader

Raise pull requests even working alone. Branch, open a PR, review your own diff, merge. It costs a minute per feature and it is visible evidence of how you work. Track 16 Article 05 covers writing them.

Pin the project on your profile. Archive or unpin the tutorial repositories — a reviewer scanning twelve half-finished repositories forms a worse impression than one seeing three deliberate ones.

Deploying it

A deployed link is worth more than a repository link, because a reviewer can click it in five seconds.

Free options are sufficient: a small cloud VM, a container host, or a static frontend host with a hosted API. It does not need to be robust — it needs to exist and be reachable.

What deploying teaches you, and what interviewers ask about:

  • Configuration differs between local and deployed — connection strings, CORS origins, the environment name
  • The developer exception page must be off
  • HTTPS certificates are real
  • Something always breaks that worked locally, and finding out what is the lesson

Put the link at the top of the README and on your resume. Include the demo credentials.

What not to put in a portfolio

Do notWhy
A tutorial project, unchangedThe reviewer has seen it fifty times
A repository with no READMEIt will not be opened
Real personal data of any kindUse Ravi Kumar and NCA-2024-0012
Anything with a secret in the historyIt is a finding, not a project
Something you cannot explainThe follow-up question ends it
Twelve unfinished experimentsUnpin them
A project that does not runThe most common failure of all

The last row deserves repeating. Before you send the link to anyone: fresh folder, fresh clone, follow your own README exactly, and see whether it runs. Better still, have someone else try it — every question they ask is a missing line in your instructions.

Common mistakes

  • Building five shallow projects instead of one deep one
  • Restarting the project when early code looks bad
  • Leaving the README to the end and then rushing it
  • No screenshots
  • A project that only runs on your machine
  • One commit called "final project"
  • Committing a connection string
  • Real student data instead of the standard examples
  • Never deploying, so there is nothing to click
  • Not being able to explain a decision in your own code

Practice

  1. List every feature your project has. Mark which handle a hard case from the table above.
  2. Add the hard cases that are missing. These are the interview material.
  3. Write the README with all six sections, including four real decisions.
  4. Take three screenshots and put them in the README.
  5. Clone your own repository into a fresh folder and follow your instructions exactly. Fix every gap.
  6. Give it to someone else and watch them try. Every question is a missing line.
  7. Run git log -p | grep -i "password\|connectionstring\|apikey". It must return nothing.
  8. Deploy it. Put the link and demo credentials at the top of the README.
  9. Pin it on your GitHub profile. Unpin the tutorial repositories.
  10. Write the "what I would add next" section honestly.

Exercises 5 and 6 catch the failure that costs the most and is noticed the least.

You can now

  • Say why one deep project beats five shallow ones
  • Build the hard cases that make a project credible
  • Write a README that survives ninety seconds of scanning
  • Explain four real decisions in your own project
  • Present a GitHub profile that reads as evidence
  • Deploy it and give someone a link
  • Verify it runs from a fresh clone

Review questions

  1. Why does a reviewer opening one project make depth matter more than count?
  2. What does the "decisions" section give a reviewer that the code does not?
  3. What is the most common reason a portfolio project fails, and how do you test for it?
  4. Why raise pull requests on a repository where you are the only contributor?

Next: Interview preparation