Initial Ladill Queue release — enterprise QMS standalone app.
Deploy Ladill Queue / deploy (push) Successful in 56s

Phases 1–6: tickets, counters, displays, appointments, workflows, rules, analytics, reports, feedback, admin, device API, and Gitea deploy workflow for queue.ladill.com.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
isaacclad
2026-06-29 20:19:52 +00:00
co-authored by Cursor
commit cca98eefd2
297 changed files with 27263 additions and 0 deletions
@@ -0,0 +1,48 @@
<!DOCTYPE html>
<html lang="en" class="h-full bg-slate-950 text-white">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ $screen->name }} · Queue Display</title>
@vite(['resources/css/app.css', 'resources/js/app.js'])
</head>
<body class="min-h-screen p-8" x-data="displayBoard('{{ $dataUrl }}')" x-init="init()">
<div class="mx-auto max-w-6xl">
<div class="mb-8 flex items-center justify-between">
<h1 class="text-4xl font-bold" x-text="payload?.screen?.name ?? '{{ $screen->name }}'"></h1>
<p class="text-slate-400" x-text="payload?.updated_at ? 'Updated ' + new Date(payload.updated_at).toLocaleTimeString() : ''"></p>
</div>
<div class="mb-10">
<h2 class="mb-4 text-sm font-semibold uppercase tracking-widest text-indigo-300">Now serving</h2>
<div class="grid gap-4 md:grid-cols-2">
<template x-for="item in (payload?.now_serving ?? [])" :key="item.ticket_number + item.counter">
<div class="rounded-2xl bg-indigo-600 p-8 text-center shadow-lg">
<p class="text-5xl font-bold" x-text="item.ticket_number"></p>
<p class="mt-2 text-xl" x-text="item.queue_name"></p>
<p class="mt-4 text-2xl font-semibold" x-text="'→ ' + (item.counter ?? '')"></p>
</div>
</template>
</div>
</div>
<div class="grid gap-6 md:grid-cols-3">
<div class="rounded-2xl border border-slate-700 bg-slate-900 p-6 text-center">
<p class="text-sm uppercase text-slate-400">Waiting</p>
<p class="mt-2 text-5xl font-bold" x-text="payload?.waiting_count ?? '—'"></p>
</div>
<div class="rounded-2xl border border-slate-700 bg-slate-900 p-6 text-center">
<p class="text-sm uppercase text-slate-400">Est. wait</p>
<p class="mt-2 text-5xl font-bold" x-text="payload?.estimated_wait_minutes ? payload.estimated_wait_minutes + ' min' : '—'"></p>
</div>
<div class="rounded-2xl border border-slate-700 bg-slate-900 p-6">
<p class="mb-3 text-sm uppercase text-slate-400">Queues</p>
<template x-for="q in (payload?.queues ?? [])" :key="q.name">
<p class="text-lg" x-text="q.name + (q.is_paused ? ' (paused)' : '')"></p>
</template>
</div>
</div>
</div>
</body>
</html>