Skip to content

Repository files navigation

💧 HydraFlow

HydraBanner

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

📩 Solicitud de Acceso Beta

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.

📬 jordibarrachinam@gmail.com

Asunto sugerido: "Solicitud Beta Hydraflow" o "Solicitud Beta Hydraflow App".


📱 Vistazo a la App

Pantalla Principal Estadísticas Logros
Pantalla principal Estadísticas Logros
Tienda Onboarding Perfil
Tienda Onboarding Perfil

🚀 Características

App móvil

  • 💧 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.

Backend

  • 🔒 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.

💻 Stack Tecnológico

App (hydraflow-app)

Á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

Backend (hydraflow-backend)

Á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

📖 Estructura del Monorepo

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):


Requisitos

  • Node.js >= 22.13
  • pnpm 11.22
  • Docker (Postgres local del backend)
  • Expo CLI / EAS CLI (solo para builds móviles)

Instalación

git clone https://github.com/JBDev23/hydraflow.git
cd hydraflow
pnpm install

Desarrollo local

Backend (terminal 1)

cd 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:dev

La API responde en http://localhost:3000.

App (terminal 2)

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.com
pnpm app:start

En dispositivo físico usa la IP de tu máquina en lugar de localhost.


Variables de entorno

Backend (hydraflow-backend/.env)

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.

App (hydraflow-app/.env)

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.


🌐 API (resumen)

Método Ruta Auth
GET / No
POST /auth/login No
GET/PUT/DELETE /user/profile, /user/account
POST/DELETE /water/log
GET /water/metrics, /water/range, /water/stats, /water/export
GET /achievements/catalog
GET/POST /shop/catalog, /shop/buy, /shop/equip

Scripts raíz

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

CI

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 lint

Despliegue

Repositorio: JBDev23/hydraflow

Componente Plataforma Directorio raíz
App móvil Expo EAS hydraflow-app/
API Railway hydraflow-backend/

Railway (backend)

  1. Conecta el servicio al repo JBDev23/hydraflow.
  2. Root Directory: hydraflow-backend
  3. Build/start: definidos en hydraflow-backend/railway.toml (npm run build / npm start). No pongas comandos pnpm en el dashboard.
  4. 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.

Expo EAS (app)

  1. Reconecta el proyecto EAS al repo JBDev23/hydraflow.
  2. Root directory: hydraflow-app (o ejecuta eas build desde esa carpeta).
  3. Incluye pnpm-workspace.yaml y pnpm-lock.yaml de la raíz en el build.
  4. Tras la migración al monorepo, lanza un build de preview para verificar.

GitHub Actions

El workflow .github/workflows/ci.yml se activa en el nuevo repo. Recrea secrets y branch protection si los tenías en repos antiguos.


🤝 Contribución

  1. Fork de JBDev23/hydraflow.
  2. Rama feature (git checkout -b feature/mi-cambio).
  3. Verifica checks locales (pnpm test, pnpm lint).
  4. Pull Request contra main.

📄 Licencia

Proyecto de código abierto. Consulta el archivo LICENSE (si aplica) para más detalles.

About

Daily hydration companion: a gamified Expo/React Native app with a NestJS API. Track water, level up Hydra, unlock achievements and shop items.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages