Repository navigation
Releases: LeeMinNguyeen/waterflow
Release list
v0.4.0
MSaving is now Waterflow. The app, the website (https://waterflow-app.net; the old address still works) and the repository (https://github.com/LeeMinNguyeen/waterflow; GitHub forwards the old address, so git pull keeps working) all have the new name. Everyone stays signed in, with their choices.
Updating a server you run with Docker Compose: don't press Update on Server admin this time. The server's data moves to new names once. In the folder you cloned:
git pull
sh scripts/move-to-waterflow.shIt stops the server, copies its data into the new names, and starts it again (with your own database or HTTPS, as before). The old copies stay until you remove them: it prints the commands. Already pressed Update? Run the same two lines: the update couldn't start the new server next to the old one, and the script clears what it left. From now on, the commands say waterflow where they said msaving (docker compose logs waterflow), and backups are named waterflow-<time>.dump. Older backups restore as before.
On Google Cloud Run, update as usual. A server set up before 0.4.0 keeps its names, msaving where the guide now says waterflow:
source ~/msaving-cloud-run.sh
cd ~/msaving && git pull
gcloud builds submit --tag=$IMAGE:$(cat VERSION) --timeout=30m .
gcloud run deploy msaving --image=$IMAGE:$(cat VERSION) --region=$REGION
gcloud run jobs update msaving-jobs --image=$IMAGE:$(cat VERSION) --region=$REGION- Sign in in your own language. The screens before sign-in open in the language this browser last used, so someone who uses Waterflow in Vietnamese sees the sign-in screen in Vietnamese after signing out. A browser that has never been used with it still gets English.
- Joining takes two steps. First the invite code and your language, then your username and password in that language. A wrong or expired code is caught on the first step.
- Language is a dropdown everywhere you choose it: joining, setup, reset and Profile and security.
One migration (the server's default name). No new settings.
Every version, in plain words: Changelog.
Full Changelog: v0.3.1...v0.4.0
v0.3.1
Pin an account from its ⋮ menu on Accounts. On a phone, the pin button covered the account's balance. Each account's ⋮ menu says Pin to the Overview or Unpin from the Overview, whichever applies, and a viewer gets the menu too.
No new settings and no migrations.
Update from Server admin, or with git pull and docker compose up -d --build (Updates).
Every version, in plain words: Changelog.
Full Changelog: v0.3.0...v0.3.1
v0.3.0
- Installments on a credit card. When you add or edit a purchase on a card, Pay in installments spreads it over the months you choose. Each statement bills one installment, starting with the statement the conversion date falls in (or one you pick), and the conversion fee goes all on the first bill or is split into each. The purchase still counts in full in the card's balance; you choose whether the part not billed yet uses up the card's limit. End early bills the rest on the next statement.
- This month's statement on a card. While last month's statement still has something to pay, the card shows it and, next to it, this statement so far: what's new in it, when it closes and when it's due. Once last month's is paid off, only this one shows. Pay is always there, for any amount.
- Restore a backup from Server admin, or when setting up a new server, with the setup code. The server backs up what's there, restarts and loads the backup; if loading fails, it puts back what was there. Everyone then signs in with the passwords from the backup's day.
- Accounts grouped by kind, each group with its total in the book's currency. A group folds away with a click.
- People are accounts, on their own page. Each person has their own balance, in the currency picked when adding them: lending to them is a transfer from your account to them, their paying you back a transfer from them, and a meal they paid for you an expense on them. Pick them like accounts, under "People". People comes after Accounts in the menu (under More on phones), and a person opens their transactions. Money lent and Loan accounts linked to someone still count in their total.
- Pin accounts to your Overview. It shows the accounts you pinned (the first 5 until you pin one) and the 5 latest transactions. On a wide screen, every page uses the whole width.
- Pick a category from a folded list: open a group with its arrow, or type to search at any level.
- New transactions fill themselves in. Type the amount of an expense or income, and the account, category and payee of your own recent ones of a close amount are filled in. Change anything as usual.
- Saving closes the dialog with a short message that it worked. Every dialog's buttons sit together at the bottom, and an amount no longer keeps a leading zero.
For operators: five new migrations, applied on start after a backup. No new settings. A restore from Server admin takes files up to 100 MB; on Google Cloud Run a request carries at most 32 MB, far more than a household's backup.
Update from Server admin, or with git pull and docker compose up -d --build (Updates).
Every version, in plain words: Changelog.
Full Changelog: v0.2.0...v0.3.0
v0.2.0
The first feature release under the new version rule (features bump the middle number).
What's new
- English first, Vietnamese second. New accounts are English unless the person picks Vietnamese when joining. The screens before sign-in are in English; sign-in has no language switch any more, while join, setup and reset keep one. Existing accounts keep their language. (#52, #56)
- A time on every transaction. The add dialog fills in the current time next to the date. Lists sort by date and time, and the edit history and the export show it. Transactions saved before have 00:00. (#59)
- Remember this device for 30 days at two-step verification: next time on that device, only the password. A new password, turning two-step verification off, an admin's reset link or Sign out other devices forgets it. (#58)
- Light or dark, or the same as the device (the default), on Profile and security. (#57)
- Server admin: Update now no longer shows an error once the update has started, the commands to update by hand show only when a newer version is out, and What's new opens the new Changelog. (#55)
For operators
- Three new migrations, applied on start after a backup.
- A new setting,
PROJECT_SITE_URL, which the compose file sets: the address What's new opens. - Update from Server admin, or with
git pullanddocker compose up -d --build(Updates).
Every version, in plain words: Changelog.
Full Changelog: v0.1.5...v0.2.0
v0.1.5
If your server uses Supabase (or any database whose owner isn't a superuser), update now. 0.1.4 and older start once, then stop at every later start with permission denied to alter role. Nothing in the database was changed: the server stopped before doing anything, and updating fixes it. On Google Cloud Run, a failed deploy never takes traffic. (#45)
No new settings and no migrations. Update from Server admin, or with git pull and docker compose up -d --build (Updates). On Google Cloud Run, with the guide's update lines.
Full Changelog: v0.1.4...v0.1.5
v0.1.4
What's new
- Monthly bills for credit cards and loans. A card's details show its statement balance and due date. A loan's show its monthly installment, with a one-off installment fee on the first payment and the month's interest when the loan has a rate. Pay saves the payment as a transfer from an account you pick. (#38)
- Exchange rate failures say why. When no rates source answers, Server admin shows one line with the reason, for example a network that replaces HTTPS certificates (antivirus HTTPS scanning, a company proxy). A failed daily job now runs again an hour later, until it works. (#41)
- Run it on Google Cloud Run with a Supabase database, for when you don't have a machine that stays on: the guide. (#42)
For operators
- On Supabase, use 0.1.5 instead: 0.1.4 starts there only once.
- Two new migrations, applied on start after a backup.
- New setting
RUN_JOBS(on by default; Docker installs don't need it). - Your own Supabase: the documented address is now its session pooler (the direct connection needs IPv6). The server's logins get the project suffix by themselves.
Full Changelog: v0.1.3...v0.1.4
v0.1.3
What's new
- Signed-in devices on Profile and security: where you're signed in (browser and system), and sign out one device or all the others. (#35)
- Sign out after inactivity: each user picks the time on Profile and security, 5 minutes by default, with a warning a minute before. (#35)
- The daily jobs' schedule on Server admin: each job's time in your timezone, its last run, and the exchange rates on or off. (#35)
- An old one-click update failure no longer stays on Server admin. (#33)
For operators
- Before you update: if you made a
.gitignorein the msaving folder yourself (for.env), delete it first. MSaving now ships its own, andgit pullwon't overwrite yours. (#34, Troubleshooting) - Three new migrations, applied on start after a backup.
- The daily jobs no longer all run at every start: each runs at its time (
JOBS_HOURuntil you set one), and a job missed while the server was off runs when it starts.
Full Changelog: v0.1.2...v0.1.3
v0.1.2
What's Changed
- Hobbyist test feedback: edit history, dates, account details, live updates, phone layout by @LeeMinNguyeen in #29
- While the server updates itself, every page says so by @LeeMinNguyeen in #30
- Version 0.1.2 by @LeeMinNguyeen in #31
- Release 0.1.2 by @LeeMinNguyeen in #32
Full Changelog: v0.1.1...v0.1.2
v0.1.1
A small maintenance release, also used to test updating from the web app.
- Nothing to do when updating: the admin page's Update now (with the updater turned on), or
git pull && docker compose up -d --build. The server takes a backup first, as always. No database changes. - Two unused Python packages and some leftover settings are removed, so the image rebuilds.
- For developers:
npm run devnow works against the API (sign-in and saving were refused withorigin_not_allowed).
Full changes: v0.1.0...v0.1.1
v0.1.0
What's Changed
- Self-hosted MSaving: one image, one compose file by @LeeMinNguyeen in #1
- Build from source: no published images, updates are git pull and a rebuild by @LeeMinNguyeen in #7
- Shared books: members, invites by username, roles, leaving (milestone 8) by @LeeMinNguyeen in #8
- Rate limit username changes (#4) by @LeeMinNguyeen in #9
- Exchange rates: the credit open.er-api.com asks for, and a CC0 fallback (#2) by @LeeMinNguyeen in #10
- Backups with your own database: TLS as the address says (#3) by @LeeMinNguyeen in #11
- Add transaction: use the only open account by default by @LeeMinNguyeen in #12
- Release 0.1.0 by @LeeMinNguyeen in #13
New Contributors
- @LeeMinNguyeen made their first contribution in #1
Full Changelog: https://github.com/LeeMinNguyeen/msaving/commits/v0.1.0