FloCafe
FloCafe is the free, local-first restaurant POS in the FloPOS ecosystem. Run orders, tables, kitchen display, and local data without a software subscription.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Motor de reservas para tours en el Caribe y renta de inmuebles. Dos inventarios que se compran igual y se operan distinto, con un solo checkout: se cobra un anticipo en línea y el saldo se paga en destino.
Estado: el producto está completo y verificado de extremo a extremo (Sprints 0 a 7): se reserva, se cobra el anticipo, se opera el día a día, se resuelven cancelaciones y cambios de fecha, se publica catálogo desde el panel, y los avisos salen por correo y WhatsApp con monitoreo.
Lo que impide vender no es código, son tres cuentas del cliente: Stripe,
el dominio de correo autenticado y el número de WhatsApp con sus plantillas
aprobadas por Meta. La lista del día del despliegue está en
docs/puesta-en-produccion.md.
CLAUDE.md —
cómo levantarlo, qué no se negocia y las trampas que ya costaron caro.docs/plan-de-entrega.mddocs/arquitectura.md ·
dónde vive el sistemadocs/esquema.mddocs/puesta-en-produccion.md · docs/operacion.md (qué hacer cuando algo falla) · docs/manual-del-panel.md (para el equipo del cliente)sprint-01.md · sprint-02.md · sprint-03.md · sprint-04.md · sprint-05.md · sprint-06.md · sprint-07.mdSe necesita PostgreSQL 16 o superior, Node 22 y psql en el PATH.
cp .env.example .env # y apuntar DATABASE_URL a tu base
npm install
npm run db:migrate # aplica las migraciones pendientes
npm run db:seed # datos de desarrollo
npm run dev # el sitio en http://localhost:3000
Verificación, que es lo mismo que corre el pipeline:
npm run db:test # garantías del inventario (en transacción, sin dejar rastro)
npm run test:integration # capa de acceso: traducción de errores del dominio
npm run typecheck
npm run lint
NEXT_PUBLIC_SITE_URL=http://127.0.0.1:3100 npm run build
npx next start -p 3100 &
BASE_URL=http://127.0.0.1:3100 ./scripts/smoke.sh # criterios sobre el sitio construido
BASE_URL=http://127.0.0.1:3100 npm run test:e2e # el checkout, en navegador real
BASE_URL=http://127.0.0.1:3100 npm run test:e2e:admin # un día de operación en el panel
BASE_URL=http://127.0.0.1:3100 npm run test:e2e:sme # el día que cierran el puerto
BASE_URL=http://127.0.0.1:3100 npm run test:e2e:publicar # publicar un tour sin ayuda
BASE_URL=http://127.0.0.1:3100 npm run audit # accesibilidad (axe) y peso de las páginas
npm run db:bench # prueba de carga: sobreventa bajo concurrencia
NEXT_PUBLIC_SITE_URL se fija al construir, no al arrancar: Next reemplaza
esas variables durante la compilación. La pasarela recibe una URL de retorno
absoluta, así que si no coincide con el puerto donde se sirve, el navegador
vuelve de pagar a un servidor que no existe.
npm run db:reset recrea todo desde cero. Se niega a correr contra una URL que
no sea local.
db/
migrations/ SQL escrito a mano, en orden. Fuente de verdad del esquema.
seed/ datos de desarrollo
tests/ pruebas de las garantías y de concurrencia
src/
app/[locale]/ rutas públicas; el prefijo de idioma es parte de la URL
app/admin/ panel de operación; sin prefijo de idioma y sin indexar
app/media/ entrega de las fotos subidas (no van en public/, ver abajo)
components/ componentes de la vitrina
db/ cliente, tipos propios y esquema generado por introspección
i18n/ idiomas, segmentos traducidos y etiquetas de interfaz
modules/ módulos de dominio (frontera explícita entre ellos)
scripts/ ciclo de vida de la base, verificación y generación
docs/ arquitectura, esquema, plan de entrega y decisiones
/es, /en), con el segmento de
colección traducido (/es/estancias/… ↔ /en/stays/…). Si las dos versiones
compartieran dirección, solo una posicionaría en buscadores — y el tráfico
orgánico en inglés es justo el que evita pagar comisión a un intermediario.canonical y hreflang se emiten absolutos: los buscadores ignoran
hreflang relativo. Verificado en scripts/smoke.sh, no supuesto.Las garantías del negocio están declaradas en la base, no verificadas en la aplicación, y eso necesita SQL que ningún generador expresa: restricciones de exclusión sobre rangos de fechas, bloqueos de fila, funciones transaccionales.
El flujo es al revés de lo habitual: el SQL manda y los tipos se generan.
npm run db:pull introspecta la base y reescribe src/db/generated/, así el
código no puede desviarse del esquema real. scripts/patch-generated.mjs
corrige después las dos cosas que drizzle-kit no sabe leer (daterange y los
DEFAULT que llaman funciones de Postgres); es idempotente y avisa si algún
día deja de haber algo que parchar.
This is the beginning of the README. Read the rest at the original. Read the full README ↗