Skip to content

antixiris/equitraccion

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

118 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sitio Web Equitracción

Sitio web oficial de la Fundación Equitracción - Gestión forestal sostenible con tracción equina y desarrollo personal transformador.

🌟 Características

  • Diseño Dual B2B/B2C - Sistema de diseño adaptable según el tipo de servicio
  • Blog Dinámico - Sistema de gestión de contenidos con Supabase
  • Formularios Funcionales - Contacto y newsletter integrados
  • SEO Optimizado - Sitemap, robots.txt, meta tags y Schema.org
  • Seguridad Robusta - JWT, rate limiting, validación de inputs
  • Admin Panel - Panel de administración protegido para gestión de contenidos

🏗️ Stack Tecnológico

  • Framework: Astro 5.x (SSR híbrido)
  • Estilos: Tailwind CSS 4.x
  • Base de Datos: Supabase
  • Autenticación: JWT + httpOnly cookies
  • Tipografía: Crimson Pro & Crimson Text (Google Fonts)
  • Hosting: Vercel / Netlify / VPS

📦 Estructura del Proyecto

/
├── public/              # Assets estáticos
├── src/
│   ├── components/      # Componentes Astro reutilizables
│   ├── layouts/         # Layouts base
│   ├── pages/           # Páginas del sitio
│   │   ├── api/         # Endpoints de API
│   │   └── admin/       # Panel de administración
│   ├── lib/             # Utilidades y lógica
│   │   ├── auth/        # Autenticación JWT
│   │   ├── validation/  # Validación y sanitización
│   │   └── security/    # Rate limiting
│   └── styles/          # Estilos globales
├── scripts/             # Scripts de deployment
├── .env.example         # Template de variables de entorno
├── PRODUCTION_SETUP.md  # Guía de configuración de producción
├── SECURITY.md          # Documentación de seguridad
└── package.json

🚀 Inicio Rápido

Requisitos Previos

  • Node.js 18 o superior
  • npm o pnpm
  • Cuenta de Supabase (para backend)

Instalación

  1. Clonar el repositorio:
git clone https://github.com/tu-usuario/equitraccion.git
cd equitraccion/website
  1. Instalar dependencias:
npm install
  1. Configurar variables de entorno:
cp .env.example .env

Edita .env con tus credenciales (ver Variables de Entorno).

  1. Configurar Supabase:

Consulta SUPABASE_SETUP.md para crear las tablas necesarias.

  1. Iniciar servidor de desarrollo:
npm run dev

Abre http://localhost:4321 en tu navegador.

🔐 Variables de Entorno

Variables críticas para el funcionamiento del sitio:

# Supabase
SUPABASE_URL=https://tu-proyecto.supabase.co
SUPABASE_ANON_KEY=tu_clave_anonima
SUPABASE_SERVICE_ROLE_KEY=tu_clave_de_servicio

# Autenticación
JWT_SECRET=secreto_de_32_caracteres_minimo
ADMIN_EMAIL=admin@equitraccion.com
ADMIN_PASSWORD=hash_bcrypt_de_la_contraseña

# Sitio
SITE_URL=https://equitraccion.com
NODE_ENV=production

# Seguridad
SESSION_SECRET=secreto_de_sesion_32_caracteres
RATE_LIMIT_MAX=100
RATE_LIMIT_WINDOW=900000

⚠️ IMPORTANTE: Consulta PRODUCTION_SETUP.md para instrucciones detalladas sobre cómo generar valores seguros.

📜 Scripts Disponibles

# Desarrollo
npm run dev           # Iniciar servidor de desarrollo

# Build
npm run build         # Compilar para producción
npm run preview       # Previsualizar build de producción

# Verificación
npm run verify-env    # Verificar configuración de variables
npm run check         # Verificar código Astro
npm run security-audit # Auditoría de seguridad de dependencias

# Pre-deployment
npm run pre-deploy    # Verificar config + build

🔒 Seguridad

El sitio implementa múltiples capas de seguridad:

  • ✅ Autenticación JWT con cookies httpOnly
  • ✅ Rate limiting (login, API, formularios)
  • ✅ Headers de seguridad HTTP (CSP, HSTS, X-Frame-Options, etc.)
  • ✅ Validación y sanitización de inputs
  • ✅ Protección contra XSS, CSRF, SQL Injection
  • ✅ Contraseñas hasheadas con bcrypt

