Heimdall helps small businesses run marketing workflows without dedicated marketing teams. I supported product architecture and implemented backend systems for campaign planning, generation, publishing, approvals, and stakeholder review loops across the major social platforms.
The Workflow Gap
Small businesses often need consistent marketing output, but they do not always have a team that can plan, generate, review, publish, and monitor content across channels. The work fragments across tools and people, and the result is either inconsistent posting or a bottleneck where everything waits on one person's approval.
The system needed to make those steps legible. Campaign planning, generated content, approvals, publishing state, and monitoring signals all had to be connected enough for non-specialists to trust the workflow.
Approach
The backbone is a content lifecycle: each post moves from draft to review to scheduled to published to measured, with role-based approvals at the review step so the right person signs off without becoming a daily blocker. Publishing to multiple networks runs through background workers (Celery) that handle each platform's quirks, retries, and rate limits, so a single channel failing does not stall the rest of a campaign.
AI generation is framed as a step inside that lifecycle rather than a magic button: the model proposes caption variants and repurposed content, and the approval workflow keeps a human in the loop before anything goes live. Monitoring closes the loop by feeding engagement back to the same workspace that planned the campaign.
What I Worked On
- Built backend systems for a marketing automation SaaS aimed at SMBs.
- Implemented social campaign, publishing, generation, approval, and monitoring workflows.
- Supported product architecture for automation and stakeholder review loops.
Outcome and Durable Shape
The product became stronger when automation was framed as a workflow with review points, not just a generation feature. That made AI output easier to control and made publishing behavior easier to explain. The backend's job was to keep the process calm: clear state, clear ownership, and clear recovery paths.

