A rotating tower of points. Each point is one commit since December 2025: height is the day, the angle around the tower is the hour of day it was made. Commits between midnight and 3am are orange.

00 · Cold open

Same hours. Different room.

Daniel McGrattan, born 2007. I represented Ireland at the IMMAF Youth World Championships in amateur MMA. Now I build Provena, an outbound agency that runs on its own software and mostly runs itself.[62] Sourcehttps://mma-db.com/ie/en/fighters/daniel-mcgrattan ↗As of2026-09-26StatusVerifiedAll sources →

Every point is one commit: height is the day, the angle is the hour[20] Sourcescripts/export-commits.mjsAs of2026-09-26StatusVerifiedAll sources →. Orange is midnight to 3am. Move the pointer to tilt it.

60s
Summary

If you only have a minute

Daniel McGrattan
Who
19, Irish, left school to build. Represented Ireland at the IMMAF Youth Worlds in 2024.
What
Provena: outbound for B2B companies, run by me and a team of AI agents after my co-founder left.
Proof
This site is a live API and MCP server. Get a key below and point your agent at me.
How I think
Obsessed with data. No verdict without evidence. Pick the hard thing and make it work.
Why I'm applying
Not for money. To be in the room with the hungriest young builders, learn from the best, and get in front of bigger problems.

01
API · MCP

Don't take my word for it

You can query everything on this site. Try it here, or grab a key and hand it to your agent.

$ curl -s /api/v1/profile

Press Run. It calls this site’s live API from your browser.

Get an API key · Docs · OpenAPI 3.1 · MCP: claude mcp add --transport http daniel <this site>/api/mcp

02
Purpose

Why I'm here

Three things, in order.

  1. 01

    What this is for

    To change how work gets done, and to build technology that's actually hard: our own verifier, our own data warehouse, agents a person can trust with real clients.

  2. 02

    The future

    We're at an inflection point. There are more problems worth solving than people solving them, and the tools just got a lot better. The next generation is going to do it.

  3. 03

    How it happens

    By getting the hungriest young builders in the same room and learning from the best. I've gone as far as I can alone at a laptop. That's what this site is for.

Daniel's commit history as a landscape: one column per day since December 2025, its height set by that day's commits. The tallest column is marked in orange.

03 · 2023–2024

What the cage asked for

In 2024 I represented Ireland at the IMMAF Youth World Championships. I lost both fights. The habits stayed.[62] Sourcehttps://mma-db.com/ie/en/fighters/daniel-mcgrattan ↗As of2026-09-26StatusVerifiedAll sources →

  1. 01

    Show up when nobody is watching

    Training was every day. So is the work.[21] Sourcescripts/export-commits.mjsAs of2026-09-26StatusVerifiedAll sources →

  2. 02

    Make weight

    You live under a hard limit. The budget decides how big a campaign gets, not hope.[72] Sourceengineering notes (infra spend model)StatusVerifiedAll sources →

  3. 03

    Review the tape

    Every failure gets written down and fixed in code.[68] SourceLeadMasters/_warehouse git log (a21e9f9, 8bdded4, 928a606, 44266a5)StatusVerifiedAll sources →

  4. 04

    Listen to the corner

    Take the note and use it straight away. Every campaign learns from the last.[71] Sourceprovena MCP instructions (warehouse_writeback); engineering notes (linkedin reply tests)StatusVerifiedAll sources →

  5. 05

    Stay calm

    When my reply agent held its first live lead, I answered it by hand and fixed the rule the same day.[19] Sourceengineering ledger, reply agent go-live 2026-09-21As of2026-09-21StatusVerifiedAll sources →

Behind the title: every day since the first commit as a column. The tallest is 2026-09-04[22] Sourcescripts/export-commits.mjsAs of2026-09-04StatusVerifiedAll sources →.

04
People

What formed me

I've sat in rooms with people worth more than I'll probably ever see. What I took out of those rooms wasn't the money. It was how they think, how they make calls, how calm they are when it matters.

Money is a tangible. It comes and goes. What I value is the stuff you can't count: the people, the conversations, the experience you only get by being in the room.

So I look for the room where I'm the least experienced person there. That's where you learn fastest. You challenge yourself, or you stand still.

Daniel and his then co-founder Max in a London hotel lobby beside a Christmas tree
London with Max. Dressed for a room I wanted to be in. I'm on the right.

05
2025–2026

Leave school. Leave Ireland. Keep going.

I left school to build Provena full time. I bet I'd learn more from paying clients than from a classroom. So far I have.[10] SourceDaniel, 2026-09-26StatusSelf-reported. Evidence is being attached.All sources →

At the start of 2026 I left Ireland to travel while I built it: London, then Mexico, then Colombia. Laptop, my own server, and clients in the US who never needed to know where I was. We ran client calls from wherever we were.[11] SourceDaniel, 2026-09-26; dated photos (Feb 2026, Apr 2026) and commit timezones corroborateStatusSelf-reported. Evidence is being attached.All sources →

Git kept the diary, mostly. Every commit carries the laptop's clock, and the laptop didn't always notice I'd changed continent. It says UTC+0 through the winter, UTC−5 and UTC−4 through March and April, and UTC+1 from May.[46] Sourcescripts/export-commits.mjs by_month_offset (the UTC offset git stamped on each commit)As of2026-09-26StatusVerifiedAll sources →

Being on the road forced the systems to run without me. That's most of why the agents exist.

The UTC offset on my commits, by month2025-12: 50 commits at UTC+00:00. 2026-01: 42 commits at UTC+00:00. 2026-02: 405 commits at UTC+00:00. 2026-03: 64 commits at UTC-04:00, 27 commits at UTC+00:00, 28 commits at UTC-05:00. 2026-04: 80 commits at UTC-04:00. 2026-05: 60 commits at UTC+01:00, 1 commits at UTC-04:00. 2026-06: 70 commits at UTC+01:00. 2026-07: 386 commits at UTC+01:00. 2026-08: 589 commits at UTC+01:00. 2026-09: 1032 commits at UTC+01:00UTC+160703865891032UTC+0504240527UTC-464801UTC-528Dec 25Jan 26FebMarAprMayJunJulAugSep
The timezone my laptop stamped on each commit, by month. Box area follows the count. Aggregates only, from data/commits.json.
Daniel and his then co-founder Max on Regent Street in London at night, a red bus behind them

Regent Street with Max, my co-founder at the time. I'm on the right. Bus for scale.

A laptop open on a green outdoor table in the sun

Working outside in February. The weather widget said 23°C. Ireland did not.

Daniel and a friend on a rooftop terrace at night in Colombia, a city behind them

Colombia. The laptop was inside, and so were the client calls.

A laptop on a small table in a room with a brick floor, its screen blurred

Rainy day, brick floor, financial model on screen. The numbers are blurred. They're for me.

A laptop running a coding agent session in a terminal

What "a team of agents" looks like on a Saturday.

Scroll sideways →

06
The team

One person. A team of agents.

My co-founder left. I didn't hire to fill the gap. I rebuilt the company so one person can run it.[61] SourceDaniel, 2026-09-26StatusSelf-reported. Evidence is being attached.All sources →

Automate the operation, don't staff it. That's what keeps hiring costs down. But garbage in is garbage out: an agent working on bad data just makes mistakes faster, so the data gets fixed first.

Most of my week now is tuning: reading what the agents did, finding where they got it wrong, and turning that into a rule the code enforces.

JobDone byWhat it doesWhat stays with me
Reply deskAI reply agentReads every reply, drafts an answer in the client's voice, checks it, then sends or holds.[19] Sourceengineering ledger, reply agent go-live 2026-09-21As of2026-09-21StatusVerifiedAll sources →Anything a coded check flags waits for me.
LinkedIn repliesLinkedIn reply agentTests two reply styles per conversation. The winner is promoted every night.[52] Sourceengineering notes (LinkedIn reply tests): nightly job promotes an arm at z>1.96 on reply rateAs of2026-09-24StatusVerifiedAll sources →I set the offer; it tests inside it.
Lead researchWarehouse + classifierFinds the companies and people in a client's market.[29] Sourceengineering notes (company classification universe)As of2026-07-26StatusVerifiedAll sources →The client approves the targeting.
Data qualityVerifierChecks every address on our own server.[34] Sourceprovena-data-intelligence repoStatusVerifiedAll sources →Nothing sends without a verdict.
Campaign buildCold email engineSplits the audience into cells, drafts the copy, loads it paused.[47] Sourceengineering notes (PlusVibe clean grid rule): cells are Client | TZ | ESP | NN, max 600 leadsAs of2026-09-21StatusVerifiedAll sources →I press go.
FulfilmentAgents over the API + MCPTake a client from onboarding to a loaded campaign.[28] Sourceengineering notes (master mcp workspace selection)As of2026-09-20StatusVerifiedAll sources →Launch, contracts and money.
EngineeringCoding agentsWrite code in parallel. A reviewer agent checks every merge.[43] Source1,704 Claude Code + 1,373 Codex session filesAs of2026-09-26StatusVerifiedAll sources →I merge, deploy and check it live.

3,077 recorded agent coding sessions[43] Source1,704 Claude Code + 1,373 Codex session filesAs of2026-09-26StatusVerifiedAll sources → · 339 merged pull requests[23] Sourcegh pr list --state merged provena-aiAs of2026-09-26StatusVerifiedAll sources → · the same roster is live at /api/v1/agents

07
Tools

The stack

Build

  • TypeScript + Reactthe CRM and every client page
  • Next.js + Vercelthis site, its API and MCP server
  • Supabase (Postgres + edge functions)the CRM's database and backend
  • Node + Pythondata pipelines, classification, research

Data

  • A self-managed VPSthe warehouse, crawlers and the email verifier
  • Postgres4.2M companies and a person index
  • Prospeo, Apify, Google Placessourcing people and companies

Outbound

  • PlusVibesending the campaign cells
  • AimfoxLinkedIn for clients (not for me, see above)
  • Cloudflare + Spaceshipsending domains and DNS
  • Cal.combooking, including on this site

AI

  • Claude Code + Codexthe coding agents, in parallel rounds
  • Claude + OpenAI modelsthe reply agent and classification
  • MCPletting agents run fulfilment through our API

08
Work

What I built

For each one: what I built myself, what was hard, what I learned and what came of it.

  1. 01

    Provena

    An outbound agency that runs on its own software. We find the buyers, write to them, answer the replies and book the meetings, for B2B companies selling into automotive, SaaS and finance.
    Company · paid workDec 2025 – now
  2. 02

    Cold email engine

    The machine that turns a client's market into sending campaigns: pull the audience, verify every address, split it into cells, write the copy, size the inboxes, and load it all paused for a person to launch.
    Software · infrastructure2026
  3. 03

    Lead warehouse

    A warehouse of 4,203,138 companies, 95.93% classified by niche for $27.93, so a new client can pull the exact companies in their market.
    Software · data engineeringJul 2026
  4. 04

    Email verification engine

    An in-house SMTP verifier on a server I run, so we stop paying per check and stop trusting verdicts we can't explain.
    Software · infrastructureAug – Sep 2026
  5. 05

    AI reply agent

    An agent that reads a prospect's reply, decides what they meant, drafts an answer in the client's voice, grades it, and either sends or holds it for a person.
    Software · AISep 2026
  6. 06

    Public API and MCP server

    A public API of 165 routes and an MCP server of 108 tools, so AI agents can run client fulfilment end to end.
    Software · platformSep 2026
  7. 07

    This site, as an API

    Every page here is also a REST API and an MCP server, generated from the same proof ledger, so an agent can read me the way a person does.
    Software · platformSep 2026
  8. 08

    How I sell

    A founder-led sales process where the buyer watches before they talk and the proposal is built from their own words.
    Paid work · sales2025 – now
  9. 09

    Financial OS

    The company's books as one ledger that reconciles exactly to the bank, with a P&L per client built on top.
    Company operationsSep 2026
  10. 10

    STRIAQ

    Research and an MVP scope for AI agents in mineral exploration: ingest decades of drilling data, build a geological memory per project, and rank the next targets.
    Research · productJul 2026
  11. 11

    Accord Performance

    My first agency: cold email for other businesses. It is where I learned to write to strangers and where the first code went.
    First companyJun 2025

09 · How I think

Four decisions

The cold email engine, the reply agent, the verifier and the warehouse. Each one is a problem, the evidence that forced a decision, and what it changed.

An audience pours into a six by six grid of campaign cells. Each cell fills to its cap before the next one starts.

Decision 01 · Cold email engine

Cells, not campaigns

Early on, each client had dozens of campaigns named however the day went, and nobody could say which one was winning or why. I replaced them with a grid. Every campaign is a cell named client, timezone, email provider and number, capped at 600 leads. The timezone decides when it sends, the provider decides which inboxes send it, and the cap means a bad list can only hurt one cell. For one automotive client that is 36 cells and 18,371 leads, each readable at a glance.[48] Sourceengineering notes (workspace grid rebuild), one automotive clientAs of2026-09-21StatusVerifiedAll sources →

The whole project →
A reply moves through read, classify, draft and grade, then is either sent or held for a person.

Decision 02 · AI reply agent

Only code findings may block a send

On its first real lead, a dealer replied with one word: "YES". The draft was right and every coded check passed, but the model grader said it "did not answer the question" and held it. There was no question. Worse, the workspace needed three safe sends to earn trust, and the grader's opinion blocked every send, so it could never earn it. I answered the lead by hand, then changed the rule the same day: taste can advise, only coded checks can hold.[19] Sourceengineering ledger, reply agent go-live 2026-09-21As of2026-09-21StatusVerifiedAll sources →

