Ashish · building a company that runs itself
Field notesCompare notes
A working bet on how companies get run

I run a portfolio of hotels.
I deleted the org chart.

No HR department. No finance team. No marketing hire. One owner holding every seat in the C-suite, and an AI operating layer doing the work the org chart used to. This is not a product I'm selling. It's a bet I'm running live, in a real business, with real money and real labor. Here's the bet, and here's exactly how far along it is. I'm sharing it in the open and would love to compare notes with anyone building something similar.

Systems live
In build
7
Agent seats
0
Departments
The bet

The exception rate falls faster than the business grows.

Delete the departments and the work doesn’t vanish. Every exception, every novel call, everything the agents can’t handle routes to one human. Me. So the wager isn’t “can AI do the work.” It’s whether the things that need me shrink faster than the portfolio expands. If that line goes down, that’s real leverage. If it doesn’t, I’ve built myself a worse job. That’s the part I’m actually testing, in the open.

I don’t need it to work today. Parts work now. Parts don’t. The intelligence is arriving on a curve I can see, and the honest alternative was never a well-run company. It was an owner drowning in fires, dropping balls, letting it drift. I’m not claiming perfect. I’m claiming better than that, which is most of us. I log every decision so that when the intelligence catches up, the context is already loaded and it just runs.

A company of people becomes a company of one.

The traditional hotel company is an org chart of salaries. Each box is a person, a benefits line, a layer between the owner and the work. I replaced the boxes with agents and routed all of them through one orchestrator that answers to me.

Before
a company of people
Owner
General Manager
HR
~$90K
Finance
~$95K
Marketing
~$85K
Front office
~$80K
Maintenance
~$80K
Five director seats. $400K+ in management payroll, before the staff beneath them.
After
a company of one
Me · Owner
Orchestrator
Finance
Revenue
Guest
People
Marketing
Headcount 1. Departments 0. Every seat reports up instead of waiting to be asked.
The system map · what’s built, what’s building

Not a pitch deck. The actual wiring.

Every box below is a real system I’ve built or am building — a dashboard, an agent, a data pipeline, an API connection — grouped by the seat it fills. This is the honest state of the bet: what runs today, what’s mid-build, what’s still on the bench. It updates as I ship.

Live Building Planned
The seat above all the others

Orchestrator — the COO chair I’m building

A Claude chief-of-staff that routes work to the department agents over my own knowledge base, holds context across all of them, and hands me the short list of things only a human should decide. I don’t operate the tools. I operate the orchestrator, and it operates the tools — chat- and voice-reachable, so the whole company fits in my pocket.

