Product Pilot

Telops · Group IT · Product Pilot App · 2025

Product Pilot Back Office

The authoring app behind the marketplace. It is where product owners and service owners manage their catalogs — products, applications, services, SLAs, assignment groups, and their translations — in friendly, validated forms. Everything they save becomes a Git-versioned artifact; from there the pipeline does the rest: review, release, publish, and sync.

This deck is the app we are building. For where it sits in the wider system see Platform; for the content-as-code method it implements see Content.

What owners do here

The back-office workspace for catalog owners; the pipeline handles release and sync.

01 · What it is

A back office for product and service owners

Product Pilot is the provider-facing authoring tool of the Service Engineering Platform. Its customers are the product owners and service owners who own catalog content: they create and curate it here, everything they save becomes a versioned artifact of record, and the pipeline carries it through review, release, and delivery — translated — through one API.

Authoring

Friendly forms, not spreadsheets

Server-rendered forms with validation for every catalog — create, edit, delete — so editors never hand-write YAML or touch a request ticket.

Governance

Review before it ships

A product manager edits what they own; a catalog owner approves governed changes. Every change is checked, approved, released, then published.

Delivery

One API for every surface

A language-aware read API serves pinned catalog versions to the IT Hub Portal and other consumers — no direct coupling to JSM, Assets, or Confluence.

Artifact of record: Git-versioned YAML/JSON is the single source of truth. The database is a disposable index, rebuilt at any time from the artifacts with reindex --all.

02 · The app in use

What owners actually see

A look at the back office product owners and service owners work in day to day. Click any screen to enlarge; use the arrows or your keyboard to move between them.

03 · Domains

Six bounded contexts, each versioned independently

Product Pilot owns five catalogs plus a shared terminology foundation. Each is a bounded context with its own schema, Git-backed directory, and release history. Colour shows the upstream system of record each catalog is aligned to.

System-of-record boundary

Source of truth vs. reference

Product Pilot masters catalog content — what IT offers, how it is structured, priced, displayed, and supported. It is not the source of truth for operational or identity data other systems own; it imports and layers on top.

products — define applications — import + layer services — define + publish slas — define metadata assignment_groups — import + sync
Reference only — not authored here

Owned by other systems

  • Knowledge base articles & playbooks — JSM / Confluence (read & used for context).
  • Service monitoring — JSM Ops.
  • Hardware assets — Intune / CMDB.

Product Pilot shows their relationships but never masters them.

04 · App layout

A Django app with seven modules, split by system of record

Apps are divided by their upstream system of record rather than one-app-per-catalog, with a shared engine underneath and a dedicated app for the publish/sync workflow. Domain apps never import each other's models — cross-domain links are artifact keys resolved through service interfaces.

Dependency graph (no cycles)

Who depends on whom

  • catalog_core — no internal deps.
  • translationscatalog_core.
  • catalog, operationscatalog_core, translations.
  • change_managementcatalog_core; reads catalog + operations via service interfaces.
  • delivery → all of the above through services; API adapter for catalog reads, search/filtering, translations, and edits.
  • ai_assistcatalog_core, read-only (deferred).
Where logic lives

Thin adapters, fat services

Business logic lives in <app>/services.py. Views, CLI commands, and API endpoints are adapters only: parse input → call a service → render output. No validation or persistence logic in the edges.

05 · Tech stack

Boring, proven, server-first

A pragmatic Django stack with a light, modern front end. No SPA, no bespoke infrastructure — server-rendered pages enhanced just enough to feel fast.

Backend

Django + DRF

  • Django for views, forms, and admin.
  • Django REST Framework for the app API: reads, search/filtering, translated content, and edits.
  • Business logic in services.py.
Storage

Git + index DB

  • Git-versioned YAML/JSON = source of truth.
  • SQLite by default; Postgres via DATABASE_URL.
  • DB is a disposable index (reindex --all).
Front end

Tailwind v4 + Alpine + Lucide

  • Tailwind CSS v4 (CSS-first @theme tokens).
  • Alpine.js for light interactivity.
  • Lucide icons; Axpo brand tokens.
Identity

Microsoft Entra ID

  • Delegated Entra sign-in (MSAL).
  • User email read into the session.
  • Allowlist-first roles to start.
Tooling

uv + Ruff + tests

  • uv for dependency management.
  • Ruff for linting.
  • Django test suite with realistic fakes.
Runtime

Container + WhiteNoise

  • Dev container for local work.
  • WhiteNoise for static serving.
  • Deployed via GitHub Actions to Azure.

06 · Key concepts

The principles we hold to

A handful of decisions shape every module. They keep the system simple to reason about, cheap to rebuild, and safe to integrate later.

Source of truth

Artifact of record

Git-versioned files are authoritative; the DB only mirrors them and can be dropped and rebuilt at will.

Layering

Thin adapters, fat services

All behaviour lives in services.py; views, CLI, and API just translate to and from it — and stay in parity.

Boundaries

No model imports across domains

Cross-domain links (a product's service_key) are artifact keys resolved through a service interface, never a direct import.

Sequencing

Inside-out, integrations last

The core data model and forms work with zero external dependencies; JSM/CMDB and Weblate are designed up front but wired later.

Content

Keyed, translatable copy

Artifacts store keys, not localized text. A pluggable provider serves a local store now and Weblate later — no catalog-code change.

Governance

Two roles, allowlist-first

Product manager edits owned records; catalog owner approves. Roles resolve from an allowlist now, from CMDB/Entra groups later.

07 · Connections

How it relates to the rest of the platform

Product Pilot exposes the same catalog capabilities through the back-office UI and an API. The API fetches catalogs and content, supports search/filtering and translations, and accepts edits through the same services. It does not write directly to JSM, CMDB, or Confluence — approved changes move through Git, PRs, tests, and the deployment pipeline.

Out of scope: a direct LeanIX connection. Application metadata is read through the CMDB (JSM Assets); any LeanIX path is worked out later.

08 · Build order

Build the core, defer the integrations

We ship a working, self-contained back office first, then layer on versioning/release, then external system sync, then the translation service and enrichment. Each phase's shape is designed up front so the core never paints us into a corner.

Phase 1

Local back office

  • All catalogs modelled; real forms (new / edit / delete).
  • JSON-Schema + service-layer validation.
  • Local Git store in a dedicated content folder, created at setup.
  • Keyed translations behind the provider (EN/DE).
  • Local two-role approval workflow; notifications mocked.
Phase 2

Versioning & release

  • Add a Git remote and per-catalog semver.
  • DB formalised as a disposable index.
  • Version-pinned delivery API goes live.
  • Per-catalog changelog / history from Git.
Phase 3

External sync

  • Read intake from CMDB (JSM Assets).
  • Publish to JSM on catalog-version release.
  • Sync JSM-Ops assignment groups.
  • Ownership-driven roles; approvals in JSM.
Phase 4+

Translation service & enrichment

  • Swap the local store for Weblate (no code change).
  • AI-assisted authoring & wizards.
  • Bulk operations.
  • Richer SLA metadata.
Two rules govern the order: inside-out — the data model, forms, validation, and tests come first and stand alone; and integrations last — JSM/CMDB and the translation service are deferred, their shape designed up front but their wiring done later.

Companion overviews

This deck focuses on the Product Pilot app. Two companions cover the wider picture.