the home site for me: also iteration 3 or 4 of my site
1{% set profile_part = post | split(pat="profile/") | last %} {% set parts =
2profile_part | split(pat="/") %} {% set handle = parts[0] %} {% set post_id =
3parts[2] %} {% set api_url =
4"https://public.api.bsky.app/xrpc/app.bsky.feed.getPostThread?uri=at://" ~
5handle ~ "/app.bsky.feed.post/" ~ post_id %} {% set response =
6load_data(url=api_url, format="json") %} {% if response.thread and
7response.thread.post %} {% set post_data = response.thread.post %} {% set author
8= post_data.author.displayName %} {% set handle = post_data.author.handle %} {%
9set content = post_data.record.text %} {% set has_embed = post_data.embed is
10defined and post_data.embed %}
11<blockquote>
12 {{ content }} {% if has_embed %} {% if post_data.embed["$type"] ==
13 "app.bsky.embed.video#view" %}
14 <video controls poster="{{ post_data.embed.thumbnail }}">
15 <source
16 src="{{ post_data.embed.playlist }}"
17 type="application/x-mpegURL"
18 />
19 </video>
20 {% elif post_data.embed["$type"] == "app.bsky.embed.images#view" %} {% if
21 post_data.embed.images | length > 3 %}
22 <div class="image-gallery gallery-grid">
23 {% for image in post_data.embed.images %}
24 <img src="{{ image.fullsize }}" alt="{{ image.alt }}" loading="lazy" />
25 {% endfor %}
26 </div>
27 {% elif post_data.embed.images | length == 2 %}
28 <div class="image-gallery side-by-side">
29 {% for image in post_data.embed.images %}
30 <img src="{{ image.fullsize }}" alt="{{ image.alt }}" loading="lazy" />
31 {% endfor %}
32 </div>
33 {% else %}
34 <div class="image-gallery">
35 {% for image in post_data.embed.images %}
36 <img src="{{ image.fullsize }}" alt="{{ image.alt }}" loading="lazy" />
37 {% endfor %}
38 </div>
39 {% endif %} {% endif %} {% endif %}
40</blockquote>
41<p>
42 <cite>
43 <a href="{{ post }}" target="_blank" rel="noopener"
44 ><img
45 src="{{ post_data.author.avatar }}"
46 alt="{{ author }}'s avatar"
47 class="avatar"
48 />@{{ handle }}</a
49 ></cite
50 >
51</p>
52{% else %}
53<blockquote>
54 <div class="bsky-post">
55 <div class="bsky-post-content">"Failed to render Bluesky post"</div>
56 <div class="bsky-post-footer">
57 <cite
58 ><img
59 src="/img/bluesky-logo.png"
60 alt="Bluesky logo"
61 class="avatar"
62 />
63 <a href="{{ post }}" target="_blank" rel="noopener"
64 >View on Bluesky</a
65 ></cite
66 >
67 </div>
68 </div>
69</blockquote>
70{% endif %}