Building
Finance & Books
Replaces · Controller · bookkeeper · analyst
Reconciles, categorizes, files the taxes, and builds the daily financial read. I stay the CFO; it runs the back office.
Bank reconciliation
Live
Reconciles the accounting bank register against the bank statement by two-way amount matching, surfacing uncleared items and the book-vs-bank gap.
Python · QuickBooks · bank statement exports
deep dive →
Equity chart-of-accounts standardization
Live
Standardized the equity section of the chart of accounts across every entity, including a large partner-capital reclass, driven by browser automation.
Docyt · QuickBooks Online · Claude-in-Chrome
deep dive →
Intercompany loan reconciliation
Live
Reconciles related-party loan balances across the partnership entities by extracting Schedule L lines straight from the filed tax-return PDFs.
Python · pdfplumber · Form 1065 PDFs
deep dive →
PMS billing reconciliation
Live
Reconciles the full set of PMS platform invoices across every property, splitting platform fees from card processing and generating vendor recovery asks — as a live dashboard.
Python · Mews invoice exports → dashboard
deep dive →
Supplier-spend analytics
Live
Three years of supply spend across the portfolio and multiple vendors, normalized to cost per occupied room-night, with category and price-watch pivots.
Python · HD Supply + Amazon Business exports · occupancy data → dashboard
deep dive →
Monthly lodging-tax filing
Live
Prepares a monthly city lodging-tax return by combining accounting income with occupied room-nights into a form-replica workbook.
Excel + runbook · QuickBooks · occupancy data
deep dive →
Acquisition financials archive
Live
A queryable SQLite archive of a newly acquired property's multi-year financials with a CLI query tool, a consolidated workbook, and a dashboard.
Python · SQLite · OCR · Chart.js
deep dive →
Monthly Flash
Live
Full-year revenue projection blending closed-month P&L actuals with open-month forecasts, plus a trailing-12-month block and a property-by-month matrix.
Python · Docyt P&L · Atomize · scheduled on the mini → Cloudflare
deep dive →
Check-signing skill
Live
Signs a check PDF with my saved signature and drafts the signed check to the right property manager — one command, and it always leaves a draft for me.
Claude Code skill · DocHub · Gmail draft
deep dive →
Docyt bookkeeping automation
Building
Runs the bookkeeping platform as the portfolio's bookkeeper across bill intake, categorization, and month-end review over every entity — with each payment gated for me to authorize.
Docyt · QuickBooks Online · ACH + check rails · browser automation
deep dive →
Payments-processor migration
Building
Drives each property's move to a new payments processor, filling the KYC/KYB business fields while I personally sign the attestations.
Mews Commander · Adyen hosted verification · Chrome automation
deep dive →
Revenue & Distribution
Replaces · Revenue manager
Watches the market, prices the rooms, reconciles the channels, and reports pace — demand-aware and always on.
Competitor rate & inventory shop
Live
Shops competitors' live rates by market alongside our own open rooms, occupancy, and on-the-books ADR, logs them, and publishes a live rate-and-inventory board.
Python · Playwright · Atomize feed · SQLite · Telegram · scheduled on the mini → Cloudflare
deep dive →
Rate-apply agent (chat → RMS)
Live
Applies ad-hoc rate changes for a property and date range from a confirm-gated chat command by driving the revenue-management calendar directly.
Python · Playwright · Atomize · Telegram · 1Password
deep dive →
Channel profitability tracker
Live
Reports true net revenue mix by channel after netting real OTA commission, flagging cost drivers like discount-program leakage.
HTML/JS dashboard · OTA commission data → Cloudflare
deep dive →
OTA ↔ PMS reconciler
Live
Nightly read-only check that last night's Booking.com and Expedia reservations landed in the PMS with correct charges, cancels, and fees — published as a recon board.
Python · seeded Playwright profiles · Mews API · OTA extranets · Telegram + email alerts
deep dive →
Nightly PMS summary ingest
Live
Fetches each property's nightly PMS business-intelligence export by email and parses it into per-hotel occupancy, ADR, and RevPAR that feed the flash reports.
Mews BI export · IMAP fetch · Python → parquet store
deep dive →
Performance dashboard
Live
Portfolio performance dashboard showing actuals and year-over-year occupancy, ADR, and revenue.
Python · parquet store → Cloudflare
deep dive →
Morning Flash
Live
Nightly owner report of last-night occupancy, ADR, and revenue plus month-landing forecast versus target per property — auto-published every morning.
Python · P&L · forecast snapshots · PMS exports · scheduled on the mini
deep dive →
Legacy PMS data archive
Live
Ingests years of legacy forecasting exports for eight properties into a queryable store for forecasts and year-over-year analysis.
Legacy .xls exports · SQLite · Python
deep dive →
Revenue agent (API-first)
Building
An API-first agent to run pace and pickup reads and push rate, restriction, and inventory changes across the PMS and OTAs — complementing the RMS autopilot.
Python · Mews Connector API · Atomize feed · approval gate · one-property pilot
deep dive →
Last-minute rate-check engine
Building
Captures occupancy across all properties in a single load and emits a same-day rate-decision recommendation.
Python · Playwright · Atomize feed · packaged as a scheduled skill
deep dive →
Business-day-accurate occ/ADR feed
Building
Manager-report exports that override the flash report's timezone-skewed last-night occupancy and ADR for accuracy.
Mews Commander scheduled exports · Python parser · email delivery
deep dive →
Legacy-history import to PMS BI
Building
Reshapes legacy forecasting exports into the PMS business-intelligence templates so pre-migration history sits alongside current data.
Python (openpyxl) · Mews BI historical templates
deep dive →
Upsell fee product
Building
A flat, manager-priced room-upgrade fee built as a PMS product with its own accounting category and per-property taxes, posted by the front desk like any add-on.
Mews Commander products + tax codes · accounting mapping · one-property pilot
deep dive →
RMS reasoning layer
Planned
A Claude reasoning layer across the RMS, rate-shop, and PMS to give a small operator portfolio-level intelligence: underperformer, channel-mix drift, and pace-anomaly detection.
Claude Code · Atomize · Lighthouse · Mews (Otter Brain)
deep dive →
Competitor repricing trend report
Planned
Capture competitor rates on a frequent cadence, classify how each participant reprices over time, and email a biweekly market-behavior trend report.
Extends the rate-shop bot + notify path
deep dive →
Guest & Reputation
Replaces · Guest-services lead
Answers guests, tracks the messaging, and turns every review into a signal I can act on.
Guest-reviews intelligence
Live
Pulls every guest review across the portfolio from a reviews API daily into one normalized board with themes.
MARA API · Python · scheduled on the mini → dashboard
deep dive →
PMS action integration
Live
A scoped integration exposing keyed customer, rate, reservation, and bill lookups plus create/update actions and live reservation-event triggers.
Zapier MCP · Mews Connector
deep dive →
Always-on guest-messaging agent
Planned
Answers routine guest questions on every channel and escalates the exceptions — the front-office seat, always on.
PMS · unified inbox
deep dive →
People & Labor
Replaces · HR · workforce ops
Watches hours, punches, and coverage so labor stays honest without someone standing over it.
On-shift & front-desk overlap board
Live
A live all-property board of who's clocked in now, who's clocked out, forgotten-punch flags, and front-desk double-coverage — refreshed every 30 minutes.
Python · Gusto time records (unattended auth) · scheduled on the mini → dashboard
deep dive →
Housekeeping GM co-pilot
Live
An always-on chat bot that generates and edits daily housekeeping room assignments from board data and answers free-text questions by bridging to Claude.
Telegram · Python · Claude · scheduled on the mini
deep dive →
Housekeeping efficiency index
Live
Per-hotel dashboards and a portfolio index computing each housekeeper's efficiency as cleaning-credit-minutes over worked-minutes, with labor cost per occupied room.
Flexkeeping API · Gusto · Python → dashboard
deep dive →
Multi-hotel punch & hours report
Live
A daily all-staff report across every payroll company that flags forgotten clock-outs and rolls up paid hours per hotel.
Gusto GraphQL · Python · scheduled → dashboard
deep dive →
Payroll pre-run verification
Building
A read-only rule engine that checks each property's draft payroll for missed punches, abnormal hours, and salary drift, then emails each manager a go/hold card before payroll runs.
Python · Gusto · scheduled on the mini · HTML email
deep dive →
Review → housekeeper attribution
Building
Ties each guest cleanliness review to the room, the stay, and the housekeeper who cleaned it — surfacing per-person praise and complaints.
Reviews API · housekeeping assignment data · Python
deep dive →
HR-exception alert bot
Building
A nightly per-property bot that posts same-day timekeeping exceptions — forgotten punches, missed meal breaks — to each manager in chat.
Slack app · Gusto · Python · one-property pilot
deep dive →
GM responsiveness scorecard
Planned
Scores how quickly each manager responds to guests across email and the OTAs and rolls it into the manager dashboards.
Gmail metadata · OTA extranets · Python
deep dive →
In-house housekeeping app
Planned
A PMS-native housekeeping system — housekeeper mobile app plus room-state write-back — to retire the paid housekeeping subscription, property by property.
Mews Connector API · custom app
deep dive →
Org knowledge recall
Planned
Logs team chat into a searchable store with a Claude answerer for organizational recall, behind a staff AI-use notice.
Slack · SQLite full-text · Claude
deep dive →
Frontline staff messaging
Planned
A frontline-staff messaging interface with AI reading and structuring underneath, piloting on the channels staff already use.
Messaging bridge · consent layer · isolated host
deep dive →
Marketing & Brand
Replaces · Marketing director + web agency
Owns the sites, the brand system, and the channel mix — built as code, not outsourced.
AI image-generation pipeline
Live
A billing-enabled pipeline that generates property hero images and grades photos for marketing on demand.
Gemini image model · Python
deep dive →
Corporate marketing site
Live
The company's corporate site rebuilt in-house as a code-first static site, edited and deployed straight from the terminal.
Astro · bun · Cloudflare Pages · GitHub
deep dive →
CMS optimization automation
Live
Logs into all eleven property CMS installs and applies declarative content fixes site-wide — typo sweeps, book-direct banners, false-amenity scrubs.
Python · persistent Chrome profile · ProcessWire · scheduled on the mini
deep dive →
Brand-as-code hub
Live
Every brand's design tokens defined once as code — one file per property — and rendered to a live brand-guide hub for the whole portfolio plus corporate.
JSON tokens · build script · self-hosted fonts → Cloudflare
deep dive →
In-house property-site rebuild
Building
A data-driven site framework that rebuilds individual property websites with a direct PMS booking embed, piloted on one property.
Astro · Cloudflare Pages · direct Mews booking embed
deep dive →
AI hero-video pipeline
Building
Turns a property's own photos into a cinematic website hero video — first delivered for one property, with reuse planned across the rest.
Veo image-to-video · Gemini · Python · ffmpeg
deep dive →
Infrastructure
Replaces · The whole IT · data · eng org
The connective layer: the data spine, the always-on host, and the API wiring everything else rides on.
Accounting & payroll data connectors
Live
Hosted connectors that pull P&L, balance sheet, and A/R–A/P from the accounting files plus payroll reads — the read layer under the finance agents.
QuickBooks Online API · Gusto · hosted MCP connectors
deep dive →
Multi-company time-records integration
Live
A headless read-only puller that logs into one payroll admin account and replays a query to export every employee's shifts across all the hotel payroll companies.
Gusto web (seeded MFA) · GraphQL replay · Python · 1Password
deep dive →
Housekeeping board & credits integration
Live
A per-hotel read integration into the housekeeping board and analytics that feeds the trackers and credit audits.
Flexkeeping JWT + Superset token · Python · Playwright
deep dive →
Knowledge-vault layer
Live
A local Obsidian knowledge vault wired to Claude through a scoped connector so models can read and write durable business knowledge — sensitive folders read-only, deletes gated.
Obsidian + Sync · scoped MCP server · Claude Desktop
deep dive →
Always-on automation host
Live
A dedicated always-on Mac mini running the portfolio's scheduled jobs and the copilot, reachable privately with unattended secret and MFA handling.
macOS launchd · Python · Tailscale SSH · 1Password + TOTP · healthchecks
deep dive →
Pocket copilot
Live
A phone-reachable chat bot that bridges to headless Claude, locked to me, so I can run the whole automation stack on the go.
Telegram Bot API · headless Claude Code · scheduled on the mini
deep dive →
Programmatic email send
Live
A sender that dispatches real email as my own address to any recipient, working around the draft-only mail connector.
Python SMTP · app-password from 1Password
deep dive →
Publishing pipeline
Live
Any dashboard goes from a file to a live, shareable URL in about thirty seconds, with concurrency-safe publish helpers.
Git · Cloudflare · shell helpers
deep dive →
Dashboard hub + access gating
Live
The hub that publishes and gates the whole dashboard suite behind zero-trust access with an email allowlist and service tokens for automated read-back.
Cloudflare Worker + Access / Zero Trust · GitHub push-to-deploy
deep dive →
Furniture-install tracker
Live
A public no-login live dashboard where the on-site team taps piece-by-piece furniture-install progress per room during a renovation.
Cloudflare Worker + D1 · vanilla JS · Python
deep dive →
Telecom multi-account audit
Live
Drives the business ISP portal to sweep the whole account group for service status, monthly cost, a 24-month bill trend, and autopay state.
Browser automation · portal scraping → dashboard
deep dive →
Finance human-in-the-loop gate
Building
A pause/approve/resume safety layer that lets headless finance jobs run until a human-only step, then blocks it behind a signed single-use token plus a chat approval.
Python · Keychain-held key · PreToolUse hooks · Telegram + phone push
deep dive →
Vendor-neutral PMS data layer
Building
Pulls the PMS Connector API into one local database — nightly plus intraday — as a vendor-neutral spine that feeds agents, dashboards, and audits.
Python · SQLite (WAL) · Mews Connector API · 1Password
deep dive →
PMS configuration-audit program
Building
A portfolio-wide PMS configuration-audit program: room-type and capacity checks, open-balance sweeps, and tax-residual root-causing.
Mews Commander via browser automation · Connector API · Excel deliverables
deep dive →
Smart-lock API integration
Building
Programmatic door access — issue and revoke passcodes and eKeys, read lock status and logs — wired into the same operating layer.
TTLock Cloud API · OAuth2 · app in review
deep dive →
Personal
Replaces · The same stack, on my own life
If it works for the business, it works for me. The operating layer doesn't stop at the office.
Personal health dashboard
Live
My own health and daily metrics on the same build-and-publish rails as the hotels.
personal data · scheduled build → dashboard
deep dive →
Net-worth view
Live
A private, auto-refreshed consolidated financial picture — for my eyes only, on the same infrastructure.
automated build (private)
deep dive →
Home-network monitor
Live
Home network health on the same monitoring pattern as everything else.
UniFi → dashboard
deep dive →
Personal email triage agent
Planned
A Claude loop over my personal inbox that triages mail by a simple taxonomy and surfaces handle-able actions to an approve dashboard.
Gmail (read/label/draft) · approval gate
deep dive →
Personal operating layer
Planned
The orchestrator idea turned inward: one surface for the whole life, not just the company.
orchestrator · personal knowledge base
deep dive →

