Easy-to-manage touch screens
무료 오픈소스 터치스크린으로 USB 설정 가이드, 드래그‑드롭 편집기, 로컬 제어를 제공하며 Home Assistant용으로 제작되었습니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
PWA de gamificação do Move Santana (ministério de jovens da Igreja Verbo da Vida Santana). O jovem tem um pet virtual estilo Tamagotchi/pixel art que cresce por XP, ganho fazendo check-in via QR Code em cultos e eventos. Status: MVP completo (Fase 8/8) — projeto, arquitetura, banco de dados, autenticação, pet/XP/evolução, check-in por QR Code, painel administrativo, inventário/conquistas, compartilhamento e PWA (ícones, offline, telas de erro estilizadas) já funcionando de ponta a ponta. Ver .claude/plans e seção "Roadmap" abaixo para o histórico de fases.README 전문 보기 ↗
Faça check-in. Ganhe XP. Evolua. 🚀
PWA de gamificação para ministérios de jovens — nasceu no Move Santana (Igreja Verbo da Vida Santana) e hoje atende várias igrejas isoladas na mesma instalação. O jovem tem um pet virtual estilo Tamagotchi/pixel art que cresce por XP, ganho fazendo check-in via QR Code em cultos e eventos.
Status: MVP completo (Fase 8/8) — projeto, arquitetura, banco de dados, autenticação, pet/XP/evolução, check-in por QR Code, painel administrativo, inventário/conquistas, compartilhamento e PWA (ícones, offline, telas de erro estilizadas) já funcionando de ponta a ponta. Ver
.claude/planse seção "Roadmap" abaixo para o histórico de fases.
qrcode) e leitura (qr-scanner)npm install
cp .env.example .env
Edite .env se necessário (veja "Variáveis de ambiente" abaixo). Um AUTH_SECRET aleatório já é sugerido no .env gerado localmente — gere o seu com:
npx auth secret
# ou
openssl rand -base64 32
Suba o Postgres local via Docker Compose:
npm run db:up # docker compose up -d db
Rode as migrations e o seed inicial:
npx prisma migrate dev
npx prisma db seed
Para inspecionar o banco visualmente:
npm run prisma:studio
Para derrubar o banco local:
npm run db:down
| Variável | Descrição |
|---|---|
DATABASE_URL | Connection string pooled do Postgres (Docker local por padrão; na Vercel com Prisma Postgres é injetada automaticamente pela integração) |
DIRECT_URL | Connection string direta, usada pelo Prisma CLI para migrations/introspection (localmente pode ser igual a DATABASE_URL; na Vercel com Prisma Postgres também é injetada automaticamente) |
AUTH_SECRET | Segredo usado pelo Auth.js para assinar sessões/JWT |
NEXTAUTH_URL | URL base da aplicação (usada pelo Auth.js) |
NEXT_PUBLIC_APP_URL | URL pública usada para montar os links de check-in dos QR Codes (/checkin/[token]) |
SUPER_ADMIN_EMAIL / SUPER_ADMIN_PASSWORD | Opcionais. Usadas só pelo seed e pelo prisma/create-super-admin.ts para criar o super-admin — não precisam estar na Vercel (o deploy não roda o seed) |
NEXT_PUBLIC_VAPID_PUBLIC_KEY | Chave pública VAPID para Web Push Notifications no PWA |
VAPID_PRIVATE_KEY | Chave privada VAPID para envio de notificações pelo servidor |
VAPID_SUBJECT | E-mail de contato / subject para o protocolo VAPID (ex.: mailto:[email protected]) |
npm run dev
Acesse http://localhost:3000. Verifique a conexão com o banco em http://localhost:3000/api/health — deve retornar {"status":"ok","db":true}.
npm run build
npm run start
O prisma/seed.ts cria:
id: church-move-santana, slug move-santana)[email protected] / movepet123 — troque em produção)SUPER_ADMIN_EMAIL e SUPER_ADMIN_PASSWORD estiverem definidos/checkin/<token>) — os tokens são impressos no console ao rodar npx prisma db seedCada igreja é um tenant isolado (model Church): usuários, eventos, convites e check-ins pertencem a uma igreja, e o admin de uma igreja não enxerga nada das outras. Espécies de pet, itens, conquistas e regras do jogo (ConfigEntry) são globais, compartilhados por todas.
Role): USER (jogador), ADMIN (admin da sua igreja, inclusive com o painel de debug na home) e SUPER_ADMIN (administra a plataforma; não pertence a nenhuma igreja e não tem pet)./invite/[token]) — o usuário entra na igreja dona do convite. O e-mail é único global: uma conta pertence a uma igreja só.churchId; buscas por id em fluxos de admin usam { id, churchId }. QR Code ou código curto de outra igreja responde como "evento não encontrado"./admin/users o admin da igreja promove/rebaixa usuários da própria igreja. Ninguém altera o próprio papel e a igreja nunca fica sem pelo menos um admin ativo.src/server/auth/context.ts (getCurrentUser, requireMember, requireChurchAdmin, requireSuperAdmin) — papel, igreja e status ativo podem mudar depois do login e valem na hora, sem relogar. O src/proxy.ts só verifica se há sessão; nunca redirecione por role no proxy (o role do JWT pode estar desatualizado e gerar loop de redirect com os layouts)./platform)Acesso separado, com login próprio em /platform/login, restrito a SUPER_ADMIN:
Sem rodar o seed completo (útil em produção, onde o seed criaria eventos de exemplo):
SUPER_ADMIN_EMAIL="[email protected]" SUPER_ADMIN_PASSWORD="senha-forte" npx tsx prisma/create-super-admin.ts
Para produção, carregue antes as variáveis de DATABASE_URL/DIRECT_URL de produção no shell (ex.: set -a && . ./.env.production.local && set +a). Rodar de novo com o mesmo e-mail só troca a senha. O script recusa converter uma conta de jogador/admin já existente — use um e-mail que ainda não tenha conta.
No painel /admin (login com um admin da igreja, ex. [email protected]; o evento é criado na igreja dele): /admin/events/new → preencher nome, descrição, data, horário de início/término e XP → salvar → você é redirecionado direto para /admin/events/[id]/qrcode, com o QR Code pronto para imprimir ou baixar (PNG), apontando para NEXT_PUBLIC_APP_URL/checkin/<qrCodeToken>.
Em /admin/events também dá pra editar, ativar/desativar (recomendado ao encerrar um evento) e excluir — exclusão é bloqueada se o evento já tiver check-ins registrados (desative-o nesse caso).
Fuso horário: data/horário do evento são interpretados no fuso horário do servidor (sem offset explícito). Em produção na Vercel (padrão UTC), configure a variável de ambiente
TZ=America/Sao_Paulopara os horários digitados no admin corresponderem ao horário de Brasília na validação do check-in.
Ver .claude/skills/architecture/SKILL.md para as convenções de camadas (UI → server actions → services → repositories → Prisma) e os demais skills em .claude/skills/ para UI/UX mobile, pixel art, gamificação, QR/check-in, banco de dados, PWA e testes.
/login, /register, sessão JWT, proteção de rotas via src/proxy.ts, gate de role para /admin)XPService, PetEvolutionService, ConfigService; pet criado automaticamente no cadastro)/checkin/[token], CheckInService.performCheckIn transacional — valida evento ativo/janela de horário, idempotência via constraint única, aplica XP/streak/energia/felicidade e recalcula evolução)/admin — dashboard com métricas, CRUD de eventos com geração de QR Code/impressão/download, ativar/desativar, exclusão protegida contra eventos com check-ins, listagem de usuários com nível/XP/check-ins)InventoryService, AchievementService — item especial do evento, desbloqueio automático por nível/quantidade de check-ins, avaliação de conquistas, tudo disparado dentro da mesma transação do check-in; /inventory e /achievements com dados reais, equipar/desequipar itens por slot)html-to-image, na tela de resultado do check-in — evolução/conquista/item têm prioridade sobre o check-in simples; usa a Web Share API nativa quando disponível — ótimo pra Instagram/WhatsApp — com fallback de download da imagem)/~offline, páginas 404/erro estilizadas, trustHost corrigido para funcionar em produção fora da Vercel, robots.txt bloqueando indexação — app privado — e ajustes de contraste; auditado com Lighthouse: Accessibility 100, Best Practices 100)churchId, migration add_churches movendo os dados existentes para a Move Santana, promoção de admins por igreja e painel de super-admin em /platform)PushSubscription, disparo automático filtrado por igreja na criação de eventos e toggle de ativação no perfil do usuário)DevotionalJourney, DevotionalDay, DevotionalCheckIn, calendário coletivo, ganho diário de XP e felicidade do pet, trava de dias futuros, leitura retroativa sem XP, anotações pessoais privadas e desbloqueio de cenário exclusivo para o pet)shortCode em Event, CheckInModal) — um usuário gera um código de troca temporário, o outro escaneia ou digita, e o servidor casa os dois e executa a troca dentro de uma transação (prisma.$transaction), igual ao CheckInService.performCheckIn. Não requer WebRTC/P2P nem API nativa nenhuma, funciona igual em iPhone e Android dentro do PWA.DATABASE_URL (pooled) e DIRECT_URL (direta) automaticamente nas env vars do projeto — não precisa configurar essas duas manualmente.AUTH_SECRET (gere um novo, não reuse o do .env local), NEXTAUTH_URL, NEXT_PUBLIC_APP_URL (a URL final do deploy) e TZ=America/Sao_Paulo (ver nota sobre fuso horário acima).vercel CLI ou integração com o repositório Git — o script vercel-build do package.json já roda prisma migrate deploy automaticamente antes do build, então a Vercel detecta e usa esse script sozinha (convenção própria dela, não precisa configurar nada no painel). Novas migrations criadas depois são aplicadas automaticamente a cada deploy.DATABASE_URL=... DIRECT_URL=... npx prisma db seed (localmente, apontando pras env vars de produção) — troque a senha do admin padrão ([email protected] / movepet123) logo em seguida, direto no banco.prisma/create-super-admin.ts (ver "Criando o super-admin") e cadastre as demais igrejas pelo painel /platform.