ESPAÑOL *
ENGLISH *

Zaka\ProjectsProyectos\KantraKantra

«Controla quién entra» - Sistema de Acceso Controlado local, basado en la web."Control who enters" - Self-hosted Access Control System, based on the web.


Tabla de Contenidos Table of Contents

Qué es y qué hace What it is and what it does
La arquitectura
Desarrollo
La pila tecnológica
Modelo de distribución
Funcionalidades
Disponibilidad
Capturas de pantalla
Project cover

Qué es y qué hace

Kantra es una aplicación web que sirve como SAC; es decir, programa para registrar entradas y salidas de un edificio. Kantra está específicamente diseñado para el uso educativo, por lo que permite, por ejemplo, filtrar entre alumnos, docentes o personal del centro. También es apropiado para centros educativos ya que es totalmente privado, no porque lo prometa yo sino porque los centros usuarios tienen que alojar el software en sus propios servidores (labor para la que servirá un ordenador que esté encendido siempre que haya alguien dentro del centro; Kantra no es la gran cosa en exigencias de hardware), y de todos modos requiere HTTPS para cifrado en tránsito y una clave maestra usada para cifrado en reposo. Solo quien conozca la clave (se presupone alguien fiable dentro del centro) puede acceder a los datos, o conceder a otros usuarios autentificados el permiso para consultarlos desde la app.


Lo desarrollé con un compañero1.

La arquitectura

Es bastante sencilla, y eso es intencional. Por su naturaleza, Kantra no espera cargas de trabajo intensas o picos de concurrencia, por lo que nos podemos permitir un diseño mucho más plano que sacrifique «migajas» de rendimiento a cambio de un desarrollo mucho más fácil y rápido.


Kantra sigue una arquitectura cliente-servidor-BD, los clientes (bien la interfaz web o la línea de comandos) se comunican mediante HTTP a un servidor central (alojado por el centro), que hace todo el trabajo complejo y orquesta una base de datos SQLite que procesa todos los datos.


Como decía, Kantra se va a usar en colegios para registrar entradas y salidas a lo largo del día (cosa que, por diseño, no incluye la entrada/salida de todos los alumnos a las nueve y a las tres; solo todo lo demás), así que tampoco hacen falta cosas más complejas. Esto bastará.

Desarrollo

La pila tecnológica

No es nada sobre lo que vaya a escribir demasiado.


Svelte(Kit) para la interfaz gráfica. No hay mucho que explicar respecto a la decisión, Svelte es en líneas generales (y eso incluye mi opinión, claro) la mejor opción para casi cualquier proyecto web.


Bun para el servidor. Elegí usar JavaScript del lado del servidor ya que al estar la interfaz hecha también en JS, a partir de un mono-repo toda la lógica de validación y de tipado son un tercer repositorio compartido entre ambos, eliminando duplicidad y discrepancias (cosas que en el pasado dieron bastante guerra, por lo despistados que somos…)


C# para la línea de comandos. ¡Sí, hay una CLI! La «kantractl», se utiliza principalmente como gestor de instalación y actualización del programa, aunque a futuro prevemos permitir su uso para interactuar con todo el software desde la terminal. Elegí C# por ser un lenguaje bastante disfrutable y por .NET, que me lo pone muy fácil para enchufar un kit como Avalonia para en el futuro darle interfaz gráfica al instalador/actualizador (o incluso portar Kantra de web a nativo para reducir exigencias, quién sabe).

Modelo de distribución

La idea es muy sencilla, tú te descargas el programa kantractl, y este te explica paso a paso que cosas hacer en tu ordenador o red (si tienes que abrir puertos, instalar certificados o lo que sea), para luego encargarse este por sí mismo de instalar dependencias (Bun, básicamente), descargar la última versión de Kantra, generar y exportar certificados HTTPS locales, y arrancar el servidor.


Sobre si debería hacer todo en la máquina directamente o instalar una solución de contenedorización y meter Kantra en un contenedor, es algo que aún debatimos, pero por lo pronto lo hace todo en la máquina directamente.

Funcionalidades

Disponibilidad

Kantra no está disponible todavía.


Lo estamos desarrollando entre dos personas1 como proyecto escolar adicional, se probará inicialmente en nuestro centro y en caso de demostrarse funcional (que debería) se lanzará como producto con disponibilidad general, momento en que actualizaré esta sección.

Capturas de pantalla

Pág de inicio con datos:

Captura 1

Registrar entrada desde recepción:

Captura 2

Auto-registro:

Captura 3

(Cabe aclarar que estas son viejas, hace no demasiado que empezamos a re-diseñar Kantra usando un diseño propio en vez de Microsoft Fluent 2; actualizaré las capturas en cuanto esté terminado)

I haven’t ported this page to English yet. Will do soon! You could switch to Spanish, then use your browser’s built-in translator, if you’re okay with that.

Footnotes

  1. Créditos a mi compañero Mario por aportar gran parte del desarrollo del proyecto. 2