Skip to Main Content
Lightning Talk Intermediate MIT License

Composable Fulfillment: Teaching a Developer Portal What Your Platform Actually Did

Proposal status is Rejected
Akanksha Trehun
Akanksha Trehun
Session Description

A service can declare what it needs like an API dependency, a datastore, a cache independent of where or how it's deployed. But showing those declared requirements on a developer portal's component page is only half the story platform teams also need to show what was actually fulfilled, by what, and by whom.

This talk walks through building that second half for an open-source Backstage plugin, end to end correlating a Kubernetes custom resource (delivered via a Kratix Promise) to a catalog entity by git-URL identity rather than fragile labels, designing a fulfillment API from a single terse GitHub comment into a working spec. A real platform composes independent automation (a Kratix Promise for network policy, a separate one for certificates, another for secrets), and naively modeling one fulfillment = one adapter breaks the moment two of them report against the same requirement concurrently.

We'll cover the data-modeling decisions (resources as arrays, automation scoped per-resource, environment counts that don't double-count concurrent adapters), the Backstage-specific plumbing (the Kubernetes plugin's proxy API, linking fulfillment resources back into the Kubernetes tab, the new backend system's default-deny auth policy), and a live demo built and tested against a real kind cluster

Key Takeaways
  1. Identity over labels: why correlating a declared requirement to a component by its git source location survives multi-cluster deployment in a way Kubernetes label matching doesn't.
  2. A real spec grows from one comment: how a maintainer's single detailed GitHub comment became a POST/GET API, and how that API's shape had to change again once a one-adapter assumption broke.
  3. Composable platforms need composable data models: why resources: [] and per-resource automation (not one automation field per fulfillment) is what actually lets independent Kratix Promises, Crossplane compositions, or Sveltos profiles report concurrently without clobbering each other.
  4. Backstage internals worth knowing: the Kubernetes plugin's proxy is an unrestricted pass-through gated by RBAC, not a fixed allowlist; the new backend system denies unauthenticated requests by default; detailPanel on Table is the lightweight way to model one-to-many data without a new page.
  5. Testing locally means more than it sounds like: what "spin up a kind cluster" actually required (RBAC gaps, a missing CRD, Node/node-gyp version mismatches, a stale fixture pointing at a dead temp path).

References

Session Categories

Engineering practice - productivity, debugging
Story of a FOSS project - from inception to growth
Talk License: MIT License

Speakers

Akanksha Trehun
Akanksha Trehun Student | St Joseph Engineering College

Akanksha is a final-year Computer Science student at St Joseph Engineering College,Mangaluru,India,and an active open-source contributor and maintainer. She's a GSoC 2026 contributor at CircuitVerse,working on LTI 1.3 integration in a large Rails codebase,and mentors and serves as a project admin for GirlScript Summer of Code,where she experiments with agent-assisted maintenance workflows.She's drawn to the intersection of automation,developer tooling, and the communities open source depends on.

Sumit Goyal
Sumit Goyal student | Indian Institute of Information Technology, Kota

Hi everyone, I’m Sumit Goyal, a final-year Computer Science student and an open source enthusiast.

Over the past year, I’ve had the opportunity to work with projects across the Kubernetes and open source ecosystem, including through Google Summer of Code and the CNCF LFX Mentorship program. I’ve also been contributing to and maintaining open source projects, while building a community of 1000+ new contributors where we help people take their first steps into open source.

But honestly, the part I enjoy the most is the journey itself. I like breaking unfamiliar codebases, asking “why” before “how”, and turning something that initially looks confusing into something I can understand and contribute to.

Reviews

Thanks for your submission. We felt this outline was too unfocused and padded with buzzwords. Switching back and forth from broad architecture concepts to minor local setup bugs makes it hard to see what the core takeaway for the audience would be. It also reads like it’s written by AI. We look for human written proposals focused on one clear technical story, so we cannot accept your submission this time. We strongly encourage you to submit human-written CFPs next time.

Reviewer #1 Rejected