me.linkna.linkinbio

linkna.me

Schema Diff

+1003 -4

From

CID
bafyreidirqkl766...
Indexed At
2026-02-18 19:34 UTC
View this version

To

CID
bafyreiaslbzydhq...
Indexed At
2026-03-19 20:26 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

21 breaking changes, 370 non-breaking changes.

Breaking Changes (21)
  • RemovedEdge RemovedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant1", kind: "variant", name: Some("#widgetGoodreads") }
  • RemovedEdge RemovedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant2", kind: "variant", name: Some("#widgetGithub") }
  • RemovedEdge RemovedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant3", kind: "variant", name: Some("#widgetTealfm") }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetPatreon.type", sort: "const", value: "patreon" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#headerCard.text", sort: "maxLength", value: "100" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetBeehiiv.type", sort: "const", value: "beehiiv" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#headerCard.alignment", sort: "enum", value: "left,center,right" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetDiscord.type", sort: "const", value: "discord" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetClock.type", sort: "const", value: "clock" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetVideo.alt", sort: "maxLength", value: "1000" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetVideo.title", sort: "maxLength", value: "100" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetVideo.type", sort: "const", value: "video" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#headerCard.type", sort: "const", value: "header" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetMap.type", sort: "const", value: "map" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetClock.label", sort: "maxLength", value: "100" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetReddit.type", sort: "const", value: "reddit" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetLastfm.type", sort: "const", value: "lastfm" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetMedium.type", sort: "const", value: "medium" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetYoutube.type", sort: "const", value: "youtube" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetSubstack.type", sort: "const", value: "substack" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetTwitch.type", sort: "const", value: "twitch" }
