Case Study • EstateOps (POC)
Back to portfolio

EstateOps
Platform Proof of Concept

A multi-surface estate operations platform spanning web, mobile, and a Node/Express API, designed for portfolio-scoped asset and compliance operations with field capture, role-based access, and auditability built into the core model.

Express 5 + MongooseMongoDBJWT + Zod + HelmetCloudflare R2 presigned uploadsReact 19 + TypeScript + ViteMUI + DataGrid PremiumReact RouterFlutter + ProviderSecure token storageGeoJSON + 2dsphere index

Executive Summary

Core Domain

Portfolios, properties, areas, assets, and compliance obligations

Clients

React web operations UI + Flutter mobile field app

POC Signal

Audit trails, geospatial search, role guards, and presigned uploads already implemented

Delivery Focus

Validate domain model + operational workflows before deeper UI modules

Overview

Problem, opportunity, stage, and role.

The Problem

Estate operations teams need a portfolio-scoped system to manage properties, areas, assets, and compliance obligations, but field capture, auditability, and role-based operations are often split across disconnected tools.

The Opportunity

Build a multi-surface platform where web and mobile clients share a clear API/domain model, enabling operational dashboards, field asset updates, compliance workflows, and auditable change tracking from day one.

Current Stage

Proof of concept with production-relevant architecture decisions already in place: role guards, audit trails, geospatial queries, presigned uploads, and multi-client API consumption patterns.

My Role

Founder/product architect and hands-on builder shaping domain modeling, API design, client architecture patterns, security posture, and POC delivery scope.

Domain Model Snapshot

Estate Hierarchy

Portfolio -> Property -> Area forms the core location model. Assets and compliance records attach to that hierarchy for portfolio-scoped operations and reporting.

Asset Operations

Assets support lifecycle updates, condition tracking, optional GPS capture, presigned photo uploads, and nearby search to support field workflows.

Compliance Obligations

Compliance records carry category, risk, status, due dates, and review cadence linked to portfolio/property/area/asset context.

Access + Audit

Role-based access and auditability are first-class platform concerns, especially for asset state changes and field evidence capture.

Architecture Decisions

Production-relevant architecture choices made early in POC.

EstateOps is early-stage, but the architecture is already built around operational realities: auditability, geospatial queries, field capture, role-based access, and shared API consumption across web and mobile clients.

Cross-Surface Runtime Flows

  1. 1User logs in -> API returns JWT and current-user context for role-based routing and feature access.
  2. 2Web/mobile bootstrap current user -> clients map API payloads into local typed models/services.
  3. 3Asset create/update -> API persists changes and writes audit events with action type and diffs.
  4. 4Photo upload flow -> client requests R2 presigned URL, uploads directly, then associates uploaded evidence to asset operations.
  5. 5Field asset capture -> mobile can optionally include GPS without blocking core asset workflows if location permissions are denied.
  6. 6Nearby search -> API uses GeoJSON Point + 2dsphere indexed distance query endpoint to return relevant assets.
  7. 7Compliance operations -> records link to portfolio/property/area/asset and feed dashboard risk/overdue summaries.

Why These Decisions

Multi-surface platform from the start

Why: Estate operations spans desktop admin workflows and field/mobile capture; one client would under-serve one of those contexts.

Impact: Web and mobile can optimize UX independently while sharing the same API/domain contracts.

Thin API clients + normalized payload mapping

Why: Both web and mobile need stable, predictable data handling while the backend evolves during POC.

Impact: Cleaner client code, easier testing, and lower coupling to backend response shape changes.

Audit trail as a core feature (not an afterthought)

Why: Operational systems need trust and traceability for asset updates and evidence changes.

Impact: Asset events such as CREATED, UPDATED, and PHOTO_ADDED are captured with diffs for auditability.

GeoJSON + 2dsphere indexing for asset location

Why: Nearby search and location-aware field workflows need a real geospatial storage/query model.

Impact: Native distance queries and scalable geospatial operations without bolted-on filtering logic.

Presigned uploads via Cloudflare R2

Why: Photos and media should upload directly to object storage instead of transiting the API server.

Impact: Lower backend load, better upload reliability, and clearer storage boundaries.

Password policy enforced on client and server

Why: Consistency matters in UX and security; client-only or server-only enforcement creates avoidable friction and gaps.

Impact: Predictable validation behavior and reduced weak-password acceptance risk.

POC scaffolding kept intentionally visible

Why: Some UI surfaces (maps/plans/gallery/action buttons) are roadmap placeholders and should preserve architectural direction without overbuilding too early.

