5 Minutos Com Deus
Personal project
Scroll down
The devotional
5 Minutos Com Deus is a 2026 personal project built as a quiet, mobile-first daily devotional. Everyone receives the same selected New Testament verse each day, with a small space for reading, reflection and habit tracking.
I built the complete application, including one editable private reflection per day, a reading streak, verse sharing, light and dark themes, and sign-in through email and password or Google. A reflection and every reading record are isolated by the authenticated user on the server.



Date-driven selection
The daily verse is derived from the current date in the America/Sao_Paulo time zone. The date becomes an YYYYMMDD seed for a mulberry32 pseudorandom generator, whose output selects an entry from the 27 New Testament books.
Because the selection is deterministic, users see the same verse on the same date without a cron job, daily database row or saved global state. The public-domain Almeida text stays in a server-side JSON file, and the browser receives only the selected verse rather than the complete Bible dataset.

Full-stack structure
The app uses Next.js 14 with the Pages Router and next-connect for explicit API routing and error handling, with SWR on the client and Tailwind CSS for the interface. PostgreSQL is accessed through handwritten queries using pg, and node-pg-migrate versions the schema without an ORM.
Authentication is also first-party: opaque session tokens live in the database, cookies carry only their key, passwords use bcrypt with a pepper, and authenticated access renews a sliding session window. Google OAuth is isolated in one model and connects verified email accounts to the same session system.
I used TDD for the API, exercising expected and error responses against a real PostgreSQL instance in Docker. GitHub Actions runs the integration tests and linting checks, while Husky applies secret scanning before commits and validates Conventional Commits messages.

One verse a day, the same for everyone, with space to reflect and keep it private.
Drag to explore








