---
title: "Fifteen full-stack apps from a semester I almost did not survive"
kind: student-highlight
date: 2026-11-04
location: "Holy Angel University"
tags: [students, student-work, fullstack, react, hau, apsi]
summary: >
  Four sections of full-stack JavaScript at Holy Angel University finished the 2026 first semester with deployed React, Express and PostgreSQL apps. Fifteen of them, from a job-hunting clipboard to a missalette generator built for a campus office.
photos:
  - "/media/projects/2026-1st-sem/jobstash/square.webp | 1080x1080 | JobStash, the project's square image"
  - "/media/projects/2026-1st-sem/workbud/square.webp | 1080x1080 | WorkBud, the project's square image"
  - "/media/projects/2026-1st-sem/liturgygen/square.webp | 1080x1080 | LiturgyGen, the project's square image"
  - "/media/projects/2026-1st-sem/cartcheck/square.webp | 1080x1080 | CartCheck, the project's square image"
social: |
  Four sections of full-stack JavaScript this semester at the School of Computing, Holy Angel University. I nearly drowned in grading until the final projects came in.
  
  The top projects were: A job-hunting clipboard with a better pitch than most startups. A missalette generator built for a real campus ministry office. A rent tracker for small landlords. A seat-reservation system every student org needs.
  
  Tagging the builders I could find on LinkedIn: Ranz Emmanuel Cuarto (LaundryLog), Matt Lara (Roomy), Graciella Jimenez (Revive Pilates Studio), Angelo Tristan Sinohin (SeatSaver). If you built one of the others, send me your profile and I will tag you.
  
  Fifteen of them, with a page each:
  https://tjakoen.github.io/calendar/2026-s1-apsi-students
  
  Repos and live links are on each project's page.
---

## Four sections, three of them inherited, one very tired instructor

I will start with the unflattering part. This semester I taught four sections of full-stack JavaScript, and three of them I picked up partway through, from another instructor, at midterms. I built a whole grading platform mostly so the grading would stop burying me. It mostly worked.

Then the final projects came in, and I stopped being tired for about a week.

The brief: a React front end, an Express API, a PostgreSQL database, deployed somewhere a stranger can reach, with a security checklist and an honest write-up of how AI was used. Around a hundred and twenty-seven projects came in across the four sections, a snapshot count of what I graded.

The ones on this page are not here for being the biggest. They are here because somebody picked a real person with a real problem, a campus ministry office, a family aircon shop, a small landlord, every org officer with a Google Form, and built the thing that person needed.

> Ten times zero is still zero. These students brought something to multiply.

A few honest notes before you click. Most of these apps sit behind a sign-in, so several pages use the students' own screenshots of the inside. A couple of them run on free servers that nap, so give them a minute. Each card opens a page for the project.

## The apps

<div class="card-grid" style="--card-min: 15rem">
<a class="media-card" href="/calendar/2026-s1-jobstash">
  <span class="media-card__media" style="--media-ratio: 1 / 1"><img class="media-card__image" src="/media/projects/2026-1st-sem/jobstash/square.webp" width="1080" height="1080" alt="JobStash, the project's square image" loading="lazy" decoding="async"></span>
  <div class="media-card__body"><span class="media-card__title">JobStash</span><span class="media-card__text">Found a job post on your phone? Stash it, apply later from your laptop. By @EnzoProg-ctrl.</span></div>
</a>
<a class="media-card" href="/calendar/2026-s1-workbud">
  <span class="media-card__media" style="--media-ratio: 1 / 1"><img class="media-card__image" src="/media/projects/2026-1st-sem/workbud/square.webp" width="1080" height="1080" alt="WorkBud, the project's square image" loading="lazy" decoding="async"></span>
  <div class="media-card__body"><span class="media-card__title">WorkBud</span><span class="media-card__text">OJT hours and expense tracker: every hour and every peso of your internship in one place. By @JustinNeri.</span></div>
</a>
<a class="media-card" href="/calendar/2026-s1-liturgygen">
  <span class="media-card__media" style="--media-ratio: 1 / 1"><img class="media-card__image" src="/media/projects/2026-1st-sem/liturgygen/square.webp" width="1080" height="1080" alt="LiturgyGen, the project's square image" loading="lazy" decoding="async"></span>
  <div class="media-card__body"><span class="media-card__title">LiturgyGen</span><span class="media-card__text">Printable Mass missalettes for a campus ministry office, without retyping a word. By @Damudachi.</span></div>
</a>
<a class="media-card" href="/calendar/2026-s1-cartcheck">
  <span class="media-card__media" style="--media-ratio: 1 / 1"><img class="media-card__image" src="/media/projects/2026-1st-sem/cartcheck/square.webp" width="1080" height="1080" alt="CartCheck, the project's square image" loading="lazy" decoding="async"></span>
  <div class="media-card__body"><span class="media-card__title">CartCheck</span><span class="media-card__text">A private grocery checklist with optional budgets and a history of past trips. By @EJhayGit.</span></div>
</a>
<a class="media-card" href="/calendar/2026-s1-revive-pilates-studio">
  <span class="media-card__media" style="--media-ratio: 1 / 1"><img class="media-card__image" src="/media/projects/2026-1st-sem/revive-pilates-studio/square.webp" width="1080" height="1080" alt="Revive Pilates Studio, the project's square image" loading="lazy" decoding="async"></span>
  <div class="media-card__body"><span class="media-card__title">Revive Pilates Studio</span><span class="media-card__text">Class booking for a two-branch Pilates studio: pick your spot, book in seconds. By @ciellamher.</span></div>
