MONISCOPE
Multi-Tenant Self-Storage SaaS — Founder + Sole Engineer
Multi-tenant vertical SaaS for the self-storage industry, built for Spanish Fort Self Storage — my family's operation — and designed to serve operators beyond it. I run product, architecture, and engineering. Claude Code is wired in as a structured development partner: multi-session architectural sweeps, JSON handoff logs, and 1,852+ automated tests as the validation gate. Currently pre-launch.
- Multi-tenant Laravel + Vue + Inertia.js SaaS with 1,852+ automated tests as the validation gate
- 9-stage delinquency state machine implementing Alabama lien law with cure-period enforcement
- Two-way SMS via Twilio over Reverb WebSockets — outbound, inbound webhook, opt-out/UNSTOP compliance
- Stripe billing + Plaid bank verification with full audit-trail logging
- Yield-pricing engine, 6-report engine, CRM Kanban — all on a single rules + dispatcher pattern
- Anthropic-powered Brain (deterministic-first) and Claude Code as structured dev partner
- Laravel 12
- Vue 3
- Inertia.js
- MySQL
- Pest/PHPUnit
- Reverb WebSockets
- Stripe
- Plaid
- Twilio
- Anthropic API
Five deep-dives into the parts worth showing
Pre-launch product, production-grade code. Each case study is a focused walkthrough — architecture, the engineering 'why,' and real annotated source. Each is independently linkable, so you can share the one that matches the role.
AI Assistant
Most user questions are answered by a PHP intent classifier + handler registry. Anthropic only fires for unrecognized free-form queries — and then sandboxed to a PolicyGuard-filtered FactPack.
Read case study →Multi-Processor Payments
One Action class routes monthly recurring charges across Stripe, Authorize.Net, Square, and ACH. Distributed locks prevent double-charges. Every webhook is signed and idempotent. Failures create staff tasks, not silent logs.
Read case study →Automation Engine (WHEN / IF / THEN)
User-built rules dispatched through a condition / action registry with dry-run support. Triggers, conditions, and actions are first-class rows — sortable, configurable, no schema migration to add a new condition.
Read case study →Event-Driven Architecture
45 events, 61 listeners, auto-discovered by Laravel 12. Every listener with side effects guards itself with idempotency keys backed by a UNIQUE database index. Queue tier separation keeps audit writes flowing when SMS is backed up.
Read case study →Reporting Engine
Database-driven multi-month aggregations behind a single query builder. Six saved-report types, one return shape, PDF + CSV export. Aggregation runs in SQL; PHP only handles formatting.
Read case study →Want a guided walkthrough?
Live demos, deeper architecture conversations, or specific code on request. Always happy to talk through this stuff.