Svelte Commerce
A standalone open-source storefront built with SvelteKit, headless across 26 commerce backends. MIT licensed.
La cartelera de TICKETAZO: qué hay a la venta en Santa Cruz de la Sierra.
Translation pending
CommercePLpgSQL · JavaScriptGitHub @blackyssjOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
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 ↗TICKETAZO es una ticketera multi-tenant con portada pública y landing de autoservicio por evento.
docs/diseno.mddocs/diseno-vistas-internas.mddocs/plan-bloque1-base.mddocs/plan-bloque4a-admin.mdEn producción: https://ticketazo.com.bo
Cómo se trabaja acá: CLAUDE.md — reglas, despliegue y trampas conocidas.
| Carpeta | Qué es |
|---|---|
app/ | La landing pública. HTML/CSS/JS planos, sin build |
supabase/migrations/ | Las 51 migraciones, en orden |
supabase/functions/ | Las 13 Edge Functions |
supabase/seed.sql | El evento de prueba (Amstel Ferial) |
supabase/tests/invariantes.sql | Los 4 guardas estructurales |
supabase/tests/carrera-puerta.py | La carrera de la puerta, con dos sesiones de verdad |
scripts/ | Correr SQL y desplegar funciones con un PAT, sin la CLI |
docs/ | Diseño, plan y el análisis que originó el producto |
Proyecto Supabase: mjotxzcddhqqpuhkcetl (sa-east-1).
La contraseña de la base está en .credenciales, que no se versiona.
anon no tiene ni un permiso. No lee tablas, no escribe y no ejecuta
funciones. Todo lo que hace el público pasa por una Edge Function que corre con
service_role del lado del servidor. La anon key del navegador sola no abre
nada, y por eso puede estar en app/config.js.
python3 -m http.server 4174 --directory app
app/config.js decide contra qué habla: MODO: "supabase" usa la base real,
MODO: "demo" resuelve todo en memoria sin tocar nada.
Corren contra la base migrada y no escriben. Son las trampas de Plataforma Puerta convertidas en algo que grita solo:
Toda tabla lleva organizador_id not null.
Ninguna vista perdió security_invoker=on.
anon no escribe ni ejecuta nada.
Ninguna función tiene dos firmas vivas.
export SUPABASE_PAT=... # o dejalo en ~/.supabase_pat python3 scripts/sql.py supabase/tests/invariantes.sql python3 scripts/sql.py supabase/tests/policies.sql
La carrera de la puerta va aparte y no por sql.py: necesita dos sesiones
en paralelo, y cada llamada a sql.py es una sola. Siembra un organizador
de usar y tirar, lo borra al terminar, y no toca nada de lo que ya está.
python3 supabase/tests/carrera-puerta.py
iniciar-pago y estado-orden leen la variable PASARELA del proyecto:
simulada (actual) — no cobra. El flujo entero funciona igual.v2pro — BeePay real. Necesita V2PRO_LLAVE, V2PRO_USUARIO y V2PRO_PASS
del comercio. Empezar por 1518 (BeePlay Stage).estado-orden nunca le cree al navegador: consulta la pasarela y compara el
monto contra ordenes.total antes de emitir.
python3 scripts/sql.py supabase/tests/reset.sql
Frontend (Vercel, proyecto blackyssjs-projects/ticketera):
cd app && npx vercel@latest deploy --prod
Migraciones y funciones (necesitan SUPABASE_PAT):
python3 scripts/sql.py supabase/migrations/00XX_lo_que_sea.sql
python3 scripts/desplegar-funciones.py # las cuatro
python3 scripts/desplegar-funciones.py evento # una sola
Las Edge Functions desplegadas por API no se bundlean: no pueden llevar
import remotos (jsr: ni https://esm.sh/...) porque dan BOOT_ERROR. Por
eso hablan PostgREST con fetch en vez de usar @supabase/supabase-js.
Solo está la vista pública de compra. Faltan, en este orden:
La base ya las sostiene: perfiles con roles, mi_organizador(), mi_rol() y
las policies de RLS por tenant. Falta la interfaz y configurar el registro de
cuentas, que hoy está cerrado a propósito.
Las cuatro salen de errores ya pagados en Plataforma Puerta, y hay un invariante que hace fallar la migración si se rompen:
organizador_id not null.alter view ... set (security_invoker = on) en la misma
migración: create or replace view borra las reloptions.drop function + create, nunca
create or replace con un parámetro nuevo — quedan dos firmas vivas y
PostgREST responde could not choose a candidate function.anon. Postgres le da execute a
public por defecto y anon lo hereda, así que cada función nueva necesita
su revoke execute ... from anon, public.