AI agents / product engineering / automation

Nik Mirando

Perpetual tinkerer and builder. I like understanding why things work, finding where they do not, and making the pieces work better together.

I build AI agents, products, automations, and data systems for messy, real-world work.

Headshot of Nik Mirando
Boynton Beach, FL

A few things I've built.

Working products, private operating systems, and public prototypes. The short version stays visible; architecture, controls, and implementation evidence are inside each technical disclosure.

01 / KWC flagship case study

A brokerage rebuilt around one operating record.

For a 20+ broker, multi-state team, I replaced a workflow spread across forms, spreadsheets, CRM, Drive, and Slack with a working portal and shared Supabase backend. A reviewed deal or listing now drives financial operations, CRM, content, maps, alerts, and private knowledge.

20+Brokers supported
635+Historical deals migrated
~$1K/moSocial generation saved
~4 hrs/wkInvoicing + transaction admin saved
Stack Next.js 15, React 19, TypeScript, Zod, Supabase Postgres, FastAPI, pgvector, Docker
Skills Product engineering, data modeling, document intake, integrations, workflow automation
portaldemo.rootwurx.com PUBLIC SAMPLE DATA
KWC National / authenticated team workspace SYNTHETIC RECORDS
KWC National Brokerage OS overview with synthetic financial, production, lease, and action-queue data Open the public demo
CANONICAL RECORD Deals, leases, commissions, AR
OPERATING QUEUE Review states and next actions
DOWNSTREAM CRM, content, maps, and alerts
Technical details

The portal writes the source of truth.

More than 635 historical deal records were cleaned and migrated before the old form was retired. Authenticated users now create or review records in Next.js; Zod validation and server actions write canonical deals, listings, commissions, payments, documents, and provenance into Supabase Postgres. FastAPI owns longer integrations and scheduled work.

Deal packets and leases become reviewable records.

Closed-deal packets become candidate transaction, commission, and payment rows. For listings, the service reads the Drive folder, OM, photos, and marketing material, then builds the exact required Crexi and CoStar field sets plus Canva flyer inputs. Financial calculations remain deterministic; missing required fields keep creation locked until a person resolves them.

In a separate brokerage deployment, an AI lease intake accepts up to eight executed leases, amendments, commission agreements, deal sheets, and invoices. Native PDFs and DOCX files are read first; scanned pages can fall back to bounded OCR. The draft covers 36 lease, rent, option, notice, allowance, commission, split, and invoice fields with field-level confidence and source context.

The model proposes; a person resolves and applies.

Missing values stay null, conditional dates remain conditional, and conflicting documents are shown instead of silently reconciled. A reviewer compares extracted and confirmed values before one idempotent, version-checked database function updates the existing deal, lease, commission, broker splits, field provenance, document links, and reminder rows. It cannot alter the closed stage or date, listing status, or settled payments.

Event chains stay reviewable and non-blocking.

  • Closed-deal saves can trigger a branded Canva graphic, Instagram caption, LinkedIn post, Slack approval packet, celebration, and Proxi map; downstream failures never roll back the canonical deal.
  • Reviewed listings generate a Canva flyer, grounded Instagram and LinkedIn caption, Slack delivery packet, and a Supabase export audit row.
  • Instantly webhooks and the Sunday sweep classify reply intent and direct-phone evidence before conservative FUB enrichment and warm-lead Slack notification.
  • A reusable GrowthZone adapter crawls multiple regional Chamber of Commerce calendars nightly, collapses duplicate events by title and Eastern date, and posts the next seven days to Slack each Monday.
  • Monday market-presence generation, monthly Crexi/CoStar market-export ingestion, a 15-minute Drive ingestion queue, and automatic lease/LOI term extraction feed distinct reviewed surfaces.
Portal or files

Forms, workbooks, packets, OMs, leases, images.

Typed boundary

Zod, parsers, AI extraction, and review flags.

Supabase

Canonical rows, source artifacts, and provenance.

FastAPI jobs

CRM, content, maps, reminders, crawlers, alerts.