What I actually believe

01
Departments are latency.

Every layer between the owner and the work is delay and dilution. The org chart isn’t the company. It’s the tax the company pays to move information slowly.

02
The intelligence is basically here. Almost nobody knows how to point it at real work.

The easy gains are spent. What’s left is application: wiring real intelligence into real operations and funneling it to one screen. That is the entire game now, and it’s the part I’m trying to crack.

03
Context is the company. Not the model, not the code.

The model is rented and everyone rents the same one. The standards, the history, the way this specific business decides: that’s the asset, and it compounds every week the knowledge base grows.

04
The baseline is drift, not perfection.

Most owners my size never hire the C-suite. They let it run reactive, stressed, dropping balls. I’m not measuring against a flawless company. I’m measuring against that, and against that the bar is low.

05
Log the decision, not the click.

Activity logs are noise. What compounds is the judgment: the exception, the call I made, and why. Capture that and the future model loads judgment and takes off. Capture clicks and it loads sludge.

06
The bottleneck doesn’t disappear. It moves to me.

That’s the honest risk, stated plainly. If the exceptions shrink faster than the business grows, this is freedom. If they don’t, it’s a trap with better tooling. I’d rather find out in the open than pretend.

Why it holds

The edge isn’t a smarter model. It’s owned context.

Anyone can rent the same models and the same connectors. What compounds is the operational context underneath: the standards, the history, the way this specific company makes decisions. Own that context and rent the connective infrastructure around it. The agents get sharper every week because the knowledge base does, not because a model got retrained. That’s the part a competitor can’t copy by buying the same tools.

Help me build

What should I build next?

I'm always hunting for the next thing worth automating. If you have an idea, a problem you'd want solved, or feedback on any of this, send it my way. Leave your name and a way to reach you if you want a reply, or send it anonymously. Both are welcome.

Anonymous is fine. Nothing you send is shared publicly.
An open invitation

Let’s compare notes.

I’m building this in the open because I learn faster that way, and I’m genuinely open to feedback and new ideas. If you’re working on something similar — or it just sparks something — I’d love to hear what you’re building, share what I’ve learned, and trade notes.