The LockMargin Origin Story: A Founder's Journey

December 2024. Kharkiv, Saltivka — a residential district, the kind locals call a "sleeping district": rows of Soviet-era apartment blocks where people live....

I Was the Problem I Was Solving

December 2024. Kharkiv, Saltivka — a residential district, the kind locals call a "sleeping district": rows of Soviet-era apartment blocks where people live but rarely work. The cafe across from where the market used to be — now they're prepping the site to rebuild it. The cafe survived. Smells like burnt coffee and wet wool coats. My old Dell Inspiron at 11% battery because the power went out at 9 AM, like it does. The cafe's generator only runs the espresso machine and two outlets. I got one. At least they have Starlink. Lucky me.

Three tabs open. FreshBooks. Google Sheets. Calculator on my phone — the laptop one I closed by accident and can't be bothered to find.

Just sent an invoice to a guy in Munich. €1,200. Three weeks of ERP customization for his logistics startup. FreshBooks made it look nice, sure. Then I exported to CSV, opened the spreadsheet, and realized I'd used the wrong exchange rate column again. Yesterday's rate. The hryvnia dropped 1.40 overnight. Not catastrophic, but now my "real" tracker — the one that tells me if I can pay rent — is off by almost 600 hryvnia. That's a week of groceries. Or nothing, depending on the week.

$19 to FreshBooks. $12.40 to the bank — they round up, always up, even when the rate moves the other way. Two hours of my life. For what? To understand a number I should've known instantly.

Sat there staring at the screen thinking: I built this shit for factories. Factories with hundreds of people. I can map a warehouse workflow in my head and code it before lunch. And here I am manually copying numbers between five apps like it's 2003.

Not dramatic. Just... stupid. And exhausting. And somehow worse because it's my stupidity. No enterprise to blame. Just me.


Twenty Years of Building for Others

Started in 2004. Delphi 7. A factory in Poltava needed an inventory module. I knew Pascal from university and lied about "enterprise experience." They bought it. Delivered in six weeks. Apparently they still use a descendant of that code — got an email two years ago asking if I could "update it for Windows 11." I never replied. Not because I was busy — I just forgot. Then I remembered, and it was already awkward. Might reply. Might not.

Factories. Retail chains. Once a small dental clinic chain — weird, because I hate dentists. Service companies. My job was always the same: find the inefficiency, build the tool, make it work well enough that nobody complains. I was good at the last part. "Well enough that nobody complains" is harder than it sounds.

Built ERP modules, inventory trackers, payroll systems. Sat with accountants who hated computers and managers who hated accountants. I could watch someone work for twenty minutes and sketch the database schema in my head. Probably still can. Muscle memory.

But I never used what I built. It was for "enterprises." For "teams." For people with departments and budgets and IT guys who speak in acronyms. I was the consultant who came in, fixed the system, collected the check, and left. Sometimes I didn't even know if they kept using it. Usually I didn't care.

Then in 2023 a client in Berlin ghosted me on a €2,000 project. Three months of work, invoice sent, silence. I realized I had no leverage, no contract worth the paper it wasn't printed on, and no system for any of this. So I started freelancing "properly." Registered as a sole proprietor. Got a FreshBooks account. Felt professional for about a week.

And discovered that everything I'd built for others was completely, utterly useless for me.


The Freelancer's Trap

I thought it'd be simpler. No office politics. No 9 AM standups. No enterprise software with licenses that require a law degree to understand.

Instead I had:

Every month, the same ritual. Export from FreshBooks. Import to spreadsheet. Realize the categories don't match. Fix manually. Convert euros to dollars at some rate I picked arbitrarily. Convert dollars to hryvnia at the bank's rate, which never matches what they actually use. Check if the Munich guy paid. He did, but the transfer took 4 days and the rate moved again. Send a reminder to the US client who always pays 2 weeks late. Update the tracker. Hope I didn't forget the $40 I spent on Figma in October, because if I did the accountant will ask about it in June and I'll have no answer.

