Plataforma web para la comunidad Estrella del Alba: landing pública, onboarding y área protegida con prácticas guiadas, progreso diario, feed social y panel de administración. Construida sobre Next.js (App Router) y Supabase.
- Landing y páginas informativas:
app/page.tsxcon secciones Hero/Proceso/Stats/Social, más contenido enapp/bienvenida,app/informacion,app/preguntas,app/terminos,app/privacidad,app/contactoyapp/upgrade. - Autenticación y perfiles: flujo Supabase Auth en
app/auth/*, middleware enmiddleware.tspara proteger rutas y helperlib/supabase/ensure-user-profile.tspara crear perfiles por defecto. Subida de avatar a bucketavatarsvíaapp/api/upload-avatar/route.tsy vista de perfil enapp/protected/profile. - Área protegida y progreso: dashboard en
app/protected/page.tsxque lee plan y progreso (progresos,entregas) para desbloquear días, con APIapp/api/progreso/inityapp/api/progreso/completarpara iniciar y marcar completados. - Prácticas guiadas: galería en
components/PracticesGallery.tsxfiltrada por tipo con control de plan (free/premium) y audio/PDF. Creación desde panel adminapp/protected/admin/practicas#nuevaconcomponents/admin/NewPracticeForm.tsxsubiendo a bucketsmedia-audio,media-coversymedia-pdfsy guardando en la tablapractices. - Comunidad: página
app/protected/social/page.tsxcon composer, feed y comentarios en tiempo real usando TanStack Query + Supabase Realtime sobreprogress_updatesyprogress_update_comments, más stats y sidebars (components/social/*). Moderación de comentarios enapp/protected/admin/page.tsxvía RPCadmin_delete_comment. - Membresía y pagos: pantalla
app/upgrade/page.tsxcon PayPal Subscriptions (hookhooks/usePayPalButtons.ts) que actualizaprofiles.plan/plan_type/subscription_iden Supabase al aprobar el pago. - Scripts: importador masivo
scripts/import-users.tsque leescripts/usuarios_limpios.csv, crea usuarios (Auth + tablaprofiles) y generausuarios_generados.csvcon accesos. - PWA y tema: configurado con
next-pwaennext.config.ts(service worker enpublic/) y modo claro/oscuro víanext-themesycomponents/theme-switcher.tsx.
- Next.js (App Router) + React 19 + TypeScript.
- Tailwind CSS + shadcn/ui, lucide-react y heroicons para UI.
- Supabase JS/SSR para Auth, Storage y RLS; TanStack Query para datos en vivo; Framer Motion para animaciones; next-themes y next-pwa.
- Carpetas clave:
app/(rutas y páginas),components/(UI y bloques como Hero, Stats, Social),lib/(supabase client/server/admin, hooks),hooks/(PayPal),scripts/(tareas CLI),public/(assets).
- Requisitos: Node 20+ y npm.
- Instala dependencias:
npm install. - Copia
.env.examplea.env.localy completa:NEXT_PUBLIC_SUPABASE_URL(URL del proyecto).NEXT_PUBLIC_SUPABASE_ANON_KEY(anon key).SUPABASE_URL(igual que la pública, para clientes admin/SSR).SUPABASE_SERVICE_ROLE_KEY(service role, necesario para scripts y endpoints admin).
- Ejecuta:
npm run devpara desarrollo (App Router, sin Turbopack).npm run build/npm startpara producción.npm run lintpara eslint.
- PayPal: los plan IDs están hardcodeados en
app/upgrade/page.tsx(PLANS). Sustitúyelos por los de tu cuenta si cambian.
- profiles:
id(uuid),email,full_name,avatar_url,role(alumna/admin),is_active,start_date,plan(gratis/premium),plan_type(gratis/premium-mensual/premium-anual/7D),subscription_id,created_at. - progresos:
user_id,dia,completado,completado_at,desbloqueado. La APIprogreso/initcrea el día 1;progreso/completarmarca completado y desbloquea el siguiente. - entregas: catálogo diario (usado para pintar tarjetas del dashboard). Campos usados:
dia,imagen_url(+ el resto del contenido que muestre cada día). - practices:
id,title,kind(meditation/channeling),description,language,facilitator,duration_minutes,tags[],audio_url,cover_url,pdf_url,visibility(public/private/unlisted),plan(free/premium),recorded_at,created_by,created_at. Archivos en bucketsmedia-audio,media-covers,media-pdfs. - progress_updates y progress_update_comments: posts y comentarios del feed social. Relacionan con
profilespara nombre/avatar;comments_countse actualiza vía triggers. - Storage: bucket
avatarspara fotos de perfil y bucketsmedia-*para prácticas. Ajusta las políticas RLS/Storage para permitir solo al propietario subir/leer lo que corresponda. - RPC:
admin_delete_commentusado en el panel admin para moderación segura respetando RLS.
- Se partió del Next.js + Supabase Starter Kit (App Router) y se tradujo la UI al castellano.
- Se configuró Supabase con Auth basada en cookies, manejo de perfiles (
ensure-user-profile) y middleware para proteger rutas privadas. - Se diseñó la landing y páginas públicas con Tailwind/shadcn y assets de marca, más copy e imágenes propias.
- Se construyó el dashboard protegido con control de plan (gratis/premium), desbloqueo diario (
entregas/progresos) y galería de prácticas con gating por plan. - Se integró subida de avatar y edición de perfil, así como flujo de upgrade anual con PayPal que actualiza el plan en
profiles. - Se creó el espacio social con posts/comentarios en tiempo real usando TanStack Query + Supabase Realtime y se añadió panel de moderación y herramientas admin.
- Se añadió PWA, modo oscuro/claro, y scripts CLI para carga masiva de usuarias.
- Orientado a Vercel + Supabase.
next.config.tsincluye configuración de PWA y dominios permitidos de imagen (lh3.googleusercontent.com, tu dominio Supabase). Define las variables de entorno en Vercel y en Supabase (Auth/Storage) para que coincidan con las claves anteriores.