.NET
The CRUD Project I Built to Have Something to Show Recruiters
Inspired by a coding assessment André Baltieri (Balta) gives candidates, I built a Student and Premium subscription CRUD app with real auth in a few days, then spent the saved time on what actually makes a project look finished.
I wanted a project I could point recruiters to that was actually finished, not another half-built idea sitting in a repo somewhere. The prompt for it came from a video by André Baltieri, from Balta, walking through a coding assessment he gives candidates for a role at Balta.io: build a complete Student and Premium subscription management app with authentication in ASP.NET Core, handed in within a few days.
Why I built the same thing
Balta's whole point in that video was that finishing something simple and working beats an unfinished, over-engineered version of something ambitious. That matched exactly what I needed for a portfolio piece, so I built the same brief for myself: a Student and Premium subscription CRUD app, real auth, nothing exotic.
What actually made it fast
I used ASP.NET Core's built-in Identity instead of writing my own authentication from scratch:
dotnet new razor -au Individual
That single -au Individual flag scaffolds a full local identity system, registration, login, logout, and persistent cookies, without me touching a JWT implementation.
For the Student and Premium models, I leaned on data annotations instead of writing separate validation logic:
public class Student
{
[Key]
public int Id { get; set; }
[Required(ErrorMessage = "Full Name is required")]
[StringLength(80, MinimumLength = 5)]
public string Name { get; set; } = string.Empty;
[Required]
[EmailAddress]
public string Email { get; set; } = string.Empty;
public List<Premium> Premiums { get; set; } = new();
}
A single attribute on the model handles both the database constraint and the form validation on the page, without extra JavaScript or manual checks on either side.
The other big time saver was scaffolding. Microsoft's code generator can build the full set of CRUD pages directly against EF Core:
dotnet tool install -g dotnet-aspnet-codegenerator
dotnet aspnet-codegenerator razorpage Create Create -m Student -dc ApplicationDbContext -sqlite -udl -outDir Pages/Students
That generated the views, the form handlers, and the save calls for Create, Edit, Delete, Details, and the list view in minutes instead of hours.
What I did with the time that saved
Once the baseline CRUD and auth were working, I spent the rest of the time on the parts that actually make a project look finished instead of scaffolded: cleaning up the generated code and naming, styling the UI properly instead of leaving the default Bootstrap look, seeding the database so it wasn't empty the first time someone opened it, and adding tests around the main endpoints.
What I took from it
The real lesson was that a small, complete project says more to a recruiter than a bigger one that's half done, and Balta's assessment format is a good way to force that constraint on yourself.