World Vibe Web
The distributed app store for vibe-coded projects. Browse, discover, and install open-source apps from across GitHub.
Fichas de coches usados en España con motores, averías conocidas, mantenimiento y coste real. Busca por marca, modelo, generación o código de motor.
Translation pending
CommerceTypeScript · PLpgSQLGitHub @aamracorporation-gifOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
WEB + Adsense
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Base de conocimiento navegable sobre coches usados en España: buscar, entender, comparar y calcular. No es un blog: es un producto de datos estructurados con fuentes, herramientas y navegación por vehículo. Construido a partir del Plan Maestro CocheClaro (SEO orgánico → AdSense + afiliación). Nombre y marca provisionales. Validar antes de uso comercial.Read the full README ↗
Base de conocimiento navegable sobre coches usados en España: buscar, entender, comparar y calcular. No es un blog: es un producto de datos estructurados con fuentes, herramientas y navegación por vehículo.
Construido a partir del Plan Maestro CocheClaro (SEO orgánico → AdSense + afiliación).
Nombre y marca provisionales. Validar antes de uso comercial.
qué motor lleva un golf 8).RECALLS_ENABLED=false.generateMetadata por entidad, canonical absoluto,
breadcrumbs + JSON-LD (Organization, WebSite, BreadcrumbList, FAQPage,
Article solo en comparativas), sitemap.xml solo con contenido publicado,
robots.txt, noindex en búsqueda/filtros/admin, 404 real.<AdSlot> con dimensiones reservadas (sin CLS),
desactivado por defecto (NEXT_PUBLIC_ADS_ENABLED=false) y que solo carga
el script real de AdSense cuando además hay NEXT_PUBLIC_ADSENSE_CLIENT
configurado y el usuario ha aceptado en <ConsentBanner>. Incluye
/ads.txt generado desde el publisher id.src/lib/consent.ts). Sustitúyelo por una CMP certificada (Google CMP
/ TCF) antes de activar anuncios personalizados en el EEE./admin, noindex, protegido por contraseña vía
middleware.ts + ADMIN_PASSWORD): estado del dataset y validaciones
siempre; con DATA_PROVIDER=supabase además CRUD real (generaciones,
averías, fuentes, comparativas) con flujo draft → needs_review → published, e importación CSV por lotes con preview y validación Zod.Next.js 15 (App Router, RSC) · TypeScript strict · Tailwind CSS · Zod · Vitest ·
Playwright. Datos: proveedor local (src/data/*.ts, por defecto) o
Supabase/PostgreSQL (src/lib/db/supabase.ts) conmutando con
DATA_PROVIDER (ver ARCHITECTURE.md).
npm install
cp .env.example .env.local
Edita .env.local y define al menos ADMIN_PASSWORD y ADMIN_SESSION_SECRET
(genera este último con openssl rand -base64 32) para poder entrar en
/admin. El resto de variables son opcionales para desarrollar: el dataset de
demostración vive en el repositorio y no hace falta ninguna base de datos.
npm run dev # http://localhost:3000
| Comando | Qué hace |
|---|---|
npm run dev | Servidor de desarrollo |
npm run build / npm start | Build de producción y arranque |
npm run typecheck | tsc --noEmit (strict) |
npm run lint | ESLint (config de Next) |
npm test | Tests unitarios (Vitest) |
npm run test:e2e | Tests E2E (Playwright; hace build + start) |
npm run data:validate | Valida el dataset (integridad, slugs, fuentes). Sale con código 1 si hay errores. |
npm run db:seed:generate | Genera supabase/seed/seed_demo.sql a partir de src/data/*.ts, para arrancar un proyecto Supabase nuevo con el mismo dataset de demostración. |
Regla de oro (§8 del Plan Maestro): no se inventan datos de coches. El dataset
incluido está marcado como dataStatus: "demo" y se muestra con un aviso visible.
Sustitúyelo por datos verificados con fuente antes de publicar en producción.
src/data/*.ts. Cada dato crítico debería apuntar a una source.npm run data:validate antes de subir cambios.draft → needs_review → published. Solo published genera URL
indexable y entra en el sitemap.DATA_IMPORT_TEMPLATE.csv
(también servida en /DATA_IMPORT_TEMPLATE.csv una vez desplegado). La
importación CSV de /admin/importar soporta hoy known_issue y
maintenance_item; otros tipos de fila se avisan pero no bloquean el resto
del fichero (edítalos con sus formularios dedicados).Ver .env.example. Las claves:
NEXT_PUBLIC_SITE_URL — URL canónica (metadatos, sitemap, JSON-LD).NEXT_PUBLIC_ADS_ENABLED / NEXT_PUBLIC_ADSENSE_CLIENT — anuncios
desactivados por defecto; con ambas puestas y consentimiento aceptado,
<AdSlot> carga el script real de AdSense.DATA_PROVIDER — local (por defecto, sin dependencias) o supabase.NEXT_PUBLIC_SUPABASE_URL / NEXT_PUBLIC_SUPABASE_ANON_KEY /
SUPABASE_SERVICE_ROLE_KEY — solo si DATA_PROVIDER=supabase. La service
role key es secreta (bypassa RLS) y solo la usan las Server Actions de
/admin; nunca la prefijes con NEXT_PUBLIC_.ADMIN_PASSWORD / ADMIN_SESSION_SECRET — obligatorias para entrar en
/admin (protegido por middleware.ts, independientemente del proveedor de
datos). Sin ellas el login siempre falla; el panel no queda abierto.supabase/migrations/0001_init.sql (esquema +
Row Level Security: la clave anónima solo puede leer contenido
published).npm run db:seed:generate
psql "$DATABASE_URL" -f supabase/seed/seed_demo.sql
# o pega supabase/seed/seed_demo.sql en el editor SQL de Supabase
.env.local, pon DATA_PROVIDER=supabase y las tres claves de Supabase
(URL, anon key, service role key — esta última desde Project Settings →
API, y solo en el servidor de despliegue, nunca en el repositorio).npm run dev o vuelve a desplegar). El panel /admin pasa de
solo lectura a tener CRUD real: generaciones, averías, fuentes,
comparativas e importación CSV.dataStatus: "demo") por datos
verificados con fuente, uno a uno, antes de considerar el sitio listo para
producción (§8 del Plan Maestro: nunca presentes una avería como "común"
sin evidencia suficiente).npm run build debe pasar sin errores de TypeScript.NEXT_PUBLIC_SITE_URL con el dominio real y genera
ADMIN_PASSWORD / ADMIN_SESSION_SECRET de producción (distintos de los
de desarrollo).sitemap.xml.NEXT_PUBLIC_ADS_ENABLED=true): integra una
CMP certificada (Google CMP u otra compatible con TCF de IAB) en lugar del
<ConsentBanner> de ejemplo, añade tu NEXT_PUBLIC_ADSENSE_CLIENT
(ca-pub-...) para que /ads.txt se genere solo, y solicita la revisión
de AdSense con el dominio ya en producción.npm run build, npm test y una revisión manual en móvil sin errores.middleware.ts + ADMIN_PASSWORD).
Antes era de acceso público sin autenticación.src/lib/db/supabase.ts) + esquema SQL con
RLS (supabase/migrations/0001_init.sql) + generador de seed
(npm run db:seed:generate). El buscador (src/lib/search.ts) también
funciona sobre Supabase, no solo en local.scripts/seed-supabase.ts,
DATA_PROVIDER=supabase activo en Vercel. cocheclaro.vercel.app ya lee
de Postgres, no del código./admin con DATA_PROVIDER=supabase: generaciones y
comparativas (publicar/despublicar), averías y fuentes (crear/editar),
con Server Actions + Zod./admin/importar) para averías y mantenimiento, con
preview, avisos/errores por fila y validación Zod — probada con
DATA_IMPORT_TEMPLATE.csv real. Otros tipos de entidad quedan para los
formularios dedicados.<AdSlot> carga el script real de AdSense (gate: activado + client id +
consentimiento) y /ads.txt se genera desde el publisher id.generation_engines desde el panel (hoy
se gestionan por SQL directo o reimportando el seed). Es la pieza que
falta para no tocar código en ningún caso.Consulta ARCHITECTURE.md y SEO_CHECKLIST.md.
<ConsentBanner> actual es
un ejemplo funcional, no una CMP conforme a TCF).