Lema: Menos ecrã, mais vida. Contexto: trabalho escolar em Moçambique. Data de implementação: 1 de Novembro de 2026.
O celular é útil para estudar e comunicar, mas os hábitos de utilização podem ocupar momentos de concentração, descanso e convívio. O projecto procura ajudar adolescentes a observar esses hábitos, escolher metas pessoais e experimentar actividades presenciais. Não estabelece um número universal de horas adequado para todas as pessoas.
Objectivos: disponibilizar informação curta; permitir reflexão sem classificação clínica; distinguir estudo e lazer nos registos; apoiar metas ajustáveis e actividades fora do ecrã; apresentar uma pesquisa escolar de forma transparente; incentivar visitas curtas, sem recompensas por uso constante.
Foram fornecidos resultados agregados de um inquérito com 35 participantes. Não foi localizado um PDF correspondente nem a entrevista à psicóloga nos ficheiros disponíveis. A conferência com os anexos, a caracterização da amostra, o método de selecção, a data e as perguntas integrais permanecem pendentes. Não há evidência de representatividade de todos os adolescentes, nem de causalidade entre o uso do celular e problemas pessoais.
| Tempo diário declarado | Participantes | Percentagem calculada |
|---|---|---|
| Menos de 2 horas | 1 | 2,9% |
| 2–4 horas | 5 | 14,3% |
| 4–6 horas | 8 | 22,9% |
| 6–8 horas | 8 | 22,9% |
| Mais de 8 horas | 13 | 37,1% |
A soma é 35; percentagens arredondadas podem somar 100,1%. Outros resultados fornecidos: 29 participantes (82,9%) já deixaram de dormir para permanecer no celular, pelo menos ocasionalmente; 33 (94,3%) verificam o aparelho sem notificações, pelo menos algumas vezes; 21 (60%) pegam no celular logo depois de acordar. São contagens agregadas, não diagnósticos.
A entrevista terá uma secção própria, distinta do inquérito, quando o documento for consultado. Não foi escrito um resumo fictício, não foram inventadas citações e não se afirma aprovação profissional do site.
| Solução | Contributo e diferença |
|---|---|
| Bem-estar digital do Android | A documentação oficial confirma consulta do tempo de apps e temporizadores em aparelhos compatíveis. O nosso site exige registo manual e acrescenta metas e desafios presenciais. |
| Tempo de ecrã da Apple | Solução do sistema para acompanhar utilização; referência oficial identificada, mas a consulta automatizada da página respondeu HTTP 429. Revisão detalhada da documentação fica pendente; o site não reproduz capacidades do sistema operativo. |
A comparação é documental. Não foram instaladas nem testadas estas aplicações neste trabalho. O site oferece acesso por navegador e dados organizados por conta; não tem acesso automático às outras aplicações do aparelho.
RF01 consultar conteúdos e pesquisa como visitante. RF02 responder a quatro perguntas e obter síntese descritiva local. RF03 registar, iniciar e terminar sessão. RF04 criar/ler/editar/eliminar metas e marcar/desfazer conclusão. RF05 criar/consultar/corrigir/eliminar registos por dia, separando estudo de lazer. RF06 concluir desafios e desfazer, sem duplicar o mesmo desafio no mesmo dia. RF07 apresentar os últimos sete dias, média dos dias registados, histórico, metas e actividades. RF08 administrar conteúdos e desafios com autorização no servidor. RF09 eliminar a conta e os dados associados mediante palavra-passe.
RNF01 compatibilidade com Pages Functions/D1 sem servidor Node permanente. RNF02 interface responsiva e leve, sem fontes ou scripts externos. RNF03 navegação por teclado, etiquetas, foco visível, valores textuais dos gráficos e mensagens de estado. RNF04 isolamento de dados, hashes de senhas e sessões protegidas. RNF05 consultas SQL parametrizadas e validação no servidor. RNF06 minimização de dados e ausência de publicidade/rankings. RNF07 erros e estados vazios explícitos. RNF08 não inventar resultados nem simular controlo do aparelho.
| Perfil | Permissões | Necessidades |
|---|---|---|
| Visitante | Ler pesquisa, conteúdos e desafios; questionário sem gravação | Entender propósito e resultados sem conta |
| Aluno | As anteriores; gerir apenas as próprias metas, registos, conclusões, sessão e conta | Privacidade, correcção simples e continuidade |
| Administrador | As anteriores; CRUD de conteúdos e desafios | Manter informação e actividades; sem painel de registos individuais |
| Titular da infra-estrutura | Gestão autenticada Cloudflare e promoção/revogação de administrador por D1 | Manter segurança e funcionamento |
O registo sempre cria student. Não há endpoint de promoção de perfis. A autorização é consultada em D1 em cada pedido. Esconder o painel não é o controlo de acesso.
| Caso | Actor e pré-condição | Fluxo principal | Excepções |
|---|---|---|---|
| Conhecer hábitos | Visitante/aluno | Responder → síntese → escolher meta | Pergunta por preencher impede envio; respostas não persistem |
| Entrar | Conta existente | Nome e senha → validação → cookie de sessão | Credenciais inválidas ou excesso de tentativas |
| Criar conta | Visitante | Nome fictício e senha → student → sessão | Nome repetido, campos inválidos, tentativa de role recusada |
| Gerir meta | Aluno autenticado | Criar/editar/concluir/desfazer/eliminar | Outro proprietário recebe 404; tempo inválido recebe 400 |
| Registar dia | Aluno autenticado | Consultar aparelho → separar minutos → guardar | Data impossível/futura ou total >1440 rejeitado; mesma data actualiza |
| Concluir desafio | Aluno autenticado | Fazer actividade → concluir hoje → desfazer se necessário | Dupla conclusão não duplica dados |
| Administrar | Admin provisionado por titular | Criar/editar/eliminar publicação | Aluno recebe 403; visitante 401 |
| Eliminar conta | Conta autenticada | Ler efeito → marcar confirmação → senha → eliminação | Senha errada rejeitada; sessões e dados associados são removidos |
flowchart LR
N[Navegador HTML CSS JS] -->|HTTPS /api| F[Cloudflare Pages Functions]
N --> S[Cloudflare Pages ficheiros estáticos]
F --> A[Validação, sessão e autorização]
A -->|SQL parametrizado, binding DB| D[(Cloudflare D1)]
flowchart TD
I[Início] --> H[Conhecer hábitos sem guardar respostas]
H --> P[Escolher plano]
P --> L{Sessão válida?}
L -->|Não| C[Criar conta ou entrar]
C --> L
L -->|Sim| M[Guardar meta pessoal]
M --> O[Fechar site e realizar actividade]
O --> R[Voltar quando for útil]
R --> G[Registar tempo manual ou concluir desafio]
G --> V[Consultar progresso e ajustar meta]
V --> O
flowchart LR
Visitante --> Consultar[Consultar conteúdos e pesquisa]
Visitante --> Questionario[Conhecer hábitos]
Aluno --> Consultar
Aluno --> Questionario
Aluno --> Metas[Gerir próprias metas]
Aluno --> Registos[Gerir próprios registos]
Aluno --> Desafios[Concluir e desfazer desafios]
Aluno --> Conta[Terminar sessão e eliminar conta]
Administrador --> Publicar[Gerir conteúdos e desafios]
TitularCloudflare --> Perfis[Provisionar administrador fora da API]
O diagrama anterior representa os actores e casos de uso em notação Mermaid simplificada, sem pretender ser um diagrama UML formal.
erDiagram
USERS ||--o{ SESSIONS : possui
USERS ||--o{ GOALS : define
USERS ||--o{ LOGS : regista
USERS ||--o{ COMPLETIONS : realiza
CHALLENGES ||--o{ COMPLETIONS : recebe
USERS {
text id PK
text username UK
text password_hash
text salt
text role
text created_at
}
SESSIONS {
text token_hash PK
text user_id FK
integer expires
}
GOALS {
text id PK
text user_id FK
text title
text category
integer target
integer completed
}
LOGS {
text id PK
text user_id FK
text day
integer study
integer leisure
}
CHALLENGES {
text id PK
text title
text description
integer duration
}
COMPLETIONS {
text user_id PK,FK
text challenge_id PK,FK
text day PK
}
CONTENTS {
text id PK
text title
text body
}
ATTEMPTS {
text key PK
integer count
integer expires
}
Início → hábitos, plano, desafios, progresso, pesquisa e informação útil. Cabeçalho → entrar/criar conta ou a minha conta. Rodapé → privacidade e documentação. Conta de administrador → administração. As rotas usam fragmentos (#plano, #progresso), permitindo alojamento estático sem router externo. A API usa /api/ e nunca recebe palavras-passe em URLs.
| Tecnologia | Finalidade |
|---|---|
| HTML5 | Estrutura semântica, formulários, progress e tabelas |
| CSS | Identidade verde/azul, layout adaptativo, foco e contraste |
| JavaScript | Navegação, validação no navegador, API e síntese do questionário |
| Pages Functions / Web Crypto | API, autenticação, PBKDF2, sessões e autorização |
| Cloudflare D1 / SQLite | Persistência, relações, índices únicos e cascatas |
| Wrangler | Desenvolvimento local, migrações, bindings e publicação |
| Node.js | Ferramentas de build e testes, sem processo permanente em produção |
| Playwright | Verificação automatizada da interface em navegador |
| Mermaid | Diagramas em texto versionável |
| Tabela | Campos e regras |
|---|---|
| users | id UUID PK; username único; password_hash e salt; role student/admin com default student e CHECK; created_at |
| sessions | token_hash PK; user_id FK; expires em milissegundos; eliminação em cascata |
| goals | id PK; user_id FK; title; category estudo/lazer/fora; target 1–1440 min; completed 0/1 |
| logs | id PK; user_id FK; day ISO; study/leisure inteiros 0–1440; soma ≤1440; único por aluno/data |
| challenges | id PK; title; description; duration 1–1440 min |
| completions | PK composta user_id/challenge_id/day; duas FKs com cascata |
| contents | id PK; title; body em texto simples, escapado ao apresentar |
| attempts | key hash de IP e operação; count; expires; guarda de abuso temporária |
Metas, registos, sessões e conclusões referenciam users. Conclusões referenciam challenges. Não guardamos respostas individuais da pesquisa nem do questionário de hábitos. As tabelas D1 internas de migrações são mantidas pelo Wrangler.
| Recurso | Criar | Consultar | Actualizar | Eliminar |
|---|---|---|---|---|
| Conta/sessão | POST /api/auth/register, /login | GET /auth/me | Perfil apenas por titular D1 | POST /auth/logout; DELETE /account com senha |
| Metas | POST /goals | GET /data só próprio aluno | PUT /goals/:id com user_id da sessão | DELETE /goals/:id com mesmo proprietário |
| Registos | POST /logs, upsert aluno/data | GET /data | PUT /logs/:id | DELETE /logs/:id |
| Conclusões | POST /completions/:id | GET /data | Desfazer e registar de novo | DELETE /completions/:id com data |
| Conteúdos/desafios | POST /admin/contents ou challenges | GET /public | PUT /admin/:tipo/:id | DELETE /admin/:tipo/:id |
Todas as rotas da tabela têm prefixo /api. O servidor ignora proprietários enviados pelo cliente: usa o id da sessão. DELETE de conta desencadeia cascatas na base activa. O histórico de conclusões de um desafio é removido se o administrador eliminar esse desafio; a interface avisa esse efeito.
Implementado no código: páginas, síntese local, contas de aluno, sessões, metas CRUD e estado de conclusão, registo diário manual, evolução dos últimos sete dias, desafios com desfazer, conteúdos e desafios administráveis, pesquisa agregada, privacidade, eliminação de conta, validação e permissões no servidor. A disponibilidade real e a validação pública dependem do relatório de publicação e testes, não apenas desta lista.
Planeado para depois: conferir PDF e entrevista originais; inserir resumo fiel do parecer; identificar responsável/contacto escolar; conduzir experiência de uma semana; recolher sugestões de acessibilidade com utilizadores reais; avaliar eventual recuperação segura de conta. Nenhuma destas actividades é apresentada como concluída.
Consultar testes.md para tabela com funcionalidade, resultado esperado, obtido e estado. Ficheiros JSON guardam data, ambiente, URL e verificações executadas. Testes locais e de produção são distinguidos. Não há testes com adolescentes nem prova de redução de tempo de ecrã.
O site não mede automaticamente o uso de outras apps e não bloqueia serviços. Os dados manuais dependem da consulta do aparelho e da estimativa estudo/lazer. Uma semana incompleta não é apresentada como uma semana inteira: a média inclui só dias com registo; ausência de dado não é zero. A data de referência da API e da interface é UTC, podendo haver diferença perto da meia-noite local em Moçambique. A conclusão de uma meta é um estado actual; não é histórico diário de cumprimento. Desafios podem ser repetidos uma vez por dia. Não há ranking, sequência obrigatória ou notificações.
Não existe recuperação de senha. A autenticação própria exige manutenção contínua e revisão antes de uma adopção institucional ampla. A aplicação limita tentativas e tamanho de campos, mas não afirma resistência a todos os ataques. Backups técnicos do fornecedor podem persistir depois da eliminação activa. Os serviços gratuitos têm limites de recursos; não se activou plano pago.
Proposta futura de experiência de uma semana: convidar colegas voluntários, com os procedimentos e consentimentos definidos pela escola; explicar finalidade, privacidade e direito a desistir; pedir que escolham uma meta e registem manualmente apenas quando útil; ao fim de sete dias recolher, sem nomes, facilidade de uso, obstáculos e sugestões. Não exigir divulgação das contas nem do tempo pessoal. Comparar percepções e completude dos registos, evitando atribuir mudanças ao site sem desenho de investigação adequado. Não houve ainda participantes, resultados ou conclusão dessa experiência.
Foi desenvolvido um instrumento educativo para reflexão e organização pessoal, com separação entre dados públicos agregados e registos privados. A avaliação de eficácia permanece futura. A conclusão da publicação e dos testes deve ser lida no relatório de evidências; implementação não equivale a eficácia clínica.
Referências consultadas em 1 de Novembro de 2026: - Cloudflare, configuração Pages Functions: https://developers.cloudflare.com/pages/functions/wrangler-configuration/ - Cloudflare, bindings D1: https://developers.cloudflare.com/pages/functions/bindings/ - Cloudflare, Direct Upload: https://developers.cloudflare.com/pages/get-started/direct-upload/ - Cloudflare, comandos e migrações D1: https://developers.cloudflare.com/d1/wrangler-commands/ - Google, Bem-estar digital: https://support.google.com/android/answer/9346420?hl=pt - Apple, Tempo de ecrã (consulta detalhada pendente, HTTP 429): https://support.apple.com/pt-pt/108806 - Dados agregados fornecidos no enunciado do trabalho, 35 participantes; autoria, data e PDF original por confirmar.
Anexos de software: README.md; migrations/0001_initial.sql; docs/testes.md; resultados JSON de execução; docs/publicacao.md; código public/ e functions/. Anexos documentais pendentes: relatório PDF e entrevista à psicóloga. Nenhuma referência clínica ou citação foi inventada.