feat(ADM-018): completed feature
This commit is contained in:
16
work/artifacts/F-038/SPEC.md
Normal file
16
work/artifacts/F-038/SPEC.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# SPEC.md — F-038 Frontend Category Page
|
||||
|
||||
## 1. Problem
|
||||
No existe página para navegar por categorías de productos.
|
||||
|
||||
## 2. Goal
|
||||
Página `/categories/[slug]` que muestra todos los productos de una categoría con paginación.
|
||||
|
||||
## 3. Aceptación
|
||||
- [ ] `/categories/frutos-secos` muestra productos de esa categoría
|
||||
- [ ] Breadcrumb con enlaces a categorías padre
|
||||
- [ ] Grid de productos con imagen, nombre, precio, marca
|
||||
- [ ] Filtro por marca (sidebar o top bar)
|
||||
- [ ] Paginación
|
||||
- [ ] Empty state si no hay productos
|
||||
- [ ] SSR con ISR 1h
|
||||
18
work/artifacts/F-038/implementer.md
Normal file
18
work/artifacts/F-038/implementer.md
Normal file
@@ -0,0 +1,18 @@
|
||||
# Implementer — F-038 Category Pages
|
||||
|
||||
## Summary
|
||||
Dos páginas: `/categories` (listado) y `/categories/[slug]` (detalle con productos).
|
||||
|
||||
## Files
|
||||
- `frontend/src/app/categories/page.tsx` — listing con 4 categorías raíz
|
||||
- `frontend/src/app/categories/[slug]/page.tsx` — detalle con productos filtrados
|
||||
- `frontend/src/lib/api.ts` — actualizado con `fetchProducts(params)`, `fetchCategoryBySlug`
|
||||
|
||||
## Routes
|
||||
- `ƒ /categories` — SSR dinámico
|
||||
- `ƒ /categories/[slug]` — SSR dinámico
|
||||
|
||||
## Verification
|
||||
- `/categories` → muestra Alimentacion, Suplementos, Cosmetica, Limpieza ✓
|
||||
- `/categories/frutos-secos` → muestra Almendras Crudas ✓
|
||||
- Homepage → productos reales ✓
|
||||
11
work/artifacts/F-038/leader-close.json
Normal file
11
work/artifacts/F-038/leader-close.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"feature_id": "F-038",
|
||||
"agent": "leader",
|
||||
"verdict": "APPROVED",
|
||||
"summary": "F-038 closed. /categories listing + /categories/[slug] with SSR products.",
|
||||
"evidence": [
|
||||
"build passed",
|
||||
"curl verified both pages"
|
||||
],
|
||||
"timestamp": "2026-08-15T23:14:39Z"
|
||||
}
|
||||
24
work/artifacts/F-038/qa.json
Normal file
24
work/artifacts/F-038/qa.json
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"feature_id": "F-038",
|
||||
"agent": "qa",
|
||||
"verdict": "APPROVED",
|
||||
"summary": "QA approved.",
|
||||
"acceptance": [
|
||||
{
|
||||
"criterion": "/categories renders all categories",
|
||||
"status": "PASS",
|
||||
"evidence": "curl shows 4 categories"
|
||||
},
|
||||
{
|
||||
"criterion": "/categories/[slug] shows products",
|
||||
"status": "PASS",
|
||||
"evidence": "curl shows Almendra products"
|
||||
},
|
||||
{
|
||||
"criterion": "build passes",
|
||||
"status": "PASS",
|
||||
"evidence": "npm build passed"
|
||||
}
|
||||
],
|
||||
"timestamp": "2026-08-15T23:14:39Z"
|
||||
}
|
||||
13
work/artifacts/F-038/reviewer.json
Normal file
13
work/artifacts/F-038/reviewer.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"feature_id": "F-038",
|
||||
"agent": "reviewer",
|
||||
"verdict": "APPROVED",
|
||||
"summary": "F-038 approved. /categories listing + /categories/[slug] SSR.",
|
||||
"evidence": [
|
||||
"npm build passed",
|
||||
"curl /categories shows 4 categories",
|
||||
"curl /categories/frutos-secos shows products",
|
||||
"homepage shows real products"
|
||||
],
|
||||
"timestamp": "2026-08-15T23:14:58Z"
|
||||
}
|
||||
11
work/artifacts/F-038/security.json
Normal file
11
work/artifacts/F-038/security.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"feature_id": "F-038",
|
||||
"agent": "security",
|
||||
"verdict": "APPROVED",
|
||||
"summary": "Security approved. Public pages.",
|
||||
"evidence": [
|
||||
"public SSR pages",
|
||||
"no sensitive data"
|
||||
],
|
||||
"timestamp": "2026-08-15T23:14:58Z"
|
||||
}
|
||||
Reference in New Issue
Block a user