Bygga
Type the product name from the box. Bygga shows every assembly step in 3D, with the parts, screws and tools for each one, and reads it out loud.
Multi-user gear checklist PWA for a Christian trekking retreat, with Google login, cloud sync via Supabase, paid access via Mercado Pago, and an admin dashboard.
LifestyleHTML · PLpgSQLGitHub @andrescultoriOnlineOwner 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 ↗🇧🇷 Português | 🇺🇸 English
Checklist de equipamentos de trilha, salva na nuvem e sempre à mão — sem mais lista de papel se perdendo entre a mochila de ataque e a cargueira.
App web gratuito para os membros do grupo de trekking Legendários organizarem o que levar nas duas mochilas da trilha (ataque e cargueira) e o que ainda falta comprar, com progresso salvo por usuário na nuvem.
Este é o app real usado pelo grupo em produção — o login é feito com conta Google de verdade e os dados ficam no banco real dos Legendários. Não há um modo demo separado; as capturas de tela abaixo mostram a interface funcionando com uma conta real (a minha).
Antes disso, a lista de equipamentos circulava como texto solto ou planilha — cada Legendário mantinha sua própria versão, sem padronização entre o que vai na mochila de ataque (a que fica com você o tempo todo na trilha) e o que vai na cargueira (entregue no check-in, acessada só em pontos pré-determinados). Fácil esquecer item, fácil perder o controle do que já foi separado ou comprado.
Login com Google
↓
Perfil criado no Supabase (nome, nº de Legendário, pista, 1º TOP)
↓
Checklist padrão semeada automaticamente (3 packs, seções, itens e subitens)
↓
Progresso marcado item a item, salvo automaticamente na nuvem
O resultado: cada Legendário abre o app, vê exatamente o que falta separar em cada mochila, e pode ajustar a lista (adicionar, editar, remover itens) sem afetar a lista de mais ninguém.
Além de editar item a item, cada Legendário pode montar a própria checklist do zero e guardá-la como preset — um molde sem marcações que dá pra restaurar quando quiser, ou compartilhar com outro Legendário por um código de 10 caracteres / link.
Quatro tabelas em public, mesmo prefixo lgndcheck_, RLS ligado, sem nenhum privilégio para anon:
| Tabela | O que guarda |
|---|---|
lgndcheck_presets | Snapshot do preset (JSON, sem marcações) + share_code opcional |
lgndcheck_entitlements | Limite de presets por usuário (sem linha = 1) |
lgndcheck_list_backups | Backup automático (com marcações) antes de um restaurar — um por usuário, o mais recente |
lgndcheck_share_rate_limit | Contador de tentativas de uso de código de compartilhamento (10/min) |
Toda escrita nessas tabelas passa pelas RPCs abaixo — não existe policy de insert/update direta pro usuário.
SECURITY DEFINER, só authenticated)| RPC | O que faz |
|---|---|
lgndcheck_salvar_preset_da_lista_atual(nome, id_para_substituir?) | Monta o snapshot a partir da lista atual do próprio usuário (nunca aceita JSON do cliente) e cria ou substitui o preset |
lgndcheck_aplicar_preset(id) | Restaura um preset próprio |
lgndcheck_resetar_para_base(snapshot_base) | Restaura a lista básica padrão |
lgndcheck_desfazer_ultima_substituicao() | Restaura o backup mais recente e o apaga |
lgndcheck_compartilhar_preset(id, ativar) | Gera ou revoga o share_code |
lgndcheck_ver_preset_compartilhado(codigo) | Prévia de um preset compartilhado (nome, dono, contagem por pack, títulos) — nunca o e-mail do dono |
lgndcheck_aplicar_preset_compartilhado(codigo) | Restaura direto um preset de outro usuário |
lgndcheck_salvar_preset_compartilhado(codigo, id_para_substituir?) | Importa uma cópia própria de um preset compartilhado |
Migrations: supabase/migrations/20261016000000_user_presets.sql e supabase/migrations/20261017000000_lgndcheck_presets_restore_e_desfazer.sql.
O plano com mais de 1 preset ainda não tem fluxo de compra na UI, mas o backend já suporta — basta uma linha na tabela de entitlements:
insert into public.lgndcheck_entitlements (user_id, max_presets)
values ('<uuid-do-usuario>', 3)
on conflict (user_id) do update set max_presets = excluded.max_presets;
| Camada | Tecnologia |
|---|---|
| Frontend | HTML, CSS e JavaScript puros — sem framework, sem build |
| Backend / dados | Supabase (Postgres) |
| Autenticação | Supabase Auth com login via Google OAuth |
| Tipografia | Google Fonts (Bitter + Work Sans) |
O app inteiro vive em um único index.html. A escolha foi deliberada: é um projeto pequeno, de escopo bem definido, para um grupo específico — não precisa de bundler, pipeline de build ou dependências além do cliente JS do Supabase via CDN. Isso significa que qualquer navegador abre o arquivo direto, sem etapa de deploy, e a manutenção fica trivial: uma pessoa só, sem stack de frontend, consegue editar o arquivo e publicar.
A segurança dos dados não depende de esconder a anon key do Supabase (ela é feita para ficar no cliente) — depende das políticas de Row Level Security configuradas no banco, que restringem cada usuário a ler e escrever apenas os próprios dados.
Toda a lógica está em index.html:
lgndcheck_profiles, lgndcheck_checklist_items, lgndcheck_pack_meta, mais as 4 tabelas de presets (ver seção acima) — prefixo lgndcheck_ porque o projeto Supabase é compartilhado com outras aplicaçõesTEMPLATE) usado para semear a checklist de um usuário novo no primeiro login, e convertido (templateToSnapshot) pro formato de snapshot usado em "Restaurar lista básica"boot, afterLogin, seedDefaultItems)renderPack, buildSections)loadPresetState, renderPresetSection, openRestoreConfirm, fluxo de compartilhar/importar)Não há build — é servir o arquivo estático:
git clone https://github.com/andrescultori/lgnd-checklist.git
cd lgnd-checklist
python3 -m http.server 8000
# abra http://localhost:8000
Para rodar com dados próprios (em vez do banco real dos Legendários), crie um projeto no Supabase, replique as tabelas lgndcheck_profiles, lgndcheck_checklist_items e lgndcheck_pack_meta, e troque SUPABASE_URL e SUPABASE_ANON_KEY no topo do <script> em index.html.
Este repositório é disponibilizado publicamente para fins de portfólio profissional. Trata-se do sistema real em produção para o grupo Legendários — veja a seção de licença para os termos de uso do código.
Desenvolvido por André Scultori · © 2026 · GitHub