Javis OS
Javis OS는 기업가를 돕는 에이전시 AI로, 업무를 지원하고 함께 성장합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Plataforma que actúa como agente IA de atención al cliente vía WhatsApp para clínicas dentales (y otros negocios con agendamiento de citas). Incluye webhook + dashboard web. Stack: Next.js 16.2.6, TypeScript strict, TailwindCSS v4, Supabase (Postgres + Auth + RLS), Vercel AI SDK 6 con Anthropic Claude Sonnet 4.6, WhatsApp Cloud API v25.0, Google Calendar API. Ver PROMPT.md para el brief completo del proyecto y CLAUDE.md para las reglas persistentes que el agente de código debe respetar.README 전문 보기 ↗
Plataforma que actúa como agente IA de atención al cliente vía WhatsApp para clínicas dentales (y otros negocios con agendamiento de citas). Incluye webhook + dashboard web.
Stack: Next.js 16.2.6, TypeScript strict, TailwindCSS v4, Supabase (Postgres + Auth + RLS), Vercel AI SDK 6 con Anthropic Claude Sonnet 4.6, WhatsApp Cloud API v25.0, Google Calendar API.
Ver PROMPT.md para el brief completo del proyecto y CLAUDE.md para las reglas persistentes que el agente de código debe respetar.
.nvmrc)npm i -g supabase)pnpm install
cp .env.example .env.local
Luego rellena .env.local. Para generar la ENCRYPTION_KEY (AES-256-GCM):
pnpm gen:key
Copia el output a ENCRYPTION_KEY= en .env.local.
NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY y SUPABASE_SERVICE_ROLE_KEY al .env.local.supabase link --project-ref <tu-project-ref>
supabase db push
Esto crea todas las tablas con RLS + índices + triggers, incluyendo el trigger que autocrea organization + profile + agent_config al hacer signup.
Habilita Realtime en el dashboard de Supabase → Database → Replication → habilita las tablas messages y conversations (ya las agrega la migración al publication, pero verifica).
(Opcional) Regenera los tipos de TypeScript:
pnpm gen:types
Crea tu API key en console.anthropic.com/settings/keys y colócala en ANTHROPIC_API_KEY.
http://localhost:3000/api/auth/google/callback (y el de producción).GOOGLE_CLIENT_ID y GOOGLE_CLIENT_SECRET a .env.local.whatsapp_business_messaging y whatsapp_business_management.https://TU-DOMINIO.vercel.app/api/webhooks/whatsapp (necesita HTTPS público — usa ngrok para desarrollo).{slug-de-tu-organizacion}:{secreto-random}. El slug se genera automáticamente al hacer signup (lo ves en /integraciones).messages.ℹ️ mTLS (importante para autohosted): desde el 31 de marzo de 2026 Meta firma llamadas a webhooks con una nueva CA interna. Vercel gestiona su trust store. Si en algún momento migras a servidor propio (Docker, EC2), asegúrate de confiar en la Meta Internal CA o el TLS handshake fallará.
pnpm dev
Abre http://localhost:3000. Crea tu cuenta en /signup, ve a /integraciones y guarda las credenciales de WhatsApp; después haz click en Conectar con Google.
after() ejecuta el agente en background:
get_available_slots, book_appointment, save_contact_info, request_human_handoff)./conversaciones/[id] (Supabase Realtime)..env.local en Vercel Project Settings → Environment Variables.NEXT_PUBLIC_APP_URL y GOOGLE_OAUTH_REDIRECT_URI con tu dominio de Vercel.runtime = 'nodejs' (fluid compute).[Cliente WhatsApp] ──> [Meta Cloud API] ──webhook──> [Next.js /api/webhooks/whatsapp]
│
├─ Verifica X-Hub-Signature-256 (HMAC-SHA256)
├─ Resuelve org por phone_number_id
├─ Persiste mensaje (idempotente por wa_message_id)
├─ Responde 200 inmediatamente
└─ after() ejecuta el agente:
├─ AI SDK 6 + Claude Sonnet 4.6
├─ Tools: slots, book, save, handoff
└─ Google Calendar (FreeBusy + insert event)
[Dueño] ──> [Dashboard Next.js] ──> [Supabase Auth + RLS + Realtime]
├─ /dashboard KPIs
├─ /citas calendario
├─ /conversaciones chat con Realtime + toggle bot
├─ /personalizacion prompt, tono, servicios, horarios
└─ /integraciones credenciales de WhatsApp + Google
Aislamiento multi-tenant: cada tabla tiene organization_id y RLS activo. Las políticas filtran usando el profiles.organization_id del usuario autenticado. El webhook usa service_role_key (bypass RLS) pero filtra manualmente por el organization_id derivado del phone_number_id.
app/
(marketing)/page.tsx Landing
(auth)/ login, signup, callback
(app)/ Dashboard, citas, conversaciones, personalización, integraciones
api/
webhooks/whatsapp/route.ts Webhook Cloud API (GET verify + POST con HMAC)
auth/google/ OAuth 2.0 flow
lib/
constants.ts GRAPH_API_VERSION, ANTHROPIC_MODEL, etc.
crypto.ts AES-256-GCM (tokens en BD)
database.types.ts Tipos de Supabase (regenera con pnpm gen:types)
supabase/ server / browser / admin / middleware
whatsapp/ send + verificación de firma
google/ OAuth + Calendar client
agent/
run-agent.ts Loop AI SDK 6 con stopWhen: stepCountIs(8)
system-prompt.ts Ensamble del system prompt
tools/ 4 tools del agente
supabase/migrations/ SQL: schema + RLS + trigger de signup
scripts/gen-encryption-key.mjs Genera ENCRYPTION_KEY base64
| Comando | Qué hace |
|---|---|
pnpm dev | Dev server en :3000 |
pnpm build | Build de producción |
pnpm typecheck | tsc --noEmit |
pnpm lint | ESLint |
pnpm gen:key | Genera clave AES-256-GCM |
pnpm gen:types | Regenera lib/database.types.ts desde Supabase |
encrypt()/decrypt() usan AES-256-GCM con clave en env. Guardan base64(iv || authTag || ciphertext).messages.wa_message_id es UNIQUE — Meta puede reenviar el mismo evento.conversations.bot_active = false, el webhook procesa/guarda el mensaje pero no invoca al agente./personalizacion; refresh automático de tokens de Google (parcialmente resuelto por el listener tokens en lib/google/calendar.ts).