vadimkravcenko

Building a side-project

28 June 2022 ·7,610 views ·Updated 04 April 2026

As you probably guessed from the silence in your inbox — I missed this week’s newsletter slot. Nothing dramatic happened. I just fell into a weekend-long coding hole: late nights, coffee that tasted like battery acid, techno looping in the background. Felt almost nostalgic, like those university days when I was cranking out open-source libraries nobody asked for.

This time the itch was a bit different. I enjoy writing these blog posts, but creating the social cover for each article kept stealing ten minutes here, fifteen minutes there. Ten minutes isn’t the end of the world, yet after the fifteenth cover it starts feeling like chewing glass. So I hacked together a tiny SaaS that spits out images from a single line of drop-in code.

Covertool was the working title — strikethrough because I’m already second-guessing the name.

Quick note (before you rush to register): I don’t plan to invest serious time into this right now, so please hold off on sign-ups.

If you still need automatic covers, a few solid — and free — options already exist:

Automated Images in one-line of code.

I kept pricing dead simple — one plan, flat fee, no counters hidden behind asterisks. That part was easy. The hard part was everything underneath: turns out generating decent-looking images on a headless server is surprisingly painful.

Plenty of “Aha!” moments, most of them preceded by three hours of “Why won’t you render, you cursed rectangle?” The very first social cover took me somewhere around six hours. Here’s why.

Outdated HTML processing

I started with the venerable wkhtmltopdf (yes, PDF) because I’d used it years ago and muscle memory is a powerful drug. The WK in the name means WebKit — unfortunately the WebKit version bundled here is frozen somewhere around Safari 5. No modern flexbox, no grid, external CSS only if you twist three knobs just right. I did consider headless Chrome via Puppeteer or Playwright — that’s what most people use today — but those tools pull in a full browser and the cold-start latency inside a tiny Docker image looked scary for a weekend project. Maybe I’m over-optimising prematurely; I’ll revisit if this ever sees production traffic.

By the way, if you have a reproducible setup for Playwright that doesn’t balloon to 500 MB, ping me — I’m not entirely sure my trade-off was wise.

Image generation with Python feels like the unglamorous corner of the internet. Half the Stack Overflow questions have zero answers, and many GitHub issues read like abandoned diary entries. I was a lone explorer wading through outdated Linux binaries and libraries last touched during the Obama administration. Fun times (well, in hindsight).

Here comes Tailwind

If you’ve missed the hype, Tailwind is a utility-first CSS kit that lets you prototype at unsafe speeds. Copy, paste, ship — exactly the amount of thinking my Saturday brain was willing to do. Most of the dashboard came together in an evening. Integrating the Tailwind build pipeline into a Python-based Docker image, on the other hand, felt like bolting a spoiler onto a lawn mower. It works, sort of, but don’t look too closely.

(I should be upfront — people smarter than me have cleaner setups. I just wanted something that ran before Monday.)

Now, writing code is the comfortable part. Getting anyone to notice the thing? That’s where I usually hit a wall. My “marketing plan” so far fits on a sticky note: tweet a gif, maybe post on Product Hunt, hope someone cares. I know, I know — talking to potential users first would have been wiser. Next time I’ll try the “validate before code” route; this time I was already knee-deep in Python before the thought crossed my mind.

The URL above results in this image.
figuring-out-a-way-to-protect-the-images">Figuring out a way to protect the images

The pitch is a one-liner you embed in your HTML. Nice for users, tricky for abuse prevention. A generated cover is just a public URL — anyone could copy it once and serve it for free. After over-engineering several cryptographic schemes (and losing a night’s sleep), I realised the low-tech fix is fine: each customer whitelists their own domain in the dashboard and that domain is watermarked on the image itself. If someone hotlinks the URL, they’re advertising the paying customer’s site. Good enough for now, though I wouldn’t bet the farm on it scaling without edge-case leaks.

Other parts of the SaaS

The stack is the standard grab-bag: Auth0 for login, Stripe for money, Postmark for email, DigitalOcean for servers. I still like DO for small projects, but compared to AWS or GCP the managed options are thin. You can cobble together droplets and DIY everything; sometimes that’s fine, sometimes you spend half a day wiring up what a cloud function would have solved in five minutes.

Why build it?

I live in firefighter mode at mindnow — if I’m coding there, something’s probably on fire. Side projects let me poke new tech without the pressure of uptime dashboards. There are different flavours to these things: hobby experiments, portfolio pieces, and “maybe this pays for dinner” micro-SaaS plays. Covertool sits in the last bucket — a for-profit idea, but intentionally low-maintenance.

If you’re managing teams full-time, starting something from zero every once in a while keeps you honest. You remember how painful onboarding is, you struggle with naming classes again, and you re-learn why everyone complains about CSS. It sharpens the senses (and occasionally the ego, in the best possible way).

What's next?

Realistically, I’ll park the repo once the initial curiosity fades. I have a day job; I’m not banking on this turning into the next Bannerbear. That founder went all-in — tight runway, real urgency, and it paid off. I’m taking the slower, safer path: tinker, learn something, move on. If Covertool gathers dust, so be it. The weekend was still worth it.


Other Newsletter Issues:

Worried your codebase might be full of AI slop?

I've been reviewing code for 15 years. Let me take a look at yours and tell you honestly what's built to last and what isn't.

Learn about the AI Audit →

No-Bullshit CTO Guide

268 pages of practical advice for CTOs and tech leads. Everything I know about building teams, scaling technology, and being a good technical founder — compiled into a printable PDF.

Get the guide →

10 Comments

  1. Anonymous

    really? People pay for this shit? LOL its dumb af

  2. Anonymous

    lol deleted comment, this is a shitty project xD who in their goddamn mind wants to generate such blatant and empty images.

  3. Vadim (author)

    No comment gets deleted 🙂 thank you for your feedback!

  4. Anonymous

    Wow, some people are just so mean on the internet. I haven’t had time to read through everything but people who create things always have respect from me. Especially more than people who go out of their way to shit on other peoples work. Looks like an interesting project!

  5. Anonymous

    This is cool and also a good writeup. Please ignore the haters

  6. Anonymous

    Could you make your library open source? 🌚

  7. Anonymous

    Hopefully you can ignore the haters. The pricing model is pretty good as far as “set it and forget it” services go – $2 is less than a cup of coffee, so if you can afford a domain you can sure as hell afford that too… Images look pretty slick as well. Nice job 👍

  8. Anonymous

    You have a typo on the ‘Start Using’ button

  9. Vadim (author)

    Thanks for notifying me regarding the typo. Fixed it!

  10. Anonymous

    nice

Cancel