Nieuwe PackageCardSkeleton component: pulserende placeholder-kaart met dezelfde structuur/afmetingen als PackageCard (titel, omschrijving, prijs, 4 feature-regels, knop).
PackagesSection toont nu 3 van deze skeletons tijdens het laden i.p.v. een lege grid, zodat de sectie al de juiste ruimte reserveert en er geen layout shift is zodra de echte data binnenkomt.
Tests uitgebreid: skeletons verschijnen tijdens een lopende fetch en verdwijnen zodra de data binnen is.
## Samenvatting
- Nieuwe `PackageCardSkeleton` component: pulserende placeholder-kaart met dezelfde structuur/afmetingen als `PackageCard` (titel, omschrijving, prijs, 4 feature-regels, knop).
- `PackagesSection` toont nu 3 van deze skeletons tijdens het laden i.p.v. een lege grid, zodat de sectie al de juiste ruimte reserveert en er geen layout shift is zodra de echte data binnenkomt.
- Tests uitgebreid: skeletons verschijnen tijdens een lopende fetch en verdwijnen zodra de data binnen is.
## Test plan
- [x] `npx vitest run` (24/24 passed)
- [x] `npx tsc -b` (clean)
- [x] `npx eslint .` (0 errors, 2 pre-existing unrelated warnings)
Toont 3 pulserende placeholder-kaarten (zelfde afmetingen/structuur als
PackageCard) zolang de offerings-fetch nog bezig is, zodat de sectie
niet leeg oogt en de layout niet verspringt zodra de echte data binnenkomt.
Voorkomt dat CI onnodig doorloopt op een verouderde commit. Runs op
push naar master en workflow_dispatch worden nooit geannuleerd (groep
valt terug op github.run_id, altijd uniek), zodat de automatische
test-deploy niet halverwege afgebroken kan worden.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Samenvatting
PackageCardSkeletoncomponent: pulserende placeholder-kaart met dezelfde structuur/afmetingen alsPackageCard(titel, omschrijving, prijs, 4 feature-regels, knop).PackagesSectiontoont nu 3 van deze skeletons tijdens het laden i.p.v. een lege grid, zodat de sectie al de juiste ruimte reserveert en er geen layout shift is zodra de echte data binnenkomt.Test plan
npx vitest run(24/24 passed)npx tsc -b(clean)npx eslint .(0 errors, 2 pre-existing unrelated warnings)