2026-11-06 · ~5 min

Two Hundred Final Projects, and the Ones I Didn't See Coming

Seven sections, three subjects, more than 200 final projects, all of them public. I told my students to build for themselves instead of a made-up client, and some of what came back is better than apps I've paid for.

teaching students portfolio ai github

Seven sections. Three subjects. More than 200 final projects. 73 Flutter apps, around 127 full-stack apps, and a stack of team websites built with no framework at all. 594 badges, every one signed off by me.

Those are this semester's numbers, a snapshot of semester one, 2026, and a year ago I wasn't sure I'd still be teaching to see them. I run an engineering team full-time, and last term the grading on top of that nearly buried me. I wrote about nearly quitting already. The short version is that I built a platform to take the grind off my plate instead, and kept the part I actually like.

That turned out to be the most useful thing I had to teach.

Build for yourself, not a made-up client

The line I kept repeating all semester was simple: build something you actually need. Not a pretend client brief, not a to-do app for a fictional bakery. Something that solves your own problem.

The reason is practical. If you built it for yourself, you're its biggest advocate. You know why every feature is there, because you were the one who needed it, and you can talk about it in an interview with real pride instead of reciting a spec. I'd know. My grading platform exists because I was drowning, and it's the project I can talk about longest without notes.

They took that and ran with it.

A clipboard for job posts you find on your phone, so you can apply later from a laptop. An OJT hours tracker. A dorm finder near campus. Flood warnings and route advice for commuters around Angeles City, which is the kind of problem you only think to solve if you've waded through it.

And then the fun ones. A wardrobe app for people who own plenty of clothes and keep wearing the same five, which I took personally. Apps for crochet, for aquariums, for basketball. A fan-made remake of a board game. Honestly, these were some of my favorites to grade, because you could tell they cared. Nobody builds a crochet pattern tracker to hit a rubric.

73 Flutter apps from two sections of Application Development and Emerging Technologies: Love My Closet, Bahantabay, Reaction Chain and Nook.
Application Development and Emerging Technologies, two sections, 73 Flutter apps. The wardrobe app, the flood warnings and the board game are all in here.
127 full-stack apps in React, Express and PostgreSQL from four sections: JobStash, LiturgyGen, WorkBud and Rentora.
Four sections of React, Express and PostgreSQL, 127 full-stack apps. One of them prints Mass missalettes for a real campus office.
Basic Programming in Web Development team sites built with plain HTML, CSS and JavaScript: Memora, HAU Dorm Finder, Hour.ly and LifeQuest.
Basic Programming in Web Development, plain HTML, CSS and JavaScript. No frameworks, which is a rule I don't only hand to students.

Public, or it didn't happen

Every project had to be published on GitHub, out in the open.

A project sitting in a private folder helps nobody, including the student who built it. A public one goes in a portfolio and keeps working for them long after the semester ends. It's the first link a recruiter clicks, and it's evidence instead of a claim on a résumé.

Use AI, and own every line

I was just as strict about AI, in the other direction from what people expect. My team uses it every day, and that's where the whole industry is going, so banning it would be teaching students to work in a world that no longer exists.

So they could use it. They just had to use it responsibly: credit it, write down what it did and what they did, and own every line, including the parts AI wrote. If you can't explain a function in your own repo, it isn't yours yet. That's the same rule I hold myself to, and it's the whole argument of Ten Times Zero Is Still Zero: the tool multiplies what you already know.

How 594 badges get checked

Grading more than 200 projects by hand is exactly the thing that nearly made me quit, so it isn't done by hand. Tests and AI do the first pass on every submission. Nothing gets issued until I sign off.

Student pushes to a public GitHub repo Tests run AI first pass flags, never decides I sign off Badge issued

The dashed line is the one that matters. Anything that fails at any step goes back to the student, and the AI never issues anything on its own. It flags; I decide. The machine took the hours, not the judgment.

Every badge has a public criteria page, so a recruiter can see exactly what a student had to show to earn it. Here are all nine, one row per class. Tap one for its criteria.

Dart and Flutter Foundations badge Flutter App Development badge Builds with Flutter and AI badge Frontend Design with Cloud badge Full Stack Web Development badge Builds Full-Stack JavaScript and AI badge Web Foundations badge Interactive Web Pages badge Builds for the Web and AI badge
Prelim, midterm and finals for Application Development and Emerging Technologies, Application and System Integration, and Basic Programming in Web Development. 594 issued between them. All badges in one place.

The curriculum I wasn't asked to teach

Being part-time and still working in the industry means I get to teach things that aren't on the syllabus: planning before you type, documentation someone else can follow, and design systems instead of one-off screens.

Seeing those show up in their final projects, without me asking, made me happier than any number at the top of this page.

Better than apps I've paid for

Some of these are better than apps I've paid for. More than once I opened a student's code and thought, huh, that's a better way to do it, and quietly took notes.

That's the part of teaching nobody warns you about. You go in to teach, and you walk out learning.

To my students: thank you. I'm proud of you. Keep building.

Every project has its own page, by class:


The judgment is human. The typing, by design, is not.