i don't completely love this but i think it's consistent now. in templates, records and props are two top-level namespaces. so they don't clash. i couldn't figure out where to put did/collection/rkey. they're neither props nor record fields. so i put them as properties of uris. weird but works

panel

props:
uri
uri.$did
uri.$collection
uri.$rkey

code:
<Stack gap="none">
  <Maybe fallback={<Cover did={props.uri.$did} src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==" />}>
    <Cover did={props.uri.$did} src={record.banner} />
  </Maybe>
  <Stack gap="medium" inset={true}>
    <Avatar
      did={props.uri.$did}
      src={record.avatar}
      lift={true}
      size="large"
     />
    <Title>{record.displayName}</Title>
    <Caption>{record.description}</Caption>
  </Stack>
</Stack>
0

If you have a fediverse account, you can quote this note from your own instance. Search https://bsky.brid.gy/convert/ap/at://did:plc:fpruhuo22xkm5o7ttr2ktxdo/app.bsky.feed.post/3mfxpg6bavk2p on your instance and quote it. (Note that quoting is not supported in Mastodon.)