Repository navigation
site: add an "Is your app on PDPP?" page behind a flag - #469
Merged
Merged
Conversation
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>
This was referenced Nov 6, 2026
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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:ghcr.io/pdp-connect/connector-catalog:latestthat is built from PDP-Connect/data-connectors and readable without a login. It says which connectors exist and what data each one brings.public/principles/supporters.json), for organisations that have signed the Principles.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.mjsfetches 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'sunstable_cache. The cache wraps the whole load rather than each fetch because the registry requests carry a fresh anonymous token in theirAuthorizationheader, so a per-fetch cache keyed on the request would rarely hit. If the load fails, or returns nothing or something malformed, the page usessrc/data/connector-catalog.json, a copy in the repo thatscripts/sync-connector-catalog.mjsregenerates. The copy is at data-connectors commit23aee3awith 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 totruelike the other site flags. With the flag off,/appsis a 404: the page callsnotFound()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 classmd:group, which Tailwind does not treat as a group marker, so thegroup-hoverandgroup-focus-withinrules that open the panel never matched. It now usesgroup, and the panel getsmd:w-maxso 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
verifyscript (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 commit23aee3awhile 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:
Assisted-by: AI