Volvo EbalAI systems and automation
Built inside an agency

Seven systems that run somebody else's operation.

These were built under contract for a creative agency, so they are described by what they do rather than by whose name is on them. Every one is in daily use.

The client's name and its own clients' names are theirs to publish, not mine. Ask on a call and I will walk you through any of these properly.
[01]

Voice-driven operations HUD

Hold a key, say what you want, and a daemon does the work and reports back.
A browser dashboard, a local speech server and a background daemon that runs the actual jobs. The daemon owns the schedule rather than the dashboard, so the work still happens when nobody has the page open, and everything it does lands in a chat channel where the team already is. Roughly forty separate jobs run on it.
Next.jsNode daemonPython speechSlack
[02]

Drive-to-database tracker

Every client folder swept daily, and anything that changed is reported by name.
Crawls the whole client drive, compares it against a Postgres table and posts what is new, what changed and what has gone missing. A file that vanishes is marked absent rather than deleted, and a client whose crawl came back incomplete is skipped and said so, because a partial read must never be reported as a deletion.
11,564 files swept in 121 seconds
NodeGoogle Drive APIPostgresSlack
[03]

Seven research agents on one library

Packaged so a colleague can install the whole set and run it themselves.
Ad and audience research split into seven agents that share one library, one command line and one test suite, with the whole thing extracted into a standalone package. Two of the seven spend money per run, and they are labelled as such, because the person installing it should know which button has a bill attached.
NodePostgresVendor APIs
[04]

Three generation bots in Slack

Ad concepts, then scripts, then storyboards, each written into the real document.
Three bots covering consecutive stages of a creative pipeline. The point of them is where the output lands: each writes into the actual deck or page the team works in, not into a chat reply somebody then has to copy out. Each stage waits for a human to approve the one before it.
NodeSlackGoogle SlidesNotion
[05]

Multi-platform publisher

Write once, schedule to four networks, and generate the creative in the same app.
Scheduling and publishing to Facebook, Instagram, Threads and TikTok, with a calendar you can drag posts around. Its ad-creative side rebuilds a proven layout around your own product photo, working from a library of vetted templates rather than inventing a layout, which is what stops generated ads looking generated.
1,024 vetted ad templates
Next.jsPostgresImage models
[06]

Local-business agency OS

Find the business with no website, build it one, then manage the aftermath.
Map search that ranks well-reviewed businesses with no web presence first, a generator that produces a real self-contained site with structured data and a preview you can close on, a profile manager with a staleness tracker so a retainer cannot quietly rot, and an outreach pipeline. One app, five screens.
Next.jsPlaces APIStructured data
[07]

Research database

The reference layer the generation tools read before they write anything.
Ad formats, their mechanics and the concepts actually pitched, collected into a database the other tools query first. It exists so the creative work starts from observed material instead of from a model's recollection, and so a reviewer can open the row a claim came from.
PostgresNode loaders