Desktop
ixiclinic Desktop — shell de escritorio nativo (Tauri) que carga admin.ixiclinic.com con sesión persistente, audio/voz nativos y el agente ixiclinic Connect empaquetado como sidecar.
ixiclinic Desktop (@ixiclinic/desktop, en ixiclinic-desktop/) es una app de escritorio nativa que
carga la web de ixiclinic (admin.ixiclinic.com) con sesión persistente — single sign-on, sin doble
login. Es la capa de UX que complementa al agente de hardware
ixiclinic Connect.
| Stack | Tauri 2 (Rust) + Bun, webview nativo |
| Ubicación | ixiclinic-desktop/ (raíz del repo) |
| Paquete | @ixiclinic/desktop · identificador com.ixiclinic.desktop |
Nota: Igual que Connect, Desktop no forma parte del workspace de pnpm (el workspace solo cubre
apps/*ypackages/*). Es un proyecto hermano en la raíz y se gestiona con Bun + Rust/Tauri, no con Turbo.
Por qué existe
Resuelve lo que el navegador limita:
- Sonido / voz sin el bloqueo de autoplay (clave para las pantallas de turno).
- Pantallas de turno a pantalla completa (modo kiosko real).
- Notificaciones nativas del sistema operativo.
- Impresión sin el diálogo del navegador.
- Auto-arranque con la máquina.
Arquitectura
El núcleo en Rust vive en ixiclinic-desktop/src-tauri/:
tauri.conf.json—productName: ixiclinic,frontendDist: ../src, y declara el sidecar enbundle.externalBin: ["binaries/ixiclinic-connect"].Cargo.toml— plugins de Tauri:tauri-plugin-opener,tauri-plugin-shell,tauri-plugin-notification.src/lib.rs— elsetup()abre unaWebviewWindowapuntando a la URL externaIXICLINIC_URL(defaulthttps://admin.ixiclinic.com); conIXICLINIC_KIOSKarranca a pantalla completa. Expone tres comandos invocables desde la web:enroll(token)— lanza el agente Connect con el token (que el agente persiste en su config), para enrolar la máquina en un clic, sin copiar tokens a mano.play_chime()— reproduce un tono de atención con audio nativo del SO (afplayen macOS,[console]::beepen Windows), evitando la política de autoplay del navegador.speak(text)— anuncia el turno con la voz TTS del SO (prefiere voz en español).
La web detecta que corre dentro de ixiclinic Desktop y usa estos comandos nativos en lugar del
WebAudio / speechSynthesis del navegador (el camino web queda como fallback; ver
apps/admin/src/lib/sound.ts). El agente Connect se lanza también al arrancar la app (lee su token
guardado; queda en reposo si no hay).
El directorio
ixiclinic-desktop/src/contiene el scaffold del frontend de Tauri, pero la ventana real cargaIXICLINIC_URL(la web del admin), no ese HTML local.
Desarrollo
Requiere Rust, Bun y los prerequisitos de Tauri.
cd ixiclinic-desktop
bun install
bun run tauri dev # abre una ventana nativa cargando admin.ixiclinic.comBuild y release
Los instaladores los produce GitHub Actions
(.github/workflows/desktop-release.yml), disparado por un tag desktop-v* o manualmente:
- Compila con
tauri-actionpara macOS (Apple Silicon + Intel) y Windows, y publica los.dmg/.msi/.exeen un GitHub Release. - Antes de empaquetar, descarga el binario de ixiclinic Connect del release
connect-v*y lo coloca como sidecar ensrc-tauri/binaries/con el sufijo de target que Tauri espera, de modo que un solo instalador entrega shell + agente.
Roadmap
- Fase 1 — shell + SSO persistente + CI. (actual)
- Fase 2 — sonido/voz nativos, modo kiosko/pantallas de turno, notificaciones.
- Fase 3 — agente ixiclinic Connect como sidecar + registro como servicio.
- Fase 4 — firma (notarization / Authenticode) + auto-update de Tauri.
Connect
ixiclinic Connect — agente local de hardware en la LAN de la sucursal. Se conecta saliente al cloud y ejecuta los trabajos de impresión sobre impresoras de red y USB.
packages/types
@ixiclinic/types — tipos TypeScript compartidos (entidades y contratos de API) que consumen todas las apps del monorepo. Compila primero en Turbo.