Non-Breaking Changes (370)
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#connectedServices.lastfmUsername" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#headerCard" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#headerCard.alignment" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#headerCard.enabled" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#headerCard.id" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#headerCard.text" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#headerCard.type" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#mediumArticle" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#mediumArticle.claps" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#mediumArticle.publishedAt" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#mediumArticle.readingTime" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#mediumArticle.subtitle" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#mediumArticle.title" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#mediumArticle.url" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#redditPost" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#redditPost.numComments" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#redditPost.score" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#redditPost.subreddit" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#redditPost.title" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#redditPost.url" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#themeConfig.backgroundImage" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#themeConfig.backgroundImageCredit" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#themeConfig.cursorSparkles" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#themeConfig.cursorStyle" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#videoAspectRatio" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#videoAspectRatio.height" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#videoAspectRatio.width" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetBeehiiv" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetBeehiiv.description" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetBeehiiv.enabled" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetBeehiiv.id" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetBeehiiv.imageUrl" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetBeehiiv.lastSyncedAt" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetBeehiiv.publicationId" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetBeehiiv.publicationName" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetBeehiiv.publicationUrl" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetBeehiiv.size" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetBeehiiv.type" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetClock" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetClock.enabled" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetClock.id" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetClock.label" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetClock.mode" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetClock.size" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetClock.targetDate" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetClock.timezone" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetClock.type" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.bannerUrl" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.description" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.enabled" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.iconUrl" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.id" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.inviteUrl" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.lastSyncedAt" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.memberCount" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.presenceCount" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.serverId" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.serverName" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.size" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.type" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetLastfm" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetLastfm.coverArtNotice" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetLastfm.enabled" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetLastfm.id" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetLastfm.lastSyncedAt" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetLastfm.lastfmUsername" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetLastfm.plays" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetLastfm.plays:items" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetLastfm.size" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetLastfm.type" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMap" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMap.enabled" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMap.id" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMap.latitude" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMap.locationName" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMap.longitude" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMap.size" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMap.style" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMap.type" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMap.zoom" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium.articles" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium.articles:items" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium.bio" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium.displayName" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium.enabled" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium.followerCount" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium.id" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium.lastSyncedAt" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium.profileUrl" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium.size" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium.type" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium.username" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon.campaignId" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon.campaignUrl" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon.creationName" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon.creatorName" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon.enabled" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon.id" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon.imageUrl" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon.lastSyncedAt" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon.patronCount" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon.postCount" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon.size" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon.type" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.avatarUrl" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.commentKarma" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.enabled" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.id" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.karma" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.lastSyncedAt" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.linkKarma" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.profileUrl" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.recentPosts" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.recentPosts:items" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.size" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.type" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.username" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.authorName" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.coverImageUrl" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.description" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.enabled" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.id" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.imageUrl" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.lastSyncedAt" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.postCount" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.publicationId" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.publicationName" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.publicationUrl" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.size" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.subscriberCount" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.type" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTealfm.source" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch.displayName" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch.enabled" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch.id" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch.isLive" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch.lastSyncedAt" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch.profileImageUrl" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch.size" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch.streamGame" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch.streamTitle" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch.type" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch.username" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch.viewerCount" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.alt" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.aspectRatio" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.createdAt" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.did" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.enabled" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.id" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.loop" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.muted" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.showOverlay" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.size" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.title" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.type" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.videoBlobRef" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetYoutube" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetYoutube.channelId" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetYoutube.channelName" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetYoutube.channelUrl" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetYoutube.enabled" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetYoutube.id" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetYoutube.lastSyncedAt" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetYoutube.latestVideo" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetYoutube.size" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#widgetYoutube.type" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#youtubeVideo" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#youtubeVideo.isShort" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#youtubeVideo.publishedAt" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#youtubeVideo.title" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio#youtubeVideo.videoId" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant10" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant11" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant12" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant13" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant14" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant15" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant16" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant4" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant5" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant6" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant7" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant8" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant9" }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#connectedServices", tgt: "me.linkna.linkinbio#connectedServices.lastfmUsername", kind: "prop", name: Some("lastfmUsername") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#headerCard", tgt: "me.linkna.linkinbio#headerCard.alignment", kind: "prop", name: Some("alignment") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#headerCard", tgt: "me.linkna.linkinbio#headerCard.enabled", kind: "prop", name: Some("enabled") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#headerCard", tgt: "me.linkna.linkinbio#headerCard.id", kind: "prop", name: Some("id") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#headerCard", tgt: "me.linkna.linkinbio#headerCard.text", kind: "prop", name: Some("text") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#headerCard", tgt: "me.linkna.linkinbio#headerCard.type", kind: "prop", name: Some("type") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#mediumArticle", tgt: "me.linkna.linkinbio#mediumArticle.claps", kind: "prop", name: Some("claps") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#mediumArticle", tgt: "me.linkna.linkinbio#mediumArticle.publishedAt", kind: "prop", name: Some("publishedAt") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#mediumArticle", tgt: "me.linkna.linkinbio#mediumArticle.readingTime", kind: "prop", name: Some("readingTime") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#mediumArticle", tgt: "me.linkna.linkinbio#mediumArticle.subtitle", kind: "prop", name: Some("subtitle") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#mediumArticle", tgt: "me.linkna.linkinbio#mediumArticle.title", kind: "prop", name: Some("title") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#mediumArticle", tgt: "me.linkna.linkinbio#mediumArticle.url", kind: "prop", name: Some("url") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#redditPost", tgt: "me.linkna.linkinbio#redditPost.numComments", kind: "prop", name: Some("numComments") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#redditPost", tgt: "me.linkna.linkinbio#redditPost.score", kind: "prop", name: Some("score") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#redditPost", tgt: "me.linkna.linkinbio#redditPost.subreddit", kind: "prop", name: Some("subreddit") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#redditPost", tgt: "me.linkna.linkinbio#redditPost.title", kind: "prop", name: Some("title") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#redditPost", tgt: "me.linkna.linkinbio#redditPost.url", kind: "prop", name: Some("url") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#themeConfig", tgt: "me.linkna.linkinbio#themeConfig.backgroundImage", kind: "prop", name: Some("backgroundImage") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#themeConfig", tgt: "me.linkna.linkinbio#themeConfig.backgroundImageCredit", kind: "prop", name: Some("backgroundImageCredit") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#themeConfig", tgt: "me.linkna.linkinbio#themeConfig.cursorSparkles", kind: "prop", name: Some("cursorSparkles") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#themeConfig", tgt: "me.linkna.linkinbio#themeConfig.cursorStyle", kind: "prop", name: Some("cursorStyle") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#videoAspectRatio", tgt: "me.linkna.linkinbio#videoAspectRatio.height", kind: "prop", name: Some("height") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#videoAspectRatio", tgt: "me.linkna.linkinbio#videoAspectRatio.width", kind: "prop", name: Some("width") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetBeehiiv", tgt: "me.linkna.linkinbio#widgetBeehiiv.description", kind: "prop", name: Some("description") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetBeehiiv", tgt: "me.linkna.linkinbio#widgetBeehiiv.enabled", kind: "prop", name: Some("enabled") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetBeehiiv", tgt: "me.linkna.linkinbio#widgetBeehiiv.id", kind: "prop", name: Some("id") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetBeehiiv", tgt: "me.linkna.linkinbio#widgetBeehiiv.imageUrl", kind: "prop", name: Some("imageUrl") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetBeehiiv", tgt: "me.linkna.linkinbio#widgetBeehiiv.lastSyncedAt", kind: "prop", name: Some("lastSyncedAt") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetBeehiiv", tgt: "me.linkna.linkinbio#widgetBeehiiv.publicationId", kind: "prop", name: Some("publicationId") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetBeehiiv", tgt: "me.linkna.linkinbio#widgetBeehiiv.publicationName", kind: "prop", name: Some("publicationName") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetBeehiiv", tgt: "me.linkna.linkinbio#widgetBeehiiv.publicationUrl", kind: "prop", name: Some("publicationUrl") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetBeehiiv", tgt: "me.linkna.linkinbio#widgetBeehiiv.size", kind: "prop", name: Some("size") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetBeehiiv", tgt: "me.linkna.linkinbio#widgetBeehiiv.type", kind: "prop", name: Some("type") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetClock", tgt: "me.linkna.linkinbio#widgetClock.enabled", kind: "prop", name: Some("enabled") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetClock", tgt: "me.linkna.linkinbio#widgetClock.id", kind: "prop", name: Some("id") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetClock", tgt: "me.linkna.linkinbio#widgetClock.label", kind: "prop", name: Some("label") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetClock", tgt: "me.linkna.linkinbio#widgetClock.mode", kind: "prop", name: Some("mode") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetClock", tgt: "me.linkna.linkinbio#widgetClock.size", kind: "prop", name: Some("size") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetClock", tgt: "me.linkna.linkinbio#widgetClock.targetDate", kind: "prop", name: Some("targetDate") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetClock", tgt: "me.linkna.linkinbio#widgetClock.timezone", kind: "prop", name: Some("timezone") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetClock", tgt: "me.linkna.linkinbio#widgetClock.type", kind: "prop", name: Some("type") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.bannerUrl", kind: "prop", name: Some("bannerUrl") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.description", kind: "prop", name: Some("description") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.enabled", kind: "prop", name: Some("enabled") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.iconUrl", kind: "prop", name: Some("iconUrl") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.id", kind: "prop", name: Some("id") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.inviteUrl", kind: "prop", name: Some("inviteUrl") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.lastSyncedAt", kind: "prop", name: Some("lastSyncedAt") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.memberCount", kind: "prop", name: Some("memberCount") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.presenceCount", kind: "prop", name: Some("presenceCount") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.serverId", kind: "prop", name: Some("serverId") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.serverName", kind: "prop", name: Some("serverName") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.size", kind: "prop", name: Some("size") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.type", kind: "prop", name: Some("type") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetLastfm", tgt: "me.linkna.linkinbio#widgetLastfm.coverArtNotice", kind: "prop", name: Some("coverArtNotice") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetLastfm", tgt: "me.linkna.linkinbio#widgetLastfm.enabled", kind: "prop", name: Some("enabled") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetLastfm", tgt: "me.linkna.linkinbio#widgetLastfm.id", kind: "prop", name: Some("id") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetLastfm", tgt: "me.linkna.linkinbio#widgetLastfm.lastSyncedAt", kind: "prop", name: Some("lastSyncedAt") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetLastfm", tgt: "me.linkna.linkinbio#widgetLastfm.lastfmUsername", kind: "prop", name: Some("lastfmUsername") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetLastfm", tgt: "me.linkna.linkinbio#widgetLastfm.plays", kind: "prop", name: Some("plays") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetLastfm", tgt: "me.linkna.linkinbio#widgetLastfm.size", kind: "prop", name: Some("size") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetLastfm", tgt: "me.linkna.linkinbio#widgetLastfm.type", kind: "prop", name: Some("type") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetLastfm.plays", tgt: "me.linkna.linkinbio#widgetLastfm.plays:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetMap", tgt: "me.linkna.linkinbio#widgetMap.enabled", kind: "prop", name: Some("enabled") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetMap", tgt: "me.linkna.linkinbio#widgetMap.id", kind: "prop", name: Some("id") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetMap", tgt: "me.linkna.linkinbio#widgetMap.latitude", kind: "prop", name: Some("latitude") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetMap", tgt: "me.linkna.linkinbio#widgetMap.locationName", kind: "prop", name: Some("locationName") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetMap", tgt: "me.linkna.linkinbio#widgetMap.longitude", kind: "prop", name: Some("longitude") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetMap", tgt: "me.linkna.linkinbio#widgetMap.size", kind: "prop", name: Some("size") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetMap", tgt: "me.linkna.linkinbio#widgetMap.style", kind: "prop", name: Some("style") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetMap", tgt: "me.linkna.linkinbio#widgetMap.type", kind: "prop", name: Some("type") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetMap", tgt: "me.linkna.linkinbio#widgetMap.zoom", kind: "prop", name: Some("zoom") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetMedium", tgt: "me.linkna.linkinbio#widgetMedium.articles", kind: "prop", name: Some("articles") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetMedium", tgt: "me.linkna.linkinbio#widgetMedium.bio", kind: "prop", name: Some("bio") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetMedium", tgt: "me.linkna.linkinbio#widgetMedium.displayName", kind: "prop", name: Some("displayName") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetMedium", tgt: "me.linkna.linkinbio#widgetMedium.enabled", kind: "prop", name: Some("enabled") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetMedium", tgt: "me.linkna.linkinbio#widgetMedium.followerCount", kind: "prop", name: Some("followerCount") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetMedium", tgt: "me.linkna.linkinbio#widgetMedium.id", kind: "prop", name: Some("id") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetMedium", tgt: "me.linkna.linkinbio#widgetMedium.lastSyncedAt", kind: "prop", name: Some("lastSyncedAt") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetMedium", tgt: "me.linkna.linkinbio#widgetMedium.profileUrl", kind: "prop", name: Some("profileUrl") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetMedium", tgt: "me.linkna.linkinbio#widgetMedium.size", kind: "prop", name: Some("size") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetMedium", tgt: "me.linkna.linkinbio#widgetMedium.type", kind: "prop", name: Some("type") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetMedium", tgt: "me.linkna.linkinbio#widgetMedium.username", kind: "prop", name: Some("username") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetMedium.articles", tgt: "me.linkna.linkinbio#widgetMedium.articles:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetPatreon", tgt: "me.linkna.linkinbio#widgetPatreon.campaignId", kind: "prop", name: Some("campaignId") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetPatreon", tgt: "me.linkna.linkinbio#widgetPatreon.campaignUrl", kind: "prop", name: Some("campaignUrl") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetPatreon", tgt: "me.linkna.linkinbio#widgetPatreon.creationName", kind: "prop", name: Some("creationName") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetPatreon", tgt: "me.linkna.linkinbio#widgetPatreon.creatorName", kind: "prop", name: Some("creatorName") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetPatreon", tgt: "me.linkna.linkinbio#widgetPatreon.enabled", kind: "prop", name: Some("enabled") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetPatreon", tgt: "me.linkna.linkinbio#widgetPatreon.id", kind: "prop", name: Some("id") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetPatreon", tgt: "me.linkna.linkinbio#widgetPatreon.imageUrl", kind: "prop", name: Some("imageUrl") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetPatreon", tgt: "me.linkna.linkinbio#widgetPatreon.lastSyncedAt", kind: "prop", name: Some("lastSyncedAt") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetPatreon", tgt: "me.linkna.linkinbio#widgetPatreon.patronCount", kind: "prop", name: Some("patronCount") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetPatreon", tgt: "me.linkna.linkinbio#widgetPatreon.postCount", kind: "prop", name: Some("postCount") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetPatreon", tgt: "me.linkna.linkinbio#widgetPatreon.size", kind: "prop", name: Some("size") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetPatreon", tgt: "me.linkna.linkinbio#widgetPatreon.type", kind: "prop", name: Some("type") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetReddit", tgt: "me.linkna.linkinbio#widgetReddit.avatarUrl", kind: "prop", name: Some("avatarUrl") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetReddit", tgt: "me.linkna.linkinbio#widgetReddit.commentKarma", kind: "prop", name: Some("commentKarma") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetReddit", tgt: "me.linkna.linkinbio#widgetReddit.enabled", kind: "prop", name: Some("enabled") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetReddit", tgt: "me.linkna.linkinbio#widgetReddit.id", kind: "prop", name: Some("id") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetReddit", tgt: "me.linkna.linkinbio#widgetReddit.karma", kind: "prop", name: Some("karma") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetReddit", tgt: "me.linkna.linkinbio#widgetReddit.lastSyncedAt", kind: "prop", name: Some("lastSyncedAt") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetReddit", tgt: "me.linkna.linkinbio#widgetReddit.linkKarma", kind: "prop", name: Some("linkKarma") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetReddit", tgt: "me.linkna.linkinbio#widgetReddit.profileUrl", kind: "prop", name: Some("profileUrl") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetReddit", tgt: "me.linkna.linkinbio#widgetReddit.recentPosts", kind: "prop", name: Some("recentPosts") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetReddit", tgt: "me.linkna.linkinbio#widgetReddit.size", kind: "prop", name: Some("size") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetReddit", tgt: "me.linkna.linkinbio#widgetReddit.type", kind: "prop", name: Some("type") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetReddit", tgt: "me.linkna.linkinbio#widgetReddit.username", kind: "prop", name: Some("username") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetReddit.recentPosts", tgt: "me.linkna.linkinbio#widgetReddit.recentPosts:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.authorName", kind: "prop", name: Some("authorName") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.coverImageUrl", kind: "prop", name: Some("coverImageUrl") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.description", kind: "prop", name: Some("description") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.enabled", kind: "prop", name: Some("enabled") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.id", kind: "prop", name: Some("id") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.imageUrl", kind: "prop", name: Some("imageUrl") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.lastSyncedAt", kind: "prop", name: Some("lastSyncedAt") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.postCount", kind: "prop", name: Some("postCount") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.publicationId", kind: "prop", name: Some("publicationId") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.publicationName", kind: "prop", name: Some("publicationName") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.publicationUrl", kind: "prop", name: Some("publicationUrl") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.size", kind: "prop", name: Some("size") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.subscriberCount", kind: "prop", name: Some("subscriberCount") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.type", kind: "prop", name: Some("type") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetTealfm", tgt: "me.linkna.linkinbio#widgetTealfm.source", kind: "prop", name: Some("source") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetTwitch", tgt: "me.linkna.linkinbio#widgetTwitch.displayName", kind: "prop", name: Some("displayName") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetTwitch", tgt: "me.linkna.linkinbio#widgetTwitch.enabled", kind: "prop", name: Some("enabled") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetTwitch", tgt: "me.linkna.linkinbio#widgetTwitch.id", kind: "prop", name: Some("id") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetTwitch", tgt: "me.linkna.linkinbio#widgetTwitch.isLive", kind: "prop", name: Some("isLive") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetTwitch", tgt: "me.linkna.linkinbio#widgetTwitch.lastSyncedAt", kind: "prop", name: Some("lastSyncedAt") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetTwitch", tgt: "me.linkna.linkinbio#widgetTwitch.profileImageUrl", kind: "prop", name: Some("profileImageUrl") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetTwitch", tgt: "me.linkna.linkinbio#widgetTwitch.size", kind: "prop", name: Some("size") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetTwitch", tgt: "me.linkna.linkinbio#widgetTwitch.streamGame", kind: "prop", name: Some("streamGame") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetTwitch", tgt: "me.linkna.linkinbio#widgetTwitch.streamTitle", kind: "prop", name: Some("streamTitle") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetTwitch", tgt: "me.linkna.linkinbio#widgetTwitch.type", kind: "prop", name: Some("type") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetTwitch", tgt: "me.linkna.linkinbio#widgetTwitch.username", kind: "prop", name: Some("username") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetTwitch", tgt: "me.linkna.linkinbio#widgetTwitch.viewerCount", kind: "prop", name: Some("viewerCount") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.alt", kind: "prop", name: Some("alt") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.aspectRatio", kind: "prop", name: Some("aspectRatio") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.createdAt", kind: "prop", name: Some("createdAt") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.did", kind: "prop", name: Some("did") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.enabled", kind: "prop", name: Some("enabled") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.id", kind: "prop", name: Some("id") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.loop", kind: "prop", name: Some("loop") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.muted", kind: "prop", name: Some("muted") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.showOverlay", kind: "prop", name: Some("showOverlay") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.size", kind: "prop", name: Some("size") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.title", kind: "prop", name: Some("title") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.type", kind: "prop", name: Some("type") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.videoBlobRef", kind: "prop", name: Some("videoBlobRef") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetYoutube", tgt: "me.linkna.linkinbio#widgetYoutube.channelId", kind: "prop", name: Some("channelId") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetYoutube", tgt: "me.linkna.linkinbio#widgetYoutube.channelName", kind: "prop", name: Some("channelName") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetYoutube", tgt: "me.linkna.linkinbio#widgetYoutube.channelUrl", kind: "prop", name: Some("channelUrl") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetYoutube", tgt: "me.linkna.linkinbio#widgetYoutube.enabled", kind: "prop", name: Some("enabled") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetYoutube", tgt: "me.linkna.linkinbio#widgetYoutube.id", kind: "prop", name: Some("id") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetYoutube", tgt: "me.linkna.linkinbio#widgetYoutube.lastSyncedAt", kind: "prop", name: Some("lastSyncedAt") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetYoutube", tgt: "me.linkna.linkinbio#widgetYoutube.latestVideo", kind: "prop", name: Some("latestVideo") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetYoutube", tgt: "me.linkna.linkinbio#widgetYoutube.size", kind: "prop", name: Some("size") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#widgetYoutube", tgt: "me.linkna.linkinbio#widgetYoutube.type", kind: "prop", name: Some("type") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#youtubeVideo", tgt: "me.linkna.linkinbio#youtubeVideo.isShort", kind: "prop", name: Some("isShort") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#youtubeVideo", tgt: "me.linkna.linkinbio#youtubeVideo.publishedAt", kind: "prop", name: Some("publishedAt") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#youtubeVideo", tgt: "me.linkna.linkinbio#youtubeVideo.title", kind: "prop", name: Some("title") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio#youtubeVideo", tgt: "me.linkna.linkinbio#youtubeVideo.videoId", kind: "prop", name: Some("videoId") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant1", kind: "variant", name: Some("#headerCard") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant10", kind: "variant", name: Some("#widgetBeehiiv") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant11", kind: "variant", name: Some("#widgetVideo") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant12", kind: "variant", name: Some("#widgetTwitch") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant13", kind: "variant", name: Some("#widgetDiscord") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant14", kind: "variant", name: Some("#widgetReddit") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant15", kind: "variant", name: Some("#widgetMedium") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant16", kind: "variant", name: Some("#widgetMap") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant2", kind: "variant", name: Some("#widgetGoodreads") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant3", kind: "variant", name: Some("#widgetGithub") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant4", kind: "variant", name: Some("#widgetTealfm") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant5", kind: "variant", name: Some("#widgetLastfm") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant6", kind: "variant", name: Some("#widgetClock") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant7", kind: "variant", name: Some("#widgetYoutube") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant8", kind: "variant", name: Some("#widgetPatreon") }
  • AddedEdge AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant9", kind: "variant", name: Some("#widgetSubstack") }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "me.linkna.linkinbio#connectedServices.lastfmUsername" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#headerCard" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#headerCard.alignment" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#headerCard.enabled" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#headerCard.id" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#headerCard.text" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#headerCard.type" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#mediumArticle" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#mediumArticle.claps" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#mediumArticle.publishedAt" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#mediumArticle.readingTime" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#mediumArticle.subtitle" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#mediumArticle.title" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#mediumArticle.url" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#redditPost" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#redditPost.numComments" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#redditPost.score" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#redditPost.subreddit" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#redditPost.title" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#redditPost.url" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#themeConfig.backgroundImage" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#themeConfig.backgroundImageCredit" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#themeConfig.cursorSparkles" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#themeConfig.cursorStyle" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#videoAspectRatio" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#videoAspectRatio.height" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#videoAspectRatio.width" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetBeehiiv" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetBeehiiv.description" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetBeehiiv.enabled" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetBeehiiv.id" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetBeehiiv.imageUrl" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetBeehiiv.lastSyncedAt" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetBeehiiv.publicationId" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetBeehiiv.publicationName" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetBeehiiv.publicationUrl" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetBeehiiv.size" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetBeehiiv.type" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetClock" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetClock.enabled" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetClock.id" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetClock.label" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetClock.mode" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetClock.size" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetClock.targetDate" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetClock.timezone" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetClock.type" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.bannerUrl" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.description" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.enabled" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.iconUrl" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.id" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.inviteUrl" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.lastSyncedAt" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.memberCount" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.presenceCount" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.serverId" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.serverName" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.size" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetDiscord.type" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetLastfm" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetLastfm.coverArtNotice" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetLastfm.enabled" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetLastfm.id" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetLastfm.lastSyncedAt" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetLastfm.lastfmUsername" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetLastfm.plays" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetLastfm.plays:items" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetLastfm.size" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetLastfm.type" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMap" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMap.enabled" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMap.id" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMap.latitude" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMap.locationName" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMap.longitude" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMap.size" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMap.style" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMap.type" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMap.zoom" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium.articles" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium.articles:items" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium.bio" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium.displayName" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium.enabled" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium.followerCount" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium.id" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium.lastSyncedAt" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium.profileUrl" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium.size" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium.type" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetMedium.username" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon.campaignId" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon.campaignUrl" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon.creationName" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon.creatorName" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon.enabled" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon.id" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon.imageUrl" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon.lastSyncedAt" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon.patronCount" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon.postCount" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon.size" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetPatreon.type" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.avatarUrl" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.commentKarma" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.enabled" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.id" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.karma" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.lastSyncedAt" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.linkKarma" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.profileUrl" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.recentPosts" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.recentPosts:items" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.size" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.type" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetReddit.username" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.authorName" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.coverImageUrl" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.description" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.enabled" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.id" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.imageUrl" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.lastSyncedAt" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.postCount" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.publicationId" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.publicationName" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.publicationUrl" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.size" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.subscriberCount" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetSubstack.type" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTealfm.source" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch.displayName" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch.enabled" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch.id" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch.isLive" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch.lastSyncedAt" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch.profileImageUrl" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch.size" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch.streamGame" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch.streamTitle" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch.type" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch.username" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetTwitch.viewerCount" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.alt" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.aspectRatio" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.createdAt" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.did" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.enabled" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.id" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.loop" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.muted" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.showOverlay" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.size" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.title" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.type" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetVideo.videoBlobRef" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetYoutube" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetYoutube.channelId" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetYoutube.channelName" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetYoutube.channelUrl" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetYoutube.enabled" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetYoutube.id" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetYoutube.lastSyncedAt" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetYoutube.latestVideo" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetYoutube.size" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#widgetYoutube.type" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#youtubeVideo" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#youtubeVideo.isShort" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#youtubeVideo.publishedAt" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#youtubeVideo.title" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio#youtubeVideo.videoId" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant10" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant11" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant12" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant13" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant14" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant15" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant16" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant4" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant5" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant6" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant7" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant8" }
  • AddedVertex { vertex_id: "me.linkna.linkinbio:body.cards:items:variant9" }

