- Sobre el Proyecto
- Características
- Tecnologías
- Comenzando
- Arquitectura
- Estructura del Proyecto
- Sponsors y Monetización
- Analytics
- Testing
- Deployment
- Contribuir
Sitio web oficial del Tercer Tiempo FC, un club amateur de fútbol fundado en 2025 en Despeñaderos, Córdoba, Argentina. La banda de amigos que se junta cada semana para darle a la redonda y después al asado. ¡Acá la amistad es lo que vale!
En el fútbol, el "tercer tiempo" es ese momento después del partido donde los equipos comparten un asado, unas birras y se fortalecen los lazos de amistad. Es el espíritu de nuestro club.
Este sitio está optimizado para captación de sponsors locales, con un funnel de conversión diseñado estratégicamente para transformar visitantes en sponsors activos.
- ✅ SPA Moderna: React 19.1.1 con React Router 7.9.3
- ✅ Responsive Design: Optimizado para todos los dispositivos
- ✅ Accesibilidad (WCAG AA): ARIA labels, navegación por teclado, skip links
- ✅ Performance: Lazy loading, code splitting, React.memo
- ✅ Testing: 51 tests con ~95% cobertura
- ✅ CI/CD: ESLint + Prettier + Husky pre-commit hooks
- ✅ Clean Architecture: Context API, custom hooks, atomic design
- ✅ Funnel de Sponsors: Homepage optimizada para conversión
- ✅ Prueba Social: Sección destacada con sponsors actuales
- ✅ WhatsApp Integration: Contacto directo con mensajes pre-cargados
- ✅ 3 Paquetes de Sponsors: Desde $5K hasta $20K mensuales
- ✅ Analytics Ready: Sistema de tracking con 18 eventos predefinidos
- ✅ Storytelling Emocional: Historia del club que conecta con sponsors locales
- ✅ Instagram Integration: Posts de Instagram embebidos en sección noticias
- ✅ Google AdSense: Monetización con anuncios en páginas clave
- React 19.1.1
- React Router 7.9.3
- PropTypes 15.8.1
- ESLint + Prettier + Husky
- Jest + React Testing Library
- Node.js >= 16.0.0
- npm >= 8.0.0
# Clonar repositorio
git clone https://github.com/tercertiempofc/tercer-tiempo-fc-website.git
cd tercer-tiempo-fc-website
# Instalar dependencias
npm install
# Iniciar desarrollo
npm startEl sitio estará disponible en http://localhost:3000
npm start # Dev server (localhost:3000)
npm run build # Build producción
npm test # Ejecutar tests
npm test -- --coverage # Tests con cobertura
npm run lint # Ejecutar ESLint
npm run lint:fix # Corregir problemas ESLint
npm run format # Formatear código con Prettier- Separación de Responsabilidades: Cada componente tiene una única responsabilidad clara
- Atomic Design: Componentes pequeños y reutilizables
- Clean Code: Código legible y mantenible
- Performance First: Optimización desde el diseño
- Container/Presentational: Separación lógica/UI
- Custom Hooks: Lógica reutilizable encapsulada
- Compound Components: Componentes complejos con sub-componentes
- Context API: Estado global sin prop drilling
Routing Híbrido:
- Rutas (
/,/calendario,/contacto,/bancanos) - Secciones con scroll (
#team,#sponsors,#news) - Header inteligente que maneja navegación cross-page
Funnel de Sponsors (Homepage):
Hero → SponsorsBanner → WhySupport →
PlayerOfTheWeek → Team → Sponsors → History → News
tercerTiempo/
├── public/ # Assets estáticos
│ ├── index.html
│ ├── manifest.json
│ └── assets/ # Imágenes y recursos
│
├── src/
│ ├── components/ # Componentes React
│ │ ├── common/ # Componentes reutilizables
│ │ │ ├── Button.js # Botones con variantes
│ │ │ ├── Badge.js # Labels y badges
│ │ │ ├── Card.js # Contenedores
│ │ │ ├── ErrorBoundary.js # Manejo de errores
│ │ │ ├── LazyImage.js # Lazy loading de imágenes
│ │ │ └── SkipLink.js # Accesibilidad
│ │ │
│ │ ├── features/ # Componentes de features
│ │ │ ├── PlayerCard.js # Card de jugador
│ │ │ └── AccordionTeam.js # Acordeón del equipo
│ │ │
│ │ ├── layout/ # Layout components
│ │ │ ├── Header.js # Navegación principal
│ │ │ └── Footer.js # Pie de página
│ │ │
│ │ └── Team/ # Módulo Team
│ │ └── AccordionTeam.js
│ │
│ ├── pages/ # Páginas (rutas)
│ │ ├── Calendario.js # Página de calendario
│ │ ├── Contacto.js # Página de contacto
│ │ ├── Bancanos.js # Página de sponsors (CTA principal)
│ │ ├── Donaciones.js # Página de donaciones
│ │ ├── Picados.js # Página de partidos amistosos
│ │ └── NotFound.js # Página 404
│ │
│ ├── config/ # Configuración
│ │ ├── constants.js # Constantes globales
│ │ ├── theme.js # Sistema de diseño
│ │ ├── analytics.js # Config de analytics
│ │ ├── adsense.js # Google AdSense config
│ │ ├── seo.js # SEO metadata
│ │ ├── hero.js # Hero section config
│ │ ├── news.js # News section config
│ │ ├── donations.js # Donations config
│ │ └── messages.js # WhatsApp messages
│ │
│ ├── context/ # Context API
│ │ └── AppContext.js # Estado global de la app
│ │
│ ├── data/ # Datos separados de componentes
│ │ ├── news/ # Datos de noticias
│ │ ├── sponsors/ # Datos de sponsors
│ │ └── team/ # Datos del equipo
│ │
│ ├── hooks/ # Custom Hooks
│ │ ├── useNavigation.js # Navegación inteligente
│ │ ├── useWhatsApp.js # Integración WhatsApp
│ │ ├── useScrollToSection.js# Scroll suave a secciones
│ │ ├── useMediaQuery.js # Media queries responsive
│ │ ├── useTeamFilters.js # Filtrado del equipo
│ │ ├── useAnalytics.js # Tracking de eventos
│ │ ├── useInstagram.js # Instagram API integration
│ │ ├── useJsonData.js # JSON data loading
│ │ └── useIntersectionObserver.js # Lazy loading
│ │
│ ├── services/ # Servicios y APIs
│ │ ├── api/ # Mock API layer
│ │ │ ├── mockApi.js # Simulación de API
│ │ │ └── endpoints.js # Endpoints disponibles
│ │ └── instagram/ # Instagram integration
│ │ ├── instagramAPI.js # Instagram Basic Display API
│ │ └── instagramConfig.js # Instagram config
│ │
│ ├── types/ # PropTypes
│ │ └── propTypes.js # Definiciones de PropTypes
│ │
│ ├── utils/ # Utilidades
│ │ ├── validation.js # Validaciones
│ │ ├── whatsapp.js # Helpers de WhatsApp
│ │ ├── analytics.js # Core de analytics
│ │ └── constants.js # Constantes auxiliares
│ │
│ ├── App.js # Componente raíz
│ ├── App.css # Estilos globales + design system
│ └── index.js # Entry point
│
├── .eslintrc.js # Configuración ESLint
├── .prettierrc # Configuración Prettier
├── .husky/ # Git hooks
├── package.json
├── CLAUDE.md # Instrucciones para Claude Code
├── ANALYTICS_SETUP.md # Guía de analytics
└── README.md # Este archivo
- ACTUALIZAR_CRACK_SEMANAL.md: Guía para actualizar el crack de la semana
- ACTUALIZAR_LEGENDARIOS.md: Guía para actualizar jugadores legendarios
- ACTUALIZAR_PLANTEL.md: Guía para actualizar el plantel del equipo
- ACTUALIZAR_SPONSORS.md: Guía para actualizar sponsors
- ACTUALIZAR_SPONSORS_BANNER.md: Guía para actualizar banner de sponsors
- ADSENSE_SETUP.md: Configuración completa de Google AdSense
- ANALYTICS_SETUP.md: Configuración de Google Analytics 4
- DEPLOYMENT_GUIDE.md: Guía de deployment automático con GitHub Actions
- DEPLOYMENT_README.md: Instrucciones de deployment
- GITHUB_SECRETS_EXAMPLE.md: Ejemplo de configuración de secrets
- GOOGLE_ANALYTICS_SETUP.md: Setup detallado de Analytics
- GUIA_DEPLOYMENT_HOSTINGER.md: Deployment específico para Hostinger
- SOLID_CLEAN_CODE_ANALYSIS.md: Análisis de código y arquitectura
- TECH_STACK.md: Stack tecnológico completo
- VERIFICAR_DEPLOYMENT.md: Checklist post-deployment
El sitio implementa un funnel de marketing completo para convertir visitantes en sponsors:
1. AWARENESS (Conciencia)
- Hero con CTA principal "Banca el Club"
- Prueba social inmediata (12 sponsors actuales)
2. CONSIDERATION (Consideración)
- Sección "Por Qué Bancarnos" con 3 beneficios clave
- Historia emocional del club
- Estadísticas de visibilidad real
3. DECISION (Decisión)
- Página
/bancanoscon 3 paquetes claros - Detalles de beneficios por nivel
- CTAs de WhatsApp en cada paquete
4. CONVERSION (Conversión)
- Contacto directo por WhatsApp
- Mensajes pre-cargados específicos por paquete
- Seguimiento con analytics
| Nivel | Precio | Beneficios Clave |
|---|---|---|
| Amigo del Club | $5,000/mes | Logo en web + menciones |
| Colaborador Oficial | $10,000/mes | Logo remera + redes + web |
| Sponsor Principal | $20,000/mes | Logo grande + eventos VIP |
src/components/SponsorsBanner.js- Banner horizontal de sponsorssrc/components/WhySupport.js- Beneficios de sponsorearsrc/components/Sponsors.js- Grid de sponsors actualessrc/pages/Bancanos.js- Landing page de conversiónsrc/utils/whatsapp.js- Mensajes pre-cargadossrc/hooks/useJsonData.js- Carga dinámica de sponsors desde JSON
El sitio incluye un sistema de analytics completo listo para conectar con Google Analytics 4:
18 Eventos Predefinidos:
Alta prioridad (conversión):
cta_banca_club_click- Click en CTAs principaleswhatsapp_sponsor_click- Click en contacto WhatsApppaquete_view- Vista de paquete de sponsorbancanos_page_view- Vista de página de sponsors
Media prioridad (engagement):
sponsor_section_scroll- Scroll a sección sponsorswhy_support_view- Vista de beneficiossocial_proof_view- Vista de prueba social
Baja prioridad (navegación):
team_view,calendar_view,news_view, etc.
- Obtener ID de Google Analytics 4
- Actualizar
src/config/analytics.js:
export const ANALYTICS_CONFIG = {
GA4_MEASUREMENT_ID: 'G-XXXXXXXXXX', // Tu ID real
FB_PIXEL_ID: '', // Opcional
DEBUG_MODE: false
};Ver ANALYTICS_SETUP.md para guía completa.
import { useAnalytics } from '../hooks/useAnalytics';
function MyComponent() {
const { trackCtaClick, trackPaqueteView } = useAnalytics();
const handleClick = () => {
trackCtaClick('hero', 'bancanos');
// ... resto de la lógica
};
return <button onClick={handleClick}>Banca el Club</button>;
}- ✅ Tests implementados con Jest y React Testing Library
- ✅ 11 archivos de test en el proyecto
- ✅ Alta cobertura en utilidades y hooks críticos
# Todos los tests
npm test
# Con cobertura
npm test -- --coverage
# Watch mode (durante desarrollo)
npm test -- --watch
# Un archivo específico
npm test -- validation.test.js| Archivo | Tipo |
|---|---|
utils/validation.js |
Unitarios |
utils/whatsapp.js |
Unitarios |
utils/dates.js |
Unitarios |
hooks/useTeamFilters.js |
Unitarios |
hooks/useWhatsApp.js |
Unitarios |
hooks/useInstagram.js |
Unitarios e Integración |
context/AppContext.js |
Integración |
components/common/Button |
Componente |
services/instagram/instagramAPI.js |
API Layer |
Objetivo: Mantener alta cobertura en archivos críticos
- Tests Unitarios: Utils, hooks, funciones puras
- Tests de Integración: Context API, data flow
- Tests de Componentes: Rendering, interacciones, accesibilidad
npm run buildGenera carpeta build/ optimizada para producción.
- Provider: Hostinger
- Dominio: tercertiempofc.com (ejemplo)
- FTP: Configurado en
.github/workflows/(si aplica)
- Ejecutar tests:
npm test - Build exitoso:
npm run build - Revisar warnings de build
- Verificar bundle size (<100kB gzipped)
- Configurar analytics con ID real
- Actualizar URLs de producción en
constants.js
¡Las contribuciones son bienvenidas! Sigue estos pasos:
- Fork el proyecto
- Crear branch de feature (
git checkout -b feature/AmazingFeature) - Commit cambios (
git commit -m 'feat: Add AmazingFeature') - Push al branch (
git push origin feature/AmazingFeature) - Abrir Pull Request
Seguimos Conventional Commits:
feat: nueva funcionalidad
fix: corrección de bug
docs: cambios en documentación
style: formateo, puntos y comas
refactor: refactorización de código
test: agregar o modificar tests
chore: actualizar dependencias
Los pre-commit hooks ejecutarán automáticamente:
- ✅ ESLint para detectar problemas
- ✅ Prettier para formateo consistente
- ✅ Tests unitarios si aplica
- Componentes: Usar functional components con hooks
- CSS: Seguir sistema de diseño en
App.css - PropTypes: Definir en todos los componentes
- Tests: Agregar tests para nueva funcionalidad
- Accesibilidad: ARIA labels, navegación por teclado
MIT License - ver archivo LICENSE para detalles
Tercer Tiempo FC
- 📧 Email: contacto@tercertiempofc.com.ar
- 📱 WhatsApp: +54 351 460 3456
- 📍 Ubicación: Despeñaderos, Córdoba, Argentina
- 🏟️ Jugamos en: La Gran 7 [Complejo Tribunales]
- ⏰ Horario: Sábados 20:00hs
- Facebook: @tercertiempofc
- Instagram: @tercertiempofc
- YouTube: @tercertiempofc
- 💚 A la banda que se suma cada semana
- 🤝 A los sponsors que nos bancan
- ⚽ Al Toti por fundar esto
- 🎉 A todos los que ponen onda
| Métrica | Valor |
|---|---|
| Tamaño Bundle (gzipped) | ~89 kB |
| Tests | 11 archivos de test |
| Score Lighthouse | 95+ |
| Accesibilidad | WCAG AA ✅ |
| Componentes | 30+ |
| Custom Hooks | 9 |
| Páginas | 6 |
| Archivos Config | 10 |
| Documentación | 15 archivos MD |
- SPA completa con React + React Router
- Sistema de componentes reutilizables
- Funnel completo de sponsors
- Analytics ready
- Suite de testing
- CI/CD con pre-commit hooks y GitHub Actions
- Instagram integration (Instagram Basic Display API)
- Google AdSense configurado y activo
- Sistema de gestión de contenido con JSON
- Documentación completa (15 archivos MD)
- Activar Google Analytics 4 en producción
- Refresh automático del token de Instagram
- Backend para formulario de contacto
- Sistema de login para jugadores
- Estadísticas en tiempo real
- App móvil (React Native)
- Panel de admin para contenido
- Sistema de pagos online para sponsors