Portal web de la Municipalidad del Centro Poblado de Ivochote — Echarati, La Convención, Cusco, Perú.
- Descripción
- Stack tecnológico
- Estructura del proyecto
- Inicio rápido
- Scripts disponibles
- Despliegue
- Contribuir
- Licencia
Sitio institucional estático generado con Astro (SSG + Islands Architecture). Incluye secciones de noticias, eventos, turismo, servicios y autoridades. Los datos de contenido viven en src/data/*.json, lo que permite desarrollo completamente offline sin necesidad de un backend.
| Herramienta | Rol |
|---|---|
| Astro 5 | Framework SSG / Islands |
| React 18 | Componentes interactivos (Islands) |
| TypeScript 5 | Tipado estático |
| Tailwind CSS 3 | Sistema de estilos utilitario |
| PostCSS | Transformaciones CSS |
| @astrojs/sitemap | Generación de sitemap.xml |
| Netlify | Plataforma de despliegue |
.
├── astro.config.mjs # Integraciones: React, Tailwind, Sitemap
├── tailwind.config.mjs # Configuración de Tailwind CSS
├── postcss.config.cjs # PostCSS (autoprefixer, etc.)
├── tsconfig.json # Configuración TypeScript
├── netlify.toml # Build y headers de seguridad para Netlify
│
├── public/ # Estáticos servidos en / (assets, manifest, robots, favicon)
│ ├── manifest.json
│ ├── robots.txt
│ └── assets/ # Imágenes y descargas públicas
│
└── src/
├── config/ # Configuración interna (navegación, SEO, copys)
│ ├── navigation.ts # Definición de menú y rutas del sitio
│ └── site.config.ts # Metadatos globales (nombre, URL, SEO)
│
├── pages/ # Rutas del sitio (archivo = URL)
│ ├── index.astro
│ ├── noticias/ # /noticias /noticias/[slug]
│ ├── eventos/ # /eventos /eventos/[evento]
│ ├── turismo/ # /turismo /turismo/[lugar]
│ ├── servicios/ # /servicios /servicios/[servicio]
│ ├── autoridades/ # /autoridades /autoridades/[autoridad]
│ ├── contacto/
│ └── 404.astro
│
├── layouts/
│ ├── BaseLayout.astro # Layout raíz (Head, Navbar, Footer)
│ ├── HomeLayout.astro # Layout para la página de inicio
│ └── ArticleLayout.astro # Layout para páginas de detalle
│
├── components/
│ ├── authorities/ # AuthorityCard
│ ├── events/ # EventCard
│ ├── news/ # NewsCard, NewsSearch
│ ├── services/ # ServiceCard
│ ├── tourism/ # PlaceCard
│ ├── layout/ # Navbar, Footer
│ ├── seo/ # Head, JsonLd
│ └── ui/ # Button y primitivos reutilizables
│
├── api/ # Consumo de APIs (contenido mock + APIs reales)
│ ├── contentClient.ts
│ ├── firebaseConfig.ts
│ └── reniecClient.ts
│
├── services/ # Lógica de dominio (usa src/api)
│ ├── newsService.ts
│ ├── eventsService.ts
│ ├── authoritiesService.ts
│ ├── servicesService.ts
│ └── tourismService.ts
│
├── types/ # Interfaces y tipos de dominio
│ ├── news.ts
│ ├── events.ts
│ ├── authorities.ts
│ ├── services.ts
│ └── tourism.ts
│
├── data/ # Mock data JSON (desarrollo sin backend)
│ ├── noticias.json
│ ├── events.json
│ ├── authorities.json
│ ├── services.json
│ └── turismo.json
│
├── styles/
│ ├── globals.css # Variables CSS y reset global
│ └── tailwind.css # Entrypoint de Tailwind (@tailwind directives)
│
└── utils/
├── formatters.ts # Formateo de fechas, moneda y texto
├── helpers.ts # Funciones de soporte general
└── validators.ts # Validaciones de datos
Requisitos previos: Node.js >= 18 y npm >= 9.
# 1. Clonar el repositorio
git clone https://github.com/EzerZuniga/Ivochote-Community-Web.git
cd Ivochote-Community-Web
# 2. Instalar dependencias
npm install
# 3. Levantar servidor de desarrollo en http://localhost:4321
npm run dev| Comando | Descripción |
|---|---|
npm run dev |
Servidor de desarrollo con HMR en localhost:4321 |
npm run build |
Genera la build de producción en dist/ |
npm run preview |
Previsualiza la build de producción localmente |
npm run typecheck |
Verifica tipos con tsc --noEmit sin emitir archivos |
El proyecto está configurado para desplegarse en Netlify vía netlify.toml:
- Comando de build:
npm run build - Directorio publicado:
dist/ - Node.js: 18
- Incluye headers de seguridad (CSP, X-Frame-Options, etc.) y redirección 404 personalizada.
URL de producción: https://municipalidad-de-ivochote.netlify.app
Para otras plataformas (Vercel, Cloudflare Pages), apunta el directorio de salida a dist/.
- Haz un fork y crea una rama desde
main:git checkout -b feature/nombre-del-cambio
- Implementa el cambio con commits pequeños y descriptivos.
- Verifica que no haya errores de tipos:
npm run typecheck
- Abre un Pull Request describiendo el problema que resuelve y la solución aplicada.
Para agregar una nueva sección: crea la página en
src/pages/, el tipo ensrc/types/, el cliente de datos ensrc/api/, el servicio ensrc/services/, los datos mock ensrc/data/y registra la ruta ensrc/config/navigation.ts.
Distribuido bajo los términos del archivo LICENSE.
Mantenido por @EzerZuniga.