Myra ERP · Rara Labs
Banking for the co-op down the street
Savings and credit cooperatives in Nepal run on paper ledgers and the trust of people who know each other by name. Myra moved 26 of them onto a real core banking system in its first release, shipped six months after the first commit. I was the first hire on the development team at Rara Labs, which meant the first architecture decisions were mine to get right: an NX monorepo on the front, Go and NestJS services behind it, one codebase serving every tenant in Nepali and English.
- Role
- Senior software engineer, first hire
- Years
- 2021–23
- Stack
- Go · React · NX · NestJS
- Scope
- 26 co-ops at launch

02
One member, whole story
A cooperative's whole business is its members, so the member record is where Myra had to earn its keep. Everything a member holds, shares, savings, loans, transfers, requests, hangs off one profile, and the list view has to stay quick when a co-op crosses ten thousand of them. Search, filters, and exports run server-side; the reporting queries and APIs behind that table were mine, tuned so a branch manager pulling a month-end list is never waiting on the software.
Getting a member in is the harder design problem. Regulators require Know Your Member paperwork, and the people typing it in are clerks with a queue at the counter, not data-entry specialists. So the onboarding form keeps score in the margin: a checklist sidebar shows each section's progress, validation flags what is missing without blocking the rest, and a half-finished application can be saved and picked up after lunch. The spec below is annotated with the spacing redlines we held the build to.


03
Shares you can hold
Co-op members own the co-op, and that ownership is paper they expect to hold. Myra's share register prints under the cooperative's own letterhead, issue and return rows with their kitta ranges laid out the way the registrar's office already reads them, because a report that looks unfamiliar to a regulator might as well be wrong. Filters, print preferences, and saved exports live beside the table, not in a separate reporting product.
The certificate itself comes out of the same data: a generated शेयर प्रमाण-पत्र with registration numbers, the amount written out in words, and signature blocks where the committee expects them. Bilingual output was not a toggle bolted on at the end; every document template carries both scripts, and the numbers reconcile with the register either way.


04
Beyond the counter
Once the banking core held, the suite kept growing: Accounting, Inventory, Alternative Channels for the members who bank by phone, and an employee app for the staff running it all. The training calendar below is that last one, course objectives, trainers, and enrollment behind a single event click. The NX monorepo is what made this pace survivable; a new app started from shared libraries for auth, tables, forms, and translations instead of from zero.
The other half of the job never screenshots well. Every tenant is isolated, every screen sits behind role-based access, and I carried the production DevOps, Docker and Kubernetes on AWS, with PostgreSQL and MongoDB underneath and GraphQL in between. When your users are cooperatives holding their neighbors' savings, boring reliability is the feature.
