Javis OS
Javis OS는 기업가를 돕는 에이전시 AI로, 업무를 지원하고 함께 성장합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Plataforma privada para la gestión de promociones, membresías, pases digitales y códigos QR para múltiples negocios.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Plataforma inteligente para la gestión de membresías, planes, suscripciones, beneficios y clubes empresariales con validación mediante QR. Los clientes se registran, activan su membresía y reciben un código QR único. Los empleados escanean ese QR en el establecimiento para validar y registrar el uso de la membresía. Nota: Este es un sistema interno de gestión, no un producto SaaS público. El proyecto usa App Router con route groups para separar las áreas por audiencia:README 전문 보기 ↗
Plataforma inteligente para la gestión de membresías, planes, suscripciones, beneficios y clubes empresariales con validación mediante QR.
Los clientes se registran, activan su membresía y reciben un código QR único. Los empleados escanean ese QR en el establecimiento para validar y registrar el uso de la membresía.
Nota: Este es un sistema interno de gestión, no un producto SaaS público.
| Capa | Tecnología |
|---|---|
| Framework | Next.js 16 (App Router) + React 19 |
| Lenguaje | TypeScript 5 |
| Estilos | Tailwind CSS v4 + shadcn/ui |
| Base de datos | Supabase PostgreSQL |
| ORM | Prisma 6 |
| Auth | Supabase Auth (cookies SSR + middleware) |
| Acciones | Server Actions (Next.js) |
| QR | qrcode (generación) + html5-qrcode (escaneo por cámara) |
| Runtime | Bun |
| Deploy | Vercel (serverless) |
El proyecto usa App Router con route groups para separar las áreas por audiencia:
src/app/
├── (public)/ # Landing pública + listado de empresas
│ ├── page.tsx # Hero + planes
│ └── empresas/page.tsx
├── (auth)/ # Login, registro, recuperar
│ ├── login/page.tsx
│ ├── recuperar/page.tsx
│ └── registro/[companySlug]/page.tsx
├── (cliente)/ # Panel del cliente (rol CLIENTE)
│ ├── cliente/dashboard/ # Mi panel + QR
│ ├── cliente/membresia/
│ ├── cliente/historial/
│ └── cliente/perfil/
├── (admin)/ # Panel de empresa (rol ADMIN_EMPRESA)
│ └── admin/{dashboard,clientes,membresias,planes,empleados,reportes}/
├── (empleado)/ # Escáner QR (rol EMPLEADO)
│ └── empleado/scanner/
├── (superadmin)/ # Panel global (rol SUPERADMIN)
│ └── superadmin/{dashboard,empresas,reportes}/
├── api/health/ # Health check
├── layout.tsx # Layout raíz
├── error.tsx # Página de error
└── not-found.tsx # 404
Cada route group tiene su propio layout.tsx que aplica el guard de rol correspondiente (requireRole) y renderiza la navegación (AppNav).
middleware.ts)Un middleware protege todas las rutas:
/login?redirect=.../login → redirige a su homeEl rol se lee de user.app_metadata.role (seteado por el seed o por el registro).
src/modules/)Toda la mutación de datos se hace con Server Actions, agrupadas por dominio:
src/modules/
├── auth/ # logout
├── registro/ # registrarCliente (crea user en Supabase + en BD)
├── admin/ # confirmarPago, renovarMembresia, cancelarMembresia, crearMembresia, empleados
├── cliente/ # actualizarPerfil
├── membresia/ # (consultas/acciones de membresía)
└── visitas/ # buscarPorToken (escáner), confirmarVisita
Las consultas (queries) están en queries.ts dentro de cada módulo y usan Prisma directamente.
User → Usuario de Supabase Auth + tabla users (rol, companyId)
Company → Empresa participante (slug, type, planes)
Plan → Plan de membresía (precio, lavadosIncluidos, beneficios)
Cliente → Perfil de cliente por empresa (supabaseId, companyId)
Vehiculo → Vehículo del cliente (carwash)
Membership → Membresía activa de un cliente a un plan (estado, lavadosRestantes)
QrToken → QR único por cliente (membresía digital)
Visit → Registro de uso (visita al establecimiento)
AppRole)| Rol | Acceso |
|---|---|
SUPERADMIN | Acceso total: empresas, reportes globales, configuración |
ADMIN_EMPRESA | Su empresa: clientes, membresías, planes, empleados, reportes |
EMPLEADO | Escáner QR y registro de usos |
CLIENTE | Su membresía, historial, perfil, código QR |
# 1. Clonar
git clone https://github.com/starlinpaulino94-cloud/pase-digital-platform.git
cd pase-digital-platform
# 2. Instalar dependencias
bun install
# 3. Configurar variables de entorno
cp .env.example .env
# Completa .env con tus claves de Supabase (ver abajo)
# 4. Generar cliente Prisma
bun run db:generate
# 5. Crear las tablas en Supabase (primera vez)
bun run db:push
# 6. Cargar datos de prueba (empresas, planes, usuarios)
bun run db:seed
# 7. Iniciar el servidor
bun run dev
Abre http://localhost:3000.
Copia .env.example a .env y completa con los valores de tu proyecto Supabase
(Settings → API y Settings → Database):
# Supabase Auth (públicas en el frontend)
NEXT_PUBLIC_SUPABASE_URL=https://TU-PROYECTO.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ... # anon/pública
# Supabase Admin (PRIVADA — solo backend)
SUPABASE_SERVICE_ROLE_KEY=eyJ... # service_role
# Postgres (Prisma)
# Transaction pooler (pgBouncer) — para la app
DATABASE_URL="postgresql://postgres.XXXXX:[email protected]:6543/postgres?pgbouncer=true"
# Conexión directa — solo para migraciones
DIRECT_URL="postgresql://postgres.XXXXX:[email protected]:5432/postgres"
# Dominio y correo (MembeGo)
NEXT_PUBLIC_APP_URL=https://membego.com
EMAIL_FROM="MembeGo <[email protected]>"
RESEND_API_KEY=re_... # opcional; sin ella, el correo queda deshabilitado
Hay más variables opcionales (Sentry, endpoints de bootstrap). Consulta
.env.example para la lista completa y documentada.
⚠️ Nunca subas
.enva Git. Ya está en.gitignore.
Disponibles tras ejecutar bun run db:seed:
| Rol | Contraseña | |
|---|---|---|
| Superadmin | [email protected] | admin123 |
| Admin Carwash | [email protected] | admin123 |
| Admin Restaurante | [email protected] | admin123 |
| Empleado Carwash | [email protected] | admin123 |
| Cliente | [email protected] | cliente123 |
El seed crea los usuarios en Supabase Auth (con app_metadata.role) y en la tabla users, para que el login funcione de inmediato.
bun run dev # Desarrollo en http://localhost:3000
bun run build # Build de producción
bun run start # Servir el build
bun run lint # ESLint
bun run db:generate # Generar cliente Prisma
bun run db:push # Sincronizar schema (dev / primera vez)
bun run db:migrate # Crear + aplicar migración (dev)
bun run db:migrate:deploy # Aplicar migraciones pendientes (prod)
bun run db:reset # Resetear BD (¡destruye datos!)
bun run db:seed # Cargar datos iniciales + usuarios de prueba
.env (Supabase, Postgres, NEXT_PUBLIC_APP_URL, correo y, si aplican, Sentry).postinstall corre prisma generate.bun run db:migrate:deploy
# o si usas push directo:
bun run db:push
.env a producción):
bun run db:seed
@supabase/ssr)companyId del usuario (excepto superadmin).env nunca se sube a Gitmembego-platform/
├── prisma/
│ ├── schema.prisma # 8 modelos + 2 enums
│ └── seed.ts # Datos iniciales + usuarios de prueba
├── public/ # Assets estáticos
└── src/
├── app/ # App Router con route groups
│ ├── (public)/
│ ├── (auth)/
│ ├── (cliente)/
│ ├── (admin)/
│ ├── (empleado)/
│ └── (superadmin)/
├── components/
│ ├── admin/ # Formularios de admin (membresías, empleados)
│ ├── auth/ # LoginForm, RegisterForm
│ ├── cliente/ # PerfilForm
│ ├── layout/ # AppNav
│ ├── qr/ # QRDisplay
│ ├── scanner/ # QRScanner, ConfirmVisit
│ └── ui/ # shadcn/ui
├── lib/
│ ├── auth/ # guards.ts (requireRole) + index.ts (getUser)
│ ├── supabase/ # server.ts, client.ts, admin.ts
│ ├── data/ # companies.ts (datos seed)
│ ├── prisma.ts # Singleton PrismaClient
│ ├── env.ts # Validación de env vars
│ └── utils.ts # cn() y helpers
├── modules/ # Server Actions por dominio
│ ├── auth/
│ ├── registro/
│ ├── admin/
│ ├── cliente/
│ ├── membresia/
│ └── visitas/
├── types/ # Tipos compartidos (AppRole, SessionUser, ...)
└── proxy.ts # Middleware (auth + routing por rol)