Impact: Fast proof-of-concept delivery with a clear path for future feature depth.

API / Backend

Express 5 + Mongo backend for estate operations, audit, and media workflows.

The API handles the platform's core domain behavior, access control, validation, audit events, geospatial queries, dashboard summaries, and upload orchestration for both client surfaces.

Auth, Profile, and Password Flows

01

Login, current-user bootstrap, forgot/reset password, forced reset for invited users, profile update, and change password are implemented behind JWT auth and role guards.

  • Forced reset flow for invited users
  • Password policy consistency across client/server
  • Centralized JWT verification middleware
  • Zod validation + centralized error handling

Estate Structure Administration

02

Portfolio/property/area hierarchy administration is implemented with default role seeding on portfolio creation and naming/index constraints to protect data quality.

  • Portfolio-scoped domain model
  • Hierarchical property and area management
  • Default role seeding on new portfolio
  • Naming uniqueness/index constraints

Asset Operations + Audit Trail

03

Assets support create/list/detail/update workflows, condition tracking, optional GPS capture, photo uploads, nearby search, and first-class audit events with diffs.

  • CREATED / UPDATED / PHOTO_ADDED asset audit events
  • Diff-based audit payloads
  • GeoJSON location storage + 2dsphere index
  • Nearby search endpoint for field workflows

Compliance Operations

04

Compliance records capture category/risk/status, review cadence, due dates, and links back to the estate hierarchy or specific assets.

  • Risk/status/cadence model
  • Due-date and review scheduling support
  • Links to property/area/asset
  • Dashboard-ready compliance data shape

User, Roles, and Access Control

05

GM-only user CRUD, role assignment, primary-role handling, and custom role management for non-system roles support portfolio-scoped administration.

  • Role guard middleware
  • Primary role handling on user-role assignments
  • Custom role create/update (non-system roles)
  • Indexing for role and user-role constraints

Dashboards + Operational Summaries

06

Dashboard APIs support risk summaries, overdue/compliance insights, attention-needed assets, and recent updates for both web and mobile surfaces.

  • Risk and overdue summaries
  • Attention-needed asset views
  • Recent activity/updates feed shape
  • Shared API outputs for both clients

Security + Platform Middleware

07

Express 5 middleware stack includes Helmet, CORS, JWT verification, role guards, and centralized validation/runtime error handling.

  • Helmet security headers
  • CORS handling
  • JWT auth middleware
  • Centralized validation/runtime error responses

Storage + Upload Integration

08

Cloudflare R2 uploads are handled via presigned URL flows from the API, keeping file transfer off the backend server while maintaining authorization control.

  • R2 presigned upload flow
  • Cloudflare-backed media storage integration
  • Upload failure tolerance in UX flows
  • Thin service-layer integration pattern

Web App (React)

Portfolio operations UI optimized for dashboards and admin workflows.

The web app uses React 19, Vite, and MUI/DataGrid Premium to handle operational tables, dashboards, and portfolio administration while keeping client integration logic thin and typed.

React 19 + Vite Admin Surface

01

TypeScript + Vite + React 19 web app using MUI and DataGrid Premium for portfolio-scoped operations, dashboards, and admin workflows.

  • MUI-based admin UX
  • DataGrid Premium for operational tables
  • React Router navigation
  • Typed models and service-layer API clients

Operational Dashboards

02

Dashboards visualize risk summaries, overdue compliance, attention-needed assets, and recent updates for estate operations monitoring.

  • Shared dashboard concepts across web and mobile
  • Risk/overdue insight surfaces
  • Recent updates visibility
  • POC-ready structure for deeper analytics later

Asset and Compliance Workflows

03

Web workflows support asset CRUD/detail flows, condition changes, media evidence interactions, and compliance record management in a portfolio context.

  • Asset detail/edit flows
  • Compliance create/list/update
  • Session-expiry handling across flows
  • Snackbars/toasts for UX feedback

Roadmap-aware Scaffolding

04

Asset views intentionally include placeholders (map/plan/gallery and action surfaces) to preserve extensibility while the POC validates the core domain model and workflows.

  • Intentional placeholders for future modules
  • Architecture-visible UX scaffolding
  • Avoids overbuilding before validation
  • Clear expansion path in existing screens

Mobile App (Flutter)

Field data capture and photo workflows with resilient UX patterns.

The mobile app focuses on field usability: secure auth persistence, service-based API access, optional GPS capture, photo uploads via presigned URLs, and failure-tolerant operational flows.

Flutter Field Operations App

01

