App web local · em andamento
Estante virtual
Uma estante de livros e mangás que roda no seu computador. Cada volume é uma lombada desenhada em CSS, nas cores da própria capa; clicar abre um painel com capa, dados, status de leitura, progresso, nota e anotações.
github.com/wtuxen/estante_virtualO que ele faz
- Lombadas
- Cor de fundo e de destaque tiradas da capa. A altura segue o formato (pocket, tankōbon, trade, capa dura, artbook) e a largura, o número de páginas. Mangás mostram o número do volume no pé.
- Séries
- Um volume por lombada, como na prateleira real, e volumes da mesma série dividem a cor. No modo Séries, cada uma vira um box, com progresso geral e grade de capas.
- Leitura
- Status (não lido, lendo, lido, abandonado), páginas lidas, nota de 1 a 5 e anotações que salvam sozinhas. Busca, filtro por status e ordenação mantêm as séries juntas.
- Importação
- Livros vêm de arquivos Markdown com os campos do Google Books; mangás, do export do MyAnimeList, com capas e títulos buscados no MangaDex.
Como os dados são guardados
Dois arquivos, ligados pelo id. O catálogo (títulos, autores, capas, cores) é gerado pelo import e pode ser recriado a qualquer momento. O estado (status, páginas, notas, datas e anotações) só a aplicação escreve, e é o que não pode ser perdido: ele é gravado de forma atômica, por um arquivo temporário e uma renomeação, e se um dia estiver corrompido o servidor se recusa a sobrescrevê-lo. Reimportar o catálogo nunca apaga uma anotação.
Decisões
- Sem build: a interface é HTML, CSS e JavaScript puros, servidos por um Express pequeno que só escuta em 127.0.0.1.
- As alterações vão ao servidor uma por vez, em ordem, com debounce nas anotações e nova tentativa quando falham. Uma nova tentativa nunca reenvia um valor antigo por cima de um mais novo.
- A semeadura do histórico do MyAnimeList só preenche campos vazios, então pode rodar de novo sem desfazer o que foi editado na estante. Progresso guardado só em capítulos vira volumes pelo mapa de capítulos do MangaDex.
- O import respeita o limite de requisições do MangaDex, envia um User-Agent próprio e baixa as capas localmente, sem hotlink.