Cognitive Edge on TelegramJoin
Back to blog
Next.jsPersonal FinanceJalali Calendar

Maaleto: a life-management app built for the Iranian calendar

4 min read

Maaleto is a personal life-management platform I built, now live at maaleto.ir: finance, tasks, habits and calendar in one place. What separates it from the dozens of similar apps is one decision — it is built for the Iranian calendar rather than translated into it.

This is the product introduction: what it does, why it works the way it does, and how to start. If you're more interested in the architecture behind it, I wrote that up separately in the Maaleto case study.

The problem it actually solves

There is no shortage of budgeting and productivity apps. Almost all of them share an assumption: the month starts on the first of January, the week starts on Monday, and money has decimal places. For the Iranian market they add a Persian display layer on top and call it localized.

The trouble is that a calendar is not a display format. When you ask "how much did I spend this month?", you mean a specific range — the whole of Mehr, not September 23rd to October 22nd. If the software computes the month in Gregorian and merely renders the date in Jalali, the number it hands you is not the answer to your question.

In Maaleto this distinction is foundational: the Jalali month is a computation boundary. Monthly budgets, monthly spending totals and the monthly report are all worked out on Jalali calendar boundaries — server-side, not at render time.

Three things fall out of that one decision:

  • The Jalali month is the budget boundary. A "groceries" budget for Mehr means Mehr 1 through Mehr 30.
  • Amounts are in Toman, with no decimals. Everything is stored as whole numbers underneath, so rounding error — the few-Rial drift that shows up in totals — never occurs in the first place.
  • Weeks start on Saturday. Weekly stats run Saturday through Friday, because that is your week.

Six modules, one account

Finance

Wallets, categories, transactions and budgets. A wallet's balance is always computed from its transactions and never stored as a separate number — so it cannot drift out of step with its own history. You can set a cap per category, per Jalali month.

Tasks

Tasks, subtasks, projects and labels. A task can carry a deadline, and that deadline shows up in the calendar automatically.

Calendar

Events with recurrence, plus Iran's official holidays. Two views: an Agenda that merges tasks, events and holidays into a single chronological list, and a weekly grid whose columns start on Saturday.

Habits

Define a daily habit, or a weekly one on specific days, and check in. The streak is computed from those check-ins. If you forget a day, you can go back through the month view and check that day off — you don't have to lose the streak to a missed tap.

Reports

A wrap-up for each Jalali month: what was spent, how the budgets landed, and how many tasks were completed. It is the one place financial data and task data appear side by side.

Notifications

When spending in a category passes its budget cap, you're told at that moment — not at the end of the month when nothing can be done about it.

How to start

There is no separate sign-up step and no password. Open maaleto.ir, enter your email, and a six-digit code is sent to you. Enter the code and you're in. If you didn't have an account, it is created right there.

Right now only email sign-in is enabled. Signing in by phone number isn't yet wired to a real SMS service, and choosing it returns an error message. This is a temporary limitation.

The six-digit code is valid for five minutes. If it doesn't arrive, wait a minute and request another.

It's on mobile too

There is an Android app carrying all six modules in full — not a cut-down companion. Web and Android both talk to one API, so anything you create in one is immediately there in the other, and neither is the "real" version.

The Android app is being prepared for Cafe Bazaar and Myket rather than Google Play, because Google's services are unavailable on many phones inside Iran. There is no iOS build yet.

Your data

Two things product introductions usually leave out, which I think belong in one:

  • You can see your active devices and cut any of them off. If you signed in somewhere and forgot to sign out, revoke it from that screen; it takes effect immediately.
  • Deleting your account really deletes it. Your rows are removed from every table — not flagged as deleted and left in place.

What now

Maaleto is live and you can try it today. If you have feedback or get stuck, tell me through the contact page — especially if something about dates, budgets or weeks behaves wrongly, since those are precisely the parts this project exists for.

And if you want to know what's behind it — the monorepo, the boundaries enforced by lint rather than by convention, and why the web is only "client number one" — the case study covers exactly that.

Was this useful?

Counts appear once there are 5 votes.

Related posts