The "Biller by the Hour" is the ultimate villain. 🦹♂️
I was quoted £250/hr to negotiate a redundancy settlement. I did it myself with an LLM instead.
Result: +4 figure payout.
Now I’m building Contracto to give that same power to every freelancer.
Day 6 of shipping in public. I’m tired (newborn at home!), I’m anxious, but the mission is real.
Check the build here: cntrcto.com#buildinpublic#indiehacker
Found a bug in LexPact's anonymous contract limit. If two requests landed close together, both passed the check before either one was saved, so both went through. I fixed it by holding a lock for the whole generation instead of just checking at the start.
Chased a bug for weeks where some new LexPact signups lost the contract they made before signing up. Went through the code connecting sign up to the contract several times and found nothing wrong. It turned out to be a Supabase dashboard setting still pointing at the old domain.
Changed how LexPact's API free tier counts usage. It used to be tracked per API key, so revoking a key and making a new one reset your free generations. Now it's tracked per account across every key you've ever made, revoked ones included.
I'd had CableStatus's first Reddit post fully written and ready to go for three weeks and just never posted it. When I actually sat down and looked at what mattered most across everything I'm building, that unposted plan was the single highest leverage thing on the list.
Checked the LexPact queue today. First lead in about four days that actually reads like someone with a real contract problem, not just a keyword match, and most days it's just noise until one post like that finally shows up.
Changed LexPact's API free tier from 2 generations a month to 10 total with no reset. A monthly quota didn't make sense for a tier meant for people trying the API out, not running it in production.
Added a small animation to the new LexPact mark. The two diamonds split apart on load then lock back together, meant to read as sealing the pact. It only plays once per session so it doesn't replay on every page you visit.
I spent a session picking a new logo mark for LexPact. Landed on two diamonds overlapping at 45 degrees, straight mitred edges, no rounded corners. The overlap is the pact itself, two parties meeting in the middle.
My domain sourcing pipeline turned up 40 available names this week, brandable ones and real word compounds both. I bought exactly zero of them. They still need a cross check before I'd trust any of them enough to actually spend money.
I spent a chunk of this week chasing a timeout bug in my contract API. I kept raising the Vercel function timeout, but the real limit turned out to be Cloudflare sitting in front of my domain, which kills requests after about 100 seconds no matter what Vercel allows.
I fixed a dashboard that had been down two weeks by changing the port and calling it done. Turned out it was just running as a background process, not actually under systemd, so it would have died again on the next reboot until I went back and restarted it properly myself.
On one of my projects I thought about grabbing someone's email as soon as they started a form, before they'd finished it, so I could chase them if they dropped off. Didn't build it. No lawful basis to email them yet, and it breaks a promise I made not to do outreach there.
I rotated a password and locked the firewall after a security incident and thought that was the fix. Turned out my database driver was built for a hosted service I'd already left, still quietly pointed at it. Swapping that package fixed what the firewall never touched.
I always assumed systemd's auto-restart meant a crashed service would just keep healing itself. Turns out it gives up after enough failures too, mine hit that limit on a port collision, and sat there silently dead for two weeks before I even noticed.
I added a separate credentials file and a scratch database branch so one of my automated agents can't touch production data by accident. Before trusting it, I checked which database host a child process actually connected to. If I hadn't, I'd have just been hoping it worked.
One of my Reddit accounts got banned and a separate post got flagged for reading like AI, both within a day of each other. Now every draft I put out has to pass through a script I built that checks for the actual tells first, before it goes anywhere near a real account.
I tried moving one of my repos to a new folder and it just failed, no error, so I assumed something had it locked. Turned out the folder had 66,840 files in it, years of node_modules I never cleaned out, a normal move just can't handle that many files at once.
I went digging into my LexPact analytics and found that months of custom conversion events, contract generated, CTA clicks, were never recorded. Self-hosted Plausible drops any custom event without an exact matching Goal saved in the dashboard, no error shown anywhere.
I had a post removed by a mod team. Their reason was 'your entire profile reads like AI, so does this post in particular.' Then I got banned from a different subreddit within 24 hours of the same session.
I spent a good chunk of time debugging why a custom heading wasn't showing on one of my LexPact template pages, convinced it was a Vercel caching issue. It turned out the component never accepted a heading prop in the first place, the text was just hardcoded.