| 1 |
{% extends "base.html" %} |
| 2 |
|
| 3 |
{% block title %}{{ title }} - {{ project_title }}{% endblock %} |
| 4 |
{% block body_attrs %} class="article-page"{% endblock %} |
| 5 |
|
| 6 |
{% block head %} |
| 7 |
<meta property="og:title" content="{{ title }} - {{ project_title }}"> |
| 8 |
<meta property="og:description" content="{{ creator_display_name.as_deref().unwrap_or(&creator_username) }} on Makenot.work"> |
| 9 |
<meta property="og:type" content="article"> |
| 10 |
<meta property="og:url" content="{{ host_url }}/p/{{ project_slug }}/blog/{{ post_slug }}"> |
| 11 |
<link rel="canonical" href="{{ host_url }}/p/{{ project_slug }}/blog/{{ post_slug }}"> |
| 12 |
<meta property="og:site_name" content="Makenot.work"> |
| 13 |
<meta name="twitter:title" content="{{ title }} - {{ project_title }}"> |
| 14 |
<meta name="twitter:description" content="{{ creator_display_name.as_deref().unwrap_or(&creator_username) }} on Makenot.work"> |
| 15 |
{% if let Some(img) = project_cover_image_url %} |
| 16 |
<meta name="twitter:card" content="summary_large_image"> |
| 17 |
<meta property="og:image" content="{{ img }}"> |
| 18 |
<meta name="twitter:image" content="{{ img }}"> |
| 19 |
{% else %} |
| 20 |
<meta name="twitter:card" content="summary"> |
| 21 |
<meta property="og:image" content="{{ host_url }}/static/images/og-card.png"> |
| 22 |
<meta name="twitter:image" content="{{ host_url }}/static/images/og-card.png"> |
| 23 |
{% endif %} |
| 24 |
<script type="application/ld+json"> |
| 25 |
{ |
| 26 |
"@context": "https://schema.org", |
| 27 |
"@type": "BlogPosting", |
| 28 |
"headline": "{{ title_json|safe }}", |
| 29 |
"url": "{{ host_url }}/p/{{ project_slug }}/blog/{{ post_slug }}", |
| 30 |
"author": { |
| 31 |
"@type": "Person", |
| 32 |
"name": "{{ creator_username }}", |
| 33 |
"url": "{{ host_url }}/u/{{ creator_username }}" |
| 34 |
}, |
| 35 |
"datePublished": "{{ published_at }}", |
| 36 |
"isPartOf": { |
| 37 |
"@type": "Blog", |
| 38 |
"name": "{{ project_title_json|safe }}", |
| 39 |
"url": "{{ host_url }}/p/{{ project_slug }}/blog" |
| 40 |
} |
| 41 |
} |
| 42 |
</script> |
| 43 |
{% endblock %} |
| 44 |
|
| 45 |
{% block content %} |
| 46 |
{% include "partials/site_header.html" %} |
| 47 |
|
| 48 |
<article class="article-container"> |
| 49 |
<div class="blog-nav"> |
| 50 |
<a href="/p/{{ project_slug }}">{{ project_title }}</a> / |
| 51 |
<a href="/p/{{ project_slug }}/blog">Blog</a> |
| 52 |
</div> |
| 53 |
|
| 54 |
<header class="author-header"> |
| 55 |
<div class="author-avatar">{{ creator_avatar_initials }}</div> |
| 56 |
<div class="author-info"> |
| 57 |
<div class="author-name"><a href="/u/{{ creator_username }}">{% if let Some(name) = creator_display_name %}{{ name }}{% else %}{{ creator_username }}{% endif %}</a></div> |
| 58 |
<div class="article-meta">{{ published_at }}</div> |
| 59 |
</div> |
| 60 |
</header> |
| 61 |
|
| 62 |
<h1 class="article-title">{{ title }}</h1> |
| 63 |
|
| 64 |
<div class="article-body"> |
| 65 |
{{ body_html|safe }} |
| 66 |
</div> |
| 67 |
|
| 68 |
<footer class="article-footer"> |
| 69 |
<div class="blog-nav"> |
| 70 |
<a href="/p/{{ project_slug }}/blog">Back to all posts</a> |
| 71 |
</div> |
| 72 |
</footer> |
| 73 |
</article> |
| 74 |
|
| 75 |
{% include "partials/discussion_section.html" %} |
| 76 |
|
| 77 |
<footer class="text-reader-footer"> |
| 78 |
<a href="/p/{{ project_slug }}/blog/{{ post_slug }}" data-copy-link>Copy link</a> · |
| 79 |
<a href="/">Makenot<span class="dot">.</span>work</a> | Fair distribution for creatives of all kinds |
| 80 |
</footer> |
| 81 |
{% endblock %} |
| 82 |
|