Constraint Changes

  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#headerCard.text", sort: "maxLength", value: "100" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetBeehiiv.type", sort: "const", value: "beehiiv" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetLastfm.type", sort: "const", value: "lastfm" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#headerCard.type", sort: "const", value: "header" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetReddit.type", sort: "const", value: "reddit" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetSubstack.type", sort: "const", value: "substack" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetVideo.alt", sort: "maxLength", value: "1000" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetVideo.type", sort: "const", value: "video" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#headerCard.alignment", sort: "enum", value: "left,center,right" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetClock.type", sort: "const", value: "clock" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetYoutube.type", sort: "const", value: "youtube" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetMap.type", sort: "const", value: "map" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetMedium.type", sort: "const", value: "medium" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetClock.label", sort: "maxLength", value: "100" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetVideo.title", sort: "maxLength", value: "100" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetTwitch.type", sort: "const", value: "twitch" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetPatreon.type", sort: "const", value: "patreon" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetDiscord.type", sort: "const", value: "discord" }

Additional Notes

  • Breaking: RemovedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant1", kind: "variant", name: Some("#widgetGoodreads") }
  • Breaking: RemovedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant2", kind: "variant", name: Some("#widgetGithub") }
  • Breaking: RemovedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant3", kind: "variant", name: Some("#widgetTealfm") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#connectedServices", tgt: "me.linkna.linkinbio#connectedServices.lastfmUsername", kind: "prop", name: Some("lastfmUsername") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#headerCard", tgt: "me.linkna.linkinbio#headerCard.alignment", kind: "prop", name: Some("alignment") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#headerCard", tgt: "me.linkna.linkinbio#headerCard.enabled", kind: "prop", name: Some("enabled") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#headerCard", tgt: "me.linkna.linkinbio#headerCard.id", kind: "prop", name: Some("id") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#headerCard", tgt: "me.linkna.linkinbio#headerCard.text", kind: "prop", name: Some("text") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#headerCard", tgt: "me.linkna.linkinbio#headerCard.type", kind: "prop", name: Some("type") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#mediumArticle", tgt: "me.linkna.linkinbio#mediumArticle.claps", kind: "prop", name: Some("claps") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#mediumArticle", tgt: "me.linkna.linkinbio#mediumArticle.publishedAt", kind: "prop", name: Some("publishedAt") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#mediumArticle", tgt: "me.linkna.linkinbio#mediumArticle.readingTime", kind: "prop", name: Some("readingTime") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#mediumArticle", tgt: "me.linkna.linkinbio#mediumArticle.subtitle", kind: "prop", name: Some("subtitle") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#mediumArticle", tgt: "me.linkna.linkinbio#mediumArticle.title", kind: "prop", name: Some("title") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#mediumArticle", tgt: "me.linkna.linkinbio#mediumArticle.url", kind: "prop", name: Some("url") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#redditPost", tgt: "me.linkna.linkinbio#redditPost.numComments", kind: "prop", name: Some("numComments") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#redditPost", tgt: "me.linkna.linkinbio#redditPost.score", kind: "prop", name: Some("score") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#redditPost", tgt: "me.linkna.linkinbio#redditPost.subreddit", kind: "prop", name: Some("subreddit") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#redditPost", tgt: "me.linkna.linkinbio#redditPost.title", kind: "prop", name: Some("title") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#redditPost", tgt: "me.linkna.linkinbio#redditPost.url", kind: "prop", name: Some("url") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#themeConfig", tgt: "me.linkna.linkinbio#themeConfig.backgroundImage", kind: "prop", name: Some("backgroundImage") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#themeConfig", tgt: "me.linkna.linkinbio#themeConfig.backgroundImageCredit", kind: "prop", name: Some("backgroundImageCredit") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#themeConfig", tgt: "me.linkna.linkinbio#themeConfig.cursorSparkles", kind: "prop", name: Some("cursorSparkles") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#themeConfig", tgt: "me.linkna.linkinbio#themeConfig.cursorStyle", kind: "prop", name: Some("cursorStyle") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#videoAspectRatio", tgt: "me.linkna.linkinbio#videoAspectRatio.height", kind: "prop", name: Some("height") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#videoAspectRatio", tgt: "me.linkna.linkinbio#videoAspectRatio.width", kind: "prop", name: Some("width") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetBeehiiv", tgt: "me.linkna.linkinbio#widgetBeehiiv.description", kind: "prop", name: Some("description") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetBeehiiv", tgt: "me.linkna.linkinbio#widgetBeehiiv.enabled", kind: "prop", name: Some("enabled") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetBeehiiv", tgt: "me.linkna.linkinbio#widgetBeehiiv.id", kind: "prop", name: Some("id") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetBeehiiv", tgt: "me.linkna.linkinbio#widgetBeehiiv.imageUrl", kind: "prop", name: Some("imageUrl") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetBeehiiv", tgt: "me.linkna.linkinbio#widgetBeehiiv.lastSyncedAt", kind: "prop", name: Some("lastSyncedAt") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetBeehiiv", tgt: "me.linkna.linkinbio#widgetBeehiiv.publicationId", kind: "prop", name: Some("publicationId") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetBeehiiv", tgt: "me.linkna.linkinbio#widgetBeehiiv.publicationName", kind: "prop", name: Some("publicationName") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetBeehiiv", tgt: "me.linkna.linkinbio#widgetBeehiiv.publicationUrl", kind: "prop", name: Some("publicationUrl") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetBeehiiv", tgt: "me.linkna.linkinbio#widgetBeehiiv.size", kind: "prop", name: Some("size") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetBeehiiv", tgt: "me.linkna.linkinbio#widgetBeehiiv.type", kind: "prop", name: Some("type") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetClock", tgt: "me.linkna.linkinbio#widgetClock.enabled", kind: "prop", name: Some("enabled") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetClock", tgt: "me.linkna.linkinbio#widgetClock.id", kind: "prop", name: Some("id") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetClock", tgt: "me.linkna.linkinbio#widgetClock.label", kind: "prop", name: Some("label") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetClock", tgt: "me.linkna.linkinbio#widgetClock.mode", kind: "prop", name: Some("mode") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetClock", tgt: "me.linkna.linkinbio#widgetClock.size", kind: "prop", name: Some("size") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetClock", tgt: "me.linkna.linkinbio#widgetClock.targetDate", kind: "prop", name: Some("targetDate") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetClock", tgt: "me.linkna.linkinbio#widgetClock.timezone", kind: "prop", name: Some("timezone") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetClock", tgt: "me.linkna.linkinbio#widgetClock.type", kind: "prop", name: Some("type") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.bannerUrl", kind: "prop", name: Some("bannerUrl") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.description", kind: "prop", name: Some("description") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.enabled", kind: "prop", name: Some("enabled") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.iconUrl", kind: "prop", name: Some("iconUrl") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.id", kind: "prop", name: Some("id") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.inviteUrl", kind: "prop", name: Some("inviteUrl") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.lastSyncedAt", kind: "prop", name: Some("lastSyncedAt") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.memberCount", kind: "prop", name: Some("memberCount") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.presenceCount", kind: "prop", name: Some("presenceCount") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.serverId", kind: "prop", name: Some("serverId") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.serverName", kind: "prop", name: Some("serverName") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.size", kind: "prop", name: Some("size") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetDiscord", tgt: "me.linkna.linkinbio#widgetDiscord.type", kind: "prop", name: Some("type") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetLastfm", tgt: "me.linkna.linkinbio#widgetLastfm.coverArtNotice", kind: "prop", name: Some("coverArtNotice") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetLastfm", tgt: "me.linkna.linkinbio#widgetLastfm.enabled", kind: "prop", name: Some("enabled") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetLastfm", tgt: "me.linkna.linkinbio#widgetLastfm.id", kind: "prop", name: Some("id") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetLastfm", tgt: "me.linkna.linkinbio#widgetLastfm.lastSyncedAt", kind: "prop", name: Some("lastSyncedAt") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetLastfm", tgt: "me.linkna.linkinbio#widgetLastfm.lastfmUsername", kind: "prop", name: Some("lastfmUsername") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetLastfm", tgt: "me.linkna.linkinbio#widgetLastfm.plays", kind: "prop", name: Some("plays") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetLastfm", tgt: "me.linkna.linkinbio#widgetLastfm.size", kind: "prop", name: Some("size") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetLastfm", tgt: "me.linkna.linkinbio#widgetLastfm.type", kind: "prop", name: Some("type") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetLastfm.plays", tgt: "me.linkna.linkinbio#widgetLastfm.plays:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetMap", tgt: "me.linkna.linkinbio#widgetMap.enabled", kind: "prop", name: Some("enabled") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetMap", tgt: "me.linkna.linkinbio#widgetMap.id", kind: "prop", name: Some("id") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetMap", tgt: "me.linkna.linkinbio#widgetMap.latitude", kind: "prop", name: Some("latitude") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetMap", tgt: "me.linkna.linkinbio#widgetMap.locationName", kind: "prop", name: Some("locationName") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetMap", tgt: "me.linkna.linkinbio#widgetMap.longitude", kind: "prop", name: Some("longitude") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetMap", tgt: "me.linkna.linkinbio#widgetMap.size", kind: "prop", name: Some("size") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetMap", tgt: "me.linkna.linkinbio#widgetMap.style", kind: "prop", name: Some("style") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetMap", tgt: "me.linkna.linkinbio#widgetMap.type", kind: "prop", name: Some("type") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetMap", tgt: "me.linkna.linkinbio#widgetMap.zoom", kind: "prop", name: Some("zoom") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetMedium", tgt: "me.linkna.linkinbio#widgetMedium.articles", kind: "prop", name: Some("articles") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetMedium", tgt: "me.linkna.linkinbio#widgetMedium.bio", kind: "prop", name: Some("bio") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetMedium", tgt: "me.linkna.linkinbio#widgetMedium.displayName", kind: "prop", name: Some("displayName") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetMedium", tgt: "me.linkna.linkinbio#widgetMedium.enabled", kind: "prop", name: Some("enabled") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetMedium", tgt: "me.linkna.linkinbio#widgetMedium.followerCount", kind: "prop", name: Some("followerCount") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetMedium", tgt: "me.linkna.linkinbio#widgetMedium.id", kind: "prop", name: Some("id") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetMedium", tgt: "me.linkna.linkinbio#widgetMedium.lastSyncedAt", kind: "prop", name: Some("lastSyncedAt") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetMedium", tgt: "me.linkna.linkinbio#widgetMedium.profileUrl", kind: "prop", name: Some("profileUrl") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetMedium", tgt: "me.linkna.linkinbio#widgetMedium.size", kind: "prop", name: Some("size") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetMedium", tgt: "me.linkna.linkinbio#widgetMedium.type", kind: "prop", name: Some("type") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetMedium", tgt: "me.linkna.linkinbio#widgetMedium.username", kind: "prop", name: Some("username") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetMedium.articles", tgt: "me.linkna.linkinbio#widgetMedium.articles:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetPatreon", tgt: "me.linkna.linkinbio#widgetPatreon.campaignId", kind: "prop", name: Some("campaignId") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetPatreon", tgt: "me.linkna.linkinbio#widgetPatreon.campaignUrl", kind: "prop", name: Some("campaignUrl") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetPatreon", tgt: "me.linkna.linkinbio#widgetPatreon.creationName", kind: "prop", name: Some("creationName") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetPatreon", tgt: "me.linkna.linkinbio#widgetPatreon.creatorName", kind: "prop", name: Some("creatorName") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetPatreon", tgt: "me.linkna.linkinbio#widgetPatreon.enabled", kind: "prop", name: Some("enabled") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetPatreon", tgt: "me.linkna.linkinbio#widgetPatreon.id", kind: "prop", name: Some("id") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetPatreon", tgt: "me.linkna.linkinbio#widgetPatreon.imageUrl", kind: "prop", name: Some("imageUrl") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetPatreon", tgt: "me.linkna.linkinbio#widgetPatreon.lastSyncedAt", kind: "prop", name: Some("lastSyncedAt") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetPatreon", tgt: "me.linkna.linkinbio#widgetPatreon.patronCount", kind: "prop", name: Some("patronCount") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetPatreon", tgt: "me.linkna.linkinbio#widgetPatreon.postCount", kind: "prop", name: Some("postCount") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetPatreon", tgt: "me.linkna.linkinbio#widgetPatreon.size", kind: "prop", name: Some("size") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetPatreon", tgt: "me.linkna.linkinbio#widgetPatreon.type", kind: "prop", name: Some("type") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetReddit", tgt: "me.linkna.linkinbio#widgetReddit.avatarUrl", kind: "prop", name: Some("avatarUrl") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetReddit", tgt: "me.linkna.linkinbio#widgetReddit.commentKarma", kind: "prop", name: Some("commentKarma") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetReddit", tgt: "me.linkna.linkinbio#widgetReddit.enabled", kind: "prop", name: Some("enabled") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetReddit", tgt: "me.linkna.linkinbio#widgetReddit.id", kind: "prop", name: Some("id") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetReddit", tgt: "me.linkna.linkinbio#widgetReddit.karma", kind: "prop", name: Some("karma") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetReddit", tgt: "me.linkna.linkinbio#widgetReddit.lastSyncedAt", kind: "prop", name: Some("lastSyncedAt") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetReddit", tgt: "me.linkna.linkinbio#widgetReddit.linkKarma", kind: "prop", name: Some("linkKarma") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetReddit", tgt: "me.linkna.linkinbio#widgetReddit.profileUrl", kind: "prop", name: Some("profileUrl") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetReddit", tgt: "me.linkna.linkinbio#widgetReddit.recentPosts", kind: "prop", name: Some("recentPosts") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetReddit", tgt: "me.linkna.linkinbio#widgetReddit.size", kind: "prop", name: Some("size") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetReddit", tgt: "me.linkna.linkinbio#widgetReddit.type", kind: "prop", name: Some("type") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetReddit", tgt: "me.linkna.linkinbio#widgetReddit.username", kind: "prop", name: Some("username") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetReddit.recentPosts", tgt: "me.linkna.linkinbio#widgetReddit.recentPosts:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.authorName", kind: "prop", name: Some("authorName") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.coverImageUrl", kind: "prop", name: Some("coverImageUrl") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.description", kind: "prop", name: Some("description") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.enabled", kind: "prop", name: Some("enabled") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.id", kind: "prop", name: Some("id") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.imageUrl", kind: "prop", name: Some("imageUrl") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.lastSyncedAt", kind: "prop", name: Some("lastSyncedAt") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.postCount", kind: "prop", name: Some("postCount") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.publicationId", kind: "prop", name: Some("publicationId") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.publicationName", kind: "prop", name: Some("publicationName") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.publicationUrl", kind: "prop", name: Some("publicationUrl") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.size", kind: "prop", name: Some("size") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.subscriberCount", kind: "prop", name: Some("subscriberCount") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetSubstack", tgt: "me.linkna.linkinbio#widgetSubstack.type", kind: "prop", name: Some("type") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetTealfm", tgt: "me.linkna.linkinbio#widgetTealfm.source", kind: "prop", name: Some("source") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetTwitch", tgt: "me.linkna.linkinbio#widgetTwitch.displayName", kind: "prop", name: Some("displayName") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetTwitch", tgt: "me.linkna.linkinbio#widgetTwitch.enabled", kind: "prop", name: Some("enabled") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetTwitch", tgt: "me.linkna.linkinbio#widgetTwitch.id", kind: "prop", name: Some("id") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetTwitch", tgt: "me.linkna.linkinbio#widgetTwitch.isLive", kind: "prop", name: Some("isLive") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetTwitch", tgt: "me.linkna.linkinbio#widgetTwitch.lastSyncedAt", kind: "prop", name: Some("lastSyncedAt") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetTwitch", tgt: "me.linkna.linkinbio#widgetTwitch.profileImageUrl", kind: "prop", name: Some("profileImageUrl") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetTwitch", tgt: "me.linkna.linkinbio#widgetTwitch.size", kind: "prop", name: Some("size") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetTwitch", tgt: "me.linkna.linkinbio#widgetTwitch.streamGame", kind: "prop", name: Some("streamGame") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetTwitch", tgt: "me.linkna.linkinbio#widgetTwitch.streamTitle", kind: "prop", name: Some("streamTitle") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetTwitch", tgt: "me.linkna.linkinbio#widgetTwitch.type", kind: "prop", name: Some("type") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetTwitch", tgt: "me.linkna.linkinbio#widgetTwitch.username", kind: "prop", name: Some("username") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetTwitch", tgt: "me.linkna.linkinbio#widgetTwitch.viewerCount", kind: "prop", name: Some("viewerCount") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.alt", kind: "prop", name: Some("alt") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.aspectRatio", kind: "prop", name: Some("aspectRatio") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.createdAt", kind: "prop", name: Some("createdAt") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.did", kind: "prop", name: Some("did") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.enabled", kind: "prop", name: Some("enabled") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.id", kind: "prop", name: Some("id") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.loop", kind: "prop", name: Some("loop") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.muted", kind: "prop", name: Some("muted") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.showOverlay", kind: "prop", name: Some("showOverlay") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.size", kind: "prop", name: Some("size") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.title", kind: "prop", name: Some("title") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.type", kind: "prop", name: Some("type") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetVideo", tgt: "me.linkna.linkinbio#widgetVideo.videoBlobRef", kind: "prop", name: Some("videoBlobRef") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetYoutube", tgt: "me.linkna.linkinbio#widgetYoutube.channelId", kind: "prop", name: Some("channelId") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetYoutube", tgt: "me.linkna.linkinbio#widgetYoutube.channelName", kind: "prop", name: Some("channelName") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetYoutube", tgt: "me.linkna.linkinbio#widgetYoutube.channelUrl", kind: "prop", name: Some("channelUrl") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetYoutube", tgt: "me.linkna.linkinbio#widgetYoutube.enabled", kind: "prop", name: Some("enabled") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetYoutube", tgt: "me.linkna.linkinbio#widgetYoutube.id", kind: "prop", name: Some("id") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetYoutube", tgt: "me.linkna.linkinbio#widgetYoutube.lastSyncedAt", kind: "prop", name: Some("lastSyncedAt") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetYoutube", tgt: "me.linkna.linkinbio#widgetYoutube.latestVideo", kind: "prop", name: Some("latestVideo") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetYoutube", tgt: "me.linkna.linkinbio#widgetYoutube.size", kind: "prop", name: Some("size") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#widgetYoutube", tgt: "me.linkna.linkinbio#widgetYoutube.type", kind: "prop", name: Some("type") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#youtubeVideo", tgt: "me.linkna.linkinbio#youtubeVideo.isShort", kind: "prop", name: Some("isShort") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#youtubeVideo", tgt: "me.linkna.linkinbio#youtubeVideo.publishedAt", kind: "prop", name: Some("publishedAt") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#youtubeVideo", tgt: "me.linkna.linkinbio#youtubeVideo.title", kind: "prop", name: Some("title") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio#youtubeVideo", tgt: "me.linkna.linkinbio#youtubeVideo.videoId", kind: "prop", name: Some("videoId") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant1", kind: "variant", name: Some("#headerCard") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant10", kind: "variant", name: Some("#widgetBeehiiv") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant11", kind: "variant", name: Some("#widgetVideo") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant12", kind: "variant", name: Some("#widgetTwitch") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant13", kind: "variant", name: Some("#widgetDiscord") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant14", kind: "variant", name: Some("#widgetReddit") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant15", kind: "variant", name: Some("#widgetMedium") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant16", kind: "variant", name: Some("#widgetMap") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant2", kind: "variant", name: Some("#widgetGoodreads") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant3", kind: "variant", name: Some("#widgetGithub") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant4", kind: "variant", name: Some("#widgetTealfm") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant5", kind: "variant", name: Some("#widgetLastfm") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant6", kind: "variant", name: Some("#widgetClock") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant7", kind: "variant", name: Some("#widgetYoutube") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant8", kind: "variant", name: Some("#widgetPatreon") }
  • Non-breaking: AddedEdge { src: "me.linkna.linkinbio:body.cards:items", tgt: "me.linkna.linkinbio:body.cards:items:variant9", kind: "variant", name: Some("#widgetSubstack") }