Flutter mobile app supports field data capture and operational views with Provider state management, secure token storage, and an HTTP service layer.

  • Provider state management
  • Secure token storage
  • HTTP service layer abstraction
  • Typed model mapping from API payloads

Field Asset Capture + Photo Uploads

02

Mobile supports asset operations with optional GPS capture and photo uploads through presigned URLs, designed to tolerate failures without blocking core workflows.

  • Optional/non-blocking GPS permission model
  • Presigned photo upload flow
  • Upload failure tolerance
  • Field-friendly workflow design

Role-based Mobile UX

03

Mobile mirrors the platform's role-based access patterns while keeping the client implementation thin and focused on operational capture and insight surfaces.

  • JWT-authenticated service calls
  • Role-aware screen/action access
  • Shared domain boundaries with web
  • Portfolio-scoped operational workflows

Mobile Quality Signals

04

The mobile codebase already has meaningful test coverage across services, auth, uploads, asset-detail behavior, and root app flows.

  • Service/auth/upload tests
  • Asset-detail behavior coverage
  • Root behavior tests
  • POC with testability signal, not just UI prototypes

Tradeoffs & Constraints

POC pacing with production-minded boundaries.

EstateOps is intentionally at proof-of-concept stage, but the implementation already reflects durable architecture choices. The remaining tradeoffs are mostly about delivery sequencing, not structural direction.

POC speed vs full feature completion

Rationale: The goal is validating core estate operations workflows, data model fit, and multi-client architecture before fully building map/plan/gallery and advanced action surfaces.

Tradeoff: Some UI scaffolding remains intentionally incomplete, but the structural architecture is already clear and extensible.

Shared backend for multiple clients vs faster single-surface prototype

Rationale: The product thesis depends on both office/admin and field/mobile usage, so API design must work for both from the start.

Tradeoff: More upfront architecture work, but fewer rewrites when expanding beyond the proof of concept.

Direct presigned uploads vs API-managed media handling

Rationale: Media uploads are operationally expensive and better handled directly by object storage.

Tradeoff: Additional upload orchestration complexity, but better performance and cleaner backend boundaries.

Strict data indexes/constraints early vs looser prototype schemas

Rationale: Operational and role data becomes difficult to clean up later if integrity is deferred too long.

Tradeoff: More modeling work in POC stage, but stronger data quality and less migration pain later.

Outcomes / Metrics

POC outcomes that still signal strong platform engineering.

This project is currently in proof of concept, so the portfolio emphasis is on architecture quality, domain modeling, and execution signal rather than production-scale metrics.

Outcomes / Delivery Signals

  • Established a clear estate-operations domain model (portfolio/property/area/assets/compliance) with portfolio-scoped workflows.
  • Implemented multi-client API consumption patterns across React web and Flutter mobile with thin service layers and typed mapping.
  • Built first-class auditability for asset operations with action events and diffs.
  • Implemented production-relevant geospatial support (GeoJSON + 2dsphere) and nearby search capabilities during POC stage.
  • Delivered media upload architecture using Cloudflare R2 presigned URLs instead of API-proxied file transfer.
  • Created a roadmap-ready product surface with intentional scaffolding and visible extension points.

Quality / Maturity Signals

  • Server security stack includes Helmet, CORS, JWT verification, role guards, and centralized error handling
  • Server has baseline health-route tests
  • Mobile has meaningful tests across services/auth/upload/asset-detail/root behaviors
  • Password policy enforced consistently on client and server
  • Indexing/constraints cover roles, primary assignments, naming, and reset-token TTL expiry
  • Session-expiry and upload failure UX resilience handled explicitly

What I'd Improve Next

Move from validated POC architecture into deeper operational workflows.

The next phase should focus on finishing the roadmap-visible UX surfaces, strengthening automated test coverage, and deepening operational analytics and workflow orchestration on top of the existing model.

Expand map/plan/gallery and operational action surfaces beyond current scaffolding into full workflow modules.

Increase server automated coverage beyond health-route baseline into asset/compliance/audit and role-guard behaviors.

Add deeper observability and audit reporting views for operational activity across portfolios and field teams.

Strengthen offline-first behavior on mobile beyond current upload/session resilience where product needs justify it.

Formalize shared API contracts/DTOs across web and mobile clients as the schema stabilizes beyond POC.

Introduce richer compliance analytics and remediation workflow orchestration after core usage is validated.

Contact

Building an operations platform that must work in the office and in the field?

I can help shape the domain model, API boundaries, and multi-client delivery strategy so the product scales beyond the proof of concept.