AdShort AIAI-driven short-form ad platform — automated video generation, scheduling, and publishing.
DevandLogics · France-based client · 2025

Role
Lead backend & AI engineer
Duration
~12 weeks
Team
Solo on backend / AI · co-built with client product team
60%
Faster delivery
75%
Less manual work
Multi-lang
Auto publishing
The challenge
A France-based AdTech client needed to scale short-form video advertising across markets and languages, but their existing pipeline depended on humans for every prompt, render, and publish step. Output was inconsistent and campaign throughput was capped by team size.
What I built
I designed and built the end-to-end backend in NestJS + TypeScript, orchestrating Gemini and Vertex AI for prompt generation, media synthesis, and translation. The system handles scheduling, retries, and publishing across multiple ad networks with idempotent workflows so a failure mid-pipeline never corrupts a campaign.
- Modular NestJS backend with isolated prompt, media, and publish services
- Gemini + Vertex AI integration with structured outputs and retries
- Job scheduler with idempotent workflows and per-tenant rate limits
- Multilingual content automation across creation and posting
Key technical decisions
The choices behind the choices — and what tradeoff each one made.
Vertex AI over raw OpenAI for video synthesis
Vertex's region controls and predictable enterprise quotas mattered more than marginal quality differences. The client needed EU-region inference and reproducible billing — not the bleeding edge.
NestJS modules per pipeline stage
Prompt, media, translation, and publish each live as isolated modules with their own DTOs and queue. A bad render can't poison the publish step, and we can scale the slow stage independently.
Idempotent jobs over retries-with-state
Every job carries enough context to be safely re-run. We chose this over distributed locks because the operational model is simpler — a crashed worker is a non-event, not an incident.
Outcome
Delivery speed improved by 60% and manual effort dropped 75%. Multilingual automation now runs unattended across creation and posting pipelines, and the marketing team ships more campaigns per week with more consistent output.
Lessons & what I’d do differently
- Structured outputs from the LLM saved us weeks of downstream parsing — define the schema before you write the prompt, not after.
- Per-tenant rate limits should be in place from day one; retrofitting them under load is painful.
- Translation quality varies sharply by language pair — surface a manual-review queue for the long tail rather than chasing 100% automation.
A look inside
Screens from the shipped product.



Working on something similar? I’d love to hear about it.
Get in touch