../

When banks freeze your parents' assets.

Oyatoko · 2021 – present

I work at Kokorono, Japan's leading family trust company. Family trusts in Japan solve a specific problem: when a parent develops cognitive decline, banks freeze their assets. The family can't withdraw money for care, can't sell property and can't access insurance. By placing their assets in a trust, families can ensure their loved ones are cared for while maintaining control over their financial future.

Screenshot of the app's dashboard showing asset breakdowns and profit & loss trends.

What we built

Oyatoko lets customers track their spending and income, connect their bank accounts, manage real estate and financial assets, scan receipts, and generate mandatory yearly reports in a few clicks. The app is web-based and also available on iOS using Turbo Native. We shipped the first version in spring 2022 with a 3-person team. We kept adding features over the years as the product matured.

Navigating complexity

The domain sits at the intersection of finance and law: accounting systems layered with legal constraints specific to family trusts. We learned by working directly with the company's legal team, strategy team, and customer support to better educate ourselves and create a shared language we could use for discussions. If something didn't work, we'd talk to them and iterate.


Historical accuracy in a mutable database.

The problem

The app's ultimate purpose is generating yearly trust reports that a government branch can request at any time. But asset values change over time. If you generate a report in 2024 for the year 2022, you'd pull current values, not what they were worth two years ago. The numbers would be wrong.

What we rejected

The obvious approach was to "instance" every fiscal year: close the books, copy all data into the next term, and work from that snapshot going forward. Freee, a popular Japanese accounting service, works this way. But family trusts aren't companies. They don't have to file reports every year; they just need to be ready if asked. Forcing customers to formally close each year felt too rigid.

The insight

I realized the scope of the problem was narrower than it seemed. Bank transactions already had a natural timeline through journal entries, since every expense and income is dated. Only assets were the problem. A building's assessed value, a stock portfolio's balance: these change independently of any transaction. So I scoped the solution to assets only.

What we built instead

A "revisions" system. On any asset page, customers can add a revision, a snapshot of that asset's value at a point in time. When generating a yearly report, the system silently pulls the correct historical values and prompts the customer to double-check. If something looks off, they can jump straight to the asset page and add a revision right from the report flow.

Screenshot of the revision feature in action with some explanation of the UI. Screenshot of the revision feature in action with some explanation of the UI.

The payoff

For most users, this is invisible. They never have to think about managing "instances" or closing fiscal years, which makes the app drastically simpler than traditional accounting software. For the minority, frequently changing assets, the revision system clicks right after using it for the first time.


Designing around unreliable bank connections.

The problem

We added the option to connect bank accounts through a well-known API so customers could automate transaction tracking instead of entering everything manually. But this service connects banks from all over Japan, and those connections are fragile. They can fail without warning. Not all updates are real-time. Sometimes it takes half a day to get fresh data. And if a user disconnects their bank from the API service on their own, we lose the connection on our end too.

What we rejected

The easy approach would have been to treat the bank connection as binary: it works or it doesn't, and when it doesn't, show an error page. But that would leave customers stranded with no visibility into what went wrong, no path back, and potentially missing financial data.

The insight

Connection problems aren't exceptions. They're a normal state of the system. If we designed for that reality instead of treating it as an edge case, the experience could stay smooth even when the infrastructure wasn't cooperating. We first decided to map out the many different states of the bank connection and design for each one.

We communicate Attention required Context Resolve
API Credentials are invalid Very High Global / Wallet Cards / Wallet Show Users are directed to API site to reenter their credentials
Wallet Resource not found High Wallet Cards / Wallet Show Convert into manual account, then import again into the manual account to resume
Intervention Required High Wallet Cards / Wallet Show / Import. Accounts Users are directed to API Site and reconnect the bank to their vault
Wallet Update Status Low to Medium Wallet Cards / Wallet Show / Annual Report N/A
Wallet Pending Items Medium Wallet Cards / Wallet Show Users process pending items
Initial sync Wallet High Wallet Cards / Wallet Show Users are redirected to Wallet Show and asked to wait

What we built instead

Every surface that touches bank data has embedded alert states: the dashboard, the wallet list, individual account pages. Using color, messaging, iconography, and dedicated banners, we communicate clearly what went wrong and how to fix it. Journals created from imported transactions survive disconnections. Nothing gets lost. Reconnection is always available.

We also built a batch processing UI for incoming transactions. When data arrives from the API, it doesn't become a journal entry automatically. Customers categorize each transaction first: grocery shopping, care facility payment, utility bill. And when a manual bank account gets upgraded to an API-connected one, a short quiz walks through the transition: where to start importing from, how to reconcile existing data.

List of some bank related components. List of some bank related components.

The payoff

The system degrades gracefully instead of breaking silently. Customers always know what's going on with their bank connection and always have a way back. The complexity of dealing with a third-party API is absorbed by the design, not passed on to the user.


Feature highlights

Screenshots of Oyataoko's receipt scanning feature

Receipt Scanning

Customers photograph receipts and the app extracts the data through OCR. Transactions are created automatically, no manual entry required.

Screenshots of Oyataoko's dashboard

Dashboard

The home screen shows asset breakdowns and profit & loss trends at a glance so customers can understand their trust's financial health without digging through records.

Screenshots of Oyataoko's final report feature

Final Report

An intuitive wizard-like interface to guide users through the process of terminating their trust.


CONCLUSION

Half the customers opt in. They churn less.

Roughly half of Oyatoko's customers opt in to use the app when signing their contract. It's offered as a paid and optional companion to the trust service. Those users churn significantly less than the other half who don't use it. I believe Oyatoko makes it easy for our customers to manage their family trust with peace of mind. Today, Kokorono is the leading independent company on family trusts in Japan.