And every month, the same low-grade anxiety: where is my data? On FreshBooks' servers. On Google's servers. A spreadsheet on my laptop that I think I backed up to Dropbox but maybe that was the old version, and the USB stick is... somewhere. Probably in the bag with the broken zipper. Not the bag I use every day. The other one. I haven't seen it in a month.

I tried switching. Wave was "free" but charged 2.9% per transaction — on a €2,400 invoice that's €69.60. Three weeks of groceries. QuickBooks was $30/month and asked me questions about depreciation schedules I didn't understand. Bonsai was beautiful, I'll give them that, well done. But they wanted to own my client relationships. Every tool had the same model: your data lives on our servers, in our format, and you keep paying to access what was yours to begin with.

That model never felt right. But I tolerated it because I didn't see an alternative besides "spreadsheets, voodoo, and prayers," and I'd met enough freelancers to know how that ends.


The Last Straw

November 2024. Project for a legal client in Warsaw. NDAs. Client confidentiality. Sensitive data — names, dates, financial records. And I realized, mid-upload to FreshBooks, that I was about to store this on someone else's server. In the cloud. On a computer somewhere in Virginia or Oregon, or wherever AWS puts the machines.

I read their privacy policy. All 12,000-plus words. Read their security whitepaper too, shorter, more diagrams. Both said the right things. AES-256. SOC 2. GDPR. But at the end of the day, my client's data was on a server I couldn't touch, in a country with laws I don't know, protected by people I'd never meet and couldn't hold accountable if something went wrong.

Closed the tab. Didn't upload the invoice. Wrote it in LibreOffice and sent a PDF. Felt paranoid. Probably was.

That week I met a friend for coffee. He's been freelancing since 2014 — ten years. Mostly frontend, React. I asked: "What do you use for invoicing?"

He opened his laptop. Old MacBook Air, dented corner. Showed me a folder called invoices_2024. Inside: PDFs with filenames like invoice_client3_march_final_FINAL.pdf, a text file called notes.txt with lines like "Client from Gdansk — pays slow but doesn't argue," and a spreadsheet named money.xlsx.

"I tried the cloud tools," he said. "Too expensive. Too complicated. And I don't trust them with my data."

"What about backups?"

He shrugged. Took a sip of coffee. "I email the spreadsheet to myself once a month. Gmail's basically a backup, right?"

I didn't have the heart to tell him.

That was the state of the art. That was the best a ten-year freelancer could do. A folder, a spreadsheet, and prayers to Google's servers.

And I thought: this is absurd. I can build systems for factories with a thousand employees and government auditors. But I can't build something simple for myself? For a friend? For anyone who's tired of renting their own data back from Silicon Valley?

I finished my coffee. It was cold by then. And bad.


The Decision

December 1, 2025. I remember because I wrote it in my notebook: "Started Lockmargin today. Maybe. Probably."

Opened a new folder on my desktop. Named it lockmargin_v1. Then lockmargin_v1_FINAL. Then lockmargin_v1_FINAL_ACTUAL. You know how it goes.

No business plan. No market research. No pitch deck for investors I'd never meet. Just a question, written in the same notebook: "What would I actually want to use? Not what sounds impressive. Not what scales to a million users. What would I — tired, in a cafe with bad Wi-Fi, needing to send an invoice before the battery dies — want to use?"

I came up with three principles. Not from a book. From two years of being annoyed:

My data stays on my machine. No cloud. No servers. No "we'll be right back" maintenance pages. If my laptop is in my bag, my data is in my bag. If I drop the bag in a river, that's on me, but at least it's my mistake.

