Skip to content

feat: implement local progress tracking and gamification engine#9

Merged
JsCodeDevlopment merged 2 commits into
mainfrom
dev
May 26, 2026
Merged

feat: implement local progress tracking and gamification engine#9
JsCodeDevlopment merged 2 commits into
mainfrom
dev

Conversation

@JsCodeDevlopment

Copy link
Copy Markdown
Owner

Funcionalidades de Crescimento — Resumo de Implementação

Implementámos com sucesso o núcleo do motor de gamificação e atração da Algoria, conforme planeado na análise técnica.

O código já foi testado no compilador da Vercel (pnpm build) e não apresenta erros de tipagem. A aplicação integra perfeitamente estas lógicas com o sistema híbrido de armazenamento de progresso que já existia.


1. Motor de XP e Streaks (lib/gamification/xp-engine.ts)

Criámos um motor que recompensa a dedicação dos utilizadores.

  • O ProgressBlobSchema (armazenado tanto no localStorage como no Postgres) foi estendido para guardar: xp, streakCount, longestStreak, e dailyChallengesCompleted.
  • Ao concluir de ler uma solução, ou marcar um problema como completo, o utilizador ganha XP.
  • Multiplicadores de Streak:
    • < 7 dias: 1.0x
    • 7 a 13 dias: 1.2x
    • 14 a 29 dias: 1.5x
    • +30 dias: 2.0x

2. Chama de Streak no Header (<StreakFlame />)

Uma chama animada (com SVG em gradiente e framer-motion) está agora permanentemente visível no SessionNav (canto superior direito) quando o utilizador tem sessão iniciada.

  • Tem um Tooltip muito completo ao passar o rato com o número de dias, o multiplicador ativo, o XP total e quantos dias faltam para o próximo tier do multiplicador.
  • Fica cinzento se a Streak estiver morta (streakCount === 0).

3. Desafio Diário (<DailyChallengeBanner />)

O topo da página do catálogo (/problems) exibe agora um banner especial sugerindo um problema para o dia.

  • Determinismo: Criámos uma função de "hash" na data (YYYY-MM-DD). Isto garante que todos os utilizadores no mesmo dia recebem o mesmo problema a resolver, sem precisarmos de uma base de dados externa de calendário.
  • Renderiza um bónus de +50 XP.
  • Se for concluído, muda para um estado de verificação verde ✓ Concluído.

4. Fila de Repetição Espaçada (<ReviewQueueWidget />)

Integrámos o algoritmo existente review.ts com um widget visual que aparece na página de perfil (/profile).

  • Se um utilizador terminou um problema há 1, 3, 7, 14 ou 30 dias, o problema surge na lista de revisão urgente.
  • É exibido com ícones de livros e crachás marcando o intervalo (ex: 14d).

5. Ranking Semanal (Leaderboard)

Uma página dedicada no /leaderboard que exibe a classificação da comunidade.

  • Global vs Seguidos: Utilizadores podem ver todo o mundo ou focar a vista para filtrar apenas pelos amigos/utilizadores que seguem (usa a tabela userFollower).
  • UI Premium: O Top 3 tem coroas e medalhas de destaque (lucide-react). O restante tem Badges de classe consoante o XP (ROOKIE, INTERMEDIATE, EXPERT, MASTER).
  • API Dinâmica: Consulta os dados extraindo a coluna JSON userProgress.data -> 'xp' diretamente do Postgres de forma eficiente.

Tip

Vá agora ao terminal, assegure que o seu comando pnpm dev está a correr e visite http://localhost:3000/leaderboard, a página de Catálogo e o seu Perfil para ver estas 5 novidades ao vivo!

…troduce a gamification engine with leaderboard support
@JsCodeDevlopment JsCodeDevlopment self-assigned this May 26, 2026
@vercel

vercel Bot commented May 26, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
algoria Ready Ready Preview, Comment May 26, 2026 12:44am

@JsCodeDevlopment JsCodeDevlopment requested a review from Copilot May 26, 2026 00:44
@JsCodeDevlopment JsCodeDevlopment merged commit 218eb0d into main May 26, 2026
3 checks passed
@JsCodeDevlopment JsCodeDevlopment review requested due to automatic review settings May 26, 2026 01:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant