Criei meu próprio gerenciador de referências porque estava com preguiça de testar outros (OpenSource)
Minha aba de favoritos estava um caos.
Eu tenho um fluxo chato: pesquiso no PC, mas leio no tablet ou celular. O resultado era ter 8 abas abertas em cada dispositivo, ficar subindo PDF no Google Drive e tendo que baixar no outro dispositivo, PDFs duplicado e zero noção de onde eu tinha parado a leitura ou quais eu já tinha olhado só pelo título.
Fui atrás de resolver isso e as primeiras opções que achei faltavam um "tchan". Ou eram feias (interface de 1998), ou a sincronização mobile era paga/ruim.
Sinceramente? Me deu preguiça de baixar e testar mais dez softwares até achar um que prestasse.
Então resolvi fazer eu mesmo algo que fosse do meu agrado.
Os requisitos eram simples, mas restritivos:
- Tinha que ser (ou pelo menos parecer) moderno.
- Tinha que rodar liso no PC e no celular.
- Crucial: Tinha que rodar "eterno" nos planos gratuitos da Vercel e Supabase (custo zero).
Escolhi Vue.js (que já domino e gosto) e decidi usar Shadcn-vue (nunca tinha usado, mas achei a estética bonita e queria testar).
A parte básica foi rápida: autenticação, CRUD de coleções, Tags. Mas aí começaram os problemas reais.
Storage limitado (1GB)
Eu queria poder subir meus PDFs para ler em qualquer lugar. Mas o plano grátis do Supabase só dá 1GB. Se eu (ou outros usuários) começasse a subir livros e teses, isso ia estourar rapidinho.
A solução óbvia seria bloquear uploads grandes. A solução que eu implementei foi um Armazenamento Híbrido.
O front-end analisa o arquivo antes do upload:
- Se for leve (até 512kb, maioria dos papers): Vai para a nuvem e sincroniza.
- Se for pesado: O sistema intercepta e salva no IndexedDB do navegador.
Assim, não gasto banda nem storage com arquivos gigantes, mas mantenho o acesso fácil e offline no dispositivo onde o arquivo é mais usado.
Ainda não é o melhor caso, pois eu queria poder subir pelo PC para ler no tablet, mas eu ainda estou trabalhando em uma solução, talvez utilizar o Google Drive como armazenamento de sincronização, ou algo assim.
Preencher os dados das referências
Eu não queria digitar metadados na mão. Queria colar um DOI ou link do ArXiv e ver a mágica acontecer.
A maioria das API's que eu utilizei, como Crossref e OpenLibrary suportavam o CORS, mas o arXiv não (que infelicidade, meu favorito).
Tive que criar um proxy usando Supabase Edge Functions. O front pede pro meu backend, que pede pro ArXiv, e retorna para o front, sem perder tempo.
UX simples
Eu não gosto de ter um monte de modal pipocando na tela a cada botão que clico. Então, tentei deixar as funcionalidades mais soltas no fluxo, como o cadastro/remoção de tags e coleções, que são feitas no próprio input. Além disso, ao visualizar uma referência ele abre uma sidebar, para que tu não perca o fluxo anterior. Tudo isso usando os sheets e dialogs do shadcn-vue e stores do Pinia.
O Resultado
O Litdock agora faz o que eu precisava:
- Importa automático (tenta até achar o PDF legalmente via Unpaywall).
- Tem um leitor nativo onde implementei inversão de cores via CSS (tenho dificuldade de ler em fundo branco).
- Funciona offline como PWA.
Ainda tem coisas para arrumar (quero integrar exportação BibTeX e busca direta por título), mas considerando que nasceu da falta de paciência com outras ferramentas, já está salvando minha organização.
O projeto é Open Source. Se quiserem ver o código ou usar:
E aí, já criaram ferramenta própria só pra não ter que configurar a dos outros?