StorScale is an intelligence platform for self-storage operators. It ingests data from property management systems (PMS), competitor rate databases, and organic search signals — then produces pricing recommendations, market intelligence reports, and operational insights surfaced in a live operator dashboard.
The platform serves single-facility operators through large portfolios. All data is scoped by facility, processed through an automated daily pipeline, and presented in a role-based interface accessible to operators, staff, and administrators.
The platform follows a three-layer architecture. The dashboard is a read-only consumer of data; the agent API is the single write surface; connectors are stateless adapters that normalise external data into a consistent internal schema.
All agent inference runs on Anthropic Claude. Every agent enforces a strict JSON contract — no free-text responses are parsed. Numeric outputs (rates, rankings, scores) are sourced exclusively from external connectors; the model is used for pattern recognition and recommendation generation, not data fabrication.
Each agent runs a deterministic four-stage workflow. Agents are stateless — no carry-over between runs.
The agent layer is organised into two pools. Each agent runs on a fixed schedule or can be triggered via HTTP endpoint. All agents write-once to Supabase and emit a structured run record for observability.
Marketing Agents Market Intelligence
- SEO keyword analysis and ranking
- Competitive rate positioning
- Market visibility scoring
- Rate benchmarking across unit types
- Organic search opportunity detection
System Agents Platform Operations
- Scheduler coordination
- Data ingestion orchestration
- Agent run tracking and logging
- Health monitoring
- Alert dispatching
All agents are triggered by the daily scheduler (6 AM CT) or via HTTP. Run metadata is written to agent_runs — failures are logged with full error context, not silently dropped.
Data flows from the PMS through a typed connector, is enriched and stored in Supabase, and surfaces in the dashboard via direct Supabase queries and Realtime subscriptions.
The scheduler triggers a full pipeline run daily at 6 AM CT. Individual agents can also be triggered on-demand via HTTP. Redis (Upstash) provides ephemeral caching between agent runs. Supabase Realtime pushes incremental updates to the dashboard without polling.
Security is layered — every request passes through multiple independent controls. No single layer failing compromises client data.
Agent failures are logged to agent_runs with full error context and are never silently swallowed. Sentry provides real-time alerting on unhandled exceptions and performance regressions — errors are triaged before customers notice them. The scheduler retries failed runs. The dashboard degrades gracefully to cached data when the agent API is unavailable. All deployments are gated on CI passing.
- TypeScriptStrict mode across all services. No
any, no unexplained@ts-ignore. - TestingTest-driven development — failing test written before implementation. Vitest for unit and integration tests, Playwright for end-to-end flows.
- Concurrency
Promise.allSettled()for parallel operations — partial failure never aborts the batch. - ObservabilitySentry on every service. Source maps uploaded on each release. Alerts fire on new error classes within minutes and correlate to the triggering deploy.