Audit state

Run status, changelog, review state, and failures.

Public case-study figures: 20+ brokers, 635+ historical deals migrated, and roughly $1,000 per month removed from social generation costs. The team also reports roughly four hours per week saved on invoicing and back-office transaction administration. The portal shown above contains synthetic data, not client records.
02 / Slack-native operating agent

The business can answer back.

A persistent Slack agent that investigates questions across the operating database, CRM, Notion, Drive, private documents, and reviewed company memory. It can learn reusable methods and turn a useful question into a scheduled job.

27Tool contracts
8Maximum calls per question
87/87Focused tests passing
1 / runAccumulated audit record
Stack Python 3.11, Slack Bolt, Claude tool use, asyncpg, Supabase, APScheduler, Docker
Skills Agent orchestration, tool contracts, retrieval, memory, scheduling, safety
SAMPLE FIRM / #operations / synthetic scenario SOCKET MODE
# operations
AM
Operations lead9:14 AM

@Agent what are our top three sources for closed transactions this year? Rank by transaction count, not deal volume. Bucket every referral variant together and remember that rule.

A
Operations Agent9:14 AM

I counted 57 synthetic closed transactions. The raw values split referrals across three labels, so I normalized the accepted aliases and reran the count: Referral, 11 (19.3%); Cold call, 8 (14.0%); Networking event, 7 (12.3%). I saved that bucketing method as a workspace skill for future analyses.

Public-safe reconstruction / names and values changed
Technical details

The model plans; the service owns the loop.

A Python 3.11 Slack Bolt Socket Mode service sends Claude 27 JSON-schema tool contracts spanning Supabase, Follow Up Boss, Notion, Drive, semantic document retrieval, reviewed Slack memory, skills, and saved queries. The service owns the hard eight-call budget, timeout, retry, within-run cache, result caps, and final response.

Learning is a scoped, inspectable write.

Reusable methods are upserted to jarvis_skills by workspace and unique name, with a description, full body, and one of five validated categories. Descriptions preload into the prompt; full bodies load only through skill_read. The follow-up learning pass skips short questions, short answers, and zero-tool conversations.

Durable state still has boundaries.

Slack-derived guidance enters retrieval only after a JSON review artifact is approved. Saved questions retain the original prompt, channel, cron, timezone, and optional read-only condition. Database access is protected by a SELECT guard, dedicated read-only Postgres role, transaction mode, statement timeout, and row caps; every run writes one accumulated audit record.

Slack thread

User, channel, workspace, and prior tool context.

Claude planner

Selects bounded tools inside the call budget.

Adapters

DB, CRM, Notion, Drive, corpus, memory, scheduler.

Grounded answer

Tool results and source references return to Slack.

Audit record

Question, tool trace, latency, outcome, and errors.

Verified against the current tool registry and test suite on July 19, 2026: 27 registered tools and 87 passing focused tests. The public demo uses synthetic names and records.
03 / ESG Almanac

Framework answers. Firm evidence. Separate boundaries.

A live GRESB advisor backed by an ingested framework knowledge base. The deeper prototype adds tenant-isolated submissions, asset data, benchmarks, evidence, and deterministic Excel scenarios without mixing private firm retrieval into the public corpus.

2,076Shared framework chunks
1,536Embedding dimensions
2Separate retrieval scopes
4Scenario workbook sheets
Stack Python, FastAPI, Claude, OpenAI embeddings, Supabase Postgres, pgvector HNSW, Teams adapter
Skills RAG architecture, tenant isolation, evidence systems, retrieval evaluation, artifact generation
ESG ALMANAC / SCENARIO ANALYSIS SYNTHETIC PORTFOLIO

What changes if Northline Tower earns LEED O+M?

Model the directional GRESB impact. Use ownership-adjusted floor area and compare the result with the supplied prior-year peer average.
Current coverage 41.8%
After certification 55.6%
Prior peer average 48.0%
Positive directional impact for BC1.2. LEED O+M is an operational certification reported under BC1.2. Adding the asset's 312,000 ownership-adjusted square feet raises synthetic portfolio coverage by 13.8 percentage points and moves it above the supplied peer average. That should improve performance against the benchmark; the final point change still depends on the full peer group and GRESB's non-public certification weighting. GRESB BC1.2 + ownership-adjusted firm asset rollup
Technical details