1 1
{
2 2
  "id": "me.linkna.linkinbio",
3 3
  "defs": {
4 4
    "main": {
5 5
      "key": "literal:self",
6 6
      "type": "record",
7 7
      "record": {
8 8
        "type": "object",
9 9
        "required": [
10 10
          "cards"
11 11
        ],
12 12
        "properties": {
13 13
          "cards": {
14 14
            "type": "array",
15 15
            "items": {
16 16
              "refs": [
17 17
                "#linkCard",
18 +
                "#headerCard",
18 19
                "#widgetGoodreads",
19 20
                "#widgetGithub",
20 -
                "#widgetTealfm"
21 +
                "#widgetTealfm",
22 +
                "#widgetLastfm",
23 +
                "#widgetClock",
24 +
                "#widgetYoutube",
25 +
                "#widgetPatreon",
26 +
                "#widgetSubstack",
27 +
                "#widgetBeehiiv",
28 +
                "#widgetVideo",
29 +
                "#widgetTwitch",
30 +
                "#widgetDiscord",
31 +
                "#widgetReddit",
32 +
                "#widgetMedium",
33 +
                "#widgetMap"
21 34
              ],
22 35
              "type": "union"
23 36
            },
24 -
            "description": "Ordered list of cards on the page. Each card is a union of linkCard, widgetGoodreads, widgetGithub, or widgetTealfm."
37 +
            "description": "Ordered list of cards on the page."
25 38
          },
26 39
          "theme": {
27 40
            "type": "string",
28 41
            "description": "Deprecated: use themeConfig instead."
29 42
          },
30 43
          "socialIcons": {
31 44
            "type": "array",
32 45
            "items": {
33 46
              "ref": "#socialIcon",
34 47
              "type": "ref"
35 48
            },
36 49
            "description": "Social media icons displayed on the profile."
37 50
          },
38 51
          "themeConfig": {
39 52
            "ref": "#themeConfig",
40 53
            "type": "ref"
41 54
          },
42 55
          "connectedServices": {
43 56
            "ref": "#connectedServices",
44 57
            "type": "ref"
45 58
          }
46 59
        }
47 60
      },
48 61
      "description": "A user's link-in-bio page containing cards, theme configuration, and social icons."
49 62
    },
50 63
    "linkCard": {
51 64
      "type": "object",
52 65
      "properties": {
53 66
        "id": {
54 67
          "type": "string",
55 68
          "description": "Unique identifier for the card."
56 69
        },
57 70
        "url": {
58 71
          "type": "string",
59 72
          "format": "uri",
60 73
          "description": "URL the card links to."
61 74
        },
62 75
        "text": {
63 76
          "type": "string",
64 77
          "maxLength": 100,
65 78
          "description": "Display text for the card (falls back to URL domain if empty)."
66 79
        },
67 80
        "type": {
68 81
          "type": "string",
69 82
          "description": "Card type discriminator. Value: 'link' or absent for link cards."
70 83
        },
71 84
        "enabled": {
72 85
          "type": "boolean",
73 86
          "description": "Whether the card is visible on the public page. Defaults to true."
74 87
        },
75 88
        "highlighted": {
76 89
          "type": "boolean",
77 90
          "description": "Whether the card is visually highlighted."
78 91
        }
79 92
      },
80 93
      "description": "A standard link card."
81 94
    },
95 +
    "widgetMap": {
96 +
      "type": "object",
97 +
      "required": [
98 +
        "id",
99 +
        "type",
100 +
        "locationName",
101 +
        "latitude",
102 +
        "longitude"
103 +
      ],
104 +
      "properties": {
105 +
        "id": {
106 +
          "type": "string",
107 +
          "description": "Unique identifier for the card."
108 +
        },
109 +
        "size": {
110 +
          "type": "string",
111 +
          "description": "Widget display size. Default: 1x1.",
112 +
          "knownValues": [
113 +
            "1x1",
114 +
            "1x2",
115 +
            "2x2",
116 +
            "2x1"
117 +
          ]
118 +
        },
119 +
        "type": {
120 +
          "type": "string",
121 +
          "const": "map",
122 +
          "description": "Card type discriminator."
123 +
        },
124 +
        "zoom": {
125 +
          "type": "integer",
126 +
          "description": "Map zoom level (1-18). Default: 12."
127 +
        },
128 +
        "style": {
129 +
          "type": "string",
130 +
          "description": "Map style. Default: light.",
131 +
          "knownValues": [
132 +
            "light",
133 +
            "dark"
134 +
          ]
135 +
        },
136 +
        "enabled": {
137 +
          "type": "boolean",
138 +
          "description": "Whether the widget is visible on the public page. Defaults to true."
139 +
        },
140 +
        "latitude": {
141 +
          "type": "number",
142 +
          "description": "Latitude coordinate."
143 +
        },
144 +
        "longitude": {
145 +
          "type": "number",
146 +
          "description": "Longitude coordinate."
147 +
        },
148 +
        "locationName": {
149 +
          "type": "string",
150 +
          "description": "Display name for the location."
151 +
        }
152 +
      },
153 +
      "description": "A map location widget card."
154 +
    },
155 +
    "headerCard": {
156 +
      "type": "object",
157 +
      "required": [
158 +
        "id",
159 +
        "type",
160 +
        "text"
161 +
      ],
162 +
      "properties": {
163 +
        "id": {
164 +
          "type": "string",
165 +
          "description": "Unique identifier for the card."
166 +
        },
167 +
        "text": {
168 +
          "type": "string",
169 +
          "maxLength": 100,
170 +
          "description": "Header text displayed as a section divider."
171 +
        },
172 +
        "type": {
173 +
          "type": "string",
174 +
          "const": "header",
175 +
          "description": "Card type discriminator."
176 +
        },
177 +
        "enabled": {
178 +
          "type": "boolean",
179 +
          "description": "Whether the header is visible on the public page. Defaults to true."
180 +
        },
181 +
        "alignment": {
182 +
          "enum": [
183 +
            "left",
184 +
            "center",
185 +
            "right"
186 +
          ],
187 +
          "type": "string",
188 +
          "description": "Text alignment for the header. Defaults to the user's button alignment."
189 +
        }
190 +
      },
191 +
      "description": "A section header/divider card."
192 +
    },
193 +
    "redditPost": {
194 +
      "type": "object",
195 +
      "required": [
196 +
        "title",
197 +
        "subreddit",
198 +
        "url",
199 +
        "score",
200 +
        "numComments"
201 +
      ],
202 +
      "properties": {
203 +
        "url": {
204 +
          "type": "string",
205 +
          "description": "Post URL."
206 +
        },
207 +
        "score": {
208 +
          "type": "integer",
209 +
          "description": "Post score."
210 +
        },
211 +
        "title": {
212 +
          "type": "string",
213 +
          "description": "Post title."
214 +
        },
215 +
        "subreddit": {
216 +
          "type": "string",
217 +
          "description": "Subreddit name."
218 +
        },
219 +
        "numComments": {
220 +
          "type": "integer",
221 +
          "description": "Number of comments."
222 +
        }
223 +
      },
224 +
      "description": "A Reddit post."
225 +
    },
82 226
    "socialIcon": {
83 227
      "type": "object",
84 228
      "required": [
85 229
        "id",
86 230
        "platform",
87 231
        "url"
88 232
      ],
89 233
      "properties": {
90 234
        "id": {
91 235
          "type": "string",
92 236
          "description": "Unique identifier for the icon."
93 237
        },
94 238
        "url": {
95 239
          "type": "string",
96 240
          "format": "uri",
97 241
          "description": "URL to the user's profile on this platform."
98 242
        },
99 243
        "platform": {
100 244
          "type": "string",
101 245
          "description": "Platform identifier (e.g., 'bluesky', 'twitter', 'instagram')."
102 246
        }
103 247
      },
104 248
      "description": "A social media icon link."
105 249
    },
106 250
    "tealfmPlay": {
107 251
      "type": "object",
108 252
      "required": [
109 253
        "trackName",
110 254
        "artistName"
111 255
      ],
112 256
      "properties": {
113 257
        "coverUrl": {
114 258
          "type": "string",
115 259
          "description": "URL to the album cover image (from Cover Art Archive)."
116 260
        },
117 261
        "originUrl": {
118 262
          "type": "string",
119 263
          "description": "URL to the track on the original music service."
120 264
        },
121 265
        "trackName": {
122 266
          "type": "string",
123 267
          "description": "Track/song name."
124 268
        },
125 269
        "artistName": {
126 270
          "type": "string",
127 271
          "description": "Artist name(s)."
128 272
        },
129 273
        "playedTime": {
130 274
          "type": "string",
131 275
          "format": "datetime",
132 276
          "description": "When the track was played."
133 277
        },
134 278
        "releaseName": {
135 279
          "type": "string",
136 280
          "description": "Album/release name."
137 281
        }
138 282
      },
139 283
      "description": "A recently played track from teal.fm."
140 284
    },
141 285
    "themeConfig": {
142 286
      "type": "object",
143 287
      "properties": {
144 288
        "preset": {
145 289
          "type": "string",
146 -
          "description": "Theme preset ID."
290 +
          "description": "Theme preset ID (e.g., 'custom', 'agate', 'air', 'astrid', 'aura')."
147 291
        },
148 292
        "fontSize": {
149 293
          "type": "string",
150 294
          "description": "Font size. Default: md.",
151 295
          "knownValues": [
152 296
            "sm",
153 297
            "md",
154 298
            "lg"
155 299
          ]
156 300
        },
157 301
        "particles": {
158 302
          "type": "string",
159 303
          "description": "Background particle effect. Default: none.",
160 304
          "knownValues": [
161 305
            "none",
162 306
            "white",
163 -
            "blue"
307 +
            "blue",
308 +
            "leaves",
309 +
            "grid-sm",
310 +
            "grid-lg"
164 311
          ]
165 312
        },
166 313
        "cardShadow": {
167 314
          "type": "string",
168 315
          "description": "Card/button shadow intensity.",
169 316
          "knownValues": [
170 317
            "none",
171 318
            "sm",
172 319
            "md",
173 320
            "lg",
174 321
            "xl"
175 322
          ]
176 323
        },
177 324
        "fontFamily": {
178 325
          "type": "string",
179 326
          "description": "Font family for the page."
180 327
        },
328 +
        "cursorStyle": {
329 +
          "type": "string",
330 +
          "description": "Custom cursor style. Default: default.",
331 +
          "knownValues": [
332 +
            "default",
333 +
            "hello-kitty"
334 +
          ]
335 +
        },
181 336
        "showBranding": {
182 337
          "type": "boolean",
183 338
          "description": "Whether Linkname branding is visible. Default: true."
184 339
        },
185 340
        "cardTextColor": {
186 341
          "type": "string",
187 342
          "description": "Card/button text color."
188 343
        },
189 344
        "cardHoverColor": {
190 345
          "type": "string",
191 346
          "description": "Card/button border color on hover."
192 347
        },
348 +
        "cursorSparkles": {
349 +
          "type": "boolean",
350 +
          "description": "Whether cursor has sparkle trail. Default: false."
351 +
        },
193 352
        "backgroundColor": {
194 353
          "type": "string",
195 354
          "description": "Page background color."
196 355
        },
356 +
        "backgroundImage": {
357 +
          "type": "blob",
358 +
          "accept": [
359 +
            "image/png",
360 +
            "image/jpeg",
361 +
            "image/webp"
362 +
          ],
363 +
          "maxSize": 10000000,
364 +
          "description": "Background wallpaper image blob."
365 +
        },
197 366
        "buttonAlignment": {
198 367
          "type": "string",
199 368
          "description": "Button content alignment. Default: left.",
200 369
          "knownValues": [
201 370
            "left",
202 371
            "right"
203 372
          ]
204 373
        },
205 374
        "buttonHoverGlow": {
206 375
          "type": "boolean",
207 376
          "description": "Whether buttons glow on hover. Default: false."
208 377
        },
209 378
        "cardBorderColor": {
210 379
          "type": "string",
211 380
          "description": "Card/button border color."
212 381
        },
213 382
        "cardBorderRadius": {
214 383
          "type": "string",
215 384
          "description": "Card/button border radius.",
216 385
          "knownValues": [
217 386
            "none",
218 387
            "sm",
219 388
            "md",
220 389
            "lg",
221 390
            "full"
222 391
          ]
223 392
        },
224 393
        "contentCardColor": {
225 394
          "type": "string",
226 395
          "description": "Card container background color."
227 396
        },
228 397
        "profileAlignment": {
229 398
          "type": "string",
230 399
          "description": "Profile section alignment. Default: center.",
231 400
          "knownValues": [
232 401
            "left",
233 402
            "center",
234 403
            "right"
235 404
          ]
236 405
        },
237 406
        "profileTextColor": {
238 407
          "type": "string",
239 408
          "description": "Profile section text color."
240 409
        },
241 410
        "socialIconsColor": {
242 411
          "type": "string",
243 412
          "description": "Social icons color."
244 413
        },
245 414
        "socialIconsShape": {
246 415
          "type": "string",
247 416
          "description": "Social icons container shape. Default: dock.",
248 417
          "knownValues": [
249 418
            "dock",
250 419
            "sphere"
251 420
          ]
252 421
        },
253 422
        "backgroundGradient": {
254 423
          "type": "string",
255 424
          "description": "CSS gradient for the page background."
256 425
        },
257 426
        "profilePictureSize": {
258 427
          "type": "string",
259 428
          "description": "Profile picture size. Default: sm.",
260 429
          "knownValues": [
261 430
            "sm",
262 431
            "md",
263 432
            "lg"
264 433
          ]
265 434
        },
266 435
        "cardBackgroundColor": {
267 436
          "type": "string",
268 437
          "description": "Individual card/button background color."
269 438
        },
270 439
        "profilePictureShape": {
271 440
          "type": "string",
272 441
          "description": "Profile picture shape. Default: circle.",
273 442
          "knownValues": [
274 443
            "circle",
275 444
            "rounded",
276 445
            "square"
277 446
          ]
278 447
        },
279 448
        "buttonHoverGlowColor": {
280 449
          "type": "string",
281 450
          "description": "Color for the button hover glow effect."
282 451
        },
452 +
        "backgroundImageCredit": {
453 +
          "type": "string",
454 +
          "format": "uri",
455 +
          "description": "Optional credit URL for the wallpaper image artist. Stored for attribution purposes only, not displayed on the public page."
456 +
        },
283 457
        "socialIconsShapeColor": {
284 458
          "type": "string",
285 459
          "description": "Background color for social icons dock/sphere."
286 460
        },
287 461
        "socialIconsBorderColor": {
288 462
          "type": "string",
289 463
          "description": "Border color for social icons dock/sphere."
290 464
        }
291 465
      },
292 466
      "description": "Theme configuration for the page appearance."
293 467
    },
468 +
    "widgetClock": {
469 +
      "type": "object",
470 +
      "required": [
471 +
        "id",
472 +
        "type",
473 +
        "mode"
474 +
      ],
475 +
      "properties": {
476 +
        "id": {
477 +
          "type": "string",
478 +
          "description": "Unique identifier for the card."
479 +
        },
480 +
        "mode": {
481 +
          "type": "string",
482 +
          "description": "Widget mode: clock (timezone display), countdown (to a target date), or timer (interactive stopwatch).",
483 +
          "knownValues": [
484 +
            "clock",
485 +
            "countdown",
486 +
            "timer"
487 +
          ]
488 +
        },
489 +
        "size": {
490 +
          "type": "string",
491 +
          "description": "Widget display size. Default: 1x1.",
492 +
          "knownValues": [
493 +
            "1x1",
494 +
            "1x2",
495 +
            "2x2",
496 +
            "2x1"
497 +
          ]
498 +
        },
499 +
        "type": {
500 +
          "type": "string",
501 +
          "const": "clock",
502 +
          "description": "Card type discriminator."
503 +
        },
504 +
        "label": {
505 +
          "type": "string",
506 +
          "maxLength": 100,
507 +
          "description": "Optional display label for the widget."
508 +
        },
509 +
        "enabled": {
510 +
          "type": "boolean",
511 +
          "description": "Whether the widget is visible on the public page. Defaults to true."
512 +
        },
513 +
        "timezone": {
514 +
          "type": "string",
515 +
          "description": "IANA timezone identifier for clock mode (e.g. 'America/New_York')."
516 +
        },
517 +
        "targetDate": {
518 +
          "type": "string",
519 +
          "format": "datetime",
520 +
          "description": "ISO 8601 target date for countdown mode."
521 +
        }
522 +
      },
523 +
      "description": "A clock, countdown, or stopwatch timer widget card."
524 +
    },
525 +
    "widgetVideo": {
526 +
      "type": "object",
527 +
      "required": [
528 +
        "id",
529 +
        "type",
530 +
        "videoBlobRef",
531 +
        "did"
532 +
      ],
533 +
      "properties": {
534 +
        "id": {
535 +
          "type": "string",
536 +
          "description": "Unique identifier for the card."
537 +
        },
538 +
        "alt": {
539 +
          "type": "string",
540 +
          "maxLength": 1000,
541 +
          "description": "Alt text for accessibility."
542 +
        },
543 +
        "did": {
544 +
          "type": "string",
545 +
          "description": "Author DID for constructing PDS blob URLs."
546 +
        },
547 +
        "loop": {
548 +
          "type": "boolean",
549 +
          "description": "Whether the video loops. Defaults to true."
550 +
        },
551 +
        "size": {
552 +
          "type": "string",
553 +
          "description": "Widget display size. Default: 1x1.",
554 +
          "knownValues": [
555 +
            "1x1",
556 +
            "1x2",
557 +
            "2x2",
558 +
            "2x1"
559 +
          ]
560 +
        },
561 +
        "type": {
562 +
          "type": "string",
563 +
          "const": "video",
564 +
          "description": "Card type discriminator."
565 +
        },
566 +
        "muted": {
567 +
          "type": "boolean",
568 +
          "description": "Whether the video is muted. Defaults to true."
569 +
        },
570 +
        "title": {
571 +
          "type": "string",
572 +
          "maxLength": 100,
573 +
          "description": "Video title overlay."
574 +
        },
575 +
        "enabled": {
576 +
          "type": "boolean",
577 +
          "description": "Whether the widget is visible on the public page. Defaults to true."
578 +
        },
579 +
        "createdAt": {
580 +
          "type": "string",
581 +
          "format": "datetime",
582 +
          "description": "When the video was uploaded."
583 +
        },
584 +
        "aspectRatio": {
585 +
          "ref": "#videoAspectRatio",
586 +
          "type": "ref",
587 +
          "description": "Video aspect ratio."
588 +
        },
589 +
        "showOverlay": {
590 +
          "type": "boolean",
591 +
          "description": "Whether to show the title overlay. Defaults to false."
592 +
        },
593 +
        "videoBlobRef": {
594 +
          "type": "blob",
595 +
          "description": "Reference to the uploaded video blob."
596 +
        }
597 +
      },
598 +
      "description": "A video widget card."
599 +
    },
294 600
    "widgetGithub": {
295 601
      "type": "object",
296 602
      "required": [
297 603
        "id",
298 604
        "type",
299 605
        "githubUsername",
300 606
        "contributions"
301 607
      ],
302 608
      "properties": {
303 609
        "id": {
304 610
          "type": "string",
305 611
          "description": "Unique identifier for the card."
306 612
        },
307 613
        "size": {
308 614
          "type": "string",
309 615
          "description": "Widget display size. Default: 1x1.",
310 616
          "knownValues": [
311 617
            "1x1",
312 618
            "1x2",
313 619
            "2x2"
314 620
          ]
315 621
        },
316 622
        "type": {
317 623
          "type": "string",
318 624
          "const": "github",
319 625
          "description": "Card type discriminator."
320 626
        },
321 627
        "enabled": {
322 628
          "type": "boolean",
323 629
          "description": "Whether the widget is visible on the public page. Defaults to true."
324 630
        },
325 631
        "lastSyncedAt": {
326 632
          "type": "string",
327 633
          "format": "datetime",
328 634
          "description": "When the contribution data was last fetched from GitHub."
329 635
        },
330 636
        "contributions": {
331 637
          "type": "array",
332 638
          "items": {
333 639
            "ref": "#githubContributionDay",
334 640
            "type": "ref"
335 641
          },
336 642
          "description": "Contribution data for the last year."
337 643
        },
338 644
        "githubUsername": {
339 645
          "type": "string",
340 646
          "description": "GitHub username."
341 647
        },
342 648
        "totalContributions": {
343 649
          "type": "integer",
344 650
          "description": "Total number of contributions in the last year."
345 651
        }
346 652
      },
347 653
      "description": "A GitHub contributions graph widget card."
348 654
    },
655 +
    "widgetLastfm": {
656 +
      "type": "object",
657 +
      "required": [
658 +
        "id",
659 +
        "type",
660 +
        "lastfmUsername",
661 +
        "plays"
662 +
      ],
663 +
      "properties": {
664 +
        "id": {
665 +
          "type": "string",
666 +
          "description": "Unique identifier for the card."
667 +
        },
668 +
        "size": {
669 +
          "type": "string",
670 +
          "description": "Widget display size. Default: 1x1.",
671 +
          "knownValues": [
672 +
            "1x1",
673 +
            "1x2",
674 +
            "2x2"
675 +
          ]
676 +
        },
677 +
        "type": {
678 +
          "type": "string",
679 +
          "const": "lastfm",
680 +
          "description": "Card type discriminator."
681 +
        },
682 +
        "plays": {
683 +
          "type": "array",
684 +
          "items": {
685 +
            "ref": "#tealfmPlay",
686 +
            "type": "ref"
687 +
          },
688 +
          "description": "Recently played tracks from Last.fm."
689 +
        },
690 +
        "enabled": {
691 +
          "type": "boolean",
692 +
          "description": "Whether the widget is visible on the public page. Defaults to true."
693 +
        },
694 +
        "lastSyncedAt": {
695 +
          "type": "string",
696 +
          "format": "datetime",
697 +
          "description": "When the play data was last fetched from Last.fm."
698 +
        },
699 +
        "coverArtNotice": {
700 +
          "type": "string",
701 +
          "description": "Copyright notice for cover art images."
702 +
        },
703 +
        "lastfmUsername": {
704 +
          "type": "string",
705 +
          "description": "Last.fm username for fetching scrobbles."
706 +
        }
707 +
      },
708 +
      "description": "A Last.fm recently played tracks widget card."
709 +
    },
710 +
    "widgetMedium": {
711 +
      "type": "object",
712 +
      "required": [
713 +
        "id",
714 +
        "type",
715 +
        "username",
716 +
        "profileUrl"
717 +
      ],
718 +
      "properties": {
719 +
        "id": {
720 +
          "type": "string",
721 +
          "description": "Unique identifier for the card."
722 +
        },
723 +
        "bio": {
724 +
          "type": "string",
725 +
          "description": "Medium bio."
726 +
        },
727 +
        "size": {
728 +
          "type": "string",
729 +
          "description": "Widget display size. Default: 1x1.",
730 +
          "knownValues": [
731 +
            "1x1",
732 +
            "1x2",
733 +
            "2x2",
734 +
            "2x1"
735 +
          ]
736 +
        },
737 +
        "type": {
738 +
          "type": "string",
739 +
          "const": "medium",
740 +
          "description": "Card type discriminator."
741 +
        },
742 +
        "enabled": {
743 +
          "type": "boolean",
744 +
          "description": "Whether the widget is visible on the public page. Defaults to true."
745 +
        },
746 +
        "articles": {
747 +
          "type": "array",
748 +
          "items": {
749 +
            "ref": "#mediumArticle",
750 +
            "type": "ref"
751 +
          },
752 +
          "description": "Recent articles."
753 +
        },
754 +
        "username": {
755 +
          "type": "string",
756 +
          "description": "Medium username."
757 +
        },
758 +
        "profileUrl": {
759 +
          "type": "string",
760 +
          "description": "Medium profile URL."
761 +
        },
762 +
        "displayName": {
763 +
          "type": "string",
764 +
          "description": "Medium display name."
765 +
        },
766 +
        "lastSyncedAt": {
767 +
          "type": "string",
768 +
          "format": "datetime",
769 +
          "description": "When the Medium data was last fetched."
770 +
        },
771 +
        "followerCount": {
772 +
          "type": "integer",
773 +
          "description": "Number of followers."
774 +
        }
775 +
      },
776 +
      "description": "A Medium profile widget card."
777 +
    },
778 +
    "widgetReddit": {
779 +
      "type": "object",
780 +
      "required": [
781 +
        "id",
782 +
        "type",
783 +
        "username",
784 +
        "profileUrl"
785 +
      ],
786 +
      "properties": {
787 +
        "id": {
788 +
          "type": "string",
789 +
          "description": "Unique identifier for the card."
790 +
        },
791 +
        "size": {
792 +
          "type": "string",
793 +
          "description": "Widget display size. Default: 1x1.",
794 +
          "knownValues": [
795 +
            "1x1",
796 +
            "1x2",
797 +
            "2x2",
798 +
            "2x1"
799 +
          ]
800 +
        },
801 +
        "type": {
802 +
          "type": "string",
803 +
          "const": "reddit",
804 +
          "description": "Card type discriminator."
805 +
        },
806 +
        "karma": {
807 +
          "type": "integer",
808 +
          "description": "Total karma."
809 +
        },
810 +
        "enabled": {
811 +
          "type": "boolean",
812 +
          "description": "Whether the widget is visible on the public page. Defaults to true."
813 +
        },
814 +
        "username": {
815 +
          "type": "string",
816 +
          "description": "Reddit username."
817 +
        },
818 +
        "avatarUrl": {
819 +
          "type": "string",
820 +
          "description": "Reddit avatar URL."
821 +
        },
822 +
        "linkKarma": {
823 +
          "type": "integer",
824 +
          "description": "Link karma."
825 +
        },
826 +
        "profileUrl": {
827 +
          "type": "string",
828 +
          "description": "Reddit profile URL."
829 +
        },
830 +
        "recentPosts": {
831 +
          "type": "array",
832 +
          "items": {
833 +
            "ref": "#redditPost",
834 +
            "type": "ref"
835 +
          },
836 +
          "description": "Recent posts."
837 +
        },
838 +
        "commentKarma": {
839 +
          "type": "integer",
840 +
          "description": "Comment karma."
841 +
        },
842 +
        "lastSyncedAt": {
843 +
          "type": "string",
844 +
          "format": "datetime",
845 +
          "description": "When the Reddit data was last fetched."
846 +
        }
847 +
      },
848 +
      "description": "A Reddit profile widget card."
849 +
    },
349 850
    "widgetTealfm": {
350 851
      "type": "object",
351 852
      "required": [
352 853
        "id",
353 854
        "type",
354 855
        "plays"
355 856
      ],
356 857
      "properties": {
357 858
        "id": {
358 859
          "type": "string",
359 860
          "description": "Unique identifier for the card."
360 861
        },
361 862
        "size": {
362 863
          "type": "string",
363 864
          "description": "Widget display size. Default: 1x1.",
364 865
          "knownValues": [
365 866
            "1x1",
366 867
            "1x2",
367 868
            "2x2"
368 869
          ]
369 870
        },
370 871
        "type": {
371 872
          "type": "string",
372 873
          "const": "tealfm",
373 874
          "description": "Card type discriminator."
374 875
        },
375 876
        "plays": {
376 877
          "type": "array",
377 878
          "items": {
378 879
            "ref": "#tealfmPlay",
379 880
            "type": "ref"
380 881
          },
381 882
          "description": "Recently played tracks."
382 883
        },
884 +
        "source": {
885 +
          "type": "string",
886 +
          "description": "Data source for the widget. 'lastfm' for imported Last.fm scrobbles, 'tealfm' (default) for native AT Protocol plays.",
887 +
          "knownValues": [
888 +
            "tealfm",
889 +
            "lastfm"
890 +
          ]
891 +
        },
383 892
        "enabled": {
384 893
          "type": "boolean",
385 894
          "description": "Whether the widget is visible on the public page. Defaults to true."
386 895
        },
387 896
        "lastSyncedAt": {
388 897
          "type": "string",
389 898
          "format": "datetime",
390 899
          "description": "When the play data was last fetched from the PDS."
391 900
        },
392 901
        "coverArtNotice": {
393 902
          "type": "string",
394 903
          "description": "Copyright notice for cover art images."
395 904
        }
396 905
      },
397 906
      "description": "A teal.fm recently played tracks widget card."
398 907
    },
908 +
    "widgetTwitch": {
909 +
      "type": "object",
910 +
      "required": [
911 +
        "id",
912 +
        "type",
913 +
        "username"
914 +
      ],
915 +
      "properties": {
916 +
        "id": {
917 +
          "type": "string",
918 +
          "description": "Unique identifier for the card."
919 +
        },
920 +
        "size": {
921 +
          "type": "string",
922 +
          "description": "Widget display size. Default: 1x1.",
923 +
          "knownValues": [
924 +
            "1x1",
925 +
            "1x2",
926 +
            "2x2",
927 +
            "2x1"
928 +
          ]
929 +
        },
930 +
        "type": {
931 +
          "type": "string",
932 +
          "const": "twitch",
933 +
          "description": "Card type discriminator."
934 +
        },
935 +
        "isLive": {
936 +
          "type": "boolean",
937 +
          "description": "Whether the channel is currently live."
938 +
        },
939 +
        "enabled": {
940 +
          "type": "boolean",
941 +
          "description": "Whether the widget is visible on the public page. Defaults to true."
942 +
        },
943 +
        "username": {
944 +
          "type": "string",
945 +
          "description": "Twitch username."
946 +
        },
947 +
        "streamGame": {
948 +
          "type": "string",
949 +
          "description": "Current stream game/category."
950 +
        },
951 +
        "displayName": {
952 +
          "type": "string",
953 +
          "description": "Twitch display name."
954 +
        },
955 +
        "streamTitle": {
956 +
          "type": "string",
957 +
          "description": "Current stream title."
958 +
        },
959 +
        "viewerCount": {
960 +
          "type": "integer",
961 +
          "description": "Current viewer count."
962 +
        },
963 +
        "lastSyncedAt": {
964 +
          "type": "string",
965 +
          "format": "datetime",
966 +
          "description": "When the channel data was last fetched."
967 +
        },
968 +
        "profileImageUrl": {
969 +
          "type": "string",
970 +
          "description": "Twitch profile image URL."
971 +
        }
972 +
      },
973 +
      "description": "A Twitch channel widget card."
974 +
    },
975 +
    "youtubeVideo": {
976 +
      "type": "object",
977 +
      "required": [
978 +
        "videoId",
979 +
        "title",
980 +
        "publishedAt"
981 +
      ],
982 +
      "properties": {
983 +
        "title": {
984 +
          "type": "string",
985 +
          "description": "Video title."
986 +
        },
987 +
        "isShort": {
988 +
          "type": "boolean",
989 +
          "description": "Whether this is a YouTube Short."
990 +
        },
991 +
        "videoId": {
992 +
          "type": "string",
993 +
          "description": "YouTube video ID."
994 +
        },
995 +
        "publishedAt": {
996 +
          "type": "string",
997 +
          "description": "When the video was published."
998 +
        }
999 +
      },
1000 +
      "description": "A YouTube video."
1001 +
    },
399 1002
    "goodreadsBook": {
400 1003
      "type": "object",
401 1004
      "required": [
402 1005
        "title",
403 1006
        "author"
404 1007
      ],
405 1008
      "properties": {
406 1009
        "link": {
407 1010
          "type": "string",
408 1011
          "description": "URL to the book on Goodreads."
409 1012
        },
410 1013
        "title": {
411 1014
          "type": "string",
412 1015
          "description": "Book title."
413 1016
        },
414 1017
        "author": {
415 1018
          "type": "string",
416 1019
          "description": "Book author."
417 1020
        },
418 1021
        "rating": {
419 1022
          "type": "integer",
420 1023
          "maximum": 5,
421 1024
          "minimum": 0,
422 1025
          "description": "User's rating (1-5), or absent if unrated."
423 1026
        },
424 1027
        "coverUrl": {
425 1028
          "type": "string",
426 1029
          "description": "URL to the book cover image."
427 1030
        }
428 1031
      },
429 1032
      "description": "A book from a Goodreads shelf."
430 1033
    },
1034 +
    "mediumArticle": {
1035 +
      "type": "object",
1036 +
      "required": [
1037 +
        "title",
1038 +
        "url",
1039 +
        "publishedAt",
1040 +
        "claps"
1041 +
      ],
1042 +
      "properties": {
1043 +
        "url": {
1044 +
          "type": "string",
1045 +
          "description": "Article URL."
1046 +
        },
1047 +
        "claps": {
1048 +
          "type": "integer",
1049 +
          "description": "Number of claps."
1050 +
        },
1051 +
        "title": {
1052 +
          "type": "string",
1053 +
          "description": "Article title."
1054 +
        },
1055 +
        "subtitle": {
1056 +
          "type": "string",
1057 +
          "description": "Article subtitle."
1058 +
        },
1059 +
        "publishedAt": {
1060 +
          "type": "string",
1061 +
          "description": "When the article was published."
1062 +
        },
1063 +
        "readingTime": {
1064 +
          "type": "integer",
1065 +
          "description": "Estimated reading time in minutes."
1066 +
        }
1067 +
      },
1068 +
      "description": "A Medium article."
1069 +
    },
1070 +
    "widgetBeehiiv": {
1071 +
      "type": "object",
1072 +
      "required": [
1073 +
        "id",
1074 +
        "type",
1075 +
        "publicationId",
1076 +
        "publicationName",
1077 +
        "publicationUrl"
1078 +
      ],
1079 +
      "properties": {
1080 +
        "id": {
1081 +
          "type": "string",
1082 +
          "description": "Unique identifier for the card."
1083 +
        },
1084 +
        "size": {
1085 +
          "type": "string",
1086 +
          "description": "Widget display size. Default: 1x1.",
1087 +
          "knownValues": [
1088 +
            "1x1",
1089 +
            "1x2",
1090 +
            "2x2",
1091 +
            "2x1"
1092 +
          ]
1093 +
        },
1094 +
        "type": {
1095 +
          "type": "string",
1096 +
          "const": "beehiiv",
1097 +
          "description": "Card type discriminator."
1098 +
        },
1099 +
        "enabled": {
1100 +
          "type": "boolean",
1101 +
          "description": "Whether the widget is visible on the public page. Defaults to true."
1102 +
        },
1103 +
        "imageUrl": {
1104 +
          "type": "string",
1105 +
          "description": "Publication image URL."
1106 +
        },
1107 +
        "description": {
1108 +
          "type": "string",
1109 +
          "description": "Publication description."
1110 +
        },
1111 +
        "lastSyncedAt": {
1112 +
          "type": "string",
1113 +
          "format": "datetime",
1114 +
          "description": "When the publication data was last fetched."
1115 +
        },
1116 +
        "publicationId": {
1117 +
          "type": "string",
1118 +
          "description": "Beehiiv publication ID."
1119 +
        },
1120 +
        "publicationUrl": {
1121 +
          "type": "string",
1122 +
          "description": "URL to the Beehiiv publication."
1123 +
        },
1124 +
        "publicationName": {
1125 +
          "type": "string",
1126 +
          "description": "Beehiiv publication name."
1127 +
        }
1128 +
      },
1129 +
      "description": "A Beehiiv publication widget card."
1130 +
    },
1131 +
    "widgetDiscord": {
1132 +
      "type": "object",
1133 +
      "required": [
1134 +
        "id",
1135 +
        "type",
1136 +
        "serverId",
1137 +
        "serverName",
1138 +
        "inviteUrl"
1139 +
      ],
1140 +
      "properties": {
1141 +
        "id": {
1142 +
          "type": "string",
1143 +
          "description": "Unique identifier for the card."
1144 +
        },
1145 +
        "size": {
1146 +
          "type": "string",
1147 +
          "description": "Widget display size. Default: 1x1.",
1148 +
          "knownValues": [
1149 +
            "1x1",
1150 +
            "1x2",
1151 +
            "2x2",
1152 +
            "2x1"
1153 +
          ]
1154 +
        },
1155 +
        "type": {
1156 +
          "type": "string",
1157 +
          "const": "discord",
1158 +
          "description": "Card type discriminator."
1159 +
        },
1160 +
        "enabled": {
1161 +
          "type": "boolean",
1162 +
          "description": "Whether the widget is visible on the public page. Defaults to true."
1163 +
        },
1164 +
        "iconUrl": {
1165 +
          "type": "string",
1166 +
          "description": "Server icon URL."
1167 +
        },
1168 +
        "serverId": {
1169 +
          "type": "string",
1170 +
          "description": "Discord server ID."
1171 +
        },
1172 +
        "bannerUrl": {
1173 +
          "type": "string",
1174 +
          "description": "Server banner URL."
1175 +
        },
1176 +
        "inviteUrl": {
1177 +
          "type": "string",
1178 +
          "description": "Discord invite URL."
1179 +
        },
1180 +
        "serverName": {
1181 +
          "type": "string",
1182 +
          "description": "Discord server name."
1183 +
        },
1184 +
        "description": {
1185 +
          "type": "string",
1186 +
          "description": "Server description."
1187 +
        },
1188 +
        "memberCount": {
1189 +
          "type": "integer",
1190 +
          "description": "Total member count."
1191 +
        },
1192 +
        "lastSyncedAt": {
1193 +
          "type": "string",
1194 +
          "format": "datetime",
1195 +
          "description": "When the server data was last fetched."
1196 +
        },
1197 +
        "presenceCount": {
1198 +
          "type": "integer",
1199 +
          "description": "Online member count."
1200 +
        }
1201 +
      },
1202 +
      "description": "A Discord server widget card."
1203 +
    },
1204 +
    "widgetPatreon": {
1205 +
      "type": "object",
1206 +
      "required": [
1207 +
        "id",
1208 +
        "type",
1209 +
        "campaignId",
1210 +
        "creatorName",
1211 +
        "campaignUrl"
1212 +
      ],
1213 +
      "properties": {
1214 +
        "id": {
1215 +
          "type": "string",
1216 +
          "description": "Unique identifier for the card."
1217 +
        },
1218 +
        "size": {
1219 +
          "type": "string",
1220 +
          "description": "Widget display size. Default: 1x1.",
1221 +
          "knownValues": [
1222 +
            "1x1",
1223 +
            "1x2",
1224 +
            "2x2",
1225 +
            "2x1"
1226 +
          ]
1227 +
        },
1228 +
        "type": {
1229 +
          "type": "string",
1230 +
          "const": "patreon",
1231 +
          "description": "Card type discriminator."
1232 +
        },
1233 +
        "enabled": {
1234 +
          "type": "boolean",
1235 +
          "description": "Whether the widget is visible on the public page. Defaults to true."
1236 +
        },
1237 +
        "imageUrl": {
1238 +
          "type": "string",
1239 +
          "description": "Campaign image URL."
1240 +
        },
1241 +
        "postCount": {
1242 +
          "type": "integer",
1243 +
          "description": "Number of posts."
1244 +
        },
1245 +
        "campaignId": {
1246 +
          "type": "string",
1247 +
          "description": "Patreon campaign ID."
1248 +
        },
1249 +
        "campaignUrl": {
1250 +
          "type": "string",
1251 +
          "description": "URL to the Patreon campaign."
1252 +
        },
1253 +
        "creatorName": {
1254 +
          "type": "string",
1255 +
          "description": "Patreon creator name."
1256 +
        },
1257 +
        "patronCount": {
1258 +
          "type": "integer",
1259 +
          "description": "Number of patrons."
1260 +
        },
1261 +
        "creationName": {
1262 +
          "type": "string",
1263 +
          "description": "Name of the creation/project."
1264 +
        },
1265 +
        "lastSyncedAt": {
1266 +
          "type": "string",
1267 +
          "format": "datetime",
1268 +
          "description": "When the campaign data was last fetched."
1269 +
        }
1270 +
      },
1271 +
      "description": "A Patreon campaign widget card."
1272 +
    },
1273 +
    "widgetYoutube": {
1274 +
      "type": "object",
1275 +
      "required": [
1276 +
        "id",
1277 +
        "type",
1278 +
        "channelId",
1279 +
        "channelName",
1280 +
        "channelUrl"
1281 +
      ],
1282 +
      "properties": {
1283 +
        "id": {
1284 +
          "type": "string",
1285 +
          "description": "Unique identifier for the card."
1286 +
        },
1287 +
        "size": {
1288 +
          "type": "string",
1289 +
          "description": "Widget display size. Default: 1x1.",
1290 +
          "knownValues": [
1291 +
            "1x1",
1292 +
            "1x2",
1293 +
            "2x2",
1294 +
            "2x1"
1295 +
          ]
1296 +
        },
1297 +
        "type": {
1298 +
          "type": "string",
1299 +
          "const": "youtube",
1300 +
          "description": "Card type discriminator."
1301 +
        },
1302 +
        "enabled": {
1303 +
          "type": "boolean",
1304 +
          "description": "Whether the widget is visible on the public page. Defaults to true."
1305 +
        },
1306 +
        "channelId": {
1307 +
          "type": "string",
1308 +
          "description": "YouTube channel ID."
1309 +
        },
1310 +
        "channelUrl": {
1311 +
          "type": "string",
1312 +
          "description": "URL to the YouTube channel."
1313 +
        },
1314 +
        "channelName": {
1315 +
          "type": "string",
1316 +
          "description": "YouTube channel name."
1317 +
        },
1318 +
        "latestVideo": {
1319 +
          "ref": "#youtubeVideo",
1320 +
          "type": "ref",
1321 +
          "description": "The latest video from the channel."
1322 +
        },
1323 +
        "lastSyncedAt": {
1324 +
          "type": "string",
1325 +
          "format": "datetime",
1326 +
          "description": "When the video data was last fetched."
1327 +
        }
1328 +
      },
1329 +
      "description": "A YouTube channel widget card."
1330 +
    },
1331 +
    "widgetSubstack": {
1332 +
      "type": "object",
1333 +
      "required": [
1334 +
        "id",
1335 +
        "type",
1336 +
        "publicationId",
1337 +
        "publicationName",
1338 +
        "publicationUrl"
1339 +
      ],
1340 +
      "properties": {
1341 +
        "id": {
1342 +
          "type": "string",
1343 +
          "description": "Unique identifier for the card."
1344 +
        },
1345 +
        "size": {
1346 +
          "type": "string",
1347 +
          "description": "Widget display size. Default: 1x1.",
1348 +
          "knownValues": [
1349 +
            "1x1",
1350 +
            "1x2",
1351 +
            "2x2",
1352 +
            "2x1"
1353 +
          ]
1354 +
        },
1355 +
        "type": {
1356 +
          "type": "string",
1357 +
          "const": "substack",
1358 +
          "description": "Card type discriminator."
1359 +
        },
1360 +
        "enabled": {
1361 +
          "type": "boolean",
1362 +
          "description": "Whether the widget is visible on the public page. Defaults to true."
1363 +
        },
1364 +
        "imageUrl": {
1365 +
          "type": "string",
1366 +
          "description": "Publication image URL."
1367 +
        },
1368 +
        "postCount": {
1369 +
          "type": "integer",
1370 +
          "description": "Number of posts."
1371 +
        },
1372 +
        "authorName": {
1373 +
          "type": "string",
1374 +
          "description": "Author name."
1375 +
        },
1376 +
        "description": {
1377 +
          "type": "string",
1378 +
          "description": "Publication description."
1379 +
        },
1380 +
        "lastSyncedAt": {
1381 +
          "type": "string",
1382 +
          "format": "datetime",
1383 +
          "description": "When the publication data was last fetched."
1384 +
        },
1385 +
        "coverImageUrl": {
1386 +
          "type": "string",
1387 +
          "description": "Publication cover image URL."
1388 +
        },
1389 +
        "publicationId": {
1390 +
          "type": "string",
1391 +
          "description": "Substack publication ID."
1392 +
        },
1393 +
        "publicationUrl": {
1394 +
          "type": "string",
1395 +
          "description": "URL to the Substack publication."
1396 +
        },
1397 +
        "publicationName": {
1398 +
          "type": "string",
1399 +
          "description": "Substack publication name."
1400 +
        },
1401 +
        "subscriberCount": {
1402 +
          "type": "integer",
1403 +
          "description": "Number of subscribers."
1404 +
        }
1405 +
      },
1406 +
      "description": "A Substack publication widget card."
1407 +
    },
431 1408
    "widgetGoodreads": {
432 1409
      "type": "object",
433 1410
      "required": [
434 1411
        "id",
435 1412
        "type",
436 1413
        "goodreadsUserId",
437 1414
        "shelf",
438 1415
        "books"
439 1416
      ],
440 1417
      "properties": {
441 1418
        "id": {
442 1419
          "type": "string",
443 1420
          "description": "Unique identifier for the card."
444 1421
        },
445 1422
        "size": {
446 1423
          "type": "string",
447 1424
          "description": "Widget display size. Default: 1x1.",
448 1425
          "knownValues": [
449 1426
            "1x1",
450 1427
            "1x2",
451 1428
            "2x2"
452 1429
          ]
453 1430
        },
454 1431
        "type": {
455 1432
          "type": "string",
456 1433
          "const": "goodreads",
457 1434
          "description": "Card type discriminator."
458 1435
        },
459 1436
        "books": {
460 1437
          "type": "array",
461 1438
          "items": {
462 1439
            "ref": "#goodreadsBook",
463 1440
            "type": "ref"
464 1441
          },
465 1442
          "description": "Books on the currently-reading shelf."
466 1443
        },
467 1444
        "shelf": {
468 1445
          "type": "string",
469 1446
          "description": "Shelf name (currently-reading, read, or to-read)."
470 1447
        },
471 1448
        "enabled": {
472 1449
          "type": "boolean",
473 1450
          "description": "Whether the widget is visible on the public page. Defaults to true."
474 1451
        },
475 1452
        "readBooks": {
476 1453
          "type": "array",
477 1454
          "items": {
478 1455
            "ref": "#goodreadsBook",
479 1456
            "type": "ref"
480 1457
          },
481 1458
          "description": "Books on the read shelf (used by 1x2 size)."
482 1459
        },
483 1460
        "lastSyncedAt": {
484 1461
          "type": "string",
485 1462
          "format": "datetime",
486 1463
          "description": "When the book data was last fetched from Goodreads."
487 1464
        },
488 1465
        "goodreadsUserId": {
489 1466
          "type": "string",
490 1467
          "description": "Goodreads numeric user ID."
491 1468
        }
492 1469
      },
493 1470
      "description": "A Goodreads bookshelf widget card."
494 1471
    },
1472 +
    "videoAspectRatio": {
1473 +
      "type": "object",
1474 +
      "required": [
1475 +
        "width",
1476 +
        "height"
1477 +
      ],
1478 +
      "properties": {
1479 +
        "width": {
1480 +
          "type": "integer",
1481 +
          "description": "Video width."
1482 +
        },
1483 +
        "height": {
1484 +
          "type": "integer",
1485 +
          "description": "Video height."
1486 +
        }
1487 +
      },
1488 +
      "description": "Video aspect ratio dimensions."
1489 +
    },
495 1490
    "connectedServices": {
496 1491
      "type": "object",
497 1492
      "properties": {
498 1493
        "githubUsername": {
499 1494
          "type": "string",
500 1495
          "description": "GitHub username."
501 1496
        },
1497 +
        "lastfmUsername": {
1498 +
          "type": "string",
1499 +
          "description": "Last.fm username."
1500 +
        },
502 1501
        "goodreadsUserId": {
503 1502
          "type": "string",
504 1503
          "description": "Goodreads numeric user ID."
505 1504
        }
506 1505
      },
507 1506
      "description": "Saved service credentials/identifiers for pre-filling widget forms."
508 1507
    },
509 1508
    "githubContributionDay": {
510 1509
      "type": "object",
511 1510
      "required": [
512 1511
        "date",
513 1512
        "count",
514 1513
        "level"
515 1514
      ],
516 1515
      "properties": {
517 1516
        "date": {
518 1517
          "type": "string",
519 1518
          "description": "Date in YYYY-MM-DD format."
520 1519
        },
521 1520
        "count": {
522 1521
          "type": "integer",
523 1522
          "description": "Number of contributions on this day."
524 1523
        },
525 1524
        "level": {
526 1525
          "type": "integer",
527 1526
          "maximum": 4,
528 1527
          "minimum": 0,
529 1528
          "description": "Contribution intensity level (0=none, 4=highest)."
530 1529
        }
531 1530
      },
532 1531
      "description": "A single day's contribution data from GitHub."
533 1532
    }
534 1533
  },
535 1534
  "$type": "com.atproto.lexicon.schema",
536 1535
  "lexicon": 1
537 1536
}

Compare Other Versions

Lexicon Garden

@