GoSki
A ski tracker that names every run, 3D trail maps of 43 resorts, snow forecasts and Real Time lift alerts.
翻譯準備中
尚未收集儲存庫資訊。
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
El Radar del Airsoft - Perú
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Directorio web de la comunidad de airsoft en Perú: canchas, tiendas, grupos de WhatsApp, eventos, importadores, mercado de pulgas, workshops, jugadores y equipos.
Sin backend, sin login. Todo el contenido vive en un único archivo JSON estático.
src/components/Icons.jsx)Edita únicamente public/data/airsoft.json. Es el único
archivo que necesitas tocar para agregar, modificar o quitar canchas, tiendas, eventos, etc.
nombre, whatsapp, direccion...), solo los valores."" (no lo borres).id que no se repita en esa categoría).+51 para que los links wa.me y tel:
funcionen bien.public/images/<categoria>/archivo.jpg y se referencian como
/images/<categoria>/archivo.jpg. Si dejas "imagen": "", la card muestra un ícono en su lugar.Requiere Node.js 18+.
npm install
npm run dev
Abre http://localhost:5173.
npm run build
Corre vite build y después scripts/prerender.mjs, que genera páginas HTML estáticas
indexables (una por campo, tienda, ciudad y post de blog — con su propio title/meta/OG/
JSON-LD) más sitemap.xml, robots.txt y llms.txt, todo dentro de dist/.
.github/workflows/deploy.yml corre npm run build y publica
dist/ en cada push a main. El repo debe tener Settings → Pages → Build and deployment → Source en "GitHub Actions" (no "Deploy from a branch", que intenta procesar el repo con Jekyll
y falla). Sitio en https://elradardelairsoft.github.io/.netlify.toml con npm run build y dist como carpeta publicada.SITE_URL en scripts/prerender.mjs (y las urls hardcodeadas en index.html) ya apuntan al
dominio real de GitHub Pages. Si el sitio se muda a un dominio propio, actualízalas ahí.departamento no vacío y cada tienda con ciudad no vacía generan su
propia página en /campos/<departamento>/<nombre>/ o /tiendas/<ciudad>/<nombre>/
(más una landing por departamento/ciudad). Si dejas esos campos vacíos, la entrada sigue
apareciendo en el directorio normal, solo no genera página propia.src/data/blogPosts.js (array plano, sin Markdown). Cada post genera
/blog/<slug>/. Formato pensado para que un LLM te pueda citar: respuesta directa de
2-3 líneas al inicio, headings en formato pregunta./) sigue
siendo la SPA interactiva de siempre.public/404.webp (la ilustración del topo) se usa en dist/404.html, generada también por
scripts/prerender.mjs. Netlify y Vercel sirven automáticamente un 404.html en la raíz
del build como página de error — no requiere configuración extra. Pesa ~2MB; si la
reemplazas, conviene comprimirla primero.public/
data/airsoft.json <- ÚNICO archivo de contenido a editar
images/<categoria>/ <- imágenes referenciadas desde el JSON
src/
components/
Header.jsx Buscador + logo + dark mode toggle
Footer.jsx Contacto admin + última actualización
CategoryTabs.jsx Tabs de las 9 categorías + "Ver todo"
CategoryGrid.jsx Grid responsivo (agrupa por categoría)
Card.jsx Card genérica reusada por las 9 categorías
ContactBadge.jsx Badge clicable (teléfono/email/web/dirección→maps)
SocialIcons.jsx Fila de íconos RRSS clicables
DarkModeToggle.jsx
SearchBar.jsx
Icons.jsx Íconos SVG propios (sin dependencias)
data/
categoryConfig.js Mapea cada categoría del JSON a un esquema común
que consume <Card />. Si agregas una 10ma categoría,
este es el único lugar de código que necesitas tocar.
hooks/
useAirsoftData.js Importa public/data/airsoft.json de forma estática (build time)
utils/
whatsapp.js Helpers para construir links wa.me / Google Maps
slug.js slugify() — usado por Card.jsx y scripts/prerender.mjs
App.jsx Filtrado por categoría + búsqueda global
scripts/
prerender.mjs Genera las páginas estáticas SEO/GEO + sitemap/robots/llms.txt
public/data/airsoft.json.categoryConfig (src/data/categoryConfig.js) con su
label, emoji y función normalize() que mapee los campos del JSON al
esquema común. El resto de la UI (tabs, grid, cards, búsqueda) se actualiza solo.