so... I audited Garry's website after he bragged about 37K LOC/day...

@Gregorein
gregorein@Gregorein
39 views Apr 04, 2026 ~3 min read
Advertisement
1
so... I audited Garry's website after he bragged about 37K LOC/day and a 72-day shipping streak.

here's what 78,400 lines of AI slop code actually looks like in production.

a single homepage load of garryslist.org downloads 6.42 MB across 169 requests.

for a newsletter-blog-thingy.
1/9🧵
x.com/garrytan/statu…
Media image
2
the homepage ships 28 TEST FILES to every visitor.

not test results - actual test harnesses.

membership_form_controller.test (89 KB), media_grid_controller.test (31 KB), story_composer_controller.test (19 KB)
...

300 KB of test code. All returning HTTP 200. All actively downloaded. HAR file doesn't lie.

2/9🧵
Media image
3
it also downloads 78 Stimulus controller, including...

AI image generation
voice extraction
video generation
radar charts
draft review
lab evaluation
and the literal Rails "Hello World" scaffold (`hello_controller.js`, 157 bytes).

154 KB transferred. None of these are used on the homepage. The browser fetches all of them anyway.

3/9🧵
Media image
4
the logo situation is my favorite 🖤

the same bear gets downloaded... 8 times per page load: 3 png copies, 2 WebP variants, 2 AVIF variants, and a 512x512 favicon.

one of the AVIF files is 0 bytes. an empty file. a failed image conversion that got deployed and served to production.

total logo bandwidth: 654kb for two logos.

4/9🧵
Media image
5
but the real bandwidth killer are article images served from CloudFront as raw, uncompressed PNGs:

- Image 1: 2.07mb png
- Image 2: 1.99mb png
...

the browser sends
> Accept: image/avif, image/webp
explicitly asking for modern formats

the server ignores it and sends 4mb of raw PNG.

with WebP these would be 200-400kb combined. That's 4mb of waste from two images alone.

5/9🧵
Media image
6
more highlights from the audit

