AquaLog: An aquarium logbook that works offline
An aquarium logbook for people who keep fish: tanks and cleanings, a journal of every fish, water tests, what the hobby costs, the store room and reminders, in one calm app that still works with no signal. It began in Lovable from its founder's brief. We engineered what sits underneath: reminders that follow each keeper's own day, one model for money in any currency, a database that refuses impossible values and walls each keeper's records off, and an admin console whose audit log cannot be rewritten.
At a glance
AquaLog is an aquarium logbook for fishkeepers: tanks and cleanings, a livestock journal, water tests, hobby spending, a store room and reminders, in one web app that works offline. It began in Lovable from its founder's brief; Plutonapps engineered the system underneath, from one notion of a day to one model for money. It is live at aqualog.space, with free guides and tools beside the app.
Updated AquaLog's own site, aqualog.space (opens in a new tab)
- Automated test files
- 159
- Stack
- React · TanStack Start · PostgreSQL
- In development since
- June 2026
- Tables with row-level security
- 13 of 13
The Lovable prototype
What was AquaLog designed to do?
AquaLog started in Lovable on June 14, 2026, from its founder's own brief: many aquariums of different sizes, cleanings kept only in memory, the fish in each tank, the money, and a store room to keep track of. The first version took that shape in Lovable as a set of screens for tanks, fish, finances and stock. That brief became the specification, and the six records on today's home page still follow it.
The divide
What did Plutonapps engineer?
Plutonapps engineered six parts of the system under AquaLog's screens: the notion of a day, money, privileges, value limits, the admin console and offline use. Each row sets the risk beside what replaced it.
The prototype risk
Engineered by Plutonapps
Reminders converted every log with a fixed UTC offset, so a keeper outside UTC could log a water change on the wrong day, and a monthly cadence stored as 30 days drifted five days off the calendar in a year.
One notion of a day
Each keeper now carries a time zone, and the trigger that schedules the next reminder uses it. Cadence is stored as a number and a unit, so monthly means a real calendar month, and the old count of days is derived from that pair, so the two can never disagree.
Costs booked outside the transactions table had no currency at all, a half-typed currency could break a row's formatting for good, and four ways of writing money disagreed: a filter's price never reached the budget.
One model for money
Every amount now has a currency beside it, checked for shape. A costed record owns at most one linked expense, kept in step by a single database function, while expenses a keeper enters by hand are never touched by it. Stock carries its price per unit, so the store room can be valued.
Postgres grants every new function to the public by default. One function took any keeper's id and returned their time zone, a genuine read across accounts.
Privileges closed at the database
Every table in the first schema has row-level security switched on, and the default public grant on database functions is revoked. The function that read across accounts is no longer callable by clients at all.
The browser is not a trust boundary. A hand-written request with a valid session could store a fish count of a billion trillion and poison every total on the dashboard.
Limits the database enforces
Every numeric limit the forms check is mirrored as a constraint in the database, which holds the authoritative copy, so an impossible value is refused whichever way it arrives.
Running a product means acting on people's accounts, and an action nobody can trace, or a log that can be edited afterwards, is a trust problem.
An admin console with a record
The admin console writes every action to an audit log that is append-only three times over: no grant to change it, no policy to change it, and a trigger that refuses any change. An account switch can suspend a user, and every admin request re-checks the session and the role in the database.
Fish rooms and store rooms are not known for good reception, and a change that fails silently is a log that is quietly wrong.
Readable with no signal
AquaLog installs as an app, keeps tanks, logs and stock readable offline from a cache scoped to the signed-in keeper, and holds a change made offline until there is a connection instead of dropping it.
In production
Real screens from the live product.

Your aquariums, finally organised
The public home page: what AquaLog keeps, the one-time-code sign-in and the offline promise, above the page's own preview of the dashboard, drawn with sample figures.

A fishkeeping guide, answer first
One of the public guides: a short answer at the top, then the target reading for each water parameter and why it matters.

The water change calculator
One of the four free tools: a current, target and tap-water reading in, the water change that gets there out, in one go or in smaller steps.
Guarantees
What do we hold ourselves to while it runs?
Dates
Each keeper's own time zone, real calendar months
Money
A currency beside every amount, one linked expense
Access
Row-level security and revoked default grants
Audit
An admin log nobody can rewrite
Results
What were the results?
- Automated test files in the production build
- 159
- Tables in its first schema with row-level security on
- 13 of 13
- Numbered database migrations, each safe to re-run
- 22
- Fishkeeping guides on its public site, beside 4 free tools
- 29
- Languages its public pages are published in, besides English
- 22
Counted from AquaLog's own repository at its production build of October 17, 2026, and from its live sitemap on October 24, 2026. It has no published user figures, so none are quoted.
Stack and timeline
- Product
- An aquarium logbook: tanks and cleanings, livestock, water parameters, hobby finances, a store room and reminders
- Built in Lovable
- The first version, from the founder's own brief
- Stack
- React 19 · TanStack Start · Tailwind CSS v4 · TanStack Query · Clerk · Supabase PostgreSQL · Vercel
- Sign-in
- A six-digit code sent by email, with no password
- Timeline
- First commit June 14, 2026, in Lovable · direct engineering from August 17 · production build October 17, 2026
- Status
- Live at aqualog.space
Questions
What else do people ask about AquaLog?
What does AquaLog keep track of?
Six records a fishkeeper keeps: tanks and their cleanings, every fish and what happened to it, water test results, what the hobby costs, the food, medicine and spares in the store room, and reminders for each recurring job.
Does AquaLog work offline?
Yes. It installs to a phone's home screen, tanks, logs and stock stay readable with no signal, and a change made offline waits for a connection instead of failing silently.
What did Plutonapps build for AquaLog?
The system under its screens: reminders that follow each keeper's own time zone and real calendar months, one model for money with a currency beside every amount, row-level security with tightened function privileges, value limits enforced by the database, and an admin console with an audit log nobody can rewrite.
Is AquaLog live?
Yes. AquaLog is live at aqualog.space, with its fishkeeping guides and free tools beside the app.
Starter is the plan we start everyone on.
Bring us what you made. We will build it like this.
Billed yearly. Month to month is $4,999 per month. Billed quarterly, it is $3,999 per month.
See plans and pricing