Ecosistema para seguimiento de hábitos y control de gastos personales.
HabitFlow es un ecosistema completo para el seguimiento de hábitos y control de gastos personales. Incluye app móvil híbrida, bot de Telegram, landing page y backend serverless en AWS.
Plataformas:
- 📱 iOS (Ionic)
- 🤖 Android (Ionic)
- 🌐 Web (Landing Next.js) - habit-flow-psi-one.vercel.app
- 🤖 Telegram (Bot Python)
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Ionic App │ │ Telegram │ │ Landing │
│ (Angular) │ │ Bot │ │ (Next.js) │
└──────┬──────┘ └──────┬──────┘ └─────────────┘
│ │
│ Firebase │
│ Auth │
└────────┬────────┘
▼
┌─────────────────┐
│ API Gateway │
│ (+ throttling) │
└────────┬────────┘
▼
┌─────────────────┐
│ Lambda │
│ (validación) │
└────────┬────────┘
▼
┌─────────────────┐
│ DynamoDB │
└─────────────────┘
| Componente | Descripción | Tecnología |
|---|---|---|
| habitflow-app | App móvil híbrida | Ionic 7 + Angular 17 |
| habitflow-api | Backend serverless | AWS Lambda + DynamoDB |
| habitflow-bot | Bot de Telegram | Python + python-telegram-bot |
| habitflow-landing | Landing page | Next.js + Tailwind + Vercel |
- Autenticación con Firebase
- CRUD de hábitos con rachas
- Registro de gastos por categoría
- Dashboard con estadísticas
- Gráficos de progreso
- Notificaciones locales
- Modo oscuro
- Registro rápido de hábitos
- Consulta de estadísticas
- Recordatorios automáticos
- Presentación del producto
- Capturas de pantalla
- Call to action
- Firebase Auth: Email/password + providers sociales
- JWT tokens: Verificación en cada request a Lambda
- Refresh tokens: Renovación automática de sesión
- Throttling: Rate limiting (100 requests/segundo por IP)
- Burst limit: Máximo 200 requests en ráfaga
- API Key: Autenticación de clientes (opcional)
- HTTPS only: TLS 1.2+ obligatorio
- Validación de inputs: Sanitización de todos los datos
- Verificación JWT: Comprobar token de Firebase en cada request
- Variables de entorno: Credenciales en env vars (no hardcodeadas)
- Logging seguro: Sin datos sensibles en CloudWatch
- IAM roles mínimos: Principio de mínimo privilegio
- Sanitización XSS: Escape de contenido dinámico
- HTTPS obligatorio: Comunicación cifrada
- CSP Headers: Content Security Policy
- Firebase Security Rules: Acceso restringido por usuario
- Cifrado en reposo: Automático con AWS KMS
- Acceso por IAM: Sin credenciales en código
- Consultas seguras: Sin inyección gracias a SDK
En un entorno de producción se añadiría AWS WAF para protección adicional contra ataques comunes (SQL injection, XSS, DDoS). Para este proyecto se usa throttling de API Gateway como alternativa.
| Capa | Tecnología |
|---|---|
| Mobile | Ionic 7, Angular 17, Capacitor |
| Auth | Firebase Authentication |
| Backend | AWS Lambda (Python) |
| Database | DynamoDB |
| API | API Gateway (con throttling) |
| Bot | Python + python-telegram-bot |
| Landing | Next.js 14, Tailwind CSS |
| Hosting | Vercel (landing), AWS (API) |
habitflow/
├── habitflow-app/ # App Ionic/Angular
│ ├── src/
│ │ ├── app/
│ │ │ ├── pages/
│ │ │ ├── services/
│ │ │ │ ├── auth.service.ts
│ │ │ │ ├── habit.service.ts
│ │ │ │ └── expense.service.ts
│ │ │ └── guards/
│ │ │ └── auth.guard.ts
│ │ └── environments/
│ └── capacitor.config.ts
├── habitflow-api/ # Backend AWS
│ ├── handlers/
│ │ ├── habits.py
│ │ ├── expenses.py
│ │ └── auth_middleware.py
│ ├── utils/
│ │ ├── validator.py # Validación de inputs
│ │ ├── sanitizer.py # Sanitización XSS
│ │ └── firebase_auth.py # Verificación JWT
│ ├── template.yaml # SAM template
│ └── requirements.txt
├── habitflow-bot/ # Bot Telegram
│ ├── bot.py
│ └── requirements.txt
├── habitflow-landing/ # Landing Next.js
│ ├── app/
│ ├── components/
│ └── public/
└── README.md
cd habitflow-app
npm install
ionic serve # Desarrollo
ionic build # Producción
npx cap add ios # Añadir iOS
npx cap add android # Añadir Androidcd habitflow-api
pip install -r requirements.txt
sam build
sam deploy --guidedcd habitflow-bot
pip install -r requirements.txt
python bot.pycd habitflow-landing
npm install
npm run dev # Desarrollo
npm run build # Producción- Crear proyecto en Firebase Console
- Activar Authentication (Email/Password)
- Copiar config a
environments/environment.ts
Variables de entorno en Lambda:
FIREBASE_PROJECT_ID=tu-proyecto
FIREBASE_API_KEY=tu-api-key
# template.yaml
ThrottlingBurstLimit: 200
ThrottlingRateLimit: 100- Crear bot con @BotFather
- Copiar token a variables de entorno
Este proyecto cubre los siguientes temas del examen:
| Tema | Servicio usado |
|---|---|
| Desarrollo serverless | Lambda |
| Bases de datos NoSQL | DynamoDB |
| APIs REST | API Gateway |
| Seguridad | IAM, throttling |
| Infraestructura como código | SAM/CloudFormation |
| Monitorización | CloudWatch |
| Servicio | Coste/mes |
|---|---|
| Firebase Auth | $0 (gratis) |
| Lambda | ~$0-1 |
| DynamoDB | ~$1-2 |
| API Gateway | ~$0-1 |
| CloudWatch | ~$0-1 |
| Total | ~$3-5 |
- Setup proyecto Ionic + Angular
- Autenticación Firebase
- Backend AWS Lambda
- CRUD hábitos
- CRUD gastos
- Seguridad (throttling, validación)
- Bot Telegram
- Dashboard con gráficos
- [~] Landing page (base hecha, pendiente mejoras)
- Hero con mockup de la app
- Características (6 cards)
- Plataformas y arquitectura
- Estadísticas con contadores animados
- FAQ con acordeón
- CTA y Footer
- Sección de Seguridad
- Sección de Tech Stack
- Despliegue en Vercel
- Notificaciones push
María Bravo Angulo
- LinkedIn: maria-bravo-angulo
- GitHub: @laloba04