Summary
Widget JSON for most providers exposes a public profile URL under payload.profile.profileURL. The Goodreads widget document today only exposes the same concept as payload.profile.link (while other fields like name, username, etc. match the shared profile pattern).
Gatsby Theme Chronogrove now resolves the Goodreads CTA from profile.profileURL first, with profile.link as a legacy fallback (getGoodreadsProfilePageUrl in the theme). To remove drift and keep a single cross-provider contract, Chronogrove should emit profile.profileURL for Goodreads (and optionally retain link as an alias for older clients).
Context
- Related consumer work: “Use metrics API profile blocks for widget CTAs” (gatsby-theme-chronogrove#606).
- Verified live
GET /widgets/goodreads (e.g. api.chrisvogt.me): profile.link holds the canonical show URL; profile.profileURL is absent today.
- Other providers on the same API already use
profile.profileURL where applicable (Flickr, Instagram, Spotify, Steam, Discogs).
Proposal
- When shaping or persisting the goodreads widget document / API payload, set
profile.profileURL to the same value currently stored in profile.link (or normalize at read-time in the public widget handler).
- Prefer keeping
link populated for backward compatibility until any downstream clients no longer rely on it (or document a deprecation timeline).
- Optionally add or extend
docs/ notes so the widget contract explicitly lists profile.profileURL for every provider that has a canonical profile page.
Acceptance criteria
- Public goodreads widget JSON includes
profile.profileURL with the canonical profile/show URL.
- Existing
profile.link behavior documented (deprecated vs dual-field).
Summary
Widget JSON for most providers exposes a public profile URL under
payload.profile.profileURL. The Goodreads widget document today only exposes the same concept aspayload.profile.link(while other fields likename,username, etc. match the sharedprofilepattern).Gatsby Theme Chronogrove now resolves the Goodreads CTA from
profile.profileURLfirst, withprofile.linkas a legacy fallback (getGoodreadsProfilePageUrlin the theme). To remove drift and keep a single cross-provider contract, Chronogrove should emitprofile.profileURLfor Goodreads (and optionally retainlinkas an alias for older clients).Context
GET /widgets/goodreads(e.g.api.chrisvogt.me):profile.linkholds the canonical show URL;profile.profileURLis absent today.profile.profileURLwhere applicable (Flickr, Instagram, Spotify, Steam, Discogs).Proposal
profile.profileURLto the same value currently stored inprofile.link(or normalize at read-time in the public widget handler).linkpopulated for backward compatibility until any downstream clients no longer rely on it (or document a deprecation timeline).docs/notes so the widget contract explicitly listsprofile.profileURLfor every provider that has a canonical profile page.Acceptance criteria
profile.profileURLwith the canonical profile/show URL.profile.linkbehavior documented (deprecated vs dual-field).