engineering blog at https://blog.tangled.sh

update templates and use experimental vite

anirudh.fi 9a1651f8 757d0288

verified
+51 -25
+1 -1
config.yaml
··· 1 preBuild: 2 - tailwindcss -i input.css -o static/tw.css 3 - title: tangled.sh engineering blog 4 # note the trailing slash! 5 url: "https://tangled.sh" 6 description: ""
··· 1 preBuild: 2 - tailwindcss -i input.css -o static/tw.css 3 + title: tangled engineering 4 # note the trailing slash! 5 url: "https://tangled.sh" 6 description: ""
+9 -9
flake.lock
··· 69 "nixpkgs": "nixpkgs_2" 70 }, 71 "locked": { 72 - "lastModified": 1737395755, 73 - "narHash": "sha256-p69EGNDGdCtdKcuu7y8VAC1q2thV5mpEQDs8/N7xliQ=", 74 - "owner": "icyphox", 75 - "repo": "go-vite", 76 - "rev": "589694da6b9c219b6627980ac86d1a6435d0176a", 77 - "type": "github" 78 }, 79 "original": { 80 - "owner": "icyphox", 81 - "repo": "go-vite", 82 - "type": "github" 83 } 84 } 85 },
··· 69 "nixpkgs": "nixpkgs_2" 70 }, 71 "locked": { 72 + "lastModified": 1744745948, 73 + "narHash": "sha256-8Sda70LhLVDXChifA52xdaIyCS5Sr7UB2bN0Qe4v4eY=", 74 + "ref": "refs/heads/master", 75 + "rev": "92c9c9f24b0f0b78c4a81ab2d3490c756813fe71", 76 + "revCount": 89, 77 + "type": "git", 78 + "url": "https://tangled.sh/@icyphox.sh/vite" 79 }, 80 "original": { 81 + "type": "git", 82 + "url": "https://tangled.sh/@icyphox.sh/vite" 83 } 84 } 85 },
+4 -1
flake.nix
··· 3 4 inputs = { 5 nixpkgs.url = "github:nixos/nixpkgs"; 6 - vite.url = "github:icyphox/go-vite"; 7 inter-fonts-src = { 8 url = "https://github.com/rsms/inter/releases/download/v4.1/Inter-4.1.zip"; 9 flake = false;
··· 3 4 inputs = { 5 nixpkgs.url = "github:nixos/nixpkgs"; 6 + vite = { 7 + url = "git+https://tangled.sh/@icyphox.sh/vite"; 8 + flake = true; 9 + }; 10 inter-fonts-src = { 11 url = "https://github.com/rsms/inter/releases/download/v4.1/Inter-4.1.zip"; 12 flake = false;
+6 -5
pages/blog/intro.md
··· 5 title: introducing tangled 6 subtitle: a git collaboration platform, built on atproto 7 date: 2025-03-02 8 - author: Anirudh Oppiliappan 9 - authorEmail: anirudh@tangled.sh 10 - authorHandle: icyphox.sh 11 --- 12 13 ··· 48 Collaborating on code isn't easy, and the tools and workflows we use 49 should feel natural and stay out of the way. Tangled's architecture 50 enables common workflows to work as you'd expect, all while remaining 51 - decentralized. 52 53 We believe that atproto has greatly simplfied one of the hardest parts 54 of social media: having your friends on it. Today, we're rolling out 55 invite-only access to Tangled -- join us on IRC at `#tangled` on 56 - [libera.chat](https://libera.chat) and we'll get you set up. 57 58 **Update**: Tangled is open to public, simply login at 59 [tangled.sh/login](https://tangled.sh/login)! Have fun!
··· 5 title: introducing tangled 6 subtitle: a git collaboration platform, built on atproto 7 date: 2025-03-02 8 + authors: 9 + - name: Anirudh 10 + email: anirudh@tangled.sh 11 + handle: icyphox.sh 12 --- 13 14 ··· 49 Collaborating on code isn't easy, and the tools and workflows we use 50 should feel natural and stay out of the way. Tangled's architecture 51 enables common workflows to work as you'd expect, all while remaining 52 + decentralized. 53 54 We believe that atproto has greatly simplfied one of the hardest parts 55 of social media: having your friends on it. Today, we're rolling out 56 invite-only access to Tangled -- join us on IRC at `#tangled` on 57 + [libera.chat](https://libera.chat) and we'll get you set up. 58 59 **Update**: Tangled is open to public, simply login at 60 [tangled.sh/login](https://tangled.sh/login)! Have fun!
+9 -5
pages/blog/pulls.md
··· 3 template: 4 slug: pulls 5 title: the lifecycle of a pull request 6 - subtitle: We shipped a bunch of PR features recently; here's how we built it 7 date: 2025-04-15 8 - author: Anirudh Oppiliappan 9 - authorEmail: anirudh@tangled.sh 10 - authorHandle: icyphox.sh 11 draft: true 12 --- 13 ··· 62 63 ## fine, we'll make a patch ourselves 64 65 - [!!!also write about the sh.tangled.repo.patch lexicon] 66 67 68 <figure class="max-w-[550px] m-auto flex flex-col items-center justify-center">
··· 3 template: 4 slug: pulls 5 title: the lifecycle of a pull request 6 + subtitle: we shipped a bunch of PR features recently; here's how we built it 7 date: 2025-04-15 8 + authors: 9 + - name: Anirudh 10 + email: anirudh@tangled.sh 11 + handle: icyphox.sh 12 + - name: Akshay 13 + email: akshay@tangled.sh 14 + handle: oppili.bsky.social 15 draft: true 16 --- 17 ··· 66 67 ## fine, we'll make a patch ourselves 68 69 + 70 71 72 <figure class="max-w-[550px] m-auto flex flex-col items-center justify-center">
+1 -1
tailwind.config.js
··· 33 typography: { 34 DEFAULT: { 35 css: { 36 - maxWidth: "70ch", 37 pre: { 38 backgroundColor: colors.gray[100], 39 color: colors.black,
··· 33 typography: { 34 DEFAULT: { 35 css: { 36 + maxWidth: "75ch", 37 pre: { 38 backgroundColor: colors.gray[100], 39 color: colors.black,
+4
templates/partials/head.html
··· 3 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> 4 <meta charset="UTF-8" /> 5 <meta name="HandheldFriendly" content="true" /> 6 <link rel="icon" type="image/png" sizes="16x16" href="/static/icon.png" /> 7 <link rel="icon" type="image/ico" sizes="16x16" href="/favicon.ico" /> 8 <link rel="alternate" type="application/rss+xml" href="/blog/feed.xml" />
··· 3 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> 4 <meta charset="UTF-8" /> 5 <meta name="HandheldFriendly" content="true" /> 6 + <meta property="og:title" content="{{ .Meta.title }}" /> 7 + <meta property="og:description" content="{{ .Meta.subtitle }}" /> 8 + <meta property="og:url" content="https://blog.tangled.sh/{{ .Meta.slug }}" /> 9 + <meta property="og:type" content="website" /> 10 <link rel="icon" type="image/png" sizes="16x16" href="/static/icon.png" /> 11 <link rel="icon" type="image/ico" sizes="16x16" href="/favicon.ico" /> 12 <link rel="alternate" type="application/rss+xml" href="/blog/feed.xml" />
+17 -3
templates/text.html
··· 1 <!doctype html> 2 <html lang=en> 3 <head> 4 - {{ template "partials/head.html" }} 5 <meta name="description" content="{{ index .Meta "subtitle" }}"> 6 </head> 7 <title> ··· 22 23 <span class="mx-2 select-none">&middot;</span> 24 25 - by <a href="https://bsky.app/profile/{{.Meta.authorHandle}}">{{ .Meta.author }}</a> 26 </p> 27 28 - {{ if eq .Meta.draft "true" }} 29 <h1 class="title px-6 mb-0">{{ index .Meta "title" }} <span 30 class="text-red-500">[draft]</span></h1> 31 {{ else }}
··· 1 <!doctype html> 2 <html lang=en> 3 <head> 4 + {{ template "partials/head.html" . }} 5 <meta name="description" content="{{ index .Meta "subtitle" }}"> 6 </head> 7 <title> ··· 22 23 <span class="mx-2 select-none">&middot;</span> 24 25 + by 26 + {{ $authors := index .Meta "authors" }} 27 + {{ if eq (len $authors) 2 }} 28 + <a href="https://bsky.app/profile/{{ (index $authors 0).handle }}">{{ (index $authors 0).name }}</a> 29 + & 30 + <a href="https://bsky.app/profile/{{ (index $authors 1).handle }}"> 31 + {{ (index $authors 1).name }} 32 + </a> 33 + {{ else }} 34 + {{ range $author := $authors }} 35 + <a href="https://bsky.app/profile/{{ $author.handle }}"> 36 + {{ $author.name }} 37 + </a> 38 + {{ end }} 39 + {{ end }} 40 </p> 41 42 + {{ if .Meta.draft }} 43 <h1 class="title px-6 mb-0">{{ index .Meta "title" }} <span 44 class="text-red-500">[draft]</span></h1> 45 {{ else }}