forked from
tangled.org/core
Monorepo for Tangled
1{{ define "fragments/logotypeSmall" }}
2 <span class="flex items-center gap-2">
3 {{ template "fragments/dolly/logo" "size-8 text-black dark:text-white" }}
4 <span class="font-bold text-xl not-italic">tangled</span>
5 <span class="font-normal not-italic text-xs rounded bg-gray-100 dark:bg-gray-700 px-1">alpha</span>
6 </span>
7{{ end }}
8
9<!doctype html>
10<html lang="en">
11 <head>
12 <meta charset="UTF-8" />
13 <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
14 <meta name="description" content="{{ index .Meta "subtitle" }}"/>
15 <meta property="og:site_name" content="Tangled" />
16 <meta property="og:type" content="website" />
17 <meta property="og:title" content="{{ index .Meta "title" }}" />
18 <meta property="og:description" content="{{ index .Meta "subtitle" }}" />
19 <meta property="og:url" content="https://blog.tangled.org/{{ index .Meta "slug" }}" />
20 <meta property="og:image" content="https://blog.tangled.org{{ index .Meta "image" }}" />
21 <meta property="og:image:width" content="1200" />
22 <meta property="og:image:height" content="630" />
23 <meta name="twitter:card" content="summary_large_image" />
24 <meta name="twitter:title" content="{{ index .Meta "title" }}" />
25 <meta name="twitter:description" content="{{ index .Meta "subtitle" }}" />
26 <meta name="twitter:image" content="https://blog.tangled.org{{ index .Meta "image" }}" />
27 <link rel="alternate" type="application/atom+xml" title="Atom" href="/feed.xml" />
28 <link rel="icon" href="/static/logos/dolly.ico" sizes="48x48"/>
29 <link rel="icon" href="/static/logos/dolly.svg" sizes="any" type="image/svg+xml"/>
30 <link rel="apple-touch-icon" href="/static/logos/dolly.png"/>
31 <link rel="preload" href="/static/fonts/InterVariable.woff2" as="font" type="font/woff2" crossorigin />
32 <link rel="stylesheet" href="/static/tw.css" type="text/css" />
33 <title>{{ index .Meta "title" }}</title>
34 </head>
35 <body class="bg-slate-100 dark:bg-gray-900 dark:text-white min-h-screen flex flex-col gap-4">
36
37 <header class="w-full drop-shadow-sm bg-white dark:bg-gray-800">
38 <nav class="mx-auto px-6 py-2">
39 <div class="flex justify-between items-center">
40 <a href="/" class="text-2xl no-underline hover:no-underline flex items-center gap-2">
41 {{ template "fragments/logotypeSmall" }}
42 </a>
43 </div>
44 </nav>
45 </header>
46
47 <div class="flex-grow flex flex-col max-w-[75ch] mx-auto w-full px-1">
48 <main class="prose dark:prose-invert w-full max-w-none">
49
50 <header class="not-prose">
51 <p class="px-6 mb-0 text-sm text-gray-600 dark:text-gray-400">
52 {{ $dateStr := index .Meta "date" }}
53 {{ $date := parsedate $dateStr }}
54 {{ $date.Format | shortTimeFmt }}
55
56 <span class="mx-2 select-none">·</span>
57
58 by
59 {{ $authors := index .Meta "authors" }}
60 {{ if eq (len $authors) 2 }}
61 <a href="https://bsky.app/profile/{{ (index $authors 0).handle }}" class="no-underline">{{ (index $authors 0).name }}</a>
62 &
63 <a href="https://bsky.app/profile/{{ (index $authors 1).handle }}" class="no-underline">{{ (index $authors 1).name }}</a>
64 {{ else }}
65 {{ range $authors }}
66 <a href="https://bsky.app/profile/{{ .handle }}" class="no-underline">{{ .name }}</a>
67 {{ end }}
68 {{ end }}
69 </p>
70
71 {{ if index .Meta "draft" }}
72 <h1 class="px-6 mb-0 text-2xl font-bold">{{ index .Meta "title" }} <span class="text-red-500">[draft]</span></h1>
73 {{ else }}
74 <h1 class="px-6 mb-0 text-2xl font-bold">{{ index .Meta "title" }}</h1>
75 {{ end }}
76 <p class="italic px-6 mt-1 mb-4 text-lg text-gray-600 dark:text-gray-400">{{ index .Meta "subtitle" }}</p>
77 </header>
78
79 <article class="bg-white dark:bg-gray-800 px-6 py-4 rounded drop-shadow-sm">
80 {{ .Body }}
81 </article>
82
83 </main>
84 </div>
85
86 <footer class="mt-12">
87 {{ template "layouts/fragments/footer" . }}
88 </footer>
89
90 </body>
91</html>