Indicator lookup, keywords, then vectors.

Direct indicator-code matches and yearly-change guidance are checked before keyword and pgvector semantic retrieval. Public framework and firm-only searches run separately, then merge with source labels and firm evidence first. Empty context produces an explicit gap, never a synthetic answer.

Shared knowledge is explicitly null-firm data.

Public queries require firm_id IS NULL. Firm retrieval calls a dedicated RPC constrained to the allowed firm ID. The Teams adapter maps a Microsoft tenant to one firm before retrieval. Unknown IDs fail before the database search.

The math changes with the indicator.

EN1 data coverage is floor-area-weighted by ownership share, never asset count. ASHRAE Standard 100:2024 EUI thresholds can deterministically select the Energy Efficiency pathway. LEED O+M changes operational certification coverage under BC1.2. The engine reports the directional benchmark impact and supplied peer average, but reserves an exact point gain because certification scoring also depends on the full peer group and non-public weighting for validation, age, property subtype, and country. Requested scenario files are generated as four-sheet workbooks in code.

The firm layer uses a synthetic 30-asset portfolio and 112 firm-scoped chunks. The generic REST adapter still needs one-key-to-one-firm binding before production multi-tenant use; the Teams tenant mapping already enforces that boundary.
04 / CRE public-data MCP suite

Live market data, exposed as tools.

Six source-specific MCP servers and one bundled market intelligence interface turn federal economic, demographic, labor, housing, and flood datasets into typed tools an agent can call. Geography resolution, missing-value handling, and live endpoint checks are part of the product, not left to the model.

6 + 1Source servers + bundled market MCP
30Source-specific tool contracts
Live APIsNot a copied knowledge base
Null ≠ zeroExplicit missing-data semantics
Stack Python 3.10+, FastMCP, HTTPX, stdio + streamable HTTP, Census geocoding, source-specific API adapters
Skills MCP tool contracts, public API integration, geography resolution, sentinel normalization, independent packaging, live semantic verification
CRE MARKET MCP / QUESTION SURFACE LIVE PUBLIC DATA
CAPITAL MARKETS

“Give me a capital-markets snapshot with SOFR, Treasury yields, mortgage rates, and inflation.”

LABOR DEMAND

“How are office-using and industrial employment trending in the Dallas–Fort Worth metro?”

TENANT BASE

“What does the business and tenant base around 4000 Westchase Boulevard look like?”

PROPERTY CONTEXT

“For this address, show tract demographics, HUD rent benchmarks, and whether FEMA maps it inside an SFHA.”

FREDRates, inflation, capital markets
BLSMetro employment and unemployment
CBPIndustry and establishment counts
CENSUSPopulation, income, housing, tenure
FEMAFlood zone, SFHA, mapped status
HUDFair market rents and income limits

The bundled server selects across these source contracts; each source-specific server can also be released and run independently.

Technical details Tool surface, data correctness, packaging, and verification

Source contracts stay useful on their own.

FRED exposes six tools, Census/ACS four, FEMA two, HUD six, BLS seven, and County Business Patterns five. A separate CRE market server composes eight high-frequency workflows such as a capital-markets snapshot, metro employment, address-level unemployment, tenant-base analysis, and industry counts.

An address becomes the geography each source needs.

Shared geocoding resolves coordinates, state, county, tract, and metro identifiers before selecting the matching source tool. Returned payloads retain geography labels and vintage dates so an agent can state exactly what it used.

Missing, suppressed, and unmapped are distinct states.

FRED and ACS sentinels normalize to null. Suppressed CBP employment or payroll is never converted to zero. FEMA distinguishes an unmapped response from low flood risk and converts invalid base-flood elevations to null.

Packages are independent; smoke checks are semantic.

