Skip to content

site: add an "Is your app on PDPP?" page behind a flag - #469

Merged
tnunamak merged 16 commits into
site/supporter-apps-questionfrom
site/app-directory
Nov 6, 2026
Merged

tnunamak merged 16 commits into
site/supporter-apps-questionfrom
site/app-directory

Conversation

@tnunamak

@tnunamak tnunamak commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

No page on pdpp.dev tells someone whether an app they use has a PDPP connector, or whether the company behind it has signed the Principles or registered an implementation.

This PR adds a page at /apps, "Is your app on PDPP?", that answers this from lists PDPP already publishes. It stores nothing about visitors: the search runs in the browser over rows built on the server. Three sources feed it:

  • The connector catalogue, an OCI artifact at ghcr.io/pdp-connect/connector-catalog:latest that is built from PDP-Connect/data-connectors and readable without a login. It says which connectors exist and what data each one brings.
  • The Supporters register (public/principles/supporters.json), for organisations that have signed the Principles.
  • The conformance register (public/register/index.json), for Registered and Verified implementations. It is empty until those statuses open.

Each entry is an open-source connector, shown with what it brings and a link to its source. A connector existing says nothing about the company, and many connectors are community-built, so the page names a company as a signer or a registrant only when one of the two registers names it. The intro says this in plain words, and a test asserts that no entry's first line says a company is on, supports or takes part in PDPP. Individuals in the Supporters register never appear.

The catalogue is loaded live, so the page follows data-connectors without a redeploy. apps/site/src/lib/connector-catalog.mjs fetches the artifact, checks its bytes against the digest and size the registry reports, and then reads each connector's manifest from GitHub (raw.githubusercontent.com, at the data-connectors commit the catalogue was built from) for its data labels. Each request has a 15-second timeout. The whole load is cached for an hour with Next's unstable_cache. The cache wraps the whole load rather than each fetch because the registry requests carry a fresh anonymous token in their Authorization header, so a per-fetch cache keyed on the request would rarely hit. If the load fails, or returns nothing or something malformed, the page uses src/data/connector-catalog.json, a copy in the repo that scripts/sync-connector-catalog.mjs regenerates. The copy is at data-connectors commit 23aee3a with 60 connectors. The module checks digests but does not verify the catalogue's cosign signature, and its header comment says so.

The page sits behind NEXT_PUBLIC_PDPP_APP_DIRECTORY, off unless set to true like the other site flags. With the flag off, /apps is a 404: the page calls notFound() before it reads any source, so it fetches nothing at build time or later. With it on, the page is linked from three places, following how Home Assistant, Meltano and Airbyte surface their integration directories: a "Participate" menu in the top navigation with "How to get involved" and "Is your app on PDPP?", a line under the register on /participate, and the footer.

The menu needed a fix in masthead.tsx. The dropdown wrapper had the class md:group, which Tailwind does not treat as a group marker, so the group-hover and group-focus-within rules that open the panel never matched. It now uses group, and the panel gets md:w-max so its entries do not wrap. A menu with one child still renders as a plain link, so with the flag off the masthead looks as it does today.

This PR and #468 each add a flag function to the end of apps/site/src/lib/site-config.ts, so whichever merges second will need that conflict resolved, keeping both functions.

Verified: the site's verify script (types, tests, lint, production build) passes on this branch alone and merged with #467 and #468. Tests cover each relationship a row can state, whole-name matching of companies, search, the 404 with the flag off, the menu entry following the flag, the live load winning over the copy, and the fallback when the live load is rejected, empty or malformed. Two tests run the full catalogue-to-manifests path against a fake registry, including a digest mismatch, which is rejected. A deployed preview with the flag on showed catalogue commit 23aee3a while the repo copy was still at an older commit, so the live load is what it rendered; its build log has no fallback warning. On that preview, the menu opened on hover and with the keyboard, and the mobile menu listed the entries.

Not verified:

  • How the page behaves when the registry or GitHub is slow but does not fail. The 15-second timeout applies to each request, not the whole load, and a timeout sends the page to the fallback. The catalogue takes three requests in sequence and then each manifest up to two, so a load where every request is slow but within its limit could take over a minute. I have not measured this.
  • Screen readers on the new menu.

Assisted-by: AI

A visitor types an app name and sees what they can do with its data through
PDPP today, then whether the company has signed the Principles or registered.
It is a read-only view over lists PDPP already publishes: the signed connector
catalogue, the Supporters register and the conformance register. Nothing is
collected or sent.

The catalogue is committed as a snapshot, refreshed by
scripts/sync-connector-catalog.mjs. The snapshot is pinned to the manifest and
layer digests; the script does not check the catalogue's cosign signature.

The page returns not found unless NEXT_PUBLIC_PDPP_APP_DIRECTORY=true. No nav
links are added.

Assisted-by: AI
Signed-off-by: Tim Nunamaker <tnunamak@gmail.com>
…-source

Catalogue keys are hyphenated but most source folders use underscores, so 22
connectors had no labels. Most connectors were written by maintainers, so
'open-source connector' is the accurate description.

Assisted-by: AI
Signed-off-by: Tim Nunamaker <tnunamak@gmail.com>
Assisted-by: AI
Signed-off-by: Tim Nunamaker <tnunamak@gmail.com>
An app such as Apple Health is a product, not the company that signs, so the
status line says 'The company' unless a register names it. A signed company
 with no connector leads with its signature. The count says connectors.

Assisted-by: AI
Signed-off-by: Tim Nunamaker <tnunamak@gmail.com>
Every row repeated the same sentence. Rows now show the app and the data it
brings; the page says once that companies have not signed unless a row says
so. Supported, the normal tier, carries no label.

Assisted-by: AI
Signed-off-by: Tim Nunamaker <tnunamak@gmail.com>
The link is pinned to the commit the catalogue was built from, so it shows
the code the listing describes. The search example is picked after
hydration so static HTML and the first render agree.

Assisted-by: AI
Signed-off-by: Tim Nunamaker <tnunamak@gmail.com>
Assisted-by: AI
Signed-off-by: Tim Nunamaker <tnunamak@gmail.com>
Assisted-by: AI
Signed-off-by: Tim Nunamaker <tnunamak@gmail.com>
Assisted-by: AI
Signed-off-by: Tim Nunamaker <tnunamak@gmail.com>
Assisted-by: AI
Signed-off-by: Tim Nunamaker <tnunamak@gmail.com>
Assisted-by: AI
Signed-off-by: Tim Nunamaker <tnunamak@gmail.com>
Assisted-by: AI
Signed-off-by: Tim Nunamaker <tnunamak@gmail.com>
Assisted-by: AI
Signed-off-by: Tim Nunamaker <tnunamak@gmail.com>
… copy as fallback

Assisted-by: AI
Signed-off-by: Tim Nunamaker <tnunamak@gmail.com>
Assisted-by: AI
Signed-off-by: Tim Nunamaker <tnunamak@gmail.com>
Assisted-by: AI
Signed-off-by: Tim Nunamaker <tnunamak@gmail.com>
@vercel

vercel Bot commented Nov 6, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
pdpp Ready Ready Preview Nov 6, 2026 3:38pm UTC

Request Review

@tnunamak
tnunamak changed the base branch from main to site/supporter-apps-question November 6, 2026 15:42
@tnunamak
tnunamak merged commit 17877df into site/supporter-apps-question Nov 6, 2026
6 of 9 checks passed
@tnunamak
tnunamak deleted the site/app-directory branch November 6, 2026 15:42

This branch was successfully deployed

1 active deployment
Preview — c47f9306 Deployed Nov 6, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant