Plataforma web para centralizar eventos, atividades e inscrições dos grupos de extensão PATOS.
O DC Hub oferece um calendário interativo, inscrições (RSVP), validação de presença por QR Code e emissão de certificados para quem participou das atividades.
- Calendário com visualizações de mês, semana e dia
- Filtro por grupo e busca de atividades
- Link compartilhável por atividade (
/?atividade=ID) - Exportação para Google Calendar e arquivo .ics
- Cadastro e login
- Inscrição (RSVP) em atividades com controle de vagas
- Painel Minhas Inscrições
- QR Code pessoal de presença (apresentado no check-in)
- Resgate de código de presença (quando o organizador gera)
- Certificados em PDF (após presença confirmada e nome completo no perfil)
- Solicitação de perfil Projeto de Extensão
- Criar e editar eventos e atividades do próprio grupo (grupo vinculado automaticamente)
- Atividades avulsas ou vinculadas a um evento
- Certificado opcional, vagas limitadas ou ilimitadas
- Painel Gerenciar Atividades: listar, editar, ver inscritos, check-in
- Check-in: escanear QR dos participantes ou marcar presença manualmente
- Também pode se inscrever em atividades como qualquer usuário
- Tudo que o
projfaz, em qualquer grupo - Painel admin: usuários, grupos, locais, solicitações de perfil
- Gestão global do sistema
| Camada | Tecnologia |
|---|---|
| Backend | PHP 8+ (MVC próprio) |
| Frontend | HTML, CSS, JavaScript (vanilla) |
| UI | Bootstrap 5 |
| Banco | SQLite (dev) ou MySQL/MariaDB (prod) |
| Geração de certificados em PHP |
DC-Hub/
├── app/
│ ├── Controllers/ # Rotas da API (?action=...)
│ ├── Core/ # Database, Session, CSRF, migrações
│ ├── Models/
│ └── Views/ # Layout, modais, partials
├── database/
│ ├── schema.sqlite.sql
│ ├── schema.sql # MySQL
│ └── seeds.sqlite.sql
├── public/ # Document root (servidor web)
│ ├── index.php # Front controller
│ ├── js/
│ └── css/
├── cron/ # Lembretes por e-mail
├── scripts/ # Utilitários (init-db)
└── .env.example
- PHP 8.1+ com extensões:
pdo,pdo_sqlite(e/oupdo_mysql),mbstring,json - Composer não é obrigatório para rodar o app (MVC sem dependências externas no core)
- Servidor web com
public/como raiz ou PHP built-in server
git clone <url-do-repositorio>
cd DC-Hub
cp .env.example .envEdite .env se necessário. O padrão usa SQLite em database/dc_hub.sqlite.
Defina APP_URL com a URL pública do site em produção (ex.: https://dchub.seudominio.br) para que os links de compartilhamento de atividades não usem localhost.
Configure também SMTP_* e APP_TIMEZONE (padrão America/Sao_Paulo) para recuperação de senha e lembretes por e-mail. Ver docs/DEPLOY.md.
O SQLite é criado automaticamente na primeira requisição. Para forçar criação e seeds:
php scripts/init-db.phpcd public
php -S localhost:8080Acesse: http://localhost:8080
Em ambiente de desenvolvimento, após php scripts/init-db.php, um usuário admin é criado com senha aleatória exibida apenas no terminal (não há credencial padrão no repositório). Em produção, defina APP_ENV=production e APP_URL no .env.
Todas as ações JSON usam o parâmetro action em public/index.php, por exemplo:
?action=calendar.data&month=05&year=2026?action=activity.detail&id=1?action=registration.toggle(POST)?action=auth.requestPasswordReset(POST) — solicitar link de recuperação de senha?action=auth.resetPassword(POST) — definir nova senha com token do e-mail
A página principal é servida sem action (SPA leve com modais em JavaScript).
No login, use Esqueci minha senha. O link do e-mail abre /?reset=TOKEN e permite definir uma nova senha (válido por 60 minutos).
| Perfil | Descrição resumida |
|---|---|
user |
Ver calendário, RSVP, certificados, QR de presença |
proj |
Gerenciar eventos/atividades do seu grupo |
adm |
Gestão global (usuários, grupos, locais, tudo) |
- CI: em cada PR para
main, sintaxe PHP (.github/workflows/ci.yml) - Segurança: Gitleaks (secrets) + Semgrep PHP/OWASP (
.github/workflows/security.yml) - Segurança IA: ChatGPT avalia o diff do PR — nota mínima 7/10 (secret
OPENAI_API_KEY; verdocs/AI-SECURITY-REVIEW.md) - Deploy: após merge na
main, deploy automático via SSH/rsync (.github/workflows/deploy.yml) - Main protegida: use PRs; configure com
docs/DEPLOY.mdouscripts/github/setup-branch-protection.sh - Backup: cron diário no servidor mantém ~31 dias de cópias do SQLite (
scripts/deploy/backup-sqlite.sh)
-
Fork o repositório e crie um branch a partir de
main:git checkout -b feat/minha-feature
-
Configure o ambiente local (seção acima) e valide que o calendário e o login funcionam.
-
Siga as convenções do projeto:
- PHP:
declare(strict_types=1);, PSR-4 emapp/ - JS: módulos em IIFE com export em
window.*quando precisar de acesso global - Commits em português ou inglês, mensagens claras (ex.:
feat:,fix:,docs:) - Não commitar
.env,database/*.sqlitenem credenciais
- PHP:
-
Testes automatizados — rode
composer installecomposer test. Em PRs o CI executa PHPUnit e bloqueia se a cobertura cair mais de 2 p.p. abaixo da baseline damain(.github/coverage-baseline.txt). Ao mergear namain, a baseline sobe automaticamente quando a cobertura melhora. -
Teste manualmente os fluxos que alterou (calendário, RSVP, check-in, admin).
-
Abra um Pull Request descrevendo o que mudou e como testar.
- Melhorias de acessibilidade e mobile
- Testes E2E (Playwright)
- Notificações e lembretes (
cron/send_reminders.php) - Internacionalização (i18n)
- Documentação de API OpenAPI
requisitos.md— requisitos funcionais do MVPguiaVisual.md— guia visual / identidadedocs/DEPLOY.md— CI/CD, Apache, secrets, backup SQLitedocs/AI-SECURITY-REVIEW.md— avaliador de segurança com OpenAI
Desenvolvido por PATOS — patos.dev.