Each source server vendors its HTTP, environment, geocoding, error, and sentinel helpers, so it can leave the monorepo without sibling imports. Live smoke tests check returned values, geography, and payload structure rather than treating any HTTP 200 as success.

The 30 count covers source-specific contracts. The bundled market server composes overlapping capabilities into eight higher-level tools; those are not presented as 38 unique data functions.
05 / Baseline · ESG due diligence engine

Building diligence with the math exposed.

A commercial real estate ESG audit engine that turns a property assessment, twelve months of utilities, and basic asset data into calibrated energy, emissions, water, capital, and policy analysis. Every modeled output retains its input and assumption boundary.

3Required source inputs
ASHRAE 211Audit procedure
DOE + CBECSEnergy benchmarks
EPA eGRIDScope 2 factors
Stack Python, FastAPI, Pydantic, Claude document parsing, DOE EnergyPlus prototypes, CBECS + ENERGY STAR benchmarks, EPA eGRID, deterministic financial models
Skills ASHRAE-aligned energy modeling, utility calibration, emissions accounting, ECM economics, data provenance
BASELINE / ESG DUE DILIGENCE ENGINE SYNTHETIC VALIDATION CASE
ASHRAE / DOE / CBECS / EPA eGRID

214,796 SF multifamily / Climate Zone 4A

Screening outputs, not field observations. Every value below is reproduced in the public methodology case.

42.6 SITE EUI kBtu / SF / yr
581.6 BASELINE GHG tCO2e / yr
$88.4K YR 1 NET SAVINGS all modeled ECMs
251.6 GHG SAVINGS tCO2e / yr
MEASURENET COSTENERGY / YRGHG / YRPAYBACKROI
Rooftop solar$425,934890,630 kBtu75.4 t9.1 yr11.0%
DHW heat pump$0 after incentive2.31M kBtu116.5 t
LED lighting$0 after incentive167,756 kBtu14.2 t
Condensing boiler$112,060335,511 kBtu17.8 t27.8 yr3.6%
6 applicable ECMs / 11 suppressed pending delta data Policy fines withheld until current ESPM mapping is revalidated
Technical details

Actual utilities anchor the archetype.

Property type, ASHRAE climate zone, construction vintage, and size select a DOE Commercial Prototype Building archetype. CBECS and ENERGY STAR property-type benchmarks validate the starting EUI; twelve months of actual utility data then calibrate the fuel-specific baseline before any conservation measure is evaluated.

Interpretation and arithmetic have different jobs.

Claude extracts systems and utility records from source documents. Python owns measure applicability and DOE prototype deltas, EPA eGRID location-based Scope 2, combustion-based Scope 1, water and DHW linkage, capital cost, incentives, payback, IRR, NPV, and building performance standard exposure.

Unknown stays unknown.

Every output is labeled observed, calibrated, modeled, or unavailable. The public case uses synthetic property inputs. Jurisdiction exposure appears only when the policy table and asset applicability are current; unsupported costs, incentives, and savings stay withheld instead of becoming polished but ungrounded certainty.

06 / ENERGY STAR Portfolio Manager MCP

Portfolio data, available in plain language.

An open-source local MCP server that connects Claude directly to the official EPA ENERGY STAR Portfolio Manager API. It discovers properties and metric names, normalizes XML into predictable JSON, and stores nothing.

9Typed tools
18+Node runtime
0Hosted backends
MITOpen-source license
Stack Node.js, MCP SDK, stdio transport, official ESPM HTTPS API, Basic Auth, XML normalization
Skills Protocol design, API integration, privacy-first architecture, typed tool interfaces, open source
CLAUDE DESKTOP / LOCAL MCP NO HOSTED MIDDLEMAN
> Which properties have an ENERGY STAR score below 50?
[tool] list_properties
[tool] get_property_metrics x portfolio
> Three properties are below 50. I ranked them by score and included site EUI so you can separate score from energy intensity.
list_propertiesIDs
get_property_metricsscore / EUI / GHG
get_group_score_summarygroup rollup
get_portfolio_summaryportfolio rollup
Technical details

