A vibe coded tangled fork which supports pijul.
1{{ define "layouts/base" }}
2 <!doctype html>
3 <html lang="en" class="dark:bg-gray-900">
4 <head>
5 <meta charset="UTF-8" />
6 <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
7 <meta name="description" content="tightly-knit social coding"/>
8 <meta name="keywords" content="git hosting, social coding, version control, pull requests, CI/CD, code collaboration, open source, decentralized"/>
9 <meta name="htmx-config" content='{"includeIndicatorStyles": false}'>
10 <meta name="author" content="Tangled"/>
11
12 <!-- Canonical URL -->
13 <link rel="canonical" href="{{ block "canonical" . }}https://tangled.org{{ .Request.URL.Path }}{{ end }}" />
14
15 <script defer src="/static/htmx.min.js"></script>
16 <script defer src="/static/htmx-ext-ws.min.js"></script>
17 <script defer src="/static/actor-typeahead.js" type="module"></script>
18
19 <link rel="icon" href="/static/logos/dolly.ico" sizes="48x48"/>
20 <link rel="icon" href="/static/logos/dolly.svg" sizes="any" type="image/svg+xml"/>
21 <link rel="apple-touch-icon" href="/static/logos/dolly.png"/>
22
23 <!-- preconnect to image cdn -->
24 <link rel="preconnect" href="https://avatar.tangled.sh" />
25 <link rel="preconnect" href="https://camo.tangled.sh" />
26
27 <!-- RSS Feed Discovery -->
28 {{ block "rss" . }}{{ end }}
29
30 <!-- pwa manifest -->
31 <link rel="manifest" href="/pwa-manifest.json" />
32
33 <!-- preload main font -->
34 <link rel="preload" href="/static/fonts/InterVariable.woff2" as="font" type="font/woff2" crossorigin />
35
36 <link rel="stylesheet" href="/static/tw.css?{{ cssContentHash }}" type="text/css" />
37 <title>{{ block "title" . }}{{ end }}</title>
38
39 <!-- Structured Data -->
40 {{ block "structuredData" . }}
41 <script type="application/ld+json">
42 {
43 "@context": "https://schema.org",
44 "@type": "Organization",
45 "name": "Tangled",
46 "url": "https://tangled.org",
47 "logo": "https://tangled.org/favicon.svg",
48 "description": "tightly-knit social coding",
49 "sameAs": []
50 }
51 </script>
52 {{ end }}
53
54 {{ block "extrameta" . }}{{ end }}
55 </head>
56 <body class="min-h-screen flex flex-col gap-4 bg-slate-100 dark:bg-gray-900 dark:text-white transition-colors duration-200">
57 {{ block "topbarLayout" . }}
58 <header class="w-full col-span-full md:col-span-1 md:col-start-2" style="z-index: 20;">
59
60 {{ if .LoggedInUser }}
61 <div id="upgrade-banner"
62 hx-get="/upgradeBanner"
63 hx-trigger="load"
64 hx-swap="innerHTML">
65 </div>
66 {{ end }}
67 {{ template "layouts/fragments/topbar" . }}
68 </header>
69 {{ end }}
70
71 {{ block "mainLayout" . }}
72 <div class="flex-grow">
73 <div class="max-w-screen-lg mx-auto flex flex-col gap-4">
74 {{ block "contentLayout" . }}
75 <main>
76 {{ block "content" . }}{{ end }}
77 </main>
78 {{ end }}
79
80 {{ block "contentAfterLayout" . }}
81 <main>
82 {{ block "contentAfter" . }}{{ end }}
83 </main>
84 {{ end }}
85 </div>
86 </div>
87 {{ end }}
88
89 {{ block "footerLayout" . }}
90 <footer class="mt-12">
91 {{ template "layouts/fragments/footer" . }}
92 </footer>
93 {{ end }}
94 </body>
95 </html>
96{{ end }}