</a>
<a class="media-card" href="/calendar/2026-s1-hoop-routine">
  <span class="media-card__media" style="--media-ratio: 1 / 1"><img class="media-card__image" src="/media/projects/2026-1st-sem/hoop-routine/square.webp" width="1080" height="1080" alt="Hoop Routine, the project's square image" loading="lazy" decoding="async"></span>
  <div class="media-card__body"><span class="media-card__title">Hoop Routine</span><span class="media-card__text">Basketball training plans you can pick up where you left off. By @Jaycenn.</span></div>
</a>
<a class="media-card" href="/calendar/2026-s1-rentora">
  <span class="media-card__media" style="--media-ratio: 1 / 1"><img class="media-card__image" src="/media/projects/2026-1st-sem/rentora/square.webp" width="1080" height="1080" alt="Rentora, the project's square image" loading="lazy" decoding="async"></span>
  <div class="media-card__body"><span class="media-card__title">Rentora</span><span class="media-card__text">Know who has paid before you have to ask: rent and bills for small landlords. By @Kian-James.</span></div>
</a>
<a class="media-card" href="/calendar/2026-s1-caa-ai-product-finder">
  <span class="media-card__media" style="--media-ratio: 1 / 1"><img class="media-card__image" src="/media/projects/2026-1st-sem/caa-ai-product-finder/square.webp" width="863" height="862" alt="CAA AI Product Finder, the project's square image" loading="lazy" decoding="async"></span>
  <div class="media-card__body"><span class="media-card__title">CAA AI Product Finder</span><span class="media-card__text">Find aircon parts that fit your car, for a family auto aircon shop. By @Teywyl.</span></div>
</a>
<a class="media-card" href="/calendar/2026-s1-roomy">
  <span class="media-card__media" style="--media-ratio: 1 / 1"><img class="media-card__image" src="/media/projects/2026-1st-sem/roomy/square.webp" width="1080" height="1080" alt="Roomy, the project's square image" loading="lazy" decoding="async"></span>
  <div class="media-card__body"><span class="media-card__title">Roomy</span><span class="media-card__text">Know what you own and where it lives, with a top-down room planner. By @Matt-CRL.</span></div>
</a>
<a class="media-card" href="/calendar/2026-s1-seatsaver">
  <span class="media-card__media" style="--media-ratio: 1 / 1"><img class="media-card__image" src="/media/projects/2026-1st-sem/seatsaver/square.webp" width="1080" height="1080" alt="SeatSaver, the project's square image" loading="lazy" decoding="async"></span>
  <div class="media-card__body"><span class="media-card__title">SeatSaver</span><span class="media-card__text">Reserve a seat at HAU student-org events, with a real headcount for the organizers. By @TrstnSnhn.</span></div>
</a>
<a class="media-card" href="/calendar/2026-s1-tourney-bracket">
  <span class="media-card__media" style="--media-ratio: 1 / 1"><img class="media-card__image" src="/media/projects/2026-1st-sem/tourney-bracket/square.webp" width="1080" height="1080" alt="Tourney Bracket, the project's square image" loading="lazy" decoding="async"></span>
  <div class="media-card__body"><span class="media-card__title">Tourney Bracket</span><span class="media-card__text">Brackets, live scores and player stats for casual gaming tournaments. By @g1000n.</span></div>
</a>
<a class="media-card" href="/calendar/2026-s1-laundrylog">
  <span class="media-card__media" style="--media-ratio: 1 / 1"><img class="media-card__image" src="/media/projects/2026-1st-sem/laundrylog/square.webp" width="1080" height="1080" alt="LaundryLog, the project's square image" loading="lazy" decoding="async"></span>
  <div class="media-card__body"><span class="media-card__title">LaundryLog</span><span class="media-card__text">Laundry shop management: orders, machine loads, payments, inventory and reports. By @rnzcrt.</span></div>
</a>
<a class="media-card" href="/calendar/2026-s1-gastosaurus">
  <span class="media-card__media" style="--media-ratio: 1 / 1"><img class="media-card__image" src="/media/projects/2026-1st-sem/gastosaurus/square.webp" width="1080" height="1080" alt="Gastosaurus, the project's square image" loading="lazy" decoding="async"></span>
  <div class="media-card__body"><span class="media-card__title">Gastosaurus</span><span class="media-card__text">Split bills ambagan-style, equally or item by item. By @francoiseee.</span></div>
</a>
<a class="media-card" href="/calendar/2026-s1-dishboxd">
  <span class="media-card__media" style="--media-ratio: 1 / 1"><img class="media-card__image" src="/media/projects/2026-1st-sem/dishboxd/square.webp" width="1080" height="1080" alt="Dishboxd, the project's square image" loading="lazy" decoding="async"></span>
  <div class="media-card__body"><span class="media-card__title">Dishboxd</span><span class="media-card__text">A Letterboxd-style journal for food and dining. By @ShawnUriel.</span></div>
</a>
<a class="media-card" href="/calendar/2026-s1-resigwent-evil">
  <span class="media-card__media" style="--media-ratio: 1 / 1"><img class="media-card__image" src="/media/projects/2026-1st-sem/resigwent-evil/square.webp" width="1080" height="1080" alt="ResiGwent Evil, the project's square image" loading="lazy" decoding="async"></span>
  <div class="media-card__body"><span class="media-card__title">ResiGwent Evil</span><span class="media-card__text">An unofficial fan card game: Gwent-style play in the Resident Evil universe. By @mielvitug.</span></div>
</a>
</div>

## What they taught me back

The strongest write-ups on this page are the AI-usage notes. Students said, plainly, which parts Claude or ChatGPT or Codex wrote, where it got things wrong, and what they changed. That is the habit I most want them to keep, and several of them already do it better than people I work with.

Thank you for letting me show your work. I am genuinely proud of this semester, and almost all of that is your doing.

> *The [judgment is human](/notes/ten-times-zero). The typing, by design, is not.*