Credentials stay on the user's machine.

The stdio MCP process reads local environment variables and sends credentials only to the official ESPM endpoint. There is no application backend, telemetry service, or project database.

Discover names before requesting values.

Portfolio Manager exposes XML and metric names that can change by report. The server discovers available metrics, requests the correct reporting year, then normalizes results into stable JSON contracts for the model.

Illustrative answers remain illustrative.

The repository documents working test and live account paths but does not currently ship an automated test suite. Public portfolio responses demonstrate the interface, not a claim about a real user's property count.

07 / Personal technical PM

Arthur runs the work behind my work.

Arthur is my VPS-hosted technical PM. It triages client requests and operating signals, creates evidence-backed tickets in one canonical Work Queue, prepares implementation briefs for the right coding agent, and reconciles completion against GitHub, checks, and the live system.

6Approved evidence sources
16/16PM policy tests passing
1Canonical Work Queue
8:30Changed-only morning brief
Stack Hermes Agent, Python, SQLite, Notion, Slack, Gmail, Granola, GitHub, cron, Linux VPS
Skills Technical PM architecture, request triage, evidence gating, ticket lifecycle, agent handoffs, source reconciliation
SYNTHETIC CLIENT REQUEST
"Can we add a portfolio export for Monday?"

RCB email thread · named requester · desired outcome · source reference · client and urgency resolved

Client export · Ready

Stable source key · Notion Work Queue · owner: Codex · next action: implementation brief · live verification required

PR merged · checks pass · live verified

GitHub and production evidence update the ticket; the linked private Slack thread confirms the final state

GMAIL + SLACK INTAKENOTION WORK QUEUETHREAD COMMANDSPROOF-GATED CLOSE
Technical details

Only a real ask becomes work.

Scheduled sweeps inspect explicit KWC Slack requests, RCB email requests, Granola commitments, unfinished Codex or Claude handoffs, GitHub evidence, and verified failures. Arthur requires a requester, outcome, source, stable key, owner, next physical action, and due-date state before creating or updating a ticket.

Each request becomes an executable brief.

Arthur identifies the likely repository, preserves the evidence and constraints, drafts the proposed approach, acceptance checks, and live-verification requirements, then recommends a Codex or Claude Code handoff. Coding, merging, and deployment remain separate authorizations.

Conversation and system state stay synchronized.

Notion is the canonical Work Queue; SQLite holds only cursors, locks, dedupe, and runtime state. Each surfaced ticket gets a private Slack card and thread. Replies such as start, waiting, done, or a correction update only that linked ticket and confirm the resulting state in-thread.

"Done" is a request to verify, not a completion claim.

Code tickets close only after a merged PR, passing checks, and live evidence when required. Arthur sends one bounded, changed-items-only private brief at 8:30 AM ET and immediate exceptions only for verified failures or urgent requests. Client messages, merges, deploys, invoices, and calendar writes remain approval-gated.

Smaller surfaces. Same operating discipline.

The portfolio extends beyond the flagships: private document retrieval, document operations, and a multi-tenant lead system.

Incremental Drive ingestion.

Push notifications, a modified-since backstop, bounded OCR, batched embeddings, filtered retrieval, and citations back to the source file.

DRIVE WATCH / OCR / VOYAGE / PGVECTOR

Interpret with models. Accept with code.

Rent-roll and P&L extraction with reconciliation and review flags, plus format-locked generation that produces byte-identical output from the same structured input.

PDF / XLSX / JSON / DETERMINISTIC QC

Lead response after consent.

A multi-tenant qualification and estimate-booking system with provider adapters, contractor-scoped consent state, image interpretation, and real Google Calendar availability.

FASTAPI / POSTGRES / CLAUDE / TELNYX / CALENDAR

That same instinct carries beyond software. Chances are you can find me adding to my garden, renovating part of my home, or tinkering with a project car or boat.

Something here catch your eye?

Want to talk through a project, compare notes, or just connect? Shoot me an email.