You Can't Debug an Ugly Image - Building ByPosting.com
Oscar Gallo
Published on March 26, 2026
I thought I was building a posting tool. I ended up learning 6 skills I didn't know existed, fighting scope explosion at every turn, and coming out the other side as a completely different builder.
I have zero marketing knowledge.
Like, none. I've read a couple of Seth Godin books. I've nodded along to Twitter threads about engagement and funnels and "content strategy." But if you sat me down and asked me to write a LinkedIn post that didn't sound like a corporate press release or a robot trying to be your friend? I'd stare at the screen for 20 minutes and close the tab.
And here's the thing. I've built over 70 apps. I can ship a full-stack product in a weekend. Wire up an API, design a database, build a UI, deploy it, move on to the next thing before most people finish their PRs. Code isn't the problem. Code has never been the problem.
But posting about what I build? Showing up on social media consistently? Creating content that actually sounds like me and not like ChatGPT had a fever dream about hustle culture?
That's where I hit a wall.
I'm a father. I run a business. I have side projects that I care about deeply. Free time doesn't exist. It gets manufactured in 30-minute windows between calls and school pickups. The idea of becoming a "content creator" on top of everything else felt absurd. But the need was real. I needed to be more visible. I needed to share the things I was building and learning. And I needed to do it without sounding fake.
So I did what I always do. I decided to build the tool myself.
That tool became byposting.com. And building it nearly broke me.
It Was Supposed to Be Simple
The initial scope was small. Almost comically small.
Schedule posts. Create posts. Post to LinkedIn. One platform. Three features. Done. Ship it in a few days, use it myself, move on.
And at first, it was fun. Really fun. I had a working prototype fast. Posts going out to LinkedIn. The dopamine of shipping something that actually works for a problem you personally have. It felt like every other 0-to-1 project I'd built.
Then I opened the first door I didn't know was there.
What about branding? If someone new signs up, how do they set their brand voice? How does the AI know what they sound like? I can't just hardcode my own voice into the system. That defeats the purpose.
So I built an onboarding flow. Brand kit. Brand voice extraction. The whole thing, automatically set up from the moment you sign up.
That was the first detour. It wouldn't be the last.
The next question: what about the content calendar? If someone signs up and their calendar is empty, they'll think the product is broken. So I added automatic content generation — if your calendar is empty, the AI populates it for you. Now you can immediately see what the tool can do.
But auto-generating content isn't just "call an API and dump text." It's a workflow. Multiple steps. Content strategy decisions, tone matching, platform formatting, scheduling logic.
I had just stumbled into my first unexpected skill: prompt engineering.
My early prompts produced content that read like a corporate memo written by an intern who'd just discovered exclamation marks. Flat. Generic. The exact thing I was trying to avoid. Getting a language model to write something that sounds like a specific human, not just "professional" or "casual" but actually like you, is way harder than "write me a LinkedIn post."
I spent days iterating. Rewriting system prompts. Testing edge cases. Learning what context to feed the model and what to leave out. My first 10 prompts were garbage. My 50th started sounding human. By the 100th, they started sounding like me.
But here's the problem. I wasn't building a posting tool anymore. I was building something much bigger. And every feature I finished ripped open a new list of features I hadn't even considered.
The Scope Explosion Nobody Warns You About
If you've ever built a product that solves your own problem, you know this pattern. You ship one feature. It works. And immediately you see 3 more things it needs to do.
LinkedIn posting needed a brand voice system. The brand voice system needed onboarding. Onboarding needed content calendar auto-generation. Content calendar generation needed AI workflows: multi-step pipelines that chain prompts, parse outputs, apply formatting rules, and schedule the results. AI workflows needed automations, because running them manually every time isn't a product, it's a chore.
Every skill unlocked the next. All of them were things I'd never done before.
The brainstorming feature was the one that mattered most to me. I wanted something specific: sit down with an AI agent, discuss a topic, have it search for information, learn alongside me, and then help me write something about it. Actually collaborate, not generate a post in one shot. Like a conversation with a smart coworker who's been reading everything you haven't had time to read.
Building that meant understanding how agents actually work. Not just "call an LLM," but real agent architecture. Context management, tool use, search integration, memory across turns. The agent needed to hold a conversation, pull in research on the fly, and channel everything into a draft I could refine until it sounded right.
AI workflows? Content calendar auto-generation demanded it. AI automations? Doing anything manually at scale is a dead end. Agents? The brainstorming feature needed a real conversational partner, not a text generator.
None of these were in the original scope. They weren't on any "things I need to learn" list. They showed up because the product demanded them, one by one, like a trail of breadcrumbs leading deeper into a forest I didn't know I'd entered.
Scope explosion I could handle. I know what it feels like when a project grows legs. You prioritize, you cut, you ship.
But the next part genuinely stumped me.
A Developer in a Creative's World
Posts need images.
That sounds obvious. Every social media post performs better with a visual. I knew this going in. I figured I'd integrate an image generation API, write a prompt, get an image, attach it, done.
I was so, so wrong.
Think about that for a second. I'm a developer. My whole career is logic, structure, deterministic systems. I write a function, I know what it returns. I write a test, it passes or it fails. There's no ambiguity. The code either works or it doesn't.
Image generation is none of that.
You write a prompt, and you get... something. Maybe it's good. Maybe it's terrible. Maybe it's technically fine but the style doesn't match the brand. Maybe the composition is off. Maybe the colors clash with the post text. Maybe the AI generated hands with 7 fingers and you didn't notice until it was already posted.
You can't debug an ugly image. There's no stack trace for "this doesn't feel right." You can't write a unit test for aesthetics.
I spent entire evenings trying to get consistent visual styles for post images. In code, consistency is easy — you define a config, you follow it, done. In image generation, "consistency" means learning about art direction, style references, negative prompts, seed values, aspect ratios, composition rules. Things I had literally never thought about in my life. Things that live in a completely different part of the brain than the one I've trained for 15+ years.
And then there's video. Transitions, pacing, text overlays, motion design. Every creative AI tool I touched felt like learning a new language where I couldn't even read the alphabet.
I've shipped products across dozens of tech stacks. And for the first time in a long time, I felt lost. Not "I need to read the docs" lost. Lost in the way where you realize the skills you've spent your career building are necessary but not sufficient. The gap isn't knowledge. It's a whole different mode of thinking.
That was the hardest part. Accepting that my developer identity, the thing I've built my career and confidence on, wasn't enough. This project needed me to become something I'd never been: someone who thinks visually. Aesthetically. Creatively. There's no framework to install for that. No library to import.
You just have to sit with the discomfort and keep building.
When the Learning Becomes the Point
I don't remember the exact moment it shifted. There wasn't a single breakthrough. No eureka. It was more like waking up one morning and realizing the fog had cleared without me noticing.
The image prompts got better. Not great, but consistent enough. The agent architecture stabilized. The workflows ran reliably. The content calendar started populating itself with posts that actually sounded like something I'd write.
And somewhere in the middle of all that, I stopped thinking about the skills as obstacles.
Prompt engineering became a tool I reached for instinctively. Agent design became a pattern I could reason about. Even GenAI, the thing that had completely humbled me, started feeling less alien. Not mastered. Not even close. But approachable.
And here's the thing. The last skill on the list turned out to be the one that tied everything together: social media strategy.
Not the kind you read about in marketing books. The kind you develop by building a tool that makes 50 decisions about content every day. What makes a hook work? Why does this post get engagement and that one gets silence? What's the difference between sounding authentic and sounding like you're trying to sound authentic?
I learned social media strategy the way you learn any skill that actually sticks: by building the system that executes it and watching what happens.
"Sounding natural is not an option, it's a requirement." I wrote that in my first notes about this project. That single constraint forced me deeper than any tutorial ever could. Robotic outputs? Learn prompt engineering. One-shot generation not cutting it? Build a real agent. Plain text posts getting ignored? Figure out creative AI.
The constraint was the teacher.
The Elixir Isn't the App
Here's what I thought I was building: a tool to help me post on LinkedIn more consistently.
Here's what I actually built: a completely different version of myself.
I'm still a developer. I still think in functions and data flows and system architecture. That hasn't changed. But layered on top of it is a set of skills I never planned to learn. I can design AI workflows now. I can build agents that hold real conversations. I can prompt a model to produce content that sounds human. I can think about visual composition in ways that would've been completely foreign to me a year ago. And I can reason about social media strategy from the inside, not as an outsider reading about it.
Six skills. That's the count.
Prompt engineering, because AI-generated content sounded fake. Agents, because brainstorming needed a real conversation partner. GenAI, because posts needed visuals I couldn't code. AI workflows, because content generation is a pipeline, not a single call. Automations, because doing anything manually doesn't scale. Social media strategy, because none of the rest mattered if nobody saw it.
They all showed up uninvited. They all forced me to grow in ways I didn't expect. And they're all part of how I think about building products now.
The app ships content. The journey shipped me.
I'm still a developer. But I'm a different kind now.
Your Turn
There's a project you've been avoiding.
You know the one. The idea that excites you but also terrifies you because you can see, clearly, all the skills you don't have yet. The ones that sit outside your comfort zone, outside your identity.
I didn't take a course on prompt engineering. I learned it because the alternative was shipping content that sounded like a robot wrote it. I didn't study agent architecture from a textbook. I built one because the product needed it. I didn't enroll in a design school to understand visual composition. I stared at ugly AI images until I figured out why they were ugly.
Building is the fastest teacher. Always has been.
The skills come because they have to. The thing you're trying to create demands them. And somewhere along the way, the skills change you. You look back and realize you're not the same person who started.
So pick the project that scares you. The one where you don't know half the skills you'd need. Start it anyway.
That's the elixir. And you can only find it by moving.