me.linkna.linkinbio

linkna.me

Schema Diff

+1012 -4

From

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

To

CID
bafyreidwzodhqyu...
Indexed At
2026-04-21 15:34 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

21 breaking changes, 372 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#widgetVideo.alt", sort: "maxLength", value: "1000" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetMedium.type", sort: "const", value: "medium" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetBeehiiv.type", sort: "const", value: "beehiiv" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#headerCard.text", sort: "maxLength", value: "100" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetDiscord.type", sort: "const", value: "discord" }
  • 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#widgetSubstack.type", sort: "const", value: "substack" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetClock.label", sort: "maxLength", value: "100" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetMap.type", sort: "const", value: "map" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetVideo.type", sort: "const", value: "video" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetReddit.type", sort: "const", value: "reddit" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetClock.type", sort: "const", value: "clock" }
  • 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#headerCard.alignment", sort: "enum", value: "left,center,right" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetYoutube.type", sort: "const", value: "youtube" }
Non-Breaking Changes (372)
  • 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.mapImageRef" }
  • 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.mapImageRef", kind: "prop", name: Some("mapImageRef") }
  • 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.mapImageRef" }
  • 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#widgetPatreon.type", sort: "const", value: "patreon" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetVideo.type", sort: "const", value: "video" }
  • 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#widgetTwitch.type", sort: "const", value: "twitch" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetYoutube.type", sort: "const", value: "youtube" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#headerCard.type", sort: "const", value: "header" }
  • 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#widgetLastfm.type", sort: "const", value: "lastfm" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetVideo.alt", sort: "maxLength", value: "1000" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetClock.type", sort: "const", value: "clock" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetMap.type", sort: "const", value: "map" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetBeehiiv.type", sort: "const", value: "beehiiv" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#headerCard.text", sort: "maxLength", value: "100" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetVideo.title", sort: "maxLength", value: "100" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetClock.label", sort: "maxLength", value: "100" }
  • ConstraintAdded ConstraintAdded { vertex_id: "me.linkna.linkinbio#widgetMedium.type", sort: "const", value: "medium" }

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

Compare Other Versions

Lexicon Garden

@