Documentación completa: Ver SECURITY.md

🌐 Despliegue a Producción

Checklist Pre-Despliegue

  1. Verificar configuración:
npm run verify-env
  1. Auditoría de seguridad:
npm run security-audit
  1. Build de prueba:
npm run build
npm run preview
  1. Desplegar:

Vercel (Recomendado):

vercel --prod

Netlify:

netlify deploy --prod

VPS: Consulta PRODUCTION_SETUP.md → Opción C

Documentación Detallada

📄 Páginas del Sitio

Públicas

  • / - Home
  • /fundacion - Sobre la fundación
  • /servicios-forestales - Servicios B2B
  • /desarrollo-personal - Servicios B2C
  • /formacion - Cursos y talleres
  • /blog - Blog
  • /contacto - Formulario de contacto
  • /legal - Aviso legal
  • /privacidad - Política de privacidad
  • /cookies - Política de cookies

Administrativas (Protegidas)

  • /admin/login - Login de administrador
  • /admin/posts - Gestión de blog posts
  • /admin/posts/new - Crear nuevo post
  • /admin/posts/edit/[id] - Editar post

🎨 Sistema de Diseño

Modos de Diseño

El sitio usa tres modos visuales:

  1. B2B (Servicios Forestales)

    • Colores: Tierra, marrón oscuro
    • Tono: Profesional, técnico
  2. B2C (Desarrollo Personal)

    • Colores: Verde, tonos cálidos
    • Tono: Personal, emocional
  3. Hybrid (Home, Blog, Fundación)

    • Fusión de ambos estilos
    • Equilibrio profesional/personal

Tipografía

  • Headings: Crimson Pro (serif elegante)
  • Body: Crimson Text (legibilidad óptima)

Paleta de Colores

--color-brand-primary: #8B4513 (marrón tierra)
--color-brand-secondary: #D2691E (marrón cálido)
--color-accent-green: #6B8E23 (verde oliva)
--color-accent-warm: #CD853F (beige tostado)

🧪 Desarrollo

Añadir una Nueva Página

  1. Crear archivo en src/pages/:
---
import BaseLayout from '../layouts/BaseLayout.astro';
import Header from '../components/Header.astro';
import Footer from '../components/Footer.astro';
---

<BaseLayout 
  title="Título | Equitracción"
  description="Descripción para SEO"
  mode="hybrid"
>
  <Header mode="hybrid" />
  
  <main>
    <!-- Contenido -->
  </main>
  
  <Footer />
</BaseLayout>
  1. Añadir al menú en src/components/Header.astro

Crear un Endpoint de API

  1. Crear archivo en src/pages/api/:
import type { APIRoute } from 'astro';

export const POST: APIRoute = async ({ request }) => {
  // Lógica del endpoint
  return new Response(JSON.stringify({ success: true }), {
    status: 200,
    headers: { 'Content-Type': 'application/json' }
  });
};
  1. Aplicar rate limiting si es necesario (ver ejemplos en src/pages/api/auth/)

Proteger una Ruta Admin

Las rutas bajo /admin/* se protegen automáticamente con el middleware.

Para verificar autenticación en una página:

---
import { isAuthenticated, getAuthenticatedUser } from '../lib/auth/jwt';

if (!isAuthenticated(Astro)) {
  return Astro.redirect('/admin/login');
}

const user = getAuthenticatedUser(Astro);
---

🐛 Troubleshooting

Error: "Admin credentials not configured"

Solución: Verificar que ADMIN_EMAIL y ADMIN_PASSWORD estén en .env

Build falla con error de Supabase

Solución: Verificar que todas las variables SUPABASE_* estén configuradas

Rate limiting no funciona

Solución: En producción con múltiples servidores, implementar Redis para almacenamiento compartido

Headers de seguridad no aparecen

Solución: Verificar que el middleware esté activo en src/middleware.ts

📞 Soporte

📝 Licencia

Copyright © 2025 Fundación Equitracción. Todos los derechos reservados.


Última actualización: 2025-01-06

About

Resources

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors