What 7.5 hours looks like when execution isn't in your way.
Here is the thing that has been bugging me for months. People talk about AI output in vague terms. "Force multiplier." "10x engineer." "Compound returns." Every time I read one of those, I think: okay but show me the receipts. So this post is the receipts. One evening. Seven and a half hours. Everything I shipped. What it took. What it felt like when the friction layer that gates each one of those things just was not there.
What I'm actually going to do in this post
Let me walk you through one session. April 14, 5:33 PM to 1:00 AM. The way it went. With a full list of what went where. No "about." No "sort of." Real file counts. Real line counts. Real droplet IDs. Real DNS records. The real numbers are the only thing that will show you this is not bull. I have read too many build logs that skip the numbers. It stings each time.
Quick note. I ran this from Telegram. I was not at my desk. I was moving around the evening. Dinner. Kids. The usual. I sent notes to an agent session on a box on my network. That matters. The thing I am about to tell you is not "Brandon sat at a laptop for 7.5 hours." It is "Brandon talked to a system for 7.5 hours while also living a Tuesday night." That is a very different stance.
The workstreams (all eleven of them, at once)
I will list these in the order they happened. Each one has enough detail so you can see what it took. Nothing is hand-waved.
1. Five grant applications, drafted end-to-end
Five Canadian funding programs. IRAP (long-form). OCI VIP (long-form). FedDev Ontario RIE (long-form). Scale AI (consortium pre-app). NRC AI (long-form). Source was one Mitacs Accelerate chat I had dictated earlier. Plus a positioning PRD that had been sitting in the back.
The final drafts came out to 14,128 words across all five. With 151 honest [NEED] notes where facts needed Brandon to confirm. Zero made-up numbers. Zero made-up quotes. Zero made-up budget lines. I am kind of proud of that. If you can not check it, it is a [NEED]. The [NEED] goes to me via Telegram. That rule is firm.
In the First-Principles THINK phase, the system flagged two moves I would not have caught in a normal pass. FedDev needed to go from BSU to RIE. BSU needs real revenue we do not have. The Scale AI full draft needed to become a consortium pre-app. Scale AI needs a real consortium at submit. Those are the kind of "oh, shit, right" finds that normally cost me a week of back and forth with grant folks. They happened in a THINK phase on a Tuesday night.
2. Slide decks and 500-word EOI derivatives
IRAP and OCI VIP needed more. The long-form drafts had to match 12-slide pitch decks. They also needed 500-word EOI versions for eligibility checks. That is four more pieces. I baked word counts into each part of the EOI. That way I do not blow the limits when I hit submit.
3. An inbox triage agent. A real one.
This is the one I am most excited about. By the end of the night, I had a working Gmail triage tool. About 600 lines. A rulebook with 24 rules plus a skip rule. An agent that knows how to sort, plan, run, and escalate unknown senders.
Live actions it ran this session:
- 21 inbox threads labeled, marked read, and removed from the inbox. AI News, Expenses, Skool, GoDaddy, Google, ElevenLabs, Meta ads
- 26 retroactive UNREAD removals on historical non-inbox messages that had been rotting in the "1,247 unread" counter for months
- 2 retroactive Skool dual-labels via a new recipient-alias rule I added mid-session
- 1 Obsidian.md activation thread processed with a brand-new rule
Mid-session I saw the rulebook only matched on sender address. So mail sent to skool@obsidianailabs.ca could not get auto-filed. So I added support for recipient_equals, recipient_contains, and recipient_domain. Plus multi-rule union. One mail can match many rules and pick up all their labels. That is a real schema change happening live. On a running system. Without breaking the 24 rules in place.
4. Google OAuth scope expansion (twice)
Halfway through the inbox work, the system hit a perms error. Our Gmail OAuth token did not have the modify scope. I added the scope to the OAuth flow tool. I re-ran OAuth. Labeling started working. Later, a draft-send flow needed the send scope. Same dance. Added the scope. Re-ran OAuth. Sending worked. Final scope list as of end of session: drive, spreadsheets, documents, presentations, gmail modify, gmail send. The whole find-fix-retry loop took maybe five minutes each time. In a normal flow those are half-day detours.
5. Four agent design docs. Accountant, IT, HighLevel migration, social publishing
Here is where it gets fun. I started asking the system to design agents I did not have yet. Not build them. Design them. So it wrote four full design docs to my Obsidian vault. Each one was a list of questions for me to answer async. Plus an architecture sketch. A tool list. Cost and scope. The clear unblockers. Not vague "we should have an agent that does X." Real design docs with real trade-offs on each line.
The accountant doc has five calls I need to make. QB Online or Desktop. Write scope. Receipt handling. Intuit dev app setup. Canadian or US scope. The IT doc has six calls on the website migration. I answered two in the doc while the session was still running. The HighLevel migration form has more than twenty questions across five parts. It covers what I use HL for. The stack I want to swap in. The order of work. Client impact. What I need to unblock me. The social doc has eight calls plus a flag that my Instagram is broken and has to be fixed first.
None of these agents exist yet. But the design docs are in my vault waiting for my answers. The next time I sit down to build them, I skip the whole "but what should this thing do" phase. That phase is usually where a week of drive goes to die.
6. The whole obsidianailabs.ca website. Rebuilt. Deployed. Live.
Okay this is the big one. The old site was a basic HighLevel SMS and CRM landing page. It had nothing to do with me. It had nothing to do with what we do. I kept it on the someday list for months. Tonight it came off that list.
The system scraped the four pages. Built a full new static site from scratch at projects/oal-website/. Shipped it. The full file list for the rebuild:
index.html. Single-page home with hero, ethos, services, about, contactblog/index.html. Listing page with thumbnails, full-body search, category filter, tag chipsblog/why-implementation-is-king.html. The first real post, 8-minute read, with real McKinsey + Statistics Canada + CFIB numbers and a mid-article bridge imageblog/feed.xml. Proper Atom 1.0 syndicationprivacy-policy.html. Custom PIPEDA-compliant (the old HL boilerplate got nuked)terms-and-conditions.html. Custom Ontario-governed termsrobots.txt. Explicit allow for 16 major AI crawlers because GEO matters nowsitemap.xml+llms.txt+search-index.json+build-search-index.tscss/main.css. Roughly 500 lines of hand-written CSS, brand palette (obsidian black / warm white / amber / teal)- A full images pipeline. Hero, blog heroes, blog mids, blog thumbs, logo variants, cropped beaker icon, headshot, staged icon marks
- A complete favicon bundle.ico, 16×16, 32×32, apple-touch-icon, android-chrome 192×192 / 512×512, site.webmanifest
Every page gets the full SEO and GEO stack. That means Organization schema. BlogPosting schema with citations. FAQPage schema with four Q and A pairs. OG tags. Twitter cards. Real tags. Theme color. And E-E-A-T signals all the way through.
I would have charged a client agency rates for this site. Two to four weeks of work. Maybe more. I built it in one evening. The only cost was the power bill.
7. DigitalOcean + Caddy + GoDaddy deployment pipeline
Spun up a dev droplet on DigitalOcean (oal-web-dev, tor1, s-1vcpu-1gb). Booted Ubuntu 24.04. Set up Caddy 2.11.2 from the official apt repo. Let's Encrypt auto-TLS. A full security header stack (HSTS, X-Content-Type-Options, Referrer-Policy, Permissions-Policy). Gzip and zstd. Access logs. The works. Added a GoDaddy A record pointing web-dev.obsidianailabs.ca at the droplet with a 600-second TTL.
First deploy was 8 minutes. End to end. From "I have the DO API token in hand" to "live HTTPS 200 on a real domain." Four full cycles through the night. Each one an rsync diff. Each one near-instant. Near the end, I spun up a second prod droplet. Pointed the root domain and www at it. Switched the cutover. None of that was new work. It was all one chat with the same session.
8. Supporting tools nobody asked for but that made everything else possible
While all of the above was happening, the system also built:
- A web-dev monitor. Uptime and performance checks with DO API integration, JSONL logging, severity evaluation
- A blog-topic scanner. Daily-activity → blog-topic suggestion scanner that reads PRDs, Obsidian notes, git commits, Gmail, and reflection logs, clusters them by keyword, and writes topic candidates back into Obsidian
- An extension to the Drive integration to add a delete-file action. Needed when a mid-session correction meant stale drafts had to come down and fresh versions had to go up
- A voice-style-guide living document that codifies how Brandon actually writes, so future content generation can match the voice without sounding like a SaaS deck
9. The fixes and corrections along the way
Every long session has a fix tail. What stands out is how cheap each fix gets when the setup is right. From tonight:
- Stale Obsidian API key returned 401. Brandon Telegram'd the new key,
.envupdated mid-session, three minutes total - A small cross-cutting correction propagated automatically across dozens of local drafts, vault notes, and cloud documents. The kind of "hunt it down in 30 places" task that usually takes an afternoon
- The Art skill's Generate tool had a
${VAR}placeholder bug where shell env was injecting literal placeholder strings from settings.json. PatchedloadEnv()to detect and override them via regex. Self-healing going forward. - Stale Gemini model ID (
gemini-2.0-flash-preview-image-generation) updated togemini-3-pro-image-preview - Gemini API key with zero free-tier quota rotated to a billing-enabled key
- A missing Replicate API token added to
.envfor the image pipeline fallback
In the old way, any one of these fixes breaks your flow for 30 minutes. Here they were one-line diffs. I logged them in the session PRD. The work kept going.
The summary nobody would believe without the inventory
Tally it up. 4 session PRDs (each with full OBSERVE-THINK-PLAN-BUILD-EXECUTE-VERIFY-LEARN phases and atomic ISC checks). 5 grant apps (14k words). 4 grant offshoots (decks + EOIs). 1 working inbox triage with 24 rules and ~50 live mailbox actions. 2 OAuth scope refreshes. 4 agent design docs. 1 full website (index + blog + 2 posts + legal pages + SEO stack + favicons + build tooling). 2 live droplets. 3 DNS records. Caddy + TLS + security headers + HTTP/3. 4 new TypeScript tools. Many bug fixes. And all of it logged in a 7.5-hour runbook that you could hand to someone else to rebuild or roll back.
No broken deploys. No rollbacks. No fake files.
What "execution not in your way" actually means
I want to be careful here. This is where people slide into magic-bullet talk. That is not what this is. The system did not do the thinking for me. I made each strategic call. The FedDev switch. The Scale AI re-shape. The "cut HighLevel down to just funnel" scope call. What the new site should say. What the blog should sound like. Which droplet region. Which DNS TTLs. The hard calls were still mine. What got removed was everything between the call and the thing being live.
In the old way, saying "let's redo the whole site" costs you in ways you can not see. Pick a framework. Set up a local dev space. Find a host. Set up DNS. Write HTML. Write CSS. Make images. Write the copy. Add a blog. Add legal pages. Set up SSL. Watch uptime. And jump between it all. Each step drains a bit of your drive. By step six, you have lost the thread. By step eight, you are re-reading step three just to recall what you were doing. By the time it is live on a real domain, three weekends are gone. The fire that kicked off the whole thing is gone too.
When that tax goes away, something odd happens. The ceiling on what you can do stops being about hours. It starts being about ideas. And here is the part that stings: I do not have that many ideas. Most people do not. We have been trained our whole careers to have just enough ideas to fill the hours. The hours were always the limit. When the hours stop being the limit, you run out of ideas faster than you run out of time.
That is the real story. Not "I did 10x the work." I did about a normal "high intensity" week of work. In one night. Not at my desk the whole time. Then I ran out of things to do. Not tired. Not burned out. Just out of queue. I sat down to end the night. Then it hit me. The thing I had been grinding on for months was not a lack of output. It was a lack of space with no friction. Space to even see the shape of what I wanted to build next.
Where this goes next
Four agent design docs in the vault with calls waiting on me. A brand-new site with a brand-new blog that has space for a real content cadence I have never been able to keep. An inbox triage that is going to save me 30 minutes a day on pure mail. A grant pipeline that can now hit the next five programs at the same speed. A voice style guide that means I do not have to ghostwrite each post myself.
The follow-ups queue from this one session is longer than most of my monthly goal lists. And because each thing is logged in a runbook, I can come back to it next Tuesday and not spend the first forty minutes trying to recall what I was doing. Resume point is in the PRD. Every PRD. Every line of work. Every call.
Here is the honest take. I am not selling you an agent. I am telling you what my Tuesday looked like. Most people still think output equals time plus will. Both have caps. Not any more. Mine do not. Yours do not either. If you set up the scaffolds. That is the whole pitch of this company. I am only just starting to feel what it means in my own body.
I will let you know what I figure out as I keep going. Meanwhile. The receipts are above. Make of them what you will.
← Back to all posts