The whole project →
Addresses fall through the verifier's gates: syntax, MX, SMTP probe and catch-all scoring. Some bounce off; the rest land in four honest bands.

Decision 03 · Email verification engine

No verdict without evidence

A paid verifier told us addresses were fine that then bounced. When I traced our bounces, 23.5% of "catch-all" verdicts bounced against 1.8% of valid ones. So I built our own, with one rule at its core: it never calls an address dead without a positive signal from the receiving server. Some mail gateways never disclose anything, so the engine now recognises them and stops spending probes on them instead of retrying forever.[44] Sourcebounce trace for one client campaign, 2026-09-18 (133 of 159 bounces were catch-all verdicts)As of2026-09-18StatusVerifiedAll sources →

The whole project →
A field of points, one per group of companies, collapses onto a spiral of 4,475 category tokens.

Decision 04 · Lead warehouse

Map the tokens, not the companies

The obvious plan was to send 4,203,138 rows to a model. Before paying for that I looked at the data. The Google Maps category field is a comma-separated list, and split apart it collapses to 4,475 distinct tokens. I labelled the tokens instead of the companies, which settled most of the warehouse at no marginal cost. A model only saw the residue, and its answer was rejected unless the evidence appeared word for word in the input.[38] SourceLeadMasters/_warehouse LLM_CLASSIFY.md; engineering notes (company classification universe)As of2026-07-26StatusVerifiedAll sources →

The whole project →

10
Sales

Sell what you can prove

  1. 01

    Make them watch before they talk

    Before a first call the buyer gets a page built for them. By the time we speak, the basics are done.

  2. 02

    Propose from their words

    The proposal is built from the call transcript. Nobody argues with their own words.

  3. 03

    Never promise what you can't prove

    Every client result we quote comes from one approved list. If it's not on the list, we don't say it. That includes this site.

People pay for this · 14 clients in 2026[55] Sourcedistinct Client on Revenue rows, transactions.csvStatusVerifiedAll sources →

  • SellMyRide: 38 meetings in 44 days, $1.4M pipeline
  • Ribit: 18 qualified leads in 14 days
  • VettX: 32 qualified leads in 15 days
  • AI Automotive Summit: 25 booked calls and $50,000 by day 30
  • AI Automotive Summit: 284 automotive leaders replied interested
  • Optimo: $67,500 contracted in 12 days
  • Oakmore: 4 interested leads in 7 days

Client results as approved by each client.

11
Postmortems

What went wrong

  1. We sent to addresses we couldn't vouch for

    A client's bounce rate jumped. Almost every bounce was an address a paid verifier had called catch-all, let through by a default nobody questioned. The same week, one of the client's own customers got our email.[44] Sourcebounce trace for one client campaign, 2026-09-18 (133 of 159 bounces were catch-all verdicts)As of2026-09-18StatusVerifiedAll sources →

    The fixCatch-all addresses are held back now, the client's customers are suppressed before any send, and I built our own verifier.

  2. Merged is not deployed

    The deploy pipeline died on a billing limit with no logs. Code was merging green, so production looked current. It wasn't.

    The fixSame day: deploys moved to the command line, and every change is now checked on the live site, not by an exit code.

  3. My own safety gate blocked the first live lead

    A dealer replied "YES". The reply agent held a correct answer because the grader didn't like the style, and my rule let style block a send.[19] Sourceengineering ledger, reply agent go-live 2026-09-21As of2026-09-21StatusVerifiedAll sources →

    The fixI answered the lead by hand, then changed the rule so only coded checks can stop a send. Fixed and live the same day.

12
Next

What I want next

I'm not here to raise money. Provena pays for itself. I'm applying to programmes like YC, a16z speedrun and the Thiel Fellowship for one reason: the people.

I want to be around the hungriest builders my age and the people who've done it before. Everything I've learned, in the gym and in business, says you get better by learning from the best. I want bigger problems and better rooms.

Let's talk · 30 minutes, video · Monday to Friday, 09:00 to 21:00 Irish time. Slots show in your own timezone.

A note on LinkedInLinkedIn banned me. Early in my career I tried to scrape contacts out of Sales Navigator, and LinkedIn noticed before I finished. Valuable lesson: read the terms before you automate. If you can get me unbanned, I owe you one. Until then, email works.[05] SourceDaniel, 2026-09-26: account banned, no accessStatusVerifiedAll sources →