<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/the-portal-layer-and-the-platform-layer-are-two-different-problems-hgmvbwvif" -->

---
title: The portal layer and the platform layer are two...
description: A mental model distinguishing two layers in internal developer platforms: the portal layer (what developers see — catalog, docs, templates) and the platform...
canonical: https://daily.dev/posts/the-portal-layer-and-the-platform-layer-are-two-different-problems-hgmvbwvif
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: The portal layer and the platform layer are two different problems | daily.dev
og:description: A mental model distinguishing two layers in internal developer platforms: the portal layer (what developers see — catalog, docs, templates) and the platform...
og:url: https://daily.dev/posts/the-portal-layer-and-the-platform-layer-are-two-different-problems-hgmvbwvif
og:image: https://api.daily.dev/og/posts/HgmvBWvIF.png
og:image:alt: The portal layer and the platform layer are two different problems
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# The portal layer and the platform layer are two different problems

**[DevOps Daily](https://daily.dev/sources/devopsdaily)** · [@savisaluwadana](https://daily.dev/savisaluwadana) · 2 min read · 3 upvotes · 0 comments

## Summary

A mental model distinguishing two layers in internal developer platforms: the portal layer (what developers see — catalog, docs, templates) and the platform layer (what makes the portal true at runtime). Most teams only solve the portal layer. Closing the gap requires runtime semantics: isolation boundaries backed by namespaces and network policies, declared visibility generating actual traffic rules, and dependency graphs enforced as real traffic flow. OpenChoreo (CNCF Sandbox) is presented as a reference implementation using Backstage as the portal and a control plane as the platform layer underneath.

## Content

A mental model that helped me think about internal developer platforms: the portal layer and the platform layer are separate problems, and most teams only solve the first one.

The portal layer is what developers see. Catalog, docs, templates, ownership. Backstage handles this really well, which is why it became the default.

The platform layer is what makes the portal true. When the catalog says a service exists, is it running? When the architecture diagram shows a dependency, is that traffic actually allowed? When a template promises a golden path, is it enforced after day one, or just at scaffolding time?

The gap between the two is where things get interesting. Closing it means your abstractions need runtime semantics:

- A project isn't just a catalog grouping, it's an isolation boundary backed by namespaces and network policies
- An endpoint's declared visibility generates its actual traffic rules
- A dependency in the graph is enforced traffic flow, not documentation
- Observability maps back to the component and environment, not to raw pods you have to correlate yourself

The link is a walkthrough of how OpenChoreo (CNCF Sandbox) implements this with [Backstage as the portal](https://openchoreo.dev/explore/backstage-powered-developer-portal/) and a control plane as the platform layer underneath. Even if you're building your own stack, the screenshots are a useful reference for what "catalog matches reality" can look like in practice.

Repo if you want to dig into the implementation: [https://github.com/openchoreo/openchoreo](https://github.com/openchoreo/openchoreo)

Where does your setup sit today, portal only, or is something enforcing what the portal shows?

## Similar posts on daily.dev

- [Building a state-of-the-art development platform with Backstage](https://daily.dev/posts/building-a-state-of-the-art-development-platform-with-backstage-1ljnqwwx3) · InfoWorld · 1 upvotes · 0 comments
- [Why frontend devs should care about platform engineering](https://daily.dev/posts/why-frontend-devs-should-care-about-platform-engineering-93yg98v5j) · LogRocket · 1 upvotes · 0 comments

---

Tags: [#kubernetes](https://daily.dev/tags/kubernetes), [#platform-engineering](https://daily.dev/tags/platform-engineering), [#internal-developer-platform](https://daily.dev/tags/internal-developer-platform)

[View this post on daily.dev](https://daily.dev/posts/the-portal-layer-and-the-platform-layer-are-two-different-problems-hgmvbwvif)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"DiscussionForumPosting","mainEntityOfPage":"https://daily.dev/posts/the-portal-layer-and-the-platform-layer-are-two-different-problems-hgmvbwvif","headline":"The portal layer and the platform layer are two different problems","text":"A mental model distinguishing two layers in internal developer platforms: the portal layer (what developers see — catalog, docs, templates) and the platform layer (what makes the portal true at runtime). Most teams only solve the portal layer. Closing the gap requires runtime semantics: isolation boundaries backed by namespaces and network policies, declared visibility generating actual traffic rules, and dependency graphs enforced as real traffic flow. OpenChoreo (CNCF Sandbox) is presented as a reference implementation using Backstage as the portal and a control plane as the platform layer underneath.","url":"https://daily.dev/posts/the-portal-layer-and-the-platform-layer-are-two-different-problems-hgmvbwvif","datePublished":"2026-07-02T08:40:15.721Z","dateModified":"2026-09-13T21:06:21.387Z","author":{"@type":"Person","name":"savi saluwadana","url":"https://daily.dev/savisaluwadana","image":"https://media.daily.dev/image/upload/s--_1y_fBwo--/f_auto/v1763861441/avatars/avatar_6BMEljk46pP7tddVQCsGW?_a=BAMAK+ZW0","description":"Software Engineer with Passion for Platform Engineering","interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"EndorseAction"},"userInteractionCount":1340}},"image":"https://media.daily.dev/image/upload/s--Jds1H8S---/f_auto/v1782973918/posts/f75bl3tCG?_a=BAMAMicg0","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":3},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"isPartOf":{"@type":"WebPage","url":"https://daily.dev/squads/devopsdaily","name":"DevOps Daily"}}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"DevOps Daily","item":"https://daily.dev/squads/devopsdaily"},{"@type":"ListItem","position":3,"name":"The portal layer and the platform layer are two different problems"}]}
```

