Plataforma de e-commerce multiplataforma especializada en merchandising oficial y personalizado de equipos deportivos.
Proyecto académico - Grupo 11
- Bernardo Quindimil Micó
- Víctor Vega Sobral
- Santiago Souto Ortega
- Luis Sánchez Patiño
SportStyle Store es una aplicación web desarrollada con Streamlit y Firebase que permite a los usuarios comprar merchandising oficial de:
- ⚽ Fútbol Español (LaLiga + Selección)
- 🏀 Baloncesto ACB
- 🏎️ Fórmula 1
- Catálogo de productos con filtros avanzados
- Personalización de productos (nombre + número)
- Carrito de compras sincronizado
- Sistema de puntos de fidelización
- Gestión de pedidos
- Sincronización en tiempo real entre web y móvil (Thunkable)
El proyecto sigue una arquitectura de tres capas:
- Capa de Presentación (Frontend - Streamlit)
- Capa de Negocio (Backend - Services)
- Capa de Datos (Firebase Firestore + Auth)
Ver documentación completa en docs/architecture.md
sportstyle-store/
│
├── docs/ # Documentación
│ ├── architecture.md # Arquitectura del sistema
│ ├── firebase_structure.md # Estructura de Firestore
│ └── features.md # Funcionalidades detalladas
│
├── frontend/ # Aplicación Streamlit
│ ├── pages/ # Páginas de la app
│ ├── components/ # Componentes reutilizables
│ ├── assets/ # Recursos estáticos
│ ├── main.py # Punto de entrada
│ ├── styles.py # Estilos CSS
│ └── requirements.txt # Dependencias frontend
│
├── backend/ # Lógica de negocio
│ ├── config/ # Configuración Firebase
│ ├── models/ # Modelos de datos
│ ├── services/ # Servicios de negocio
│ ├── utils/ # Utilidades
│ └── requirements.txt # Dependencias backend
│
├── data/ # Datos iniciales
│ ├── seed_products.json # Productos de prueba
│ └── spain_provinces.geojson # Datos geográficos
│
├── .env.example # Ejemplo de variables de entorno
├── .gitignore # Archivos ignorados por Git
└── README.md # Este archivo
- Python 3.9 o superior
- Cuenta de Firebase (proyecto configurado)
- Git
git clone https://github.com/tu-usuario/sportstyle-store.git
cd sportstyle-store# Crear entorno virtual
python -m venv venv
# Activar entorno virtual
# En Windows:
venv\Scripts\activate
# En macOS/Linux:
source venv/bin/activate# Instalar dependencias del backend
pip install -r backend/requirements.txt
# Instalar dependencias del frontend
pip install -r frontend/requirements.txt- Crear un proyecto en Firebase Console
- Habilitar Firestore Database
- Habilitar Authentication (Email/Password)
- Descargar credenciales de servicio (archivo JSON)
- Guardar el archivo como
firebase-credentials.jsonen la raíz del proyecto
# Copiar archivo de ejemplo
cp .env.example .env
# Editar .env con tus credenciales de Firebase
# O puedes usar directamente el archivo firebase-credentials.json# Ejecutar script de seed para poblar productos iniciales
python backend/migrations/seed_products.py# Desde la raíz del proyecto
cd frontend
streamlit run main.pyLa aplicación se abrirá automáticamente en tu navegador en http://localhost:8501
Terminal 1 - Backend API (FastAPI):
# Desde la raíz del proyecto
python3 -m uvicorn backend.main:app --host 0.0.0.0 --port 8000 --reloadEl backend estará disponible en:
- API:
http://localhost:8000 - Documentación Swagger:
http://localhost:8000/docs - ReDoc:
http://localhost:8000/redoc
Terminal 2 - Frontend (Streamlit):
# Desde la raíz del proyecto
cd frontend
streamlit run main.pyEl frontend estará disponible en http://localhost:8501
Nota: Ambos servidores deben estar corriendo simultáneamente para que la autenticación funcione correctamente.
Después de ejecutar el seed, puedes usar:
- Admin: admin@sportstyle.com / Admin123
- Usuario: test@sportstyle.com / Test123
- Streamlit - Framework web en Python
- Folium - Mapas interactivos
- Pillow - Procesamiento de imágenes
- Firebase Firestore - Base de datos NoSQL
- Firebase Authentication - Autenticación de usuarios
- Pydantic - Validación de datos
- Python-dotenv - Gestión de variables de entorno
# Ejecutar tests (cuando estén implementados)
pytest tests/- Código: Inglés
- Comentarios y docstrings: Español
- Nomenclatura:
- Funciones:
snake_case - Clases:
PascalCase - Constantes:
UPPER_SNAKE_CASE
- Funciones:
- Principio de unifuncionalidad: Una función = una tarea
Este proyecto es para fines educativos. Desarrollado para la asignatura de Desarrollo Web y App Móviles - Cuarto Año.
Nota: Este proyecto utiliza simulaciones para procesamiento de pagos y envíos. No es un sistema de producción real.