r/devpt • • 10d ago

Projecto Nacional (OC) Fiz uma app de estudo open source que sincroniza o Moodle e monta um plano diário (Electron, SQLite, sem servidor)

Olá! Sou estudante de Engenharia Informática e passei o semestre a fazer o Caderno, uma app para Windows que uso para estudar. Abri o código e queria opinião de quem percebe disto.

O que faz

  • Liga-se ao Moodle (os mesmos Web Services que a app móvel oficial usa) e descarrega os PDFs e prazos das cadeiras para uma pasta local.
  • Monta um plano diário com base nas datas de exame e no tempo que tens em cada dia. Recalcula quando marcas um bloco como estudado.
  • Com IA (opcional), cada PDF ganha resumo, conceitos, flashcards, treino, simulado e explicações que apontam para a página de onde vieram.

Como está feito

  • Electron + Node 24, interface em JS sem framework.
  • SQLite local (node:sqlite), sem servidor nem contas: tudo fica no PC.
  • Texto dos PDFs extraído com unpdf.
  • IA com a chave da própria pessoa: Anthropic, OpenAI, DeepSeek, Groq (tem plano gratuito) ou qualquer API compatível com Chat Completions. A chave fica cifrada com AES-256-GCM.
  • Atualizações automáticas pelas releases do GitHub (electron-updater), build e testes no GitHub Actions.

Limitações que já sei

  • Só Windows, por agora.
  • O instalador não é assinado (a SignPath Foundation pediu mais reputação pública primeiro), por isso o SmartScreen avisa. O build é público no GitHub Actions e cada release tem o SHA-256 e a análise do VirusTotal.
  • Contas Moodle com SSO (entrada pela página da universidade ou com Microsoft/Google) não conseguem ligar; nesse caso dá para criar cadeiras à mão e enviar os ficheiros.
  • PDFs digitalizados sem texto ainda não são lidos (sem OCR).

Onde gostava de opinião

  1. Como resolveriam o login em Moodles com SSO sem pedir a palavra-passe? Estou a pensar no fluxo de token da app móvel.
  2. OCR local leve para PDFs digitalizados: Tesseract em WASM vale a pena dentro do Electron?
  3. Qualquer coisa no código que vos faça torcer o nariz.

Site: https://caderno.me Código (MIT): https://github.com/miguelaopt/caderno

43 Upvotes

16 comments sorted by

2

u/ZThrows 8d ago

AI slop

3

u/aviiF 7d ago

Usei IA para ajudar (Claude). Mas se apontares alguma coisa concreta no código ou na app que esteja mal, corrijo.

3

u/Rebelva 10d ago

“Fizeste”

2

u/SnooDoughnuts1109 8d ago

Não fez? É clone?

1

u/GamerLymx 10d ago

secalhar tens de usar um modulo ou plugin de autenticação oauth e saml 2.0/OIDC

1

u/aviiF 7d ago

Obrigado pela dica! O problema é que esse login é tratado entre a universidade e o moodle. Estou a ver se consigo fazer como a app oficial do moodle.

1

u/NGramatical 10d ago

secalhar → se calhar

1

u/moser-sts 10d ago

Bom trabalho, qual a razão de usar mjs em vez de TypesScript? E achei piada o teu processo de build correr um mjs script para depois correr tsc

1

u/aviiF 7d ago

Obrigado! O projeto começou com uns scripts para o moodle e fui continuando em js. O typescript está lá só para apanhar uns erros. O script antes do tsc está la apenas para um remendo para o windows que nem era preciso, vou retirar.

2

u/FuckYourRights 10d ago

Gosto sempre da nomenclatura "sem servidor aliada a um processo que serve dados tipo SQLite 

3

u/aviiF 10d ago

Justo, a frase podia ter sido mais clara! Há um servidor HTTP local (127.0.0.1), mas quis dizer sem servidor remoto meu. Obrigado pelo reparo, vou deixar isso mais explícito.

1

u/FuckYourRights 9d ago

Não era nem uma crítica. É só que o serverless é um termo engraçado 

5

u/Sear_Oc 10d ago
  1. Qualquer pessoa com gpu de 4gb de vram consegue correr um modelo OCR leve brutal. https://huggingface.co/PaddlePaddle/PaddleOCR-VL

Boa cena btw!

1

u/aviiF 10d ago

Obrigado pela dica! Não conhecia esse modelo, vou explorar.