GoSki
스키 트래커로 모든 라이드를 기록하고 43개 리조트 3D 트레일 지도·눈 예보·실시간 리프트 알림을 제공합니다
페루 전역 에어소프트 경기장·매장·팀·이벤트·수입업체·장비 정보를 제공하는 유일한 전국 디렉터리
El único directorio nacional de airsoft del Perú: canchas de airsoft en Lima y todo el país, tiendas, grupos, eventos, importadores y equipos.
스포츠·피트니스GitHub @ElRadarDelAirsoft온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. 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.