(Though honestly, sometimes I wonder — wouldn't it have been easier to just sync with Dropbox? No. Not easier. But I wonder.)

I pay once, own forever. No subscriptions. No "we're updating our pricing" emails at 6 AM. No vendor lock-in where my data is in a format only they can read. If I stop using it tomorrow, my data is still a SQLite file I can open with any tool.

(Well, almost any tool. You need to know SQL. Or have DB Browser. But that's not my problem.)

It works without internet. Because I travel. Because cafes have bad Wi-Fi. Because sometimes the power's out and I still need to know if I can afford groceries. I don't want to wait for a page to load to send an invoice. I want: click, PDF, attach to email, done.

(Sometimes, though, I want to check the exchange rate. For that you need internet. But that's a different story.)

Those three principles eliminated 99% of existing tools. And they pointed to one architecture: desktop app, local database, offline-first. Simple. Boring. Reliable.

I chose Rust because I wanted speed without garbage collection pauses. Tauri because I wanted a modern UI without Electron eating 800 MB of RAM. SQLite because I didn't want to run a database server — I wanted a file. And I chose to build it alone because, honestly, I didn't want to explain why "no cloud" isn't negotiable to someone who thinks AWS is the default.


The First Month

December 2025. I was still freelancing — rent doesn't care about side projects. So LockMargin got mornings before client work and evenings after. Usually 6–“8 AM and 9 PM to midnight. Sometimes the morning session turned into a nap. Progress was... sporadic.

The first version was ugly. I'm not a designer. No design system, no animations, no "delightful micro-interactions." Just forms that looked like they were from 2005 and buttons that got slightly darker when you hovered. I showed it to a friend. He said it looked "functional." I think that was a compliment. Or not. With a friend, it's hard to tell.

But it worked. I could create a client — name, email, currency, done. Generate an invoice — line items, totals, tax if needed. Export to PDF. Took 3 seconds to open, 1 second to create an invoice. My data was in a single file, lockmargin.db, sitting on the desktop next to lockmargin_v1_FINAL_ACTUAL. I could back it up by copying it to a USB stick. Or emailing it to myself, if I wanted to be a friend.

Late December. I don't remember the date because I was nervous. Sent my first invoice from LockMargin. A test — for a friend who needed a quick fix. €800. Not a real client yet, but it worked.

I held my breath when I clicked "Export PDF." The file generated. I opened it. The font was wrong — I'd hardcoded Inter instead of checking system fonts, and the client's computer probably didn't have it. But the numbers were right. The layout was passable. I attached it to an email, wrote "Invoice for December work," and sent it.

Then I waited. Refreshed my bank app every two hours for three days like a teenager waiting for a text. On December 26, the money arrived — a friend's test payment. €780.60 after fees. The rate had moved again, but this time I didn't care — LockMargin had already converted it at the rate I'd locked in.

That was the moment I knew. Not because it worked — I knew it worked. Because I wanted to use it again. Because for the first time in two years, invoicing felt like something I controlled, not something that happened to me.


What I Didn't Know Then

I didn't know building alone would take six months. I thought three, maybe four. I was wrong. I was wrong about a lot of things.

I rewrote the database layer three times. First version used Rusqlite directly. Fine until I needed migrations. Second version tried Diesel. Hated the compile-time checking — great for teams, annoying for one guy at midnight. Third version settled on SQLx. Async, checked at compile time but not too checked. Good enough. Probably still not perfect.

Encryption was the hardest problem. Not the algorithm — AES-256-GCM is well-documented. The hard part was key management. Where do you store the key so the user doesn't lose it but an attacker can't find it? I spent two weeks on that. Posted on a security forum, got help from a researcher in Estonia I'd never met. He pointed out that my first implementation leaked timing information through comparison operations. I fixed it. He checked again. Found another leak. Fixed that too. Third time was clean. I think. I hope.

I dogfooded everything. Sent invoices at 2 AM because I forgot earlier and the deadline was morning. Found a bug where recurring invoices duplicated themselves if you changed the timezone. Fixed it at 2:15 AM. Sent the invoice at 2:20. Client paid on time. Never knew how close they came to getting two invoices.

The "simple" features were the worst. Recurring invoices. Time tracking. Expense categories. Each sounded trivial. Each took ten times longer than the "hard" stuff like encryption. Because simple means "obvious to the user," which means "the developer has to think of everything the user might do and handle it gracefully." And users are creative. One of my clients uses expense categories in a way I still don't understand the logic of. But it works. I don't touch it.

But I fell in love with the decision-making. Not the coding — the choices. Every feature: does this matter to a freelancer at 11 PM? Can we cut it? What is essential vs. what is nice? It felt like editing. Cutting words until only the necessary ones remain.

I didn't know any of this in December. But I knew one thing: I was building something I'd use. And for the first time in my career, that was enough.


Why This Matters (Maybe)

If you're reading this, you're probably a freelancer. Or a consultant. Or someone who works alone and wonders why the tools you're using feel... off. Like wearing someone else's shoes. They fit, technically. But they're not yours.

They feel wrong because they were built for someone else. For teams with standups and Jira boards. For enterprises with compliance officers who've never written a line of code. For people with IT departments to call when something breaks. Not for you. Not for the person sending an invoice at 11:47 PM from a hotel room where the Wi-Fi costs €15 a day and doesn't work anyway.

LockMargin is built for that person. For me in December 2025. For a friend with his money.xlsx. For anyone who's tired of renting their own data back from Silicon Valley.

That's who I was. That's who I am. That's who I'm building for.


What's Next

This is the first post in a series, I hope. Over the next six months, I'll write about the technical decisions — why Rust, why Tauri, why SQLite. And why I'm still not sure I chose right. Maybe Go would've been faster. I don't know. Too late now.

I'll also write about the security audit process and what the Estonian researcher taught me. About features we cut (cloud sync, sorry, I know you wanted it) and features we kept (local encryption, because it's not optional).

I'll be honest about what worked and what didn't. Because this isn't a success story — yet. It's a work in progress. I still find bugs. I still rewrite things. Last week I broke PDF export for two hours because I updated a font dependency. Fixed it, but not before panicking.

If you want to follow along, I'll post updates here. Or not. The tool will exist either way. I use it every day.


LockMargin

Free to try. No account. No cloud. No "we'll be right back."

Just a tool that I built because I needed it, and that maybe you'll find useful too.

[Download Free — No Account Needed] | [Compare Pricing]

Start tier: free to try - up to 5 clients. Standard: $49 one-time. No subscriptions. No "pricing updates." Ever.


P.S. — a friend switched to LockMargin last month. His `money.xlsx` is now `money.xlsx.backup.old`. Progress. He still emails himself, but now he emails `lockmargin.db`. I don't know if that's better or not. But he paid $49 one-time, so I don't care.

(Though honestly, sometimes I wonder — haven't I just become FreshBooks, but cheaper? $49 one-time is still vendor lock-in. Just cheaper lock-in. I don't know. Need to think about that.)

Frequently Asked Questions

Did you really build this alone?

Yes. I write the code, test the features, answer the emails, and write the blog posts. I consult with specialists on security and UX, but the product is mine.

Why Rust?

Speed, safety, and native binaries. I wanted an app that opens in under a second and doesn't depend on a runtime. Rust gives me that.

Is LockMargin really free?

The Start tier is free to try - up to 5 clients. Standard is $49 one-time. No subscriptions, no hidden fees.

Can I see the code?

LockMargin is closed-source for now. Parts may be open-sourced in the future, but the core product remains private.

What if I stop using LockMargin?

Your data stays on your machine. Export it to CSV, PDF, or JSON anytime. No account to delete, no subscription to cancel.

Vlad (Volodymyr) Shiyan, founder of LockMargin

About the Author

Vlad (Volodymyr) Shiyan — Founder & Developer, Kharkiv, Ukraine. Building LockMargin since December 2025. Offline-first invoicing for freelancers who are tired of subscriptions. Standard is $49 one-time. Read more about Vlad →

Get one practical guide each month on building a business you own

No spam. No fluff. Unsubscribe anytime.