Páginas web
Frontend en Next.js 16 App Router (tcgcards-web). Las rutas se definen por archivos page.tsx en src/app/**. Las carpetas con paréntesis como (public), (dashboard), (auth) son route groups y NO aparecen en la URL.
URL pública: https://tcgcards.cl
Páginas públicas (no requieren login)
Sección titulada «Páginas públicas (no requieren login)»| URL | Archivo | Qué hace |
|---|---|---|
/ | src/app/(public)/page.tsx | Home: carrusel de banners, exploración por TCG, sets recientes |
/about | src/app/(public)/about/page.tsx | Sobre tcgcards: qué es, cómo funciona el modelo |
/accesorios | src/app/(public)/accesorios/page.tsx | Catálogo de accesorios con filtros |
/banned | src/app/(public)/banned/page.tsx | Aviso para cuentas baneadas |
/cartas | src/app/(public)/cartas/page.tsx | Feed de cartas individuales más recientes |
/cards/[id] | src/app/(public)/cards/[id]/page.tsx | Detalle de carta del catálogo: ofertas, ventas recientes |
/challa | src/app/(public)/challa/page.tsx | Catálogo de lotes (challa) |
/checkout | src/app/(dashboard)/checkout/page.tsx | Carrito + confirmación + integración MP |
/como-funciona | src/app/(public)/como-funciona/page.tsx | Guía visual de 5 pasos |
/contact | src/app/(public)/contact/page.tsx | Página de contacto |
/cookies | src/app/(public)/cookies/page.tsx | Política de cookies |
/help | src/app/(public)/help/page.tsx | FAQs |
/listings/[id] | src/app/(public)/listings/[id]/page.tsx | Detalle de publicación: galería, precio, vendedor, comprar |
/privacy | src/app/(public)/privacy/page.tsx | Política de privacidad |
/search | src/app/(public)/search/page.tsx | Búsqueda global con filtros |
/sellado | src/app/(public)/sellado/page.tsx | Catálogo de productos sellados |
/sets | src/app/(public)/sets/page.tsx | Listado de sets agrupados por TCG |
/sets/[tcg]/[slug] | src/app/(public)/sets/[tcg]/[slug]/page.tsx | Detalle de un set: grilla de cartas |
/tarifas | src/app/(public)/tarifas/page.tsx | Comisiones y tarifas |
/terms | src/app/(public)/terms/page.tsx | Términos y condiciones |
/u/[username] | src/app/(dashboard)/u/[username]/page.tsx | Perfil público de un vendedor |
/u/[username]/publicaciones | src/app/(dashboard)/u/[username]/publicaciones/page.tsx | Todas las publicaciones del vendedor |
| URL | Archivo | Qué hace |
|---|---|---|
/login | src/app/(auth)/login/page.tsx | Login con Google |
/api/auth/[...nextauth] | src/app/api/auth/[...nextauth]/route.ts | API NextAuth (callbacks, logout, etc.) |
Dashboard del usuario (requiere login)
Sección titulada «Dashboard del usuario (requiere login)»Todas bajo src/app/(dashboard)/me/...
| URL | Qué hace |
|---|---|
/me | Perfil del usuario + edición + wallet + accesos rápidos |
/me/bank-account | Cuenta bancaria (encrypted) para retiros |
/me/compras | Mis compras (filtradas por estado) |
/me/compras/[id] | Detalle de compra: chat, fotos, disputar |
/me/listings | Mis publicaciones (con filtros) |
/me/listings/new | Crear publicación (4 tipos) |
/me/listings/[id]/edit | Editar publicación existente |
/me/mensajes | Inbox de conversaciones |
/me/ventas | Mis ventas (filtradas por estado) |
/me/ventas/[id] | Detalle de venta: chat, aceptar/enviar |
/me/wallet | Saldo + retiros + historial |
/me/withdrawals | Historial de retiros |
/me/withdrawals/new | Solicitar retiro |
Admin (requiere login + user.isAdmin === true)
Sección titulada «Admin (requiere login + user.isAdmin === true)»Todas bajo src/app/(dashboard)/admin/...
| URL | Qué hace |
|---|---|
/admin | Dashboard principal con KPIs |
/admin/banners | Gestión de banners del home |
/admin/banners/new | Crear banner |
/admin/banners/[id] | Editar banner |
/admin/disputes | Cola de disputas |
/admin/disputes/[id] | Resolver disputa |
/admin/orders | Búsqueda de órdenes |
/admin/orders/[id] | Detalle de orden (admin view) |
/admin/reconciliation | Reconcilia wallet vs ledger |
/admin/reports | Cola de reportes |
/admin/reports/[id] | Resolver reporte (warn/suspend/ban) |
/admin/users | Usuarios moderados |
/admin/users/[username] | Detalle de usuario (perfil + moderation) |
/admin/users/[username]/bank-account | Cuenta bancaria del user (decrypted) |
/admin/users/[username]/wallet | Wallet del user (credit/debit manual) |
/admin/wallet-system | System wallet (comisiones acumuladas) |
/admin/withdrawals | Cola de retiros |
/admin/withdrawals/[id] | Detalle de retiro (procesar/cancelar) |
API routes propias de Next.js
Sección titulada «API routes propias de Next.js»Estas viven dentro de tcgcards-web (no en tcgcards-api). Son endpoints que el cliente llama y que después hacen requests al backend o a servicios externos directamente.
| URL | Archivo | Qué hace |
|---|---|---|
/api/auth/[...nextauth] | src/app/api/auth/[...nextauth]/route.ts | NextAuth — login/logout/session/callback Google |
/api/banners/sign-upload | src/app/api/banners/sign-upload/route.ts | Firma upload a Cloudinary para banners (admin) |
/api/orders/[id]/resume-payment | src/app/api/orders/[id]/resume-payment/route.ts | Reanuda pago en MP de una orden en awaiting_payment |
Convenciones del App Router
Sección titulada «Convenciones del App Router»- Carpetas con paréntesis (
(public),(dashboard),(auth)) son route groups: agrupan páginas con un layout común sin afectar la URL. [param]= ruta dinámica (un solo segmento).[...slug]= catch-all (cero o más segmentos).layout.tsxdefine el layout compartido por todas las páginas de esa carpeta y sub-carpetas.route.tsson API endpoints (NO páginas).loading.tsx,error.tsx,not-found.tsxson archivos especiales para UI de estados.
| Tipo de página | Requiere |
|---|---|
(public)/* | Nada |
(auth)/login | No estar logueado |
(dashboard)/me/* | Sesión activa (cookie Auth.js) |
(dashboard)/admin/* | Sesión activa + user.isAdmin === true |
(dashboard)/checkout | Sesión activa + items en carrito |
(dashboard)/u/[username] | Nada (es público, pero comparte layout con dashboard) |
El control se hace via middleware o en cada page.tsx con auth() de Auth.js.