Fields & Floors Collectors
Search every numbered sports card on eBay by print run, autograph, rookie status and price, then save searches and get an email when a new card lists.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证APP para autogestion en restaurantes
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
CAPY — Sistema de Pedidos para Restaurante/Club (MVP) Sistema web para que clientes vean la carta, hagan su pedido sin necesidad de crear cuenta, indiquen su ubicación (mesa o sector general) y paguen desde el celular. El staff (camareros y cajero/admin) ve los pedidos en un tablero en tiempo real, cambia su estado y tiene un historial completo de operaciones. No reemplaza ni se integra con el sistema de gestión del restaurante. Es un sistema independiente para tomar y pagar pedidos.查看完整 README ↗
Sistema web para que clientes vean la carta, hagan su pedido sin necesidad de crear cuenta, indiquen su ubicación (mesa o sector general) y paguen desde el celular. El staff (camareros y cajero/admin) ve los pedidos en un tablero en tiempo real, cambia su estado y tiene un historial completo de operaciones.
No reemplaza ni se integra con el sistema de gestión del restaurante. Es un sistema independiente para tomar y pagar pedidos.
Este sistema tiene dos identidades completamente separadas:
Cliente (sin login) — la primera vez que alguien pide algo, se le pide
nombre y WhatsApp (sin contraseña). Ese dato se guarda en su dispositivo
(localStorage) junto con un token secreto, así en visitas siguientes
desde el mismo celular no se le vuelve a preguntar y puede ver sus pedidos
anteriores. El WhatsApp le sirve al mozo/cajero para contactarlo si no lo
encuentra en el sector, o si necesita avisarle algo (ej. un producto que
se agotó). No hay verificación real del número — cualquiera puede escribir
cualquier WhatsApp. Es aceptable para el objetivo operativo de este MVP
(poder contactar a alguien en el lugar), pero no es identidad verificada.
Staff (con login real) — camareros y cajero/admin entran con email y
contraseña por /admin/login, usando autenticación real de Supabase. Hay
dos roles:
camarero: ve el tablero de pedidos, cambia estados, contacta al
cliente por WhatsApp si hace falta. No edita la carta.admin: todo lo de camarero, más gestión de carta/precios/sectores,
confirmación de pagos (comprobantes y cobros en persona), e historial.restaurant-app/
├── src/
│ ├── pages/client/ # Pantallas del cliente (identificación, carta, ubicación, pago, estado)
│ ├── pages/admin/ # Pantallas del staff (tablero, historial, editor de carta)
│ ├── hooks/ # useAuth (staff), useCustomer (cliente), useCart, useOrderPolling
│ ├── lib/ # dos clientes de Supabase (staff y customer), utilidades
│ └── components/ # rutas protegidas
├── supabase/migrations/ # Esquema SQL completo + datos de ejemplo
└── .env.example
supabase/migrations/0001_init.sql (tablas, seguridad, triggers)supabase/migrations/0002_seed.sql (datos de ejemplo: 1 local, zonas, productos)supabase/migrations/0003_payment_proof.sql (soporte para comprobante de transferencia)supabase/migrations/0004_customer_identity.sql (clientes sin login + roles de staff admin/camarero)insert into profiles (id, full_name, role) values ('EL-UUID-DEL-USUARIO', 'Tu nombre', 'admin');
role = 'camarero'. No hay pantalla en la app para esto — es
intencional, para que nadie pueda otorgarse acceso de staff por su
cuenta.El cliente elige su ubicación de una lista agrupada en dos partes: Mesas
(sector restaurante/bar) y Sectores generales (tribuna, juegos, cancha
de pádel, etc — cualquier zona del club donde alguien pueda pedir sin tener
una mesa asignada). Ambos se cargan en la tabla venue_zones, diferenciados
por la columna type (mesa o zona). El seed (0002_seed.sql) ya trae
un ejemplo de cada uno; para agregar más:
insert into venue_zones (venue_id, name, type, sort_order) values
('00000000-0000-0000-0000-000000000001', 'Mesa 5', 'mesa', 9),
('00000000-0000-0000-0000-000000000001', 'Pileta', 'zona', 10);
No hay pasarela de pago online conectada todavía. El cliente elige una forma de pago al confirmar su pedido:
VITE_TRANSFER_ALIAS, esta
opción aparece. El cliente ve el alias, transfiere desde su billetera
virtual, y sube una foto del comprobante desde la app. El pedido queda
en estado "pendiente de pago" con el comprobante visible para el cajero
en el panel admin, quien lo confirma o rechaza con un botón.Si no definís VITE_TRANSFER_ALIAS, solo aparecen las opciones de efectivo
y tarjeta.
Copiar .env.example a .env y completar:
VITE_SUPABASE_URL=...
VITE_SUPABASE_ANON_KEY=...
VITE_VENUE_ID=00000000-0000-0000-0000-000000000001
VITE_TRANSFER_ALIAS=mirestaurante.mp (opcional, ver sección de pagos)
Todas estas son públicas (van al frontend) — no hay variables privadas en esta versión, porque no hay backend propio ni pasarela de pago conectada.
npm install
npm run dev
https://tu-app.vercel.app → la primera vez, ingresa nombre y WhatsApp →
ver carta → agregar items → elegir ubicación (mesa o sector general, de
una lista) → elegir forma de pago → confirmar → ver estado del pedido. En
visitas siguientes desde el mismo celular, entra directo a la carta.
https://tu-app.vercel.app/admin/login → ingresar con cuenta de rol
admin o camarero → ver comprobantes y cobros pendientes arriba del
tablero (con WhatsApp del cliente para contactarlo) → ver tablero de
pedidos → marcar siguiente estado → ver historial completo en "Historial"
→ editar la carta en "Editar carta" (solo admin).
Por seguridad, un cliente sin login no puede ver los pedidos de otro: cada dispositivo genera un token secreto (no solo un id), y las políticas de seguridad de la base de datos (RLS) exigen ese token para leer o crear pedidos — no hay tabla abierta a cualquiera con la clave pública del proyecto.
Una limitación de esto: las suscripciones en tiempo real de Supabase (Realtime/WebSocket) no propagan ese token por una limitación conocida de la plataforma. Por eso la pantalla de seguimiento del pedido del cliente usa actualización periódica (cada 6 segundos) en lugar de tiempo real instantáneo. El panel del staff sí usa tiempo real real, porque ahí la sesión es de Supabase Auth normal.
camarero: ve y gestiona todos los pedidos del local, contacta clientes.admin: igual que camarero, más gestión de carta y precios.venue). El esquema ya soporta multi-local, falta la UI.location_type = punto_mapa, columnas map_x/map_y) pero el
flujo del cliente quedó simplificado a una lista de mesas y sectores.