Beens / PRAI Systems
Good software can make room
for a small daily ritual.
A coffee-journaling and discovery project for recording the details of a brew, comparing shots, and deciding what to share.
Keep the useful little details.
Coffee is full of details worth remembering: the beans, the equipment, a shot’s parameters, and the notes that help make sense of the next cup. Beens brings those details into a journal with room for discovery.
I built the project independently under PRAI Systems, connecting a Next.js and React frontend to a Django REST backend and PostgreSQL storage.
From a first entry to a useful history.
- A device-local guest draft that survives refresh and signup, then imports into the account on an explicit save.
- Equipment profiles, beans, individual bags, and shot histories, with side-by-side comparison that flags differences in equipment and timing conventions.
- Shared espresso settings, discovery filters, sourced drink recipes, and a private weekly coffee calendar.
- Opt-in publishing that creates independent public snapshots while keeping journal notes private.
Reduce friction. Preserve choice.
Make the first shot easy to keep.
A visitor can record a shot before creating an account. The draft stays on their device through signup, and an explicit save imports it in one database transaction. A unique draft identifier makes retries safe: repeated requests return the same shot, while invalid measurements roll back the import.
Publish a snapshot, protect the journal.
Sharing copies only approved measurements, equipment names, and taste selections into a separate public recipe. Private notes, email addresses, and source-record identifiers are excluded. Public notes are entered separately, and later edits to the private shot leave the published snapshot intact.
Test the transitions between states.
Backend tests cover cross-account access, duplicate draft imports, rollback after invalid input, and the separation between private shots and public recipes. They also check measurement validation and CSRF protection. Ownership is enforced in both the API and database relationships.
The CI workflow runs Django checks and tests, TypeScript checking, a production build, and Playwright browser journeys against a separate PostgreSQL service. These checks target the moments when records move between guest, private, and public states.
A public project, still evolving.
Public beta / live testing
Beens is available to explore online. It demonstrates the consumer-product side of my work: connecting interface details, application state, and a backend around an everyday use case.
Keep exploring
JC Lucas ERPNext
Let’s build something useful
A good problem.
A thoughtful solution.
Exploring software engineering, applied AI, and product engineering opportunities with teams around the world.
Based in Quezon City, Philippines · UTC+8