Routes live next to the resource
LaraBoom finds Path classes by attributes. There is no host routes folder to keep in sync. JSON stays under /api.
The host app has no routes/, no app/Http, no top-level Services. News keeps the resource, the Service, and the article classes in Resources/News. Auth does the same under Routes/Auth. A feature reads top to bottom in one folder. That is the rule that keeps a small portfolio from growing a second framework inside the first.
Image storage, normalisation, and seed rows left the route bodies. A route method reads as validate, call the service, return the resource. Two duplicated image normalisers became obvious and merged.
Discovery
The package scans Resources and Routes, reads the attributes, and registers paths at boot. A class maps to one path. The method name is the verb. When a route did not appear, the cause was one of three things: a namespace that did not match the folder, a missing attribute, or a cached route list from an earlier build.
Production uses the route cache. The cache has to clear on deploy or new paths stay invisible. Scanning is fine at this size. Boot time is the number to watch as resources grow.
Seeds as the spec
Every seeded row carries en, ru, and de. That caught a form that saved only the active locale. It also exercises the grid: short titles, long titles, photos, each tile size. Empty locale on a seed row is a test failure.
When the Service file grew past one screen of seed HTML, the articles moved to News/Articles. The resource file stayed small. That already happened here.
