ixiclinicDocs
DesarrolladoresApps del monorepo

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.

StackTauri 2 (Rust) + Bun, webview nativo
Ubicaciónixiclinic-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/* y packages/*). 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.jsonproductName: ixiclinic, frontendDist: ../src, y declara el sidecar en bundle.externalBin: ["binaries/ixiclinic-connect"].
  • Cargo.toml — plugins de Tauri: tauri-plugin-opener, tauri-plugin-shell, tauri-plugin-notification.
  • src/lib.rs — el setup() abre una WebviewWindow apuntando a la URL externa IXICLINIC_URL (default https://admin.ixiclinic.com); con IXICLINIC_KIOSK arranca 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 (afplay en macOS, [console]::beep en 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 carga IXICLINIC_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.com

Build y release

Los instaladores los produce GitHub Actions (.github/workflows/desktop-release.yml), disparado por un tag desktop-v* o manualmente:

  • Compila con tauri-action para macOS (Apple Silicon + Intel) y Windows, y publica los .dmg / .msi / .exe en un GitHub Release.
  • Antes de empaquetar, descarga el binario de ixiclinic Connect del release connect-v* y lo coloca como sidecar en src-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.

On this page