Case study 06 · Enterprise application · APIs

Planning Data Hub 2.0

A custom planning web app that replaces a low-code portal, built for demand planners and product managers. It brings faster grids, safe concurrent editing, auditable snapshots, and no vendor lock-in.

01 · The challenge

Two planners, one row, no protection.

Planners managed new-product forecasts in a low-code portal on top of Dataverse. It was hard to change safely, limited in how grids and filters could work, and offered no protection when two people edited the same row at the same time.

02 · What I did

What I owned and built.

  • Evaluated Streamlit, Retool, Budibase, and Cloudflare, then chose a custom stack to avoid vendor lock-in and keep hosting in-house.
  • Built nine data pages (titles, forecast, comps, history, controls, and planner/product-manager views) plus a home KPI dashboard.
  • Added optimistic locking so concurrent edits can’t silently overwrite each other, and a snapshot system that writes locked rows to their own table.
  • Built a collapsible filter panel, multi-value paste filtering, saved personal views, and inline editing limited to the pages where it belongs.
  • Matched the look of the rest of the internal tool suite, captured the team’s feature wishlist, and drafted the IT provisioning request.

03 · Architecture

How it fits together.

Browser
HTMX + AG Grid
FastAPI + Jinja2
Server-rendered pages
Optimistic locking & snapshot service
Dataverse OData API
Entra ID sign-in · Azure App Service

04 · Key decisions

The judgment behind the build.

Why custom over low-code platforms?

Every platform I evaluated traded one limitation for another, plus lock-in. A lean custom stack gave full control over grids, filters, and concurrency, with hosting kept in-house.

Why HTMX?

Server-rendered HTML with targeted swaps keeps the app fast and simple, with no heavy front-end build for a small team to maintain.

Why optimistic locking?

Conflicts are rare but costly. Optimistic locking catches them at save time without making users hold locks while they think.

Why limit inline editing?

Editing everywhere is a footgun. Scoping it to the pages that need it protects the data users should only read.

05 · Impact

What changed because of the work.

9data pages + KPI dashboard
0silent overwrites by design
Auditablesnapshots of locked rows
  • Protects forecast data from conflicting edits and keeps an auditable record of locked rows.
  • Gives planners a faster grid with better filtering and saved views.
  • No vendor lock-in, and a consistent look across the internal tool suite.

06 · What’s next

Where it goes from here.

Wire in Entra ID sign-in, deploy to Azure App Service, create the locked-rows table, and confirm KPI definitions with users.

This case study is a sanitized reconstruction. Organization names, proprietary code, data, and internal schemas are intentionally left out.