Uma biblioteca de igreja, acessível pelo navegador.
O iChrysostom é um sistema de gestão de empréstimos de livros físicos, criado para organizar o acervo de uma biblioteca de igreja.
Qualquer pessoa pode consultar os livros e sua disponibilidade, sem cadastro. O bibliotecário administra o acervo e registra os empréstimos em uma área protegida; a retirada dos livros continua sendo presencial.
Status: aplicação desenvolvida e testada localmente. Publicação na Cloudflare realizada (o link é privado).
Resolver um problema concreto: tornar o acervo de uma biblioteca local consultável por qualquer dispositivo, mantendo o controle dos exemplares e de quem está com cada livro.
A arquitetura foi escolhida para ser simples, leve e de baixo custo operacional. Em produção, o projeto não precisa de VPS, Docker, PostgreSQL ou servidor Node.js permanente.
- Catálogo público: pesquisa por título ou autor, navegação por categorias e consulta à disponibilidade de exemplares.
- Gestão do acervo: cadastro, edição e exclusão de livros, categorias e exemplares físicos.
- Empréstimos presenciais: registro de responsáveis, datas de retirada e devolução, controle de atrasos e histórico.
- Prazos flexíveis: o bibliotecário escolhe a data prevista de devolução, sem limite máximo de 14 dias.
- Personalização: título, nome da biblioteca, cor principal e banner.
- Administração: autenticação, alteração de senha, histórico de acessos e exportação do catálogo em CSV.
| Tecnologia | Por que foi escolhida |
|---|---|
| TypeScript | Tipagem estática para facilitar a manutenção e reduzir erros durante mudanças. |
| Cloudflare Pages + Functions | Páginas e rotas executadas sem administrar um servidor permanente. |
| Cloudflare D1 + SQLite | Banco relacional integrado à aplicação, com migrações SQL versionadas. |
| HTML renderizado no servidor + CSS | Interface rápida e direta, sem framework de frontend nem aplicação cliente separada. |
| Node.js + npm + Wrangler | Instalação de dependências, desenvolvimento local, migrações e futura publicação. |
| Vitest | Testes automatizados para verificar regras de negócio e evitar regressões. |
Fluxo da aplicação: navegador → Pages Functions (TypeScript) → Cloudflare D1 (SQLite) → HTML renderizado no servidor.
- Separação entre consulta e administração: o catálogo é público, mas alterações exigem autenticação.
- Segurança no servidor: senhas com PBKDF2-SHA-256, sessões persistidas no D1, proteção CSRF e limitação de tentativas de login.
- Consistência dos empréstimos: um índice único parcial no SQLite impede dois empréstimos ativos para o mesmo exemplar.
- Armazenamento de imagens: capas usam URLs HTTPS; o banner é armazenado como BLOB no D1, com limite de 600 KB.
- Manutenção previsível: alterações na estrutura do banco são registradas em migrações SQL e verificadas por testes.
Pré-requisitos: Node.js 20+ e npm. Não é necessário instalar PostgreSQL, Docker ou Podman.
Na raiz do repositório:
npm ci
cp .dev.vars.example .dev.vars
npm run db:migrate:local
npm run devAntes de executar as migrações e iniciar a aplicação, configure os valores necessários em .dev.vars, especialmente SESSION_SECRET. O Wrangler informa o endereço local no terminal, normalmente http://localhost:8788.
A criação do administrador inicial e os procedimentos complementares estão em docs/INFO.md. Não publique .dev.vars, backups ou o banco local armazenado em .wrangler/.
| Documento | Conteúdo |
|---|---|
| PLAN.md | O problema original, a motivação e os objetivos do projeto. |
| ARCHITECTURE.md | Decisões arquiteturais e alternativas consideradas durante o planejamento. |
| INFO.md | Referência técnica de componentes, banco de dados, segurança, manutenção e publicação. |
iChrysostom — do acervo físico ao catálogo acessível pelo navegador.

