Autosave: 20260501-141129

This commit is contained in:
Flatlogic Bot 2026-05-01 14:11:27 +00:00
parent f9af0ce921
commit e46cec7f80
10 changed files with 49 additions and 50 deletions

View File

@ -92,7 +92,7 @@ export default function PublicShell({ activeSection, children, floatingAction }:
</div>
<h1 className="text-3xl font-black tracking-tight text-white">Guía boricua para salir a chinchorrear</h1>
<p className="mt-3 text-sm leading-6 text-slate-300">
Rutas, chinchorros, lugares y favoritos para montar el próximo road trip con sazón.
Rutas, chinchorros, lugares y favoritos para montar la próxima ruta con sazón.
</p>
<div className="mt-5 grid grid-cols-2 gap-3 text-sm">
<div className="rounded-2xl border border-white/10 bg-white/5 p-3">
@ -135,7 +135,7 @@ export default function PublicShell({ activeSection, children, floatingAction }:
<span className="mr-2">{item.emoji}</span>
{item.label}
</div>
<div className="text-xs text-slate-400">Explora esta sección</div>
<div className="text-xs text-slate-400">Dale una vuelta</div>
</div>
</Link>
);
@ -149,7 +149,7 @@ export default function PublicShell({ activeSection, children, floatingAction }:
className="flex flex-1 items-center justify-center gap-2 rounded-2xl border border-white/10 bg-white/5 px-3 py-3 text-sm font-semibold text-white transition hover:border-white/20 hover:bg-white/10"
>
<BaseIcon path={mdiLogin} size={18} />
Entrar al admin
Área privada
</Link>
<button
type="button"
@ -177,7 +177,7 @@ export default function PublicShell({ activeSection, children, floatingAction }:
className="hidden items-center gap-2 rounded-full border border-white/10 bg-white/5 px-4 py-2 text-sm font-semibold text-white transition hover:border-white/20 hover:bg-white/10 sm:inline-flex"
>
<BaseIcon path={mdiLogin} size={16} />
Admin
Área privada
</Link>
<button
type="button"

View File

@ -24,7 +24,7 @@ export default function RoutePreview({ route, compact = false }: Props) {
<div className="flex items-start justify-between gap-3">
<div>
<div className="text-xs font-semibold uppercase tracking-[0.25em] text-white/80">
Preview de ruta
Vista rápida
</div>
<div className="mt-1 text-lg font-black tracking-tight">{route.region}</div>
</div>

View File

@ -117,7 +117,7 @@ export default function EventsPage() {
<input
value={searchValue}
onChange={(event) => setSearchValue(event.target.value)}
placeholder="Buscar por festival, pueblo o venue"
placeholder="Buscar por festival, pueblo o lugar"
className="w-full rounded-2xl border border-white/10 bg-[#04111f]/50 px-4 py-3 text-white placeholder:text-slate-400 focus:border-[#DAA520] focus:outline-none focus:ring-0"
/>
</div>
@ -201,7 +201,7 @@ export default function EventsPage() {
<div className="mt-2 font-semibold text-white">{formatEventDate(event.nextDateIso)}</div>
</div>
<div className="rounded-[1.4rem] border border-white/10 bg-[#04111f]/60 p-4 text-sm text-slate-300">
<div className="text-xs uppercase tracking-[0.2em] text-slate-500">Venue</div>
<div className="text-xs uppercase tracking-[0.2em] text-slate-500">Lugar</div>
<div className="mt-2 font-semibold text-white">{event.venue}</div>
</div>
<div className="rounded-[1.4rem] border border-white/10 bg-[#04111f]/60 p-4 text-sm text-slate-300">
@ -225,7 +225,7 @@ export default function EventsPage() {
].join(' ')}
>
<BaseIcon path={mdiStarOutline} size={16} />
{saved ? 'Guardado' : 'Guardar evento'}
{saved ? 'Evento guardado' : 'Guardar evento'}
</button>
<div className="inline-flex items-center gap-2 rounded-full border border-white/10 bg-white/5 px-4 py-2 text-sm text-slate-200">
<BaseIcon path={mdiCalendarStar} size={16} />
@ -241,9 +241,9 @@ export default function EventsPage() {
{!filteredEvents.length ? (
<section className="rounded-[2rem] border border-dashed border-white/15 bg-white/5 p-10 text-center shadow-xl shadow-black/20">
<h2 className="text-2xl font-black text-white">No encontramos eventos con ese término</h2>
<h2 className="text-2xl font-black text-white">No salió ningún evento con esa búsqueda</h2>
<p className="mt-3 text-sm leading-6 text-slate-300">
Intenta con otro pueblo, venue o limpia la búsqueda para ver el calendario completo.
Prueba con otro pueblo o lugar, o limpia la búsqueda para ver qué viene por ahí.
</p>
</section>
) : null}

View File

@ -93,7 +93,7 @@ export default function HomePage() {
<PublicShell
activeSection="inicio"
floatingAction={{
label: 'Iniciar Ruta Aleatoria 🎲',
label: 'Sorpréndeme con una ruta 🎲',
icon: mdiDice5Outline,
onClick: handleRandomRoute,
}}
@ -178,7 +178,7 @@ export default function HomePage() {
className="inline-flex items-center gap-2 rounded-full border border-white/15 bg-white/10 px-5 py-3 text-sm font-bold text-white transition hover:border-white/25 hover:bg-white/15"
>
<BaseIcon path={mdiLogin} size={18} />
Entrar al admin
Área privada
</Link>
</div>
</div>
@ -210,7 +210,7 @@ export default function HomePage() {
<SectionHeader
eyebrow="Rutas populares"
title="Desliza y arma tu próximo chinchorreo"
description="Las rutas más queridas combinan paisaje, comida y paradas pensadas para un road trip sabroso."
description="Las rutas más queridas combinan paisaje, comida y paradas pensadas para un chinchorreo sabroso."
href="/rutas"
/>
<div className="flex snap-x gap-5 overflow-x-auto pb-2">

View File

@ -122,9 +122,9 @@ export default function PlacesPage() {
{!filteredPlaces.length ? (
<section className="rounded-[2rem] border border-dashed border-white/15 bg-white/5 p-10 text-center shadow-xl shadow-black/20">
<h2 className="text-2xl font-black text-white">No encontramos lugares con esos filtros</h2>
<h2 className="text-2xl font-black text-white">Con esos filtros no salió ningún lugar</h2>
<p className="mt-3 text-sm leading-6 text-slate-300">
Prueba buscando por pueblo, cambia la categoría o limpia el término de búsqueda.
Prueba otro pueblo, cambia la categoría o borra la búsqueda para seguir explorando.
</p>
</section>
) : null}
@ -180,7 +180,7 @@ export default function PlacesPage() {
].join(' ')}
>
<BaseIcon path={mdiStarOutline} size={16} />
{saved ? 'Guardado' : 'Guardar en Favoritos'}
{saved ? 'Lugar guardado' : 'Guardar lugar'}
</button>
</div>
<div className="inline-flex items-center gap-2 text-sm text-slate-300">

View File

@ -297,7 +297,7 @@ export default function MapPage() {
href={selectedItem.href}
className="inline-flex items-center gap-2 rounded-full bg-white px-4 py-2 text-sm font-semibold text-[#04111f]"
>
Ver detalle
Ver en la guía
<BaseIcon path={mdiChevronRight} size={16} />
</Link>
<a
@ -330,7 +330,7 @@ export default function MapPage() {
<div className="rounded-[2rem] border border-white/10 bg-white/5 p-6 shadow-xl shadow-black/20">
<div className="text-xs font-bold uppercase tracking-[0.35em] text-[#FDE68A]">Ruta desde el mapa</div>
<h2 className="mt-2 text-2xl font-black text-white">Pins seleccionados</h2>
<h2 className="mt-2 text-2xl font-black text-white">Paradas seleccionadas</h2>
{selectedRouteItems.length ? (
<div className="mt-5 space-y-3">
{selectedRouteItems.map((item, index) => (
@ -357,7 +357,7 @@ export default function MapPage() {
</div>
) : (
<div className="mt-5 rounded-[1.6rem] border border-dashed border-white/10 bg-[#04111f]/40 p-5 text-sm leading-6 text-slate-300">
Toca varios pins para armar una mini ruta. Necesitas al menos dos para trazarla.
Marca varias paradas para armar una mini ruta. Con dos o más ya puedes abrirla.
</div>
)}
@ -369,7 +369,7 @@ export default function MapPage() {
className="mt-5 inline-flex items-center gap-2 rounded-full bg-white px-5 py-3 text-sm font-bold text-[#04111f]"
>
<BaseIcon path={mdiMapSearchOutline} size={16} />
Trazar Ruta
Abrir ruta
</a>
) : null}
</div>
@ -378,9 +378,9 @@ export default function MapPage() {
{!visibleItems.length ? (
<section className="rounded-[2rem] border border-dashed border-white/15 bg-white/5 p-10 text-center shadow-xl shadow-black/20">
<h2 className="text-2xl font-black text-white">No hay pins visibles con esos filtros</h2>
<h2 className="text-2xl font-black text-white">Con esos filtros no se ve ninguna parada en el mapa</h2>
<p className="mt-3 text-sm leading-6 text-slate-300">
Activa chinchorros o lugares nuevamente, o limpia la búsqueda para reconstruir el mapa.
Vuelve a activar chinchorros o lugares, o limpia la búsqueda para verlo completo otra vez.
</p>
</section>
) : null}

View File

@ -91,7 +91,7 @@ export default function FavoritesPage() {
const handleRemoveFavorite = (category: FavoriteCategory, itemSlug: string) => {
removeFavorite(category, itemSlug, activeListId);
setFeedback('Favorito removido de la lista activa.');
setFeedback('Se quitó de la lista activa.');
};
const handleRemoveList = () => {
@ -122,7 +122,7 @@ export default function FavoritesPage() {
Crea listas y guarda tus próximos jangueos
</h1>
<p className="mt-3 text-base leading-7 text-slate-300">
En esta primera iteración, tus favoritos viven en el navegador: puedes crear listas,
Tus favoritos se guardan en este dispositivo: puedes crear listas,
elegir una lista activa y compartirla por WhatsApp.
</p>
@ -212,7 +212,7 @@ export default function FavoritesPage() {
onClick={handleClearList}
className="inline-flex items-center gap-2 rounded-full border border-white/10 bg-transparent px-4 py-2 text-sm font-semibold text-slate-200 transition hover:border-white/20 hover:bg-white/5"
>
Vaciar lista activa
Vaciar esta lista
</button>
{activeListId !== DEFAULT_PUBLIC_LIST_ID ? (
<button
@ -242,7 +242,7 @@ export default function FavoritesPage() {
].join(' ')}
>
<div className="text-xs uppercase tracking-[0.25em] text-slate-400">
{isActive ? 'Lista activa' : 'Toca para activar'}
{isActive ? 'Lista activa' : 'Usar esta lista'}
</div>
<h3 className="mt-2 text-2xl font-black text-white">{list.name}</h3>
<p className="mt-2 text-sm leading-6 text-slate-300">{list.description}</p>
@ -296,7 +296,7 @@ export default function FavoritesPage() {
href={item.itemHref}
className="inline-flex items-center gap-2 rounded-full bg-white px-4 py-2 text-sm font-semibold text-[#04111f]"
>
Ver detalle
Ver en la guía
<BaseIcon path={mdiChevronRight} size={16} />
</Link>
<button
@ -313,7 +313,7 @@ export default function FavoritesPage() {
</div>
) : (
<div className="mt-5 rounded-[1.6rem] border border-dashed border-white/10 bg-[#04111f]/40 p-6 text-sm leading-6 text-slate-300">
Todavía no tienes {categoryLabels[category].toLowerCase()} guardados en esta lista.
Aquí todavía no has guardado {categoryLabels[category].toLowerCase()} en esta lista.
</div>
)}
</article>
@ -324,9 +324,9 @@ export default function FavoritesPage() {
{!activeFavorites.length ? (
<section className="rounded-[2rem] border border-dashed border-white/15 bg-white/5 p-10 text-center shadow-xl shadow-black/20">
<BaseIcon path={mdiStarOutline} size={42} className="mx-auto text-[#FDE68A]" />
<h2 className="mt-4 text-3xl font-black text-white">Tu lista activa todavía está vacía</h2>
<h2 className="mt-4 text-3xl font-black text-white">Esta lista está vacía por ahora</h2>
<p className="mt-3 text-sm leading-6 text-slate-300">
Empieza guardando una ruta, un chinchorro o un lugar desde el resto de la guía pública.
Guarda una ruta, un chinchorro o un lugar desde la guía y aquí se te irá armando el plan.
</p>
<div className="mt-5 flex flex-wrap items-center justify-center gap-3">
<Link

View File

@ -127,7 +127,7 @@ export default function RestaurantsPage() {
className="inline-flex items-center gap-2 rounded-full border border-white/10 bg-white/5 px-5 py-3 text-sm font-bold text-white transition hover:border-white/20 hover:bg-white/10"
>
<BaseIcon path={mdiShareVariantOutline} size={16} />
Compartir esta página
Compartir selección
</button>
</div>
@ -373,7 +373,7 @@ export default function RestaurantsPage() {
].join(' ')}
>
<BaseIcon path={mdiStarOutline} size={16} />
{saved ? 'Guardado' : 'Guardar en Favoritos'}
{saved ? 'Chinchorro guardado' : 'Guardar chinchorro'}
</button>
{chinchorro.routeSlug ? (
<Link
@ -393,9 +393,9 @@ export default function RestaurantsPage() {
{!filteredChinchorros.length ? (
<section className="rounded-[2rem] border border-dashed border-white/15 bg-white/5 p-10 text-center shadow-xl shadow-black/20">
<h2 className="text-2xl font-black text-white">No encontramos chinchorros con esos filtros</h2>
<h2 className="text-2xl font-black text-white">Con esos filtros no salió ningún chinchorro</h2>
<p className="mt-3 text-sm leading-6 text-slate-300">
Cambia la región, quita el filtro de abierto ahora o busca por pueblo para ver más opciones.
Prueba otro pueblo, quita Abierto ahora o cambia la región para ver más opciones.
</p>
</section>
) : null}

View File

@ -49,13 +49,13 @@ export default function RouteDetailPage() {
return (
<>
<Head>
<title>Chinchorreo PR | Ruta no encontrada</title>
<title>Chinchorreo PR | Esa ruta no aparece por aquí</title>
</Head>
<PublicShell activeSection="rutas">
<section className="rounded-[2rem] border border-dashed border-white/15 bg-white/5 p-10 text-center shadow-xl shadow-black/20">
<h1 className="text-3xl font-black text-white">Ruta no encontrada</h1>
<h1 className="text-3xl font-black text-white">Esa ruta no aparece por aquí</h1>
<p className="mt-3 text-sm leading-6 text-slate-300">
Parece que esta ruta todavía no está publicada en la primera iteración de la guía.
Puede que el enlace haya cambiado o que todavía no la tengamos publicada en la guía.
</p>
<Link
href="/rutas"
@ -143,7 +143,7 @@ export default function RouteDetailPage() {
className="inline-flex items-center gap-2 rounded-full bg-white px-5 py-3 text-sm font-bold text-[#04111f] transition hover:bg-slate-100"
>
<BaseIcon path={mdiCompassOutline} size={16} />
Iniciar Navegación
Abrir navegación
</a>
<button
type="button"
@ -156,7 +156,7 @@ export default function RouteDetailPage() {
].join(' ')}
>
<BaseIcon path={mdiStarOutline} size={16} />
{saved ? 'Ruta guardada' : 'Agregar a Favoritos ⭐'}
{saved ? 'Ruta guardada' : 'Guardar ruta'}
</button>
<button
type="button"
@ -164,7 +164,7 @@ export default function RouteDetailPage() {
className="inline-flex items-center gap-2 rounded-full border border-white/10 bg-white/10 px-5 py-3 text-sm font-bold text-white transition hover:border-white/20 hover:bg-white/15"
>
<BaseIcon path={mdiShareVariantOutline} size={16} />
Compartir por WhatsApp
Compartir ruta
</button>
</div>
</div>
@ -272,7 +272,7 @@ export default function RouteDetailPage() {
href="/mis-favoritos"
className="mt-5 inline-flex items-center gap-2 text-sm font-semibold text-[#FDE68A]"
>
Ver mis favoritos
Abrir favoritos
<BaseIcon path={mdiChevronRight} size={16} />
</Link>
</div>

View File

@ -113,7 +113,7 @@ export default function RoutesPage() {
Explora la isla parada por parada
</h1>
<p className="mt-3 text-base leading-7 text-slate-300">
Esta primera iteración te deja descubrir rutas populares, ver sus paradas en orden,
Aquí puedes descubrir rutas populares, ver sus paradas en orden,
iniciar navegación y guardarlas en una lista personalizada.
</p>
</div>
@ -121,7 +121,7 @@ export default function RoutesPage() {
<div className="font-semibold text-white">Lista activa</div>
<div className="mt-1 text-[#FDE68A]">{activeList?.name || 'Mi chinchorreo'}</div>
<Link href="/mis-favoritos" className="mt-3 inline-flex items-center gap-2 text-sm font-semibold text-[#A7F3D0]">
Ver favoritos
Abrir favoritos
<BaseIcon path={mdiChevronRight} size={16} />
</Link>
</div>
@ -180,7 +180,7 @@ export default function RoutesPage() {
<div className="mt-4 flex flex-wrap items-center gap-3 text-sm text-slate-300">
<div className="inline-flex items-center gap-2 rounded-full border border-white/10 bg-white/5 px-3 py-2">
<BaseIcon path={mdiFilterVariant} size={16} />
{filteredRoutes.length} rutas que matchean tu vibe
{filteredRoutes.length} rutas que van con tu plan
</div>
{feedback ? (
<div className="inline-flex items-center gap-2 rounded-full border border-[#228B22]/30 bg-[#228B22]/10 px-3 py-2 text-[#A7F3D0]">
@ -251,7 +251,7 @@ export default function RoutesPage() {
href={`/rutas/${route.slug}`}
className="inline-flex items-center gap-2 rounded-full bg-white px-5 py-3 text-sm font-bold text-[#04111f] transition hover:bg-slate-100"
>
Ver detalle
Ver ruta
<BaseIcon path={mdiChevronRight} size={16} />
</Link>
<a
@ -274,7 +274,7 @@ export default function RoutesPage() {
].join(' ')}
>
<BaseIcon path={mdiStarOutline} size={16} />
{saved ? 'Guardada' : 'Agregar a Favoritos'}
{saved ? 'Ruta guardada' : 'Guardar ruta'}
</button>
<button
type="button"
@ -283,7 +283,7 @@ export default function RoutesPage() {
}
className="inline-flex items-center gap-2 rounded-full border border-white/10 bg-transparent px-5 py-3 text-sm font-bold text-slate-200 transition hover:border-white/20 hover:bg-white/5"
>
Compartir por WhatsApp
Compartir ruta
</button>
</div>
</div>
@ -294,10 +294,9 @@ export default function RoutesPage() {
{!filteredRoutes.length ? (
<section className="rounded-[2rem] border border-dashed border-white/15 bg-white/5 p-10 text-center shadow-xl shadow-black/20">
<h2 className="text-2xl font-black text-white">No encontramos una ruta con esos filtros</h2>
<h2 className="text-2xl font-black text-white">Con esos filtros no salió ninguna ruta</h2>
<p className="mt-3 text-sm leading-6 text-slate-300">
Prueba quitando una etiqueta, cambia la dificultad o usa el botón Sorpréndeme para
descubrir una ruta nueva.
Quita una etiqueta, cambia la dificultad o dale a Sorpréndeme para que aparezca otra opción.
</p>
<div className="mt-5 flex flex-wrap items-center justify-center gap-3">
<button