← Index 10Album Database CV  ·  Contact
03Build and systems· Case

Album Database

An album collection app that took me from plain PHP to Laravel and Livewire, tested with real people in three rounds.

Role
Design, build and testing
Context
NHL Stenden, IDS year 2
Year
2025
Built with
Laravel 12, Livewire, Alpine, SQLite
Links
Source code ↗
Local build
The Album Database list of albums
Screens
01

One problem, two stories

Two testers described the same layout problem in completely different words, and each was sure they had found something separate. Removing one misleading refresh button fixed both.

1.1The button that did not belong

BeforeA “Clear search & refresh results” button sat between the filters and the list.
AfterThe refresh button is gone. The count sits on the left, and adding an album has its own button.
02

How I tested

Three rounds of testing, each with one goal. Every tester got the same laptop, the same browser and the same questions.

  1. 2.1I watched quietly and stepped in only when needed, looking out for frustration as much as for mistakes.
  2. 2.2Raw notes became summaries and quotes became themes, each tagged with a usability heuristic.
  3. 2.3I kept asking why until a complaint pointed to a specific design or logic choice.
  4. 2.4Every finding became a change I could test, and I retested after each big one.
  5. 2.5Reports were versioned in Obsidian, and an effort and impact matrix set the order.
  6. 2.6Silence about a section usually means it works.
3Rounds of testing
2Testers, one problem
1Button removed

I started out not knowing why I was testing. By the final round it was a process I could rely on.

03

From PHP to Laravel

The project began as a form in plain PHP and ended as a Laravel app, and every step on the way is documented.

The app stopped trying to keep up with the user.

  1. 3.1Plain PHP with PDO first, then Laravel’s MVC.
  2. 3.2Debugbar to trace every request.
  3. 3.3Migrations, factories and seeders, so the data can be rebuilt at any time.
  4. 3.4A many-to-many pivot table between albums and genres.
  5. 3.5An N+1 query problem, fixed with eager loading.
  6. 3.6A full rebuild from server-rendered PHP to Livewire and Alpine.
  7. 3.7Safe cover uploads, with temporary files cleaned up.
Read the code ↗github.com/LVT53/form-challenge-laravel