Currículum completo · escritorio + móvil + backend

Todo lo que necesitas para construir el sistema de tu restaurante

Esta guía cubre, de principio a fin, los conceptos, las librerías y el código para desarrollar una aplicación de restaurante con tres piezas: una app de escritorio en React + Tauri, una app móvil en Flutter y un backend en Spring Boot o Go (Gin). Léela en orden o salta directo a la funcionalidad que te interese.

LA COMANDA GUÍA DE DESARROLLO · v1.0 MESA: DEV  ·  COMENSALES: 1 01 FUNDAMENTOS WEB~50 min 02 JWT Y SEGURIDAD~40 min 03 BACKEND RESTAURANTE~50 min 04 REACT + TAURI~70 min 05 FLUTTER MOVIL~70 min 06 REACT AVANZADO~45 min TOTAL~5.5 hrs *** GRACIAS POR SU VISITA ***

0.1 Qué vamos a construir

El sistema es híbrido: red local + nube. La app central (React + Tauri) y los meseros trabajan contra un backend local — rápido y sin depender de internet — mientras que un backend en la nube atiende a los repartidores por WebSocket, reenvía sus ubicaciones al local y guarda una copia de seguridad de todos los datos:

RED LOCAL DEL RESTAURANTE INTERNET App central React + Tauri caja · mapa · KDS · admin Backend local Spring ó Gin · REST · WS GraphQL opcional (3.7) cola de impresión BD local PostgreSQL Móvil meseros Flutter · misma red WiFi Impresoras térmicas y pantalla de cocina Backend en la nube WS de repartidores relay + respaldo BD respaldo copia diaria Móvil repartidor Flutter · 4G, fuera del local REST·WS SQL ESC/POS túnel WS saliente datos ⇅ WS UBICACION copia
Arquitectura híbrida: el día a día vive en la red local; la nube existe para los repartidores y el respaldo.

La regla de oro se mantiene: las aplicaciones nunca se hablan directamente entre sí; cada una habla con su backend. Cuando el mesero toma un pedido no se conecta a la app central ni a la impresora: se lo manda al backend local, que lo guarda, lo difunde a cocina por WebSocket y lo imprime. Las claves del lado híbrido:

0.2 Mapa de funcionalidades

Cada funcionalidad que pediste está cubierta en un capítulo concreto. Esta tabla es tu índice rápido:

FuncionalidadAppDónde se explica
Mapa con usuarios (repartidores) en tiempo realEscritorioCap. 4.2
Imprimir tickets en impresora térmicaEscritorioCap. 4.3
Recibir información de un teléfono en la misma redEscritorioCap. 4.4
Graficar datos (ventas, platillos, horas pico)EscritorioCap. 4.5
Distribuir la app móvil (APK) por red localEscritorioCap. 4.6
Ruta más rápida con múltiples puntos de entregaMóvilCap. 5.2
Enviar ubicación al servidor por WebSocketMóvilCap. 5.3
Detectar llamada entrante y enviarla al escritorioMóvilCap. 5.4
Tomar pedidos como mesero → cocina (pantalla o impresora)MóvilCap. 5.5
Pedir ticket impreso (desde ambas apps)AmbasCap. 4.7 y 5.6
API REST, verbos HTTP, endpoints, headers y bodiesBackendCap. 1.3–1.5
DTO ↔ JSON ↔ request bodyBackendCap. 1.6
WebSocket: qué es y cuándo usarloBackendCap. 1.7
Arquitectura híbrida: backend local + nube, túnel y respaldoBackendCap. 3.7
JWT, autenticación y autorizaciónBackendCap. 2
Rendimiento y buenas prácticas de ReactEscritorioCap. 6
Arquitecturas de frontendEscritorioCap. 6.4

0.3 Los capítulos

0.4 Cómo leer esta guía

Los ejemplos usan un dominio consistente en toda la guía: Pedido, ItemPedido, Mesa, Repartidor y Ticket. Cuando veas POST /api/pedidos en el capítulo 1, es el mismo endpoint que el mesero de Flutter llama en el capítulo 5 y que la cocina recibe por WebSocket en el capítulo 4. Toda la guía construye una sola aplicación.

0.5 El stack completo de un vistazo

PiezaTecnologíaLibrerías clave
EscritorioReact 18 + TypeScript + Tauri 2react-leaflet, recharts, zustand, @tanstack/react-query, qrcode.react
MóvilFlutter 3 (Dart)flutter_map, geolocator, web_socket_channel, phone_state, dio, esc_pos_utils_plus
Backend (opción A)Java 21 + Spring Boot 3Spring Web, Spring Security, jjwt, WebSocket/STOMP, Spring Data JPA
Backend (opción B)Go 1.22 + Gingin-gonic/gin, gorilla/websocket, golang-jwt/jwt, pgx
Backend en la nubeel mismo stack, desplegado en un VPSWS de repartidores, relay al local y respaldo (cap. 3.7)
Base de datosPostgreSQL
ImpresiónESC/POS sobre TCP (puerto 9100), USB o Bluetoothbytes crudos, escpos-coffee (Java), esc_pos_printer (Flutter)
Mapas y rutasOpenStreetMap + OSRM (o Google Maps)tiles OSM, API /trip de OSRM para optimizar paradas