Fields & Floors Collectors
eBay에서 번호가 매겨진 스포츠 카드들을 인쇄본·사인·신인 여부·가격으로 검색하고, 검색을 저장해 새 카드가 등록되면 이메일 알림을 받는다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.