What 7.5 hours looks like when execution isn't in your way.
Here's the thing that's been bugging me for months. Everybody talks about AI productivity in abstract terms. "force multiplier", "10x engineer", "compound returns". And 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 actually shipped, what it took, and what it felt like when the friction layer that normally gates every one of those things just… wasn't 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 "approximately". 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 bullshit. I have read too many build logs that skip the numbers. It stings every time.
Quick note. I ran this whole thing from Telegram. I was not at my desk. I was moving around the evening. Dinner. Kids. The usual stuff. I sent messages 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 posture.
The workstreams (all eleven of them, at once)
I'll list these in the order they happened. Each one has enough detail so you can see what it really took. Nothing is hand-waved.
1. Five grant applications, drafted end-to-end
Five distinct Canadian funding programs. IRAP (innovation long-form), OCI VIP (applied research long-form), FedDev Ontario RIE (innovation long-form), Scale AI (consortium pre-application), NRC AI (research long-form retargetable to the program at submission time). Source material was a single Mitacs Accelerate interview transcript I'd dictated earlier, plus a positioning analysis PRD that had been marinating in the background.
The final drafts came out to 14,128 words across all five, with exactly 151 honest [NEED] placeholders where facts required Brandon confirmation. Zero fabricated numbers, zero made-up quotes, zero hallucinated budget lines. I'm kind of proud of that bit actually. If you can't verify it, it's a [NEED], and the [NEED] gets escalated to me via Telegram. That rule is non-negotiable.
During the First-Principles THINK phase the system flagged two strategic moves I wouldn't have caught in a normal drafting pass: FedDev needed to go from BSU (which requires demonstrated revenue we don't have) to RIE, and the Scale AI full draft needed to become a consortium pre-application because Scale AI requires a real consortium at submission. Those are the kinds of "oh, shit, right" realizations that normally cost me a week of back-and-forth with grant advisors. 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 the 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'm most excited about honestly. By the end of the night, I had a working Gmail triage tool (~600 lines), a rulebook with 24 rules plus a skip rule, and an agent definition that knows how to classify, plan, execute, 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 realized the rulebook only matched on sender address, which meant stuff sent to skool@obsidianailabs.ca couldn't get auto-filed. So I extended the taxonomy to support recipient_equals, recipient_contains, and recipient_domain matchers, plus multi-rule union. One message can match multiple rules and collect all their labels. That's a real schema evolution happening live, against a running system, without breaking the 24 existing rules.
4. Google OAuth scope expansion (twice)
Halfway through the inbox work, the system hit a permission error. Our GOOGLE_OAUTH_TOKEN didn't have gmail.modify. I added the scope to GoogleOAuthFlow.ts, I re-ran OAuth, labeling started working. Later, a separate draft-send flow needed gmail.compose. Same dance: added the scope, re-ran OAuth, sending worked. Final token scope list as of end-of-session: drive, spreadsheets, documents, presentations, gmail.modify, gmail.compose. The whole diagnose-fix-retry loop took maybe five minutes each time. In a normal workflow those are half-day detours.
5. Four agent design docs. Accountant, IT, HighLevel migration, social publishing
Here's where it gets interesting. I started asking the system to design agents I didn't have yet. Not build them. Design them. So it wrote four full design docs to my Obsidian vault, each one structured as: a list of decision questions for me to answer async, an architecture sketch, a tool inventory, cost and scope estimates, and the explicit unblockers. Not vague "we should have an agent that does X" hand-waving. Real design docs with real trade-offs on every 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 pipeline. I answered two of them in the doc while the session was still running. The HighLevel migration form has more than twenty questions across five sections. It covers what I use HL for, what stack I want to swap in, the order of work, client impact, and what I need to unblock me. The social doc has eight calls plus a flag that my Instagram account is broken and has to be fixed first.
None of these agents exist yet. But the design docs are sitting in my vault waiting for my answers, which means the next time I sit down to actually build them, I'm going to skip the entire "but what should this thing do" phase. That phase is usually where a week of momentum 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 existing four pages, built a complete new static site from scratch at projects/oal-website/, and 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). Bootstrapped Ubuntu 24.04 with 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 + zstd, access logging, 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 iteration cycles through the night. Each one a rsync diff, each one near-instant. Near the end of the session, spun up a second prod droplet, pointed the root domain and www at it, and switched the cutover. None of that was new work. It was all one continuous conversation 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
Counting it up: 4 session PRDs (each with full OBSERVE-THINK-PLAN-BUILD-EXECUTE-VERIFY-LEARN phases and atomic ISC criteria), 5 grant applications (14k words), 4 grant derivatives (decks + EOIs), 1 working inbox triage system with 24 rules and ~50 live mailbox actions, 2 OAuth scope refreshes, 4 agent design docs, 1 complete website (index + blog + 2 posts + legal pages + SEO stack + favicons + build tooling), 2 live DigitalOcean droplets, 3 DNS records, Caddy + TLS + security headers + HTTP/3, 4 new TypeScript tools, multiple bug fixes, and all of this documented in a 7.5-hour runbook that you could hand to someone else to reconstruct or roll back.
No broken deploys. No rollbacks. No fake files.
What "execution not in your way" actually means
I want to be really careful here because this is where people usually slide into magic-bullet territory, and that's not what this is. The system didn't do the thinking for me. I still made every strategic call. The FedDev switch, the Scale AI repositioning, the "cut HighLevel down to just funnel" scope decision, what the new website 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 actually existing.
In the old way, saying "let's redo the whole site" costs you in ways you can't 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 all of it. Each step drains a bit of your drive. By step six, you've lost the thread. By step eight, you're re-reading step three just to recall what you were doing. By the time it's live on a real domain, three weekends are gone. The fire that kicked off the whole thing is gone too.
When that tax disappears, something weird happens. The ceiling on what you can accomplish stops being a function of hours available and starts being a function of ideas available. And here's the embarrassing part: I don't have that many ideas. Most people don't. We've been trained our whole careers to have just enough ideas to fill the hours, because the hours were always the constraint. When the hours stop being the constraint, you run out of ideas faster than you run out of time.
That's the real story. Not "I did 10x the work." I did about a normal "high intensity" week of work, in one night, and 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'd been grinding on for months wasn't 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 decisions waiting on me. A brand-new website with a brand-new blog that has space for a real content cadence I've never been able to keep. An inbox triage system that's going to save me 30 minutes a day on pure mail hygiene. A grant drafting pipeline that can now hit the next five programs at similar speed. A voice style guide that means I don't have to personally ghostwrite every post.
The follow-ups queue from this session alone is longer than most of my monthly goal lists. And because everything is documented in a runbook, I can come back to it next Tuesday and not spend the first forty minutes trying to remember what I was doing. Resume point is in the PRD. Every PRD. Every workstream. Every decision.
Here's the honest take. I'm not selling you an agent. I'm telling you what my Tuesday looked like. Most people still think output equals time plus willpower. Both have caps. Not anymore. Mine don't. Yours don't either, if you set up the scaffolding. That's the whole pitch of this company. I'm only just starting to feel what it means in my own body.
I'll 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