HydraFlow es un proyecto de código abierto en beta cerrada: una app de seguimiento de hidratación que registra el agua que bebes, te recuerda tus metas y convierte el hábito en un juego con mascota, logros, XP y una tienda de accesorios.
El código vive en este monorepo con pnpm workspaces: cliente móvil (Expo/React Native) y API REST (NestJS/Prisma/PostgreSQL). La app aún no está en tiendas; si quieres probarla, pide acceso en la solicitud de beta.
| Paquete | Ruta | Descripción |
|---|---|---|
| App | hydraflow-app/ |
Cliente móvil Expo |
| Backend | hydraflow-backend/ |
API REST + PostgreSQL |
Si quieres probar la aplicación en tu teléfono antes del lanzamiento en tiendas y ayudarnos a testear su estabilidad, solicita acceso a la beta privada.
Asunto sugerido: "Solicitud Beta Hydraflow" o "Solicitud Beta Hydraflow App".
| Pantalla Principal | Estadísticas | Logros |
|---|---|---|
![]() |
![]() |
![]() |
| Tienda | Onboarding | Perfil |
![]() |
![]() |
![]() |
- 💧 Seguimiento Intuitivo: Registro rápido de vasos con anillo de progreso visual.
- 🐾 Mascota Interactiva (Hydra): Progreso vinculado a la mascota; accesorios desbloqueables.
- 📊 Estadísticas: Gráficos semanales y calendario de hidratación.
- 🔔 Notificaciones: Recordatorios push locales.
- 🔒 Google Sign-In: Autenticación nativa + JWT hacia el backend.
- 🌍 Multiidioma: Catalán, español e inglés (i18next).
- 🌙 Offline y tema oscuro: Cola de sincronización y modo claro/oscuro.
- 🔒 Autenticación: Google ID token + JWT; login de prueba en dev/CI.
- 🚰 Agua: Registro, reversión, métricas, rangos, estadísticas y exportación.
- 🏆 Gamificación: Logros, XP y recompensas.
- 🛍️ Ítems: Catálogo, compra y equipamiento.
- 👤 Usuario: Perfil, actualización y borrado de cuenta.
- 🧪 Tests: Jest + Supertest con Postgres en CI.
| Área | Tecnología |
|---|---|
| Framework | React Native 0.86, Expo SDK 57 (dev client + EAS) |
| Enrutamiento | Expo Router |
| Estado | React Context (Auth, User, Hydration, Offline, Theme, AppShell) |
| Animaciones | Reanimated 4, gesture-handler |
| UI | react-native-svg |
| Tests | Jest + jest-expo |
| Área | Tecnología |
|---|---|
| Runtime | Node.js >= 22.13, TypeScript, NestJS 11 |
| Base de datos | PostgreSQL 15, Prisma 7 |
| Auth | google-auth-library, JWT |
| Contenedores | Docker Compose |
| Tests | Jest, Supertest |
hydraflow/
├── hydraflow-app/ # Cliente Expo
│ ├── app/ # Pantallas (app) y (auth)
│ ├── components/ # UI reutilizable
│ ├── context/ # Estado global
│ ├── services/ # API, offline, notificaciones
│ ├── locales/ # ca, en, es
│ └── __tests__/
├── hydraflow-backend/ # API NestJS
│ ├── src/modules/ # Dominio + controllers
│ ├── prisma/ # Esquema, migraciones, seed
│ └── docker-compose.yml # Postgres local
├── .github/workflows/ # CI por paquete
├── pnpm-workspace.yaml
└── package.json # Scripts raíz
Detalle de cada paquete (scripts, env, carpetas):
- Node.js >= 22.13
- pnpm 11.22
- Docker (Postgres local del backend)
- Expo CLI / EAS CLI (solo para builds móviles)
git clone https://github.com/JBDev23/hydraflow.git
cd hydraflow
pnpm installcd hydraflow-backend
cp .env.example .env
docker compose up -d
cd ..
pnpm --filter hydraflow-backend prisma:migrate:deploy
pnpm --filter hydraflow-backend prisma:seed
pnpm backend:devLa API responde en http://localhost:3000.
Crea hydraflow-app/.env apuntando al backend local:
EXPO_PUBLIC_API_URL=http://localhost:3000
EXPO_PUBLIC_GOOGLE_WEB_CLIENT_ID=tu-client-id.apps.googleusercontent.compnpm app:startEn dispositivo físico usa la IP de tu máquina en lugar de localhost.
| Variable | Descripción |
|---|---|
DATABASE_URL |
PostgreSQL (pooler en prod) |
DIRECT_URL |
Conexión directa para Prisma |
PORT |
Puerto HTTP (default 3000) |
JWT_SECRET |
Secreto JWT |
GOOGLE_CLIENT_ID |
OAuth Google |
ALLOW_TEST_LOGIN |
Login de prueba en dev (true) |
Plantilla: hydraflow-backend/.env.example.
| Variable | Descripción |
|---|---|
EXPO_PUBLIC_API_URL |
URL de la API (default: Railway prod) |
EXPO_PUBLIC_GOOGLE_WEB_CLIENT_ID |
Client ID web de Google Sign-In |
Los perfiles EAS en eas.json definen estas variables para builds de desarrollo y preview.
| Método | Ruta | Auth |
|---|---|---|
| GET | / |
No |
| POST | /auth/login |
No |
| GET/PUT/DELETE | /user/profile, /user/account |
Sí |
| POST/DELETE | /water/log |
Sí |
| GET | /water/metrics, /water/range, /water/stats, /water/export |
Sí |
| GET | /achievements/catalog |
Sí |
| GET/POST | /shop/catalog, /shop/buy, /shop/equip |
Sí |
| Script | Descripción |
|---|---|
pnpm app:start |
Expo dev server |
pnpm app:test |
Tests del frontend |
pnpm app:lint |
Lint del frontend |
pnpm app:typecheck |
Typecheck del frontend |
pnpm backend:dev |
API en modo desarrollo |
pnpm backend:test |
Tests del backend |
pnpm backend:build |
Build del backend |
pnpm test |
Tests de todos los paquetes |
pnpm lint |
Lint de todos los paquetes |
pnpm format / pnpm format:check |
Prettier en todo el monorepo |
GitHub Actions ejecuta checks filtrados por paquete en cada push/PR a main (solo corre app o backend si hubo cambios en esa carpeta). Ver .github/workflows/ci.yml.
App: format, lint, typecheck, test.
Backend: migrate, seed, format, lint, build, test (con Postgres 15 en servicio).
Checks locales equivalentes:
pnpm install
pnpm test
pnpm lintRepositorio: JBDev23/hydraflow
| Componente | Plataforma | Directorio raíz |
|---|---|---|
| App móvil | Expo EAS | hydraflow-app/ |
| API | Railway | hydraflow-backend/ |
- Conecta el servicio al repo
JBDev23/hydraflow. - Root Directory:
hydraflow-backend - Build/start: definidos en
hydraflow-backend/railway.toml(npm run build/npm start). No pongas comandospnpmen el dashboard. - Variables:
DATABASE_URL,DIRECT_URL,JWT_SECRET,GOOGLE_CLIENT_ID, etc.
Alternativa (pnpm desde raíz del monorepo): Root Directory vacío + pnpm install --frozen-lockfile && pnpm --filter hydraflow-backend build / pnpm --filter hydraflow-backend start.
- Reconecta el proyecto EAS al repo
JBDev23/hydraflow. - Root directory:
hydraflow-app(o ejecutaeas builddesde esa carpeta). - Incluye
pnpm-workspace.yamlypnpm-lock.yamlde la raíz en el build. - Tras la migración al monorepo, lanza un build de preview para verificar.
El workflow .github/workflows/ci.yml se activa en el nuevo repo. Recrea secrets y branch protection si los tenías en repos antiguos.
- Fork de JBDev23/hydraflow.
- Rama feature (
git checkout -b feature/mi-cambio). - Verifica checks locales (
pnpm test,pnpm lint). - Pull Request contra
main.
Proyecto de código abierto. Consulta el archivo LICENSE (si aplica) para más detalles.






