Inspiration I am a solo founder who ships AI products in public. The boring truth is that the hardest part of marketing is not writing one good post. It is the daily grind of showing up on X, Reddit, and LinkedIn in your own voice, every day, without burning the few hours a founder actually needs for building.
I kept watching great products die quietly because the founder hated marketing. Agencies cost $13,000 a month. Scheduling tools just repost the same text everywhere. Nobody solved the real job: research where your buyers actually talk, write like you, and queue it so you stay in control.
AICMOHQ is my answer. Five agents that act like a marketing team. You approve, then it publishes. Nothing goes live without your yes.
What I learned The biggest lesson was that autonomy without a trust boundary is a liability. The product only works because of one invariant: approval first, publish never. Users will let agents draft all day, but the moment something posts without a human glance, trust is gone.
I also learned that a credit meter is a product surface, not an accounting detail. When a post costs 5 credits on X, 7 on LinkedIn, and 18 for a long form blog, the user needs to feel the math. A marketing hire at $13,000 a month versus $49 here is not a slogan, it is a ratio:
[ S = 13000 - 49 = 12951 \text{ dollars saved per month} ]
And the value per credit is legible too. On the Pro plan:
[ \frac{2000 \text{ credits}}{7 \text{ credits/post}} \approx 285 \text{ LinkedIn posts per month} ]
That is the number that makes the price feel fair.
Finally, I learned to dissolve my own architecture mistakes early. A circular dependency between my lib and core layers was slowing every build. Extracting them into one shared @aicmohq/core package removed the cycle instead of patching around it.
How I built it AICMOHQ is a Next.js app written in TypeScript, with React on the front end. Supabase handles auth, the Postgres database, row level security, and the server side middleware that enforces the onboarding gate. OpenAI powers the agent writing. twitter-api-v2 talks to X, googleapis to other channels, and zod validates every boundary.
The agent runtime is a small team: a scout that finds where your buyers talk, a writer that drafts in your voice, and a publisher that only fires after approval. Long running work is queued through BullMQ on Redis so a draft job never blocks the UI. The intake flow streams agent events live to the dashboard, so you watch the post get written in real time.
Billing runs on Dodo Payments with a credit system metered per channel. A hard rule keeps node:crypto out of the browser bundle by exporting a client safe PLANS object, so the pricing table renders without pulling server only code into the client.
Challenges Keeping the approval first invariant honest across five agents was the core fight. Every channel publish path has to route through one gate, or a sibling caller eventually skips it. I fixed it once, at the shared publish boundary, not at each caller.
Credit metering had to be exact. A miscounted post is either a stolen credit or a free post the user did not expect. I centralized the cost table (CREDIT_COSTS) and made pricing render from the single PLANS source of truth, so the site and the billing backend cannot disagree.
Shipping alone meant the architecture had to stay small enough to hold in my head. The lib and core cycle was the first thing I refused to live with, and extracting @aicmohq/core paid back immediately in build speed and clarity.
Built With
- bullmq
- n8n
- next.js
- openai
- postgresql
- react
- redis
- supabase
- tailwind-css
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.