Bygga
제품명을 박스에 입력하면 Bygga가 3D로 모든 조립 단계와 부품·스크류·도구를 보여주고 음성으로 안내합니다
기독교 트레킹 수련회를 위한 다중 사용자 장비 체크리스트 PWA, 구글 로그인 및 Supabase 클라우드 동기화 지원
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.
라이프스타일HTML · PLpgSQLGitHub @andrescultori온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
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