Aplicación interna para ejecutivos de ventas de Olfativa. Una foto del espacio del cliente → Tríada Sensorial completa (aroma + difusor + perfil musical Spotify) + propuesta comercial PDF lista para enviar.
Codifica el protocolo del Vol. VII Tríada Sensorial en software.
- Login en
/logincon rol Admin (defaultolfativa-admin-2026). - Configura tu API key: ve a
/configuracion→ pega tuANTHROPIC_API_KEY(la generas en console.anthropic.com) → guardar. La clave queda cifrada con AES-GCM en Vercel Blob. - Comparte el password de vendedor (default
olfativa-vendedor-2026) con tu equipo de ventas. Ellos entran en/logincon rol Vendedor. - Cada vendedor toma una foto del espacio del cliente → el sistema clasifica el estilo, sugiere tipo/tráfico/brief, calcula la Tríada y genera la cotización PDF.
Cambia los passwords default antes de producción real: agrega las variables
ADMIN_PASSWORDyVENDEDOR_PASSWORDen Vercel → Settings → Environment Variables. También agrega unAUTH_SECRET(string aleatorio largo) y unCONFIG_ENCRYPTION_KEY(string aleatorio para el cifrado de la API key).
| Rol | Puede |
|---|---|
admin |
Configurar API keys (Anthropic, Spotify), ver el estado del sistema |
vendedor |
Tomar foto, generar Tríada, descargar propuesta PDF |
- Next.js 16 (App Router) + React 19 + TypeScript estricto
- Tailwind CSS 4 monocromo (palette Olfativa) + tipografía Instrument Serif italic
- Anthropic Claude Sonnet 4.6 con visión, vía
@anthropic-ai/sdk - @react-pdf/renderer para propuestas comerciales
- Spotify Web API (Client Credentials) para playlists
- Vercel Blob + AES-GCM para almacenamiento cifrado de claves
- Jose JWT para sesiones HttpOnly cookies
- Vercel (deploy + Blob storage)
- Captura: foto del espacio → compresión client-side a JPEG ≤1MB.
- Visión: Claude Sonnet 4.6 clasifica el espacio en uno de los 10 estilos del catálogo Olfativa, extrae paleta cromática, materiales, temperatura visual, iluminación. Además sugiere automáticamente tipo de espacio, tráfico estimado, brief de marca, área aproximada y altura de techo.
- Pre-llenado: el formulario se completa solo. El vendedor solo verifica/ajusta.
- Aroma: filtra los 104 aromas del catálogo por familia compatible con el estilo, objetivo alineado al brief, tipo de espacio, contraindicaciones, y arousal congruente. Top 1 + alternativo.
- Difusor: filtra los 15 modelos por cobertura m³ ≥ espacio, intensidad apropiada al tráfico, estética afín al estilo. Calcula precio de renta total.
- Música: BPM + género + volumen dB + playlists Spotify + artistas referencia. Aplica ajustes de hora del día y audiencia cultural.
Cada Tríada se valida con tres congruencia checks: arousal musical/olfativo, temperatura cromática (visual/música), material/textura. Estado: APROBADO o REVISAR.
/ Hero público + protocolo
/login Acceso por rol
/visita/nueva Capture flow (vendedor o admin)
/configuracion Admin only — gestión de API keys
/demo Resultado precargado (sin API key)
/api/auth/login POST { role, password }
/api/auth/logout POST
/api/admin/config GET/PATCH (admin only)
/api/vision/preview POST { fotoBase64 } → análisis IA + sugerencias form
/api/visit/triada POST { vision, ...inputs } → Tríada
/api/visit/proposal POST { triada, vision, fotoPreview } → PDF
/api/visit/test POST { preset } → Tríada con vision fake (sin API)
/api/spotify/search GET ?q= → playlists
| Variable | Requerida | Notas |
|---|---|---|
ANTHROPIC_API_KEY |
recomendada | Si no está, debe configurarse desde /configuracion (requiere BLOB_READ_WRITE_TOKEN) |
BLOB_READ_WRITE_TOKEN |
recomendada | Activa Vercel Blob → permite que admin guarde la API key desde la UI con cifrado |
ADMIN_PASSWORD |
recomendada | Si no está, default olfativa-admin-2026 |
VENDEDOR_PASSWORD |
recomendada | Si no está, default olfativa-vendedor-2026 |
AUTH_SECRET |
recomendada | Para firmar JWTs. String aleatorio ≥32 chars |
CONFIG_ENCRYPTION_KEY |
recomendada | Para cifrar las API keys en Blob. String aleatorio largo |
SPOTIFY_CLIENT_ID |
opcional | Búsqueda de playlists |
SPOTIFY_CLIENT_SECRET |
opcional | Idem |
cp .env.example .env.local
npm install
npm run dev
# → http://localhost:3000Ya desplegado en Vercel:
vercel deploy --prodURL viva: https://olfativa-sales-app.vercel.app
npx tsx scripts/test_engine.tsCorre 4 casos (oficina minimalista, spa Japandi, hotel Quiet Luxury, retail Costero) y muestra la Tríada completa.
src/
app/
page.tsx Hero + protocolo
login/ Acceso por rol
configuracion/ Admin: gestión de API keys
visita/nueva/ Capture flow + auto-fill
demo/ Vista resultado con vision fake
api/
auth/{login,logout} Sesiones JWT
admin/config GET/PATCH (admin only)
vision/preview Foto → análisis + sugerencias form
visit/triada Vision + inputs → Tríada
visit/proposal Genera PDF
visit/test Pipeline con vision fake
spotify/search Playlists
components/
SiteHeader.tsx, SiteFooter.tsx, LogoutButton.tsx
VisitaFlow.tsx Capture + auto-fill + result
TriadaResultView.tsx Output Tríada Sensorial
lib/
auth/session.ts JWT + cookies + checkPassword
config/store.ts AES-GCM + Vercel Blob
vision/analyzeSpace.ts Prompt Claude + Zod parse
matching/ Motor de los 6 pasos del Vol VII
proposal/template.tsx react-pdf
spotify/client.ts Client Credentials + search
imageUtils.ts Compresión client-side
types.ts Schemas Zod compartidos
middleware.ts Protección de rutas + roles
data/ JSON: aromas, difusores, matriz Vol VII
scripts/
excel_to_json.py Re-genera JSON desde los Excels fuente
test_engine.ts Test del matching engine
- Persistencia (Vercel Postgres / Neon) para histórico de visitas y propuestas firmadas.
- Multi-vendedor con cuentas individuales (no solo password compartido).
- Override manual del estilo cuando vision IA confianza < 0.7.
- Link al producto en
olfativahome.comdirecto desde la cotización. - Tracking de % de propuestas que se convierten.