尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
SaaS para psicólogos de consulta privada y sus pacientes: agenda, fichas, tareas, escalas clínicas (PHQ-9 / GAD-7) opt-in, diario emocional, seguimiento de pagos y contabilidad de autónomo en España. Dos áreas sobre el mismo despliegue: /pro (panel del profesional) y /app (PWA del paciente, envuelta con Capacitor para iOS/Android). Límites de producto, vinculantes: la aplicación nunca emite facturas (evita Verifactu) y nunca interpreta ni recomienda clínicamente (evita la reclasificación como producto sanitario bajo MDR). Los datos son de salud mental: categoría especial del art. 9 RGPD.檢視完整 README ↗
SaaS para psicólogos de consulta privada y sus pacientes: agenda, fichas, tareas, escalas clínicas (PHQ-9 / GAD-7) opt-in, diario emocional, seguimiento de pagos y contabilidad de autónomo en España.
Dos áreas sobre el mismo despliegue: /pro (panel del profesional) y
/app (PWA del paciente, envuelta con Capacitor para iOS/Android).
Límites de producto, vinculantes: la aplicación nunca emite facturas (evita Verifactu) y nunca interpreta ni recomienda clínicamente (evita la reclasificación como producto sanitario bajo MDR). Los datos son de salud mental: categoría especial del art. 9 RGPD.
Next.js 16 (App Router) · React 19 · TypeScript strict · Tailwind CSS v4
(configuración en CSS, sin tailwind.config.js) · Supabase (Postgres, Auth,
Storage, RLS) en EU-Frankfurt · Capacitor 8 · desplegado en Vercel.
En Next.js 16 el middleware se llama
proxy(src/proxy.ts) ycookies()es asíncrono.
npx supabase …)npm install
cp .env.example .env.local # y rellena los valores reales
npm run dev # http://localhost:3000
En Supabase → Authentication → URL Configuration, añade
http://localhost:3000/auth/confirm a las Redirect URLs.
.env.local nunca se sube al repositorio (.gitignore cubre .env*; solo
se versiona .env.example). Contiene la service_role, que salta la RLS.
npm run seed # 2 profesionales, 10 pacientes, ~3 meses
SEED_PRO_EMAIL=tu-correo@dominio npm run seed # para entrar tú por enlace mágico
Es idempotente. Usa la service_role contra la base de datos real.
| Comando | Qué hace |
|---|---|
npm run dev / build / start | ciclo de Next.js |
npm run lint | ESLint 9 (flat config), sin warnings permitidos |
npm run typecheck | tsc --noEmit |
npm test | vitest: lógica pura, sin base de datos |
npm run test:cov | lo mismo con cobertura |
npm run test:integration | batería contra Supabase local (ver abajo) |
npm run db:push | aplica las migraciones al proyecto remoto |
npm run gen:types | regenera src/lib/database.types.ts |
npm run cap:* | Capacitor (sync, add, open) |
npm test no toca ninguna base de datos. Cubre el motor fiscal, la
aritmética de fechas y zonas horarias, el reparto en carriles de la agenda y la
puntuación de las escalas. Se ejecuta en UTC en CI a propósito: es la zona del
runtime de Vercel y donde estaban los fallos de fecha.
La batería de integración sí necesita base de datos, y va contra una local:
supabase start # imprime URL y claves
cp .env.test.example .env.test # y pega esos valores
supabase db reset # aplica todas las migraciones en limpio
npm run test:integration
⚠️ Nunca la apuntes al proyecto remoto. Crea usuarios en Auth e inserta pacientes, citas, pagos y ficheros. Limpia en un
finally, pero si el proceso muere (timeout, Ctrl-C) esefinallyno corre y deja basura en producción. Por eso los scripts leen.env.testy no.env.local.
src/
proxy.ts # sesión + redirección optimista por rol
app/
pro/ # panel del profesional (guard: professional)
app/ # PWA del paciente (guard: patient)
login/ auth/ onboarding/ invite/
api/cron/ # envío programado de notificaciones
lib/
queries/ # lectura
actions/ # escritura (server actions)
fiscal/ # motor del modelo 130 y libros registro
supabase/ # clientes browser / server
tz.ts # zona horaria del dominio (Europe/Madrid)
components/
supabase/migrations/ # esquema y RLS, siempre versionados
docs/ # DEPLOY, GUION_DEMO, PUBLICACION_STORES
src/lib/tz.ts (Europe/Madrid): el
runtime del servidor es UTC y no se puede depender de su zona.supabase/migrations/.Contexto ampliado y estado sesión a sesión en CLAUDE.md.