- 520 KB Trix rich text editor (120kb transferred) loaded on a read-only homepage (a spillover from a backend?)
- 47 images with empty `alt=""`... on a "civic engagement" site
- the entire page content rendered TWICE in the DOM (mobile + desktop)
- duplicate tags in the <head><br>- an empty CSS file (just a manifest comment, content-hashed and served)<br>- PostHog analytics proxied through `/s/` to... bypass ad blockers, as his own source code comment says so<br><br>6/9🧵 <div class="media-item mt-3 mb-2 w-full flex justify-center relative"><a rel="noopener noreferrer nofollow" href="https://pbs.twimg.com/media/HEvMEqFaAAAPmhd.png" data-lightbox-url="https://pbs.twimg.com/media/HEvMEqFaAAAPmhd.png" data-lightbox-type="photo" onclick="event.preventDefault(); openLightbox(this)" class="block rounded-2xl overflow-hidden shadow-sm hover:opacity-95 transition-opacity"><img src="https://pbs.twimg.com/media/HEvMEqFaAAAPmhd.png" class="max-w-full max-h-[500px] object-contain" alt="Media image" loading="lazy"></a></div></div></div></div></div><div class="mb-8 relative group scroll-mt-20" id="post-6" data-tweet-index="6"><button onclick="document.getElementById('signupHighlightModal').showModal()" class="highlight-btn absolute right-0 top-0 sm:-left-10 sm:right-auto sm:top-1 opacity-0 group-hover:opacity-100 transition-opacity z-10 p-1 rounded-full sm:rounded bg-base-100/90 shadow-sm sm:bg-transparent sm:shadow-none hover:bg-base-200" aria-label="Highlight this post (Premium)"><i data-lucide="highlighter" class="w-4 h-4 text-base-content/40"></i><i data-lucide="lock" class="w-2.5 h-2.5 text-base-content/50 absolute -bottom-0.5 -right-0.5 bg-base-100 rounded-full"></i></button><div class="highlight-content flex flex-col sm:flex-row "><div class="flex-shrink-0 text-base-content/30 text-sm font-bold mb-2 sm:mb-0 sm:pr-4 pt-1" style="min-width: 30px;"> 7 </div><div class="flex-grow min-w-0"><div class="reading-text text-lg leading-relaxed [&_a]:underline [&_a]:underline-offset-4 [&_a]:text-primary hover:[&_a]:text-primary-focus">The source code literally contains this comment:<br><br>```<br>// Load SDK from our proxy (bypasses ad blockers)<br>```<br><br>A 501(c)(4) nonprofit "civic engagement organization" actively circumventing its readers' privacy tools to track them harder.<br><br>while shipping test files, a 0-byte broken image, and 4 MB of raw PNGs to production.<br><br>7/9🧵 <div class="media-item mt-3 mb-2 w-full flex justify-center relative"><a rel="noopener noreferrer nofollow" href="https://pbs.twimg.com/media/HEvM5B8WgAAHE-j.png" data-lightbox-url="https://pbs.twimg.com/media/HEvM5B8WgAAHE-j.png" data-lightbox-type="photo" onclick="event.preventDefault(); openLightbox(this)" class="block rounded-2xl overflow-hidden shadow-sm hover:opacity-95 transition-opacity"><img src="https://pbs.twimg.com/media/HEvM5B8WgAAHE-j.png" class="max-w-full max-h-[500px] object-contain" alt="Media image" loading="lazy"></a></div></div></div></div></div><div class="mb-8 relative group scroll-mt-20" id="post-7" data-tweet-index="7"><button onclick="document.getElementById('signupHighlightModal').showModal()" class="highlight-btn absolute right-0 top-0 sm:-left-10 sm:right-auto sm:top-1 opacity-0 group-hover:opacity-100 transition-opacity z-10 p-1 rounded-full sm:rounded bg-base-100/90 shadow-sm sm:bg-transparent sm:shadow-none hover:bg-base-200" aria-label="Highlight this post (Premium)"><i data-lucide="highlighter" class="w-4 h-4 text-base-content/40"></i><i data-lucide="lock" class="w-2.5 h-2.5 text-base-content/50 absolute -bottom-0.5 -right-0.5 bg-base-100 rounded-full"></i></button><div class="highlight-content flex flex-col sm:flex-row "><div class="flex-shrink-0 text-base-content/30 text-sm font-bold mb-2 sm:mb-0 sm:pr-4 pt-1" style="min-width: 30px;"> 8 </div><div class="flex-grow min-w-0"><div class="reading-text text-lg leading-relaxed [&_a]:underline [&_a]:underline-offset-4 [&_a]:text-primary hover:[&_a]:text-primary-focus">for context: the Hacker News homepage, run by Y Combinator, Garry's own org, makes 7 requests and transfers 12kb<br><br>Garry's page makes 169 requests and transfers 6.42mb<br>562x heavier<br><br>even discounting images, 73% of the bandwidth is waste.<br><br>one could say it's a HAR truth.<br><br>8/9🧵 <div class="media-item mt-3 mb-2 w-full flex justify-center relative"><a rel="noopener noreferrer nofollow" href="https://pbs.twimg.com/media/HEvQJj1WUAA8k06.png" data-lightbox-url="https://pbs.twimg.com/media/HEvQJj1WUAA8k06.png" data-lightbox-type="photo" onclick="event.preventDefault(); openLightbox(this)" class="block rounded-2xl overflow-hidden shadow-sm hover:opacity-95 transition-opacity"><img src="https://pbs.twimg.com/media/HEvQJj1WUAA8k06.png" class="max-w-full max-h-[500px] object-contain" alt="Media image" loading="lazy"></a></div></div></div></div></div><div class="mb-8 relative group scroll-mt-20" id="post-8" data-tweet-index="8"><button onclick="document.getElementById('signupHighlightModal').showModal()" class="highlight-btn absolute right-0 top-0 sm:-left-10 sm:right-auto sm:top-1 opacity-0 group-hover:opacity-100 transition-opacity z-10 p-1 rounded-full sm:rounded bg-base-100/90 shadow-sm sm:bg-transparent sm:shadow-none hover:bg-base-200" aria-label="Highlight this post (Premium)"><i data-lucide="highlighter" class="w-4 h-4 text-base-content/40"></i><i data-lucide="lock" class="w-2.5 h-2.5 text-base-content/50 absolute -bottom-0.5 -right-0.5 bg-base-100 rounded-full"></i></button><div class="highlight-content flex flex-col sm:flex-row "><div class="flex-shrink-0 text-base-content/30 text-sm font-bold mb-2 sm:mb-0 sm:pr-4 pt-1" style="min-width: 30px;"> 9 </div><div class="flex-grow min-w-0"><div class="reading-text text-lg leading-relaxed [&_a]:underline [&_a]:underline-offset-4 [&_a]:text-primary hover:[&_a]:text-primary-focus">AI & llms are an incredible tool, i use them every day... even burned over 3 billion tokens last year (2.5 in cursor alone)<br><br>but AI amplifies whatever process you feed it - including no process at all. Garry's site is what happens when you replace code review with a shipping streak counter.<br><br>A Duolingo streak for `git push` 🔥<br><br>the automatons did exactly what they were told. nobody told them to stop.<br><br>---<br><br>this is a client-side audit only, of what the browser downloads. i didn't read a single line of the source slop. idc, qed 🧵 <div class="media-item mt-3 mb-2 w-full flex justify-center relative"><a rel="noopener noreferrer nofollow" href="https://pbs.twimg.com/media/HEvOqSyacAAUoKE.png" data-lightbox-url="https://pbs.twimg.com/media/HEvOqSyacAAUoKE.png" data-lightbox-type="photo" onclick="event.preventDefault(); openLightbox(this)" class="block rounded-2xl overflow-hidden shadow-sm hover:opacity-95 transition-opacity"><img src="https://pbs.twimg.com/media/HEvOqSyacAAUoKE.png" class="max-w-full max-h-[500px] object-contain" alt="Media image" loading="lazy"></a></div></div></div></div></div><div class="mb-8 relative group scroll-mt-20" id="post-9" data-tweet-index="9"><button onclick="document.getElementById('signupHighlightModal').showModal()" class="highlight-btn absolute right-0 top-0 sm:-left-10 sm:right-auto sm:top-1 opacity-0 group-hover:opacity-100 transition-opacity z-10 p-1 rounded-full sm:rounded bg-base-100/90 shadow-sm sm:bg-transparent sm:shadow-none hover:bg-base-200" aria-label="Highlight this post (Premium)"><i data-lucide="highlighter" class="w-4 h-4 text-base-content/40"></i><i data-lucide="lock" class="w-2.5 h-2.5 text-base-content/50 absolute -bottom-0.5 -right-0.5 bg-base-100 rounded-full"></i></button><div class="highlight-content flex flex-col sm:flex-row "><div class="flex-shrink-0 text-base-content/30 text-sm font-bold mb-2 sm:mb-0 sm:pr-4 pt-1" style="min-width: 30px;"> 10 </div><div class="flex-grow min-w-0"><div class="reading-text text-lg leading-relaxed [&_a]:underline [&_a]:underline-offset-4 [&_a]:text-primary hover:[&_a]:text-primary-focus">for added context: when a 17yo developer (@xiaonweb) politely pointed out that bragging about LOC is silly, Garry's response was to publicly call them a "clout farmer."<br><br>the "clout farming" teen... wrote a browser engine in Rust at 17. HTML tokenizer, CSS cascade, box model layout, GPU renderer via wgpu, and published a technical breakdown showing deeper understanding of how the web works than most senior engineers I've worked with (including me, cos I've never dug that low-level).<br><br>vs<br><br>the "shipping" guy, the president of Y Combinator, a multi-billion dollar startup kingmaker, who mass-generates code with 113 Claude sessions a week, counts lines like a Duolingo streak, and ships test files, 0-byte AVIFs, and 4 MB uncompressed PNGs to production.<br><br>right, punch down at a teenager. on main @.<br><br><a target="_blank" href="https://x.com/xiaonweb/status/2038628538870551007" color="blue" rel="nofollow">x.com/xiaonweb/statu…</a><div class="media-item mt-3 mb-2 w-full flex justify-center relative"><a rel="noopener noreferrer nofollow" href="https://pbs.twimg.com/media/HEvSH37WcAEKWwI.png" data-lightbox-url="https://pbs.twimg.com/media/HEvSH37WcAEKWwI.png" data-lightbox-type="photo" onclick="event.preventDefault(); openLightbox(this)" class="block rounded-2xl overflow-hidden shadow-sm hover:opacity-95 transition-opacity"><img src="https://pbs.twimg.com/media/HEvSH37WcAEKWwI.png" class="max-w-full max-h-[500px] object-contain" alt="Media image" loading="lazy"></a></div></div></div></div></div><!-- Sticky bottom signup bar --><div id="stickySignupBar" class="fixed bottom-0 left-0 right-0 shadow-2xl py-3 px-4 hidden z-50" style="background: rgba(0,0,0,0.9); backdrop-filter: blur(10px);"><div class="max-w-6xl mx-auto flex items-center justify-between gap-3"><div class="flex items-center gap-2 text-white"><i data-lucide="bookmark" class="w-4 h-4"></i><span class="text-sm font-semibold hidden sm:inline">Save this thread — create a free account</span><span class="text-sm font-semibold sm:hidden">Save this thread</span></div><div class="flex gap-2 flex-shrink-0"><button type="button" id="signupStickyBtn" data-url="/register/?next=/thread/2038953944475472316/" onclick="navigateToDataUrl('signupStickyBtn')" class="btn btn-primary btn-sm rounded-full px-4 gap-1"><i data-lucide="user-plus" class="w-3 h-3"></i> Sign Up </button><button type="button" class="btn btn-ghost btn-sm text-white/50" onclick="localStorage.setItem('tn_sticky_signup_hidden', '1'); this.closest('#stickySignupBar').remove();" aria-label="Close"><i data-lucide="x" class="w-4 h-4"></i></button></div></div></div><script> (function() { var bar = document.getElementById('stickySignupBar'); if (!bar) return; var STORAGE_KEY = 'tn_sticky_signup_hidden'; if (localStorage.getItem(STORAGE_KEY)) { bar.remove(); return; } var shown = false; window.addEventListener('scroll', function() { if (!shown && window.scrollY > 600) { bar.classList.remove('hidden'); shown = true; localStorage.setItem(STORAGE_KEY, '1'); } }, {passive: true}); })(); </script></article></div><!-- Sidebar --><div class="thread-sidebar lg:w-72 flex-shrink-0"><div class="lg:sticky lg:top-24 space-y-4"><div class="card bg-base-100 border border-base-200 shadow-sm rounded-2xl p-4"><div class="flex items-center gap-2 mb-3 px-1"><i data-lucide="zap" class="w-4 h-4 text-base-content/50"></i><h6 class="font-bold text-xs text-base-content/50 uppercase tracking-wider">Actions</h6></div><div class="flex flex-col gap-2"><div class="dropdown w-full"><label tabindex="0" class="btn btn-ghost btn-sm rounded-xl gap-2 justify-start w-full "><i data-lucide="download" class="w-4 h-4"></i> Export <i data-lucide="chevron-down" class="w-3.5 h-3.5 ml-auto"></i></label><ul tabindex="0" class="dropdown-content menu bg-base-100 rounded-2xl border border-base-200 shadow-xl w-full p-2 z-50"><li><button id="generatePdfLink" onclick="startPdfGeneration()" data-url="/pdf/generate/2038953944475472316/"><i data-lucide="file-text" class="w-4 h-4"></i> Save as PDF</button></li><li><button id="exportMarkdownBtn" onclick="startMarkdownExport()" data-url="/markdown/2038953944475472316/"><i data-lucide="code" class="w-4 h-4"></i> Markdown</button></li><li><button id="saveNotionBtn" onclick="startNotionSave()" data-url="/notion/save/2038953944475472316/" data-is-premium="false" data-is-authenticated="false"><i data-lucide="book-open" class="w-4 h-4"></i> Save to Notion <span class="badge badge-warning badge-xs font-bold ml-auto">PRO</span></button></li></ul></div><div class="dropdown w-full"><label tabindex="0" class="btn btn-ghost btn-sm rounded-xl gap-2 justify-start w-full "><i data-lucide="layers" class="w-4 h-4"></i> Repurpose <span class="badge badge-warning badge-xs font-bold">NEW</span><i data-lucide="chevron-down" class="w-3.5 h-3.5 ml-auto"></i></label><ul tabindex="0" class="dropdown-content menu bg-base-100 rounded-2xl border border-base-200 shadow-xl w-full p-2 z-50"><li><button type="button" id="visualEditorBtn" data-url="/visualize/2038953944475472316/" onclick="navigateToDataUrl('visualEditorBtn')"><i data-lucide="palette" class="w-4 h-4"></i> Visual Editor</button></li><li><button type="button" id="carouselEditorBtn" data-url="/visualize/carousel/2038953944475472316/" onclick="navigateToDataUrl('carouselEditorBtn')"><i data-lucide="layers" class="w-4 h-4 text-amber-500"></i> Carousel Maker <span class="badge badge-warning badge-xs font-bold ml-auto">NEW</span></button></li></ul></div><div class="divider my-0 opacity-30"></div><button type="button" id="readingModeBtn" onclick="toggleReadingMode()" class="btn btn-ghost btn-sm rounded-xl gap-2 justify-start w-full "><i data-lucide="book-open-text" class="w-4 h-4"></i> Reading Mode </button><button type="button" id="updateThreadBtn" onclick="updateThread()" class="btn btn-ghost btn-xs rounded-xl gap-2 justify-start w-full text-base-content/50 " data-url="/thread/2038953944475472316/?refresh=true"><i data-lucide="refresh-cw" class="w-3 h-3"></i> Update Thread </button></div></div><div class="w-full"><div class="card bg-base-100 border border-base-200 shadow-md rounded-2xl p-6"><div class="flex items-center gap-2 mb-4"><i data-lucide="grid-2x2" class="w-5 h-5 text-primary"></i><h5 class="font-bold text-base">What You Can Do</h5></div><ul class="space-y-3 mb-5"><li class="flex items-center gap-3"><i data-lucide="file-text" class="w-4 h-4 text-primary"></i><span class="text-sm">Export as PDF or Markdown</span></li><li class="flex items-center gap-3"><i data-lucide="book-open" class="w-4 h-4 text-primary"></i><span class="text-sm">Batch Export to Notion</span></li><li class="flex items-center gap-3"><i data-lucide="pen-tool" class="w-4 h-4 text-primary"></i><span class="text-sm">Bookmark & Highlight</span></li><li class="flex items-center gap-3"><i data-lucide="layers" class="w-4 h-4 text-primary"></i><span class="text-sm">LinkedIn & Instagram Carousel Maker</span></li></ul><a rel="nofollow" href="/register/" class="btn gradient-btn rounded-full w-full font-bold gap-2 shadow-md"> Create Free Account <i data-lucide="arrow-right" class="w-4 h-4"></i></a><p class="text-xs text-base-content/50 text-center mt-3">Includes 7-day Premium trial</p></div></div><div class="mt-4"><div class="text-center text-xs text-base-content/30 mb-2">Advertisement</div><!-- Threadnavigator-Sidebar --><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-4832350077542156" data-ad-slot="8331061638" data-ad-format="auto" data-full-width-responsive="true"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script></div></div></div></div><!-- Related Content Sections (placed after Actions/sidebar so key CTAs stay above the fold on mobile) --><div class="thread-related-content flex flex-col lg:flex-row gap-6 mt-10"><div class="flex-1 lg:max-w-3xl mx-auto w-full space-y-8"><div class="card bg-base-100 border border-base-200 shadow-sm rounded-2xl p-6"><div class="flex items-center gap-2 mb-4"><i data-lucide="compass" class="w-5 h-5 text-primary"></i><h3 class="text-lg font-bold">More in AI & Machine Learning</h3></div><div class="grid grid-cols-1 sm:grid-cols-2 gap-4"><a href="/thread/2090892404509601819/" class="block p-3 rounded-xl hover:bg-base-200 transition-colors no-underline"><p class="text-sm font-semibold text-base-content line-clamp-2 mb-1"> 4 practical pillars of token engineering (beyond prompt compression) </p><div class="flex items-center gap-2 text-xs text-base-content/50"><span>@GoogleCloudTech</span><span>•</span><span>13 views</span></div></a><a href="/thread/2090823762316779915/" class="block p-3 rounded-xl hover:bg-base-200 transition-colors no-underline"><div class="relative aspect-video w-full overflow-hidden rounded-xl bg-base-200 mb-3"><img src="https://pbs.twimg.com/amplify_video_thumb/2090805673210560512/img/yzO09zpKW0_BOUz4.jpg" alt="" class="w-full h-full object-cover" loading="lazy"><div class="absolute inset-0 bg-gradient-to-t from-black/40 to-transparent"></div></div><p class="text-sm font-semibold text-base-content line-clamp-2 mb-1"> Google just dropped a free 94-minute workshop On moving AI systems from basic R... </p><div class="flex items-center gap-2 text-xs text-base-content/50"><span>@kaorixbt</span><span>•</span><span>11 views</span></div></a><a href="/thread/2090097270805193202/" class="block p-3 rounded-xl hover:bg-base-200 transition-colors no-underline"><p class="text-sm font-semibold text-base-content line-clamp-2 mb-1"> how to build a reddit sales system (FULL GUIDE) </p><div class="flex items-center gap-2 text-xs text-base-content/50"><span>@everestchris6</span><span>•</span><span>29 views</span></div></a><a href="/thread/2049409920647463303/" class="block p-3 rounded-xl hover:bg-base-200 transition-colors no-underline"><p class="text-sm font-semibold text-base-content line-clamp-2 mb-1"> I use Claude all day without hitting my usage limit. Claude doesn’t count messa... </p><div class="flex items-center gap-2 text-xs text-base-content/50"><span>@primemans</span><span>•</span><span>20 views</span></div></a><a href="/thread/2090440549106897144/" class="block p-3 rounded-xl hover:bg-base-200 transition-colors no-underline"><div class="relative aspect-video w-full overflow-hidden rounded-xl bg-base-200 mb-3"><img src="https://pbs.twimg.com/amplify_video_thumb/2090439867696078849/img/jBklJxZPCs8RkESZ.jpg" alt="" class="w-full h-full object-cover" loading="lazy"><div class="absolute inset-0 bg-gradient-to-t from-black/40 to-transparent"></div></div><p class="text-sm font-semibold text-base-content line-clamp-2 mb-1"> Google engineer: "just uninstall your IDE, in 18-24 months all code is gonna be... </p><div class="flex items-center gap-2 text-xs text-base-content/50"><span>@0xMovez</span><span>•</span><span>20 views</span></div></a><a href="/thread/2090413050071257373/" class="block p-3 rounded-xl hover:bg-base-200 transition-colors no-underline"><p class="text-sm font-semibold text-base-content line-clamp-2 mb-1"> Finding Kaby: A short film with Seedance 2.5 Get my complete process, with prom... </p><div class="flex items-center gap-2 text-xs text-base-content/50"><span>@maxescu</span><span>•</span><span>13 views</span></div></a></div><div class="mt-4 pt-4 border-t border-base-200"><a href="/thread/topics/ai-ml/" class="btn btn-ghost btn-sm rounded-full gap-2 w-full"> View all AI & Machine Learning threads <i data-lucide="arrow-right" class="w-4 h-4"></i></a></div></div></div><div class="hidden lg:block lg:w-72 flex-shrink-0"></div></div><!-- Premium Upgrade Modal for Notion --><dialog id="premiumNotionModal" class="modal"><div class="modal-box rounded-3xl text-center p-8"><div class="w-16 h-16 rounded-full bg-primary/10 flex items-center justify-center mx-auto mb-4"><i data-lucide="crown" class="w-8 h-8 text-primary"></i></div><h3 class="text-xl font-bold mb-3">Save Threads to Notion</h3><p class="text-base-content/60 mb-6">Upgrade to Premium to automatically save unrolled threads directly to your Notion workspace. Includes unlimited saves, visual editor, and ad-free experience.</p><div class="flex flex-col gap-2"><button type="button" id="premiumNotionBtn" data-url="/profile/premium/" onclick="navigateToDataUrl('premiumNotionBtn')" class="btn gradient-btn rounded-full font-bold gap-2"><i data-lucide="zap" class="w-4 h-4"></i> Upgrade — $29 once, lifetime </button><button type="button" class="btn btn-ghost btn-sm" onclick="this.closest('dialog').close()">Maybe later</button></div></div><form method="dialog" class="modal-backdrop"><button>close</button></form></dialog><!-- Premium Upgrade Modal for Highlights --><dialog id="premiumHighlightModal" class="modal"><div class="modal-box rounded-3xl text-center p-8"><div class="w-16 h-16 rounded-full bg-primary/10 flex items-center justify-center mx-auto mb-4"><i data-lucide="highlighter" class="w-8 h-8 text-primary"></i></div><h3 class="text-xl font-bold mb-3">Highlight Key Tweets</h3><p class="text-base-content/60 mb-6">Upgrade to Premium to highlight individual tweets in any thread, then export just the highlights to Notion — like Readwise, for threads.</p><div class="flex flex-col gap-2"><button type="button" id="premiumHighlightBtn" data-url="/profile/premium/" onclick="navigateToDataUrl('premiumHighlightBtn')" class="btn gradient-btn rounded-full font-bold gap-2"><i data-lucide="zap" class="w-4 h-4"></i> Upgrade — $29 once, lifetime </button><button type="button" class="btn btn-ghost btn-sm" onclick="this.closest('dialog').close()">Maybe later</button></div></div><form method="dialog" class="modal-backdrop"><button>close</button></form></dialog><!-- Notion Category Picker Modal --><dialog id="notionCategoryModal" class="modal"><div class="modal-box rounded-3xl p-8"><div class="text-center mb-6"><div class="w-14 h-14 rounded-full bg-primary/10 flex items-center justify-center mx-auto mb-3"><i data-lucide="book-open" class="w-7 h-7 text-primary"></i></div><h3 class="text-xl font-bold mb-1">Save to Notion</h3><p class="text-sm text-base-content/60">Pick categories to organize this thread in your Notion database.</p></div><div class="flex flex-wrap gap-2 mb-4 justify-center"><label class="btn btn-outline btn-sm rounded-full px-4 category-pill cursor-pointer"><input type="checkbox" name="notion_category" value="Tech" class="hidden"> Tech </label><label class="btn btn-outline btn-sm rounded-full px-4 category-pill cursor-pointer"><input type="checkbox" name="notion_category" value="AI" class="hidden"> AI </label><label class="btn btn-outline btn-sm rounded-full px-4 category-pill cursor-pointer"><input type="checkbox" name="notion_category" value="Business" class="hidden"> Business </label><label class="btn btn-outline btn-sm rounded-full px-4 category-pill cursor-pointer"><input type="checkbox" name="notion_category" value="Science" class="hidden"> Science </label><label class="btn btn-outline btn-sm rounded-full px-4 category-pill cursor-pointer"><input type="checkbox" name="notion_category" value="Productivity" class="hidden"> Productivity </label><label class="btn btn-outline btn-sm rounded-full px-4 category-pill cursor-pointer"><input type="checkbox" name="notion_category" value="Design" class="hidden"> Design </label></div><div class="mb-6"><input type="text" id="notionCustomCategory" class="input input-bordered rounded-full w-full text-sm" placeholder="Or type a custom category..."></div><div class="flex flex-col gap-2"><button type="button" onclick="confirmNotionSave()" class="btn gradient-btn rounded-full font-bold gap-2"><i data-lucide="save" class="w-4 h-4"></i> Save to Notion </button><button type="button" class="btn btn-ghost btn-sm" onclick="this.closest('dialog').close()">Cancel</button></div></div><form method="dialog" class="modal-backdrop"><button>close</button></form></dialog><!-- Signup Modal for Highlights (anonymous users) --><dialog id="signupHighlightModal" class="modal"><div class="modal-box rounded-3xl text-center p-8"><div class="w-16 h-16 rounded-full bg-primary/10 flex items-center justify-center mx-auto mb-4"><i data-lucide="highlighter" class="w-8 h-8 text-primary"></i></div><h3 class="text-xl font-bold mb-3">Sign Up to Highlight Tweets</h3><p class="text-base-content/60 mb-6">Create a free account to get a 7-day Premium trial, including the ability to highlight key tweets in any thread.</p><div class="flex flex-col gap-2"><button type="button" id="signupHighlightBtn" data-url="/register/?next=/thread/2038953944475472316/" onclick="navigateToDataUrl('signupHighlightBtn')" class="btn gradient-btn rounded-full font-bold gap-2"><i data-lucide="user-plus" class="w-4 h-4"></i> Sign Up Free </button><button type="button" id="loginHighlightBtn" data-url="/login/?next=/thread/2038953944475472316/" onclick="navigateToDataUrl('loginHighlightBtn')" class="btn btn-outline rounded-full gap-2"><i data-lucide="log-in" class="w-4 h-4"></i> Log In </button><button type="button" class="btn btn-ghost btn-sm" onclick="this.closest('dialog').close()">Maybe later</button></div></div><form method="dialog" class="modal-backdrop"><button>close</button></form></dialog><!-- Signup Modal for Notion save (anonymous users) --><dialog id="signupNotionModal" class="modal"><div class="modal-box rounded-3xl text-center p-8"><div class="w-16 h-16 rounded-full bg-primary/10 flex items-center justify-center mx-auto mb-4"><i data-lucide="book-open" class="w-8 h-8 text-primary"></i></div><h3 class="text-xl font-bold mb-3">Sign Up to Save to Notion</h3><p class="text-base-content/60 mb-6">Create a free account to get a 7-day Premium trial, including saving unrolled threads directly to your Notion workspace.</p><div class="flex flex-col gap-2"><button type="button" id="signupNotionBtn" data-url="/register/?next=/thread/2038953944475472316/" onclick="navigateToDataUrl('signupNotionBtn')" class="btn gradient-btn rounded-full font-bold gap-2"><i data-lucide="user-plus" class="w-4 h-4"></i> Sign Up Free </button><button type="button" id="loginNotionBtn" data-url="/login/?next=/thread/2038953944475472316/" onclick="navigateToDataUrl('loginNotionBtn')" class="btn btn-outline rounded-full gap-2"><i data-lucide="log-in" class="w-4 h-4"></i> Log In </button><button type="button" class="btn btn-ghost btn-sm" onclick="this.closest('dialog').close()">Maybe later</button></div></div><form method="dialog" class="modal-backdrop"><button>close</button></form></dialog><!-- General-purpose action toast (success/error/warning) — see showToast() in main.js --><div id="actionToast" class="toast toast-bottom toast-center z-50 hidden"><div id="actionToastAlert" class="alert shadow-lg rounded-full text-sm font-semibold gap-2 py-2 px-4"><i data-lucide="check-circle" class="w-4 h-4 shrink-0" data-toast-icon="success"></i><i data-lucide="alert-circle" class="w-4 h-4 shrink-0 hidden" data-toast-icon="error"></i><i data-lucide="alert-triangle" class="w-4 h-4 shrink-0 hidden" data-toast-icon="warning"></i><i data-lucide="info" class="w-4 h-4 shrink-0 hidden" data-toast-icon="info"></i><span id="actionToastMessage"></span></div></div><!-- Lightbox Modal --><div id="imageLightbox" class="fixed inset-0 z-50 hidden bg-black/90 backdrop-blur-md flex items-center justify-center p-4 transition-all duration-300 opacity-0"><button type="button" onclick="closeLightbox()" class="absolute top-4 right-4 text-white/70 hover:text-white transition-colors bg-white/10 hover:bg-white/20 p-2 rounded-full z-10 focus:outline-none focus:ring-2 focus:ring-white" aria-label="Close"><i data-lucide="x" class="w-6 h-6"></i></button><button id="lightboxPrev" type="button" onclick="prevLightbox()" class="absolute left-4 top-1/2 -translate-y-1/2 text-white/70 hover:text-white transition-colors bg-white/10 hover:bg-white/20 p-2 rounded-full z-10 focus:outline-none focus:ring-2 focus:ring-white" aria-label="Previous"><i data-lucide="chevron-left" class="w-8 h-8"></i></button><button id="lightboxNext" type="button" onclick="nextLightbox()" class="absolute right-4 top-1/2 -translate-y-1/2 text-white/70 hover:text-white transition-colors bg-white/10 hover:bg-white/20 p-2 rounded-full z-10 focus:outline-none focus:ring-2 focus:ring-white" aria-label="Next"><i data-lucide="chevron-right" class="w-8 h-8"></i></button><div class="max-w-5xl max-h-[85vh] w-full h-full flex items-center justify-center"><img id="lightboxImg" src="" class="max-w-full max-h-[85vh] object-contain rounded-lg shadow-2xl hidden" alt="Enlarged view"><video id="lightboxVideo" class="max-w-full max-h-[85vh] object-contain rounded-lg shadow-2xl hidden" playsinline></video></div></div><script> (function() { let currentIndex = -1; let threadMedia = []; let lightboxInitialized = false; function initLightbox() { if (lightboxInitialized) return; threadMedia = []; const items = document.querySelectorAll('[data-lightbox-url]'); items.forEach(function(el, i) { el.setAttribute('data-lightbox-index', i); threadMedia.push({ url: el.getAttribute('data-lightbox-url'), type: el.getAttribute('data-lightbox-type') || 'photo', poster: el.getAttribute('data-lightbox-poster') || '' }); }); lightboxInitialized = true; } function showLightbox(index) { initLightbox(); if (!threadMedia.length) return; if (index < 0) index = 0; if (index >= threadMedia.length) index = threadMedia.length - 1; currentIndex = index; const m = threadMedia[currentIndex]; const lightbox = document.getElementById('imageLightbox'); const img = document.getElementById('lightboxImg'); const video = document.getElementById('lightboxVideo'); if (m.type === 'video' || m.type === 'animated_gif') { img.classList.add('hidden'); img.src = ''; video.src = m.url; if (m.poster) { video.poster = m.poster; } else { video.removeAttribute('poster'); } if (m.type === 'animated_gif') { video.loop = true; video.muted = true; video.autoplay = true; video.removeAttribute('controls'); } else { video.loop = false; video.muted = false; video.autoplay = true; video.setAttribute('controls', 'controls'); } video.classList.remove('hidden'); video.load(); video.play().catch(function(err) { console.log('Autoplay blocked:', err); }); } else { if (video) { video.classList.add('hidden'); video.pause(); video.src = ''; } img.src = m.url; img.classList.remove('hidden'); } lightbox.classList.remove('hidden'); setTimeout(function() { lightbox.classList.remove('opacity-0'); }, 10); updateLightboxNav(); } function updateLightboxNav() { const prev = document.getElementById('lightboxPrev'); const next = document.getElementById('lightboxNext'); if (!threadMedia.length || threadMedia.length <= 1) { if (prev) prev.style.display = 'none'; if (next) next.style.display = 'none'; return; } if (prev) prev.style.display = (currentIndex > 0) ? 'block' : 'none'; if (next) next.style.display = (currentIndex < threadMedia.length - 1) ? 'block' : 'none'; } window.openLightbox = function(el) { initLightbox(); const index = parseInt(el.getAttribute('data-lightbox-index'), 10); if (!isNaN(index) && threadMedia.length) { showLightbox(index); } }; window.closeLightbox = function() { const lightbox = document.getElementById('imageLightbox'); const video = document.getElementById('lightboxVideo'); if (video) { video.pause(); video.src = ''; } lightbox.classList.add('opacity-0'); setTimeout(function() { lightbox.classList.add('hidden'); }, 300); }; window.prevLightbox = function() { if (currentIndex > 0) showLightbox(currentIndex - 1); }; window.nextLightbox = function() { if (currentIndex < threadMedia.length - 1) showLightbox(currentIndex + 1); }; document.addEventListener('keydown', function(e) { const lightbox = document.getElementById('imageLightbox'); if (lightbox.classList.contains('hidden')) return; if (e.key === 'Escape') closeLightbox(); if (e.key === 'ArrowLeft') prevLightbox(); if (e.key === 'ArrowRight') nextLightbox(); }); document.addEventListener('DOMContentLoaded', initLightbox); })(); </script></main></div><footer class="border-t border-base-200 bg-base-100 mt-auto"><div class="max-w-6xl mx-auto px-4 py-8"><div class="flex flex-col md:flex-row items-center justify-between gap-4"><div class="flex items-center gap-2 text-sm font-semibold text-base-content"><i data-lucide="compass" class="w-4 h-4 text-primary"></i> Thread Navigator </div><nav class="flex flex-wrap items-center gap-4 text-sm"><a href="/about/" class="link link-hover opacity-70 hover:opacity-100">About</a><a href="/privacy/" class="link link-hover opacity-70 hover:opacity-100">Privacy</a><a href="/terms/" class="link link-hover opacity-70 hover:opacity-100">Terms</a><a href="/disclaimer/" class="link link-hover opacity-70 hover:opacity-100">Disclaimer</a></nav><div class="flex items-center gap-3"><script type='text/javascript' src='https://storage.ko-fi.com/cdn/widget/Widget_2.js'></script><script type='text/javascript'>kofiwidget2.init('Support Me on Ko-fi', '#6366f1', 'Y8Y1RR543');kofiwidget2.draw();</script></div></div><div class="text-center mt-6 text-xs opacity-50"> Made with ❤️ for the reading community <span class="mx-1">·</span><a href="/changelog/" class="hover:underline font-mono">v2.7.0</a></div></div></footer><script> const THREAD_STATUS = "completed"; const THREAD_SLUG = "2038953944475472316"; const TOTAL_POSTS = 10; const RESUME_INDEX = null; const IS_AUTHENTICATED = false; const IS_PREMIUM = false; const HISTORY_PROGRESS_URL = "/profile/history/progress/"; </script><script defer src="/static/thread/js/thread.9dfe58192818.js"></script><script defer src="/static/main/js/main.f5f4851948a6.js"></script><script>document.addEventListener('DOMContentLoaded', () => lucide.createIcons());</script></body></html>