~/now
Now
What I'm working on and learning at the moment.
Now
since Sep 2026learning
Learning Rust
Working through the fundamentals, because I'll need Rust for performant Shopify Functions.
since Sep 2026learning
Shopify GraphQL Admin API
Sharpening my knowledge of the GraphQL Admin API.
Past
Patch notes, newest first.
2026
v3.1 · Oct 2026shipped
Wakku v1.3.0
A full-screen ringing view for Wakku, plus two fixes for the shake challenge and the ringing screen.
Added
- Full-screen ringing view with the alarm name, the current time and styled Snooze and Stop buttons below
- It opens by itself on a locked and an unlocked phone and from inside other apps, so no loud pop-up notification shows
- The banner on the alarm list sends you to the matching permission settings: display over other apps first, then the permission page of Xiaomi phones
Fixed
- A one-time alarm no longer stays snoozed and enabled when it is stopped with the shake challenge after a snooze on a locked phone. Finishing the shake challenge now always ends the alarm
- The ringing screen could close itself right after opening, which looked like a black lock screen
v3.0 · Oct 2026shipped
Expense Tracker on Google Play
Expense Tracker v1.24.0 is live on the Google Play Store for everyone. It is my first Android app shipped to real users.
Added
- Expense Tracker passed Google Play’s production requirements on 19 October and is now available to everyone on the Google Play Store, starting with v1.24.0
- My first Android app shipped to live users
v2.18 · Oct 2026shipped
Expense Tracker v1.24.0
Every Server Action now returns the same result shape, so failed deletes, hides and onboarding steps show an error.
Changed
- Every Server Action now returns one shared result type: an error on failure, or success plus data on success
- The delete, hide, unhide and onboarding actions used to return nothing. They now report errors, and the delete dialog and category rows display them
v2.17 · Oct 2026shipped
Expense Tracker v1.23.0
Money Manager import now follows your currency setting and reads headers in five languages.
Fixed
- The Money Manager import no longer assumes EUR and German headers. It follows your currency setting for the amount column and for skipping rows in other currencies
- The import reads column headers and the Expense and Income labels in English, German, Spanish, French and Portuguese. The Spanish, French and Portuguese spellings are best guesses, because I had no real exports to check them against
- The review summary now names the skipped currency, with new text in all five locale files
v2.16 · Oct 2026shipped
Expense Tracker v1.22.0
Settings grouped into sections, toggle switches and a CSV export that keeps more of your data in Expense Tracker.
Changed
- Settings is now organized into Preferences, Data, Account and Help and support, instead of one long list
- On and off options in Settings, and the confirmation steps for risky actions, are now toggle switches
Fixed
- Exporting and re-importing your data as CSV now keeps your category colors, hidden default categories and skipped recurring months
v2.15 · Oct 2026shipped
Expense Tracker v1.21.1
Trend icons for income and expenses in Expense Tracker.
Changed
- Income now shows an upward trend icon and expenses a downward trend icon, so the direction is clear at a glance
v2.14 · Oct 2026shipped
Expense Tracker v1.21.0
A setting to turn off month swiping, more reliable swipe handling, clearer income and expense cues and better readable secondary text in Expense Tracker.
Added
- A new setting turns off swiping left and right to change the month
Changed
- Income and expenses now also show an arrow icon and are announced as income or expense by screen readers, not just by color and sign
- Currencies that share a symbol, such as the Canadian and Australian dollar, now show their code in the amount field
- Secondary text is easier to read in both light and dark mode
- The dashboard loads faster because your settings are fetched in one request
Fixed
- Swiping no longer triggers while you select text or scroll sideways inside a list
v2.13 · Oct 2026shipped
Expense Tracker v1.20.0
A category picker dialog, clearer guest and date format settings and more accurate Insights totals in Expense Tracker.
Added
- A category picker dialog replaces the category dropdowns in the add and edit forms for transactions and recurring transactions. Categories show as two-column chips in a scrollable dialog, with a New category button that creates and selects a category. The list shrinks while the name field is open, so the phone keyboard cannot cover it
- Guest accounts now show a note near the logout button: “Guest accounts can’t log back in. Logging out deletes your data.” It is translated into all five languages
Changed
- The date format setting is clearer. Automatic now shows what it resolves to, for example “Automatic (Deutsch: DD.MM.YYYY)”
- Recurring transactions say “Name” instead of “Description” in the add and edit forms, with the hint “Name (e.g. Rent)”. Only the label changed, not the database
- The Settings footer now says “Web version” and notes that the app updates without a Play Store update, which explains why its number can differ from Google Play
Fixed
- Insights now generates recurring items for the viewed month, or January through the current month in Year mode, so totals no longer depend on which months you opened
- The landing page header no longer overflows sideways on phones in longer translations such as German, and the free and ad-free tagline chip grows to two lines instead of overflowing
- The edit transaction, edit recurring and category rename fields now have placeholders
v2.12 · Oct 2026shipped
Expense Tracker v1.19.0
Delete confirmations, categories that survive deletion, sign-out on password change and a round of touch and screen reader improvements in Expense Tracker.
Changed
- Deleting a transaction, category or recurring transaction now asks for confirmation first
- A deleted category stays on the transactions that used it instead of turning them into Uncategorized, and you can create a new category with the same name
- Changing your password signs you out on all your other devices
- Bigger buttons for editing and deleting, the top menu and the month pickers, so they are easier to tap
- Easier to use with a screen reader: errors and confirmations are announced, loading spinners are labeled and the month pickers say which month they open
- The focus ring around text fields is clearer for keyboard users
- Import messages and the app description now follow your language
v2.11 · Oct 2026shipped
Expense Tracker v1.18.0
Better keyboard and screen reader support, safer CSV export and a sturdier email confirmation in Expense Tracker.
Changed
- Confirming your email takes one extra tap on the verification page, so email scanners can no longer use up your link
- Easier to use with a keyboard or screen reader: the top menu is labeled and marks the current page, there is a skip to content link, windows are named, the tour steps are announced and the Expense and Income buttons show where the focus is
- Exported CSV files can no longer run formulas when opened in a spreadsheet, and importing them restores your original text
Fixed
- Selecting text in a form field and releasing the mouse outside the window no longer closes it
v2.10 · Oct 2026shipped
Expense Tracker v1.17.0
Date fields that follow your date format, a show/hide button on password fields, and a round of login, import and offline cache fixes in Expense Tracker.
Added
- Password fields have an eye button to show or hide what you typed
Changed
- Date fields follow the date format you chose in Settings, for example DD.MM.YYYY, and still offer a calendar picker
- Email addresses are no longer case sensitive, so signing in and resetting your password work with any capitalization
- Changing your password now limits wrong guesses too
- New transactions and recurring transactions default to today’s date in your own time zone, and the current month follows it
- Importing data shows a clear message instead of technical errors, and rejects very large files and invalid dates
Fixed
- A failed login, signup, password reset or edit no longer clears what you typed
- Someone guessing wrong passwords for your email can no longer lock you out of logging in
- Category names are compared exactly, so characters like percent and underscore no longer cause false duplicates
- The app no longer keeps a broken file in its offline cache after a temporary network problem
v2.9 · Oct 2026shipped
Expense Tracker v1.16.0
Swipe paging and a loading animation on Insights, plus stronger login protection and fixes for recurring transactions and invalid input in Expense Tracker.
Added
- Insights shows a loading animation, centered on screen, while you switch between expenses, income, month and year
- Swipe left and right on Insights to move between months or years
Changed
- Stronger protection against repeated login and guest sign-up attempts, and the password reset form is now rate limited too
Fixed
- Recurring transactions can no longer show up twice in a month, and moving one to another month no longer brings it back in the original month
- Invalid dates, oversized amounts and bad links no longer cause errors, and a transaction can only use your own or the default categories
v2.8 · Oct 2026shipped
Expense Tracker v1.15.0.1
A light mode fix for the bottom navigation bar in the Expense Tracker Android app.
Fixed
- The navigation bar at the bottom of the screen is readable again on phones set to light mode
This is an Android package update only. The web app is unchanged since v1.15.0.
v2.7 · Oct 2026shipped
Expense Tracker v1.15.0
A remember-last-category setting, a scrolling Add transaction form and Log out moved to Settings in Expense Tracker.
Added
- New setting to remember the last category you used and preselect it when adding a transaction. It is off by default
Changed
- The Add transaction form now sits at the top of the screen and scrolls
- The app now starts in your phone’s language
- Log out moved from the top bar to Settings. Guests now get a clear warning there, with the option to create an account instead
Fixed
- The keyboard no longer hides the Add button in the Add transaction form
- Chrome no longer offers saved passwords, cards and addresses while you type an amount or description
- Dates now look the same in the form and in the list
v2.6 · Oct 2026shipped
Expense Tracker v1.14.0
An All tab in Insights and an updated contact email for Expense Tracker.
Added
- Insights has a new All tab. It shows income, expenses and net total for the month or year at a glance, with both category breakdowns below
Changed
- Updated the contact email address shown on the landing page, the privacy policy and the account deletion page
v2.5 · Oct 2026shipped
Expense Tracker v1.13.0
Guest accounts, account deletion and a public deletion page for Expense Tracker.
Added
- “Try without an account” on the login and sign-up screens. It leads to an explainer page, then starts a guest session with no email or password
- Guest accounts have no limits: every feature works as in a regular account
- Guest safeguards: guests are told up front that data is kept for 30 days and can be lost if cookies are cleared or the app is reinstalled, and that logging out is final. A countdown banner shows the time left, and a confirm prompt appears before logging out
- Upgrade in place: guests can add an email and password in Settings, and all their data stays
- Automatic cleanup: expired guest accounts are deleted after 30 days, by a daily scheduled job, whenever a new guest starts, and when an expired guest reopens the app
- “Delete account” in Settings, with a confirmation and a password for regular accounts. It removes the account and all its data
- A public
/delete-account page that explains how to delete an account, with an email fallback. It is the link Google Play requires
Changed
- The privacy policy covers guest accounts and account deletion, and says the app is intended for ages 13 and over
- All new text is translated into English, German, Spanish, French and Portuguese
- Database migration 0012 made email and password optional and added the guest flag
RELEASING.md now describes the feature/* to develop to main flow
v2.4 · Oct 2026shipped
Expense Tracker v1.12.0
Light and dark themes, a date format setting, an onboarding tour and the Maxtasy design system across Expense Tracker.
Added
- Appearance setting in Settings: light, dark or follow the device
- Date format setting in Settings: DD.MM.YYYY, DD/MM/YYYY, MM/DD/YYYY, YYYY-MM-DD or automatic
- A 6-step onboarding tour for new users, replayable from Settings. Existing users are marked as already onboarded, so only new signups see it automatically
- New loading animation: coins drop in, bounce into a stack, hold for a second, then fall away through the bottom. It replaces the spinning logo on page-level loading
- A teaser video, re-recorded on the final design, on the landing page and in the README
Changed
- The whole app now uses the Maxtasy design system tokens, Schibsted Grotesk and JetBrains Mono, with sharp 2px cards and 6px controls
- Login and signup pages have a brand lockup
- The landing page is rebuilt on the same system and is always dark
- New logo: the coin-stack mark replaces the ring, with a new favicon and app icons
- Local development uses a Docker database
Fixed
npm run dev no longer registers the service worker, which had been serving stale files
v2.3 · Oct 2026shipped
Todo v1.0.0
Accounts, abuse protection, legal pages and a production setup for Todo.
Added
- New todo-mark logo and favicon set from the design system, in the header and on the login screen
- Cloudflare Turnstile on login and sign-up. It stays hidden unless a challenge is needed and passes tokens to Supabase
- Public
/privacy and /imprint pages, linked in the footer
- Delete account in the account menu, which permanently removes the account and all its data
- A “Resend confirmation email” button when logging in with an unconfirmed email
vercel.json with an SPA rewrite, security headers and long caching for hashed assets
- Mail from
noreply@maxtasy.me through Resend
Changed
- Confirmation links return to the app’s own address
- Passwords need at least 8 characters, on the client and in Supabase
npm run dev uses a local Supabase stack. Production credentials live only in .env.production and Vercel, and local auth settings mirror production
- Tests: 176, up from 167
Fixed
- Production RLS audited: every table is protected by per-user policies
v2.2 · Sep 2026shipped
Wakku v1.2.0
Gradual volume, a German translation and a new app icon for Wakku.
Added
- After saving or switching on an alarm, a message shows how long until it rings (“Rings in 7 h 32 min”)
- German translation. The app follows the phone’s language
- Gradual volume: the alarm starts quiet and gets louder over 45 seconds. It is a global setting and can be overridden per alarm
- New app icon, the Wakku mark from the Maxtasy design system
Changed
- “Skip next” on the “Next alarm” notification skips only the next ring of a repeating alarm
- The per-alarm switch is now “Override global settings”
Fixed
- A snooze or skip pending when the phone or app restarted now keeps its time
v2.1 · Sep 2026building
Created a design system
A design system to reuse across future projects.
Added
- A design system for future projects
v2.0 · Sep 2026shipped
Shipped Expense Tracker
My first fullstack app, live and in Google Play testing.
2021
v1.0 · Apr 2021building
First job at an e-commerce agency
Started working professionally as a web developer.
Added
- First job, at an e-commerce agency
2020
v0.2 · 2020building
Got serious about web development
Moved from hobby projects to building real things for the browser.
Changed
- Got serious about web development
Added
- Super Mario Bros, rebuilt from scratch for the web browser
- Multiplayer Chess
2018
v0.1 · 2018learning
Began programming
Started programming as a hobby.