Come build the agency that runs on software it wrote.
We're a marketing agency that wrote its own ads platform and its own CMS, and runs both with AI agents that a person signs for. It's a small team, early, with the room that implies.
A startup, said out loud.
Small team, real clients, real money moving through accounts we're accountable for. That's the appeal and it's also the warning. Four things we actually select for:
Teamwork
Three services, one team, one record. Nobody here gets to optimise their own number at another person's expense — the whole point of the company is that the handoffs do not leak.
Initiative
Nobody will hand you a ticket queue. You will find the problem, write up what you would do, and go. Asking permission for everything is slower than we can afford.
Discipline
Agents propose, a named person approves, the software enforces the limits. That only works if the person signing is genuinely careful. Accuracy, follow-through, and saying no to a plausible-looking bad idea.
Room to grow
Early team, flat structure, no layer to wait behind. The people who join now define how their function works and then lead it. Compensation is expected to move with that, and we would rather talk about it honestly than post a band we would outgrow.
Full-stack engineer
Build the two platforms the whole agency runs on.
We built our own ads platform and our own CMS, and every client engagement runs through them. You would work across both: the agent layer that drafts the work, the approval gates that stop anything shipping on its own, and the ad-platform and publishing integrations underneath.
- Rails 8.1
- React 19
- Inertia
- SQLite
- Solid Queue
- Kamal
- LLM agents
What you'd own
- Features across Lumin Ads and Lumin CMS, end to end — schema, jobs, API, UI
- The agent layer: tool definitions, prompt templates, evals, budgets and run lifecycle
- The approval gates and guardrails — the code that makes it impossible to overspend
- Integrations with Google Ads, Meta, Microsoft Advertising, ChatGPT Ads and Search Console
- Making the thing fast and keeping it boring to operate
What you'd work with
- Ruby 4 and Rails 8.1
- Both products. Conventional Rails, no microservices, no clever architecture for its own sake.
- Inertia.js and React 19
- Server-driven routing, React views. The CMS is TypeScript with the React compiler on; the ads app is still JavaScript.
- Tailwind 4 with design tokens
- CSS-first config, OKLCH token layer, shadcn primitives aliased onto our own tokens. Per-tenant branding flows through CSS custom properties.
- SQLite, one database per tenant
- activerecord-tenanted. Each client's data is a separate file, not a WHERE clause. No Postgres, and we are not looking to add it.
- Solid Queue, Cache and Cable
- All async work, caching and websockets on the database. No Redis and no Sidekiq anywhere.
- RubyLLM, plus a Claude Code harness
- Inference goes through one door — a single service class, enforced by a test that fails the build if anyone calls around it. A second executor runs Claude Code on worker boxes over MCP.
- Kamal and Docker
- Self-hosted on our own boxes, deployed with Kamal. No Heroku, no Vercel, no managed platform between you and the machine.
- Minitest, RSpec and architecture tests
- Including tests that assert the shape of the codebase, not just its behaviour — that every agent template is valid, that inference has one door.
What we need
- Real production Rails experience — you have owned a schema, a background job system and a deploy
- Comfortable in React, or clearly able to get there fast
- You write tests because you want the thing to keep working, not because someone asked
- You can read a codebase you did not write and change it without breaking it
- You explain a technical trade-off in plain language to someone non-technical
Helps, never required
- You have worked with an ad platform API — Google Ads, Meta Marketing, or similar
- You have shipped something with an LLM in the loop and learned where it fails
- You have run your own infrastructure and have opinions about it
- You have built multi-tenant software and know where the sharp edges are
Both codebases are young and moving. The ads app is mid-migration from ERB to Inertia. The CMS has RSpec but no continuous integration yet, and Capybara installed with no browser specs written. None of that is hidden from you on day one — and all of it is work somebody gets to own.
There is no engineering layer above you to wait behind. The first engineer here shapes how we build, and grows into leading the product engineering team as it grows under them.
Local SEO + AI search lead
Own whether our clients get found — on maps, in search results, and in AI answers.
Search split in two. People still type into Google, and they also ask an assistant for a plumber, a lawyer, a storage unit near them. Both answers come from the same raw material, and you own it: the pages, the entities, the citations and the consistency across every market a client serves.
- Local SEO
- AI search
- Lumin CMS
- Search Console
- Multi-location
- Schema
What you'd own
- Local and AI search visibility for a book of local and multi-location clients
- Location and service page systems — hundreds of pages per client, each one genuinely different
- Business detail consistency across the site, listings and structured data
- Directing the CMS agent crew: freshness, internal linking, metadata, schema, content gaps, cannibalisation
- Being the named editor who approves what an agent drafted before it publishes
What you'd work with
- Lumin CMS
- Our own system. Pages, locations, collections and revisions in one place, with a page live under a minute after you approve it.
- A crew of search agents
- Eight of them, each with one job and a schedule: technical SEO, metadata, schema markup, internal linking, content freshness, content gaps, cannibalisation, alt text. They research and draft. You decide.
- Google Search Console
- Wired into the CMS, so query and page data sits next to the thing you would change.
- Programmatic page systems
- One client has 343 town pages and 272 zip-code pages. You work at that scale without letting the pages turn into duplicates.
- Real scheduled audits
- Broken link scans, content freshness reports, asset usage audits and sitemap pings run on their own and surface what needs a human.
What we need
- You have moved local search results for real businesses and can talk through how
- You understand local search as a system — pages, listings, entities, reviews, consistency — not a checklist
- You can write, and you can judge whether something an agent drafted is actually true
- You are honest about what is measurable and what is not, especially with AI search
- You are comfortable being the person whose name is on the approval
Helps, never required
- Multi-location or franchise search experience
- You have worked with a headless CMS or structured content model
- Technical enough to read a sitemap, a schema blob and a server log without help
- You have already been experimenting with how assistants cite sources
AI search visibility is a young discipline full of people selling certainty they do not have. We would rather you say what is controllable and what is not. That is a harder job and a more durable one.
This is the first dedicated search hire. It becomes the head of the search practice — defining the process, then hiring and leading the people who run it.
Google Ads manager
Run a book of Google and Microsoft accounts toward qualified leads, not cheap clicks.
Agents work the accounts around the clock — mining search terms, pacing budget, auditing conversion tracking, rewriting tired copy. Every change they want to make waits in a queue for a person. You are that person, and you are accountable for what the spend actually produced.
- Google Ads
- Microsoft Ads
- Conversion tracking
- GTM
- Offline conversions
What you'd own
- A book of Google Ads and Microsoft Advertising accounts, and what they deliver
- The approvals queue for those accounts — approving, rejecting, and saying why
- Spend caps, pacing and the conversion tracking that everything else depends on
- Closing the loop: sold and lost lead outcomes fed back as offline conversions
- The client relationship on media — you talk to them, not through an account manager
What you'd work with
- Lumin Ads
- Our own platform. Every channel in one place, one approvals queue, and a record of every change with the evidence attached.
- An agent crew per account
- Waste cutter, search term harvest, budget pacing, creative refresh, growth research. Each proposes with the money at stake attached. None can apply anything.
- Hard guardrails
- Spend caps enforced at the apply gate, in code. A proposal over the cap is blocked even if you approve it. You set the caps with the client.
- Real conversion plumbing
- Google Tag Manager integration, call tracking, customer match, and offline conversion upload — so bidding optimises toward customers.
- Microsoft Advertising
- Run as part of the same portfolio rather than an afterthought nobody logs into.
What we need
- You have managed Google Ads spend you were genuinely accountable for
- You can audit a conversion tracking setup and find the thing that is silently broken
- You think in qualified leads and cost per sale, not clicks and impressions
- You can reject a confident recommendation when the evidence does not hold up
- You can explain to a client why you did something, in their language
Helps, never required
- Microsoft Advertising experience
- Local business or lead-gen experience specifically — legal, medical, home services or similar
- You have worked with offline conversion imports and know why they matter
- Google Ads scripts, the API, or any history of automating your own work
The agents will find things faster than you would alone, and they will also be confidently wrong sometimes. The job is judgement at volume. If you want to hand-build every campaign yourself, you would be bored here.
Grows into leading the paid media practice across every channel — setting how accounts are run, and hiring the team that runs them.
Meta Ads manager
Own paid social as part of one portfolio, not a silo with its own scoreboard.
Meta is where the demand that has not started searching yet lives. You own it for a book of clients — creative strategy, audience structure, lead quality — inside the same approvals queue and the same feedback loop as everything else we run.
- Meta Ads
- Paid social
- Creative testing
- Lead quality
- CAPI
What you'd own
- A book of Meta accounts and what they produce in qualified leads
- Creative strategy and the testing cadence behind it
- Lead ad quality — the difference between a form fill and someone who answers the phone
- Approving or rejecting what the agents propose on your accounts
- Working with the Google Ads manager as one portfolio, sized against each other
What you'd work with
- Lumin Ads
- Meta sits in the same platform, the same approvals queue and the same reporting as search. One place, one record.
- Creative refresh agents
- They surface fatigue and draft variants. You own the brief, the judgement and the brand.
- Lead outcomes fed back
- Sold and lost go back to Meta as offline conversions, so optimisation learns what a customer looks like instead of what a form fill looks like.
- Client-owned accounts
- Every account stays in the client's name. You work inside their asset, with access they can revoke.
What we need
- You have run Meta lead generation for local businesses and know how bad a cheap lead can be
- You have a real point of view on creative — what to test, and how to tell what won
- You are comfortable with audience structure, exclusions and the current state of tracking
- You can write a brief someone else could execute
- You care what happened after the lead came in
Helps, never required
- You can produce or direct creative yourself
- Local or multi-location business experience
- You have worked with the Conversions API or offline event uploads
- Any experience running paid social alongside search rather than separately
Paid social in a lead-gen business is judged on lead quality, and lead quality data is always messier than the dashboard suggests. We would rather argue about the messy number than celebrate the clean one.
Grows into owning paid social across the book, and into the paid media leadership the practice will need as it scales.
We'll give you an answer either way.
- 01
You apply
The form below, or an email. Tell us what you have built or run. A link beats a résumé; a real example beats both.
- 02
A conversation
45 minutes with a person who does the work, not a recruiter. What you would own, what we are actually like, and your questions.
- 03
Something real
A paid exercise or a working session on an actual problem — an account, a codebase, a market. No take-home that takes your weekend.
- 04
Decision
An answer either way, with a reason. Compensation is discussed openly at this point, against what you would own.
On pay: we'd rather talk about it openly against what you'd actually own than post a band we'd outgrow in a year. Bring your number to the first call and we'll be straight with you.
Tell us about one thing you built.
Not your whole career — one specific thing you owned and what happened to it. That tells us more than a résumé does, and it's what we'll want to talk about anyway.
- A person reads every application
- Links beat attachments — GitHub, a site you run, an account you turned around
- No role that fits? Say so in the message and pick 'Something else'
Prefer email with a CV attached?marketing@golumin.io