gabeefran.co-blog/.vercel/output/static/index.html

15 lines
No EOL
9.7 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" href="/favicon.svg" type="image/svg+xml"><link rel="alternate icon" href="/favicon.ico"><link rel="apple-touch-icon" href="/apple-touch-icon.png"><link rel="canonical" href="https://gabeefran.co/"><link rel="alternate" hreflang="en" href="https://gabeefran.co/"><link rel="alternate" hreflang="pt-BR" href="https://gabeefran.co/pt/"><meta name="generator" content="Astro v7.2.10"><title>gabeefranco — Gabriel Franco&#39;s notes</title><meta name="description" content="Notes on computer science, systems, and the open source projects that shaped how I think about software."><meta property="og:type" content="website"><meta property="og:title" content="gabeefranco — Gabriel Franco's notes"><meta property="og:description" content="Notes on computer science, systems, and the open source projects that shaped how I think about software."><meta property="og:url" content="https://gabeefran.co/"><meta property="og:image" content="https://gabeefran.co/logo.png"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="gabeefranco — Gabriel Franco's notes"><meta name="twitter:description" content="Notes on computer science, systems, and the open source projects that shaped how I think about software."><meta name="twitter:image" content="https://gabeefran.co/logo.png"><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:ital,wght@0,400..700;1,400..700&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet"><script>
// Runs before paint to avoid a flash of the wrong theme.
(function () {
const stored = localStorage.getItem('theme');
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
const dark = stored ? stored === 'dark' : prefersDark;
document.documentElement.classList.toggle('dark', dark);
})();
</script><link rel="stylesheet" href="/_astro/BaseLayout.z2Ysa6px.css"><script>window.va = window.va || function () { (window.vaq = window.vaq || []).push(arguments); };
var script = document.createElement('script');
script.defer = true;
script.src = '/_vercel/insights/script.js';
var head = document.querySelector('head');
head.appendChild(script);
</script></head><body class="flex min-h-screen flex-col bg-bg font-sans text-text antialiased selection:bg-primary selection:text-white"><header class="sticky top-0 z-40 border-b border-border/80 bg-bg/85 backdrop-blur"><div class="flex flex-col justify-center gap-4 px-4 py-3 sm:px-6"><div class="flex flex-row justify-between items-end"><a href="/" class="flex hover:underline shrink-0 items-center gap-2.5" aria-label="gabeefranco"><img src="/logo.png" class="h-4"><span class="font-mono text-[15px] font-semibold tracking-tight text-text">gabeefranco</span></a><div class="ml-10 flex sm:hidden justify-end gap-3"><a href="/pt" hreflang="pt" title="Switch language" aria-label="Switch language: Português" class="text-accent max-w-fit font-mono text-xs sm:text-sm underline hover:cursor-pointer hover:text-accent-deep">Switch language: Português</a><button type="button" class="theme-toggle text-accent sm:ml-2 font-mono text-xs sm:text-sm underline hover:cursor-pointer hover:text-accent-deep" aria-label="Toggle color theme" title="Toggle color theme">Toggle color theme</button><script type="module">function e(){document.querySelectorAll(`.theme-toggle`).forEach(e=>{e.addEventListener(`click`,function(){let e=document.documentElement.classList.toggle(`dark`);localStorage.setItem(`theme`,e?`dark`:`light`)})})}e(),document.addEventListener(`astro:after-swap`,e);</script></div><div class="hidden sm:flex items-center gap-2"><nav class="flex items-center gap-1 justify-right" aria-label="Menu"><a href="/" aria-current="page" class="px-2 py-1 text-sm font-medium font-mono underline text-primary hover:text-primary-hover">Home</a><a href="/posts" class="px-2 py-1 text-sm font-medium font-mono underline text-text-muted hover:text-text">Posts</a><a href="/about" class="px-2 py-1 text-sm font-medium font-mono underline text-text-muted hover:text-text">About</a></nav><a href="/pt" hreflang="pt" title="Switch language" aria-label="Switch language: Português" class="text-accent max-w-fit py-1 font-mono text-xs sm:text-sm underline hover:cursor-pointer hover:text-accent-deep ">Switch language: Português</a><button type="button" class="theme-toggle text-accent sm:ml-2 font-mono text-xs sm:text-sm underline hover:cursor-pointer hover:text-accent-deep" aria-label="Toggle color theme" title="Toggle color theme">Toggle color theme</button></div></div><div class="flex justify-end sm:hidden items-center gap-2"><nav class="flex items-center gap-1 justify-right" aria-label="Menu"><a href="/" aria-current="page" class="px-2 py-1 text-sm font-medium font-mono underline text-primary hover:text-primary-hover">Home</a><a href="/posts" class="px-2 py-1 text-sm font-medium font-mono underline text-text-muted hover:text-text">Posts</a><a href="/about" class="px-2 py-1 text-sm font-medium font-mono underline text-text-muted hover:text-text">About</a></nav></div></div></header><main class="flex-1"><section class="mx-10 my-10 flex flex-col gap-5 font-mono"><div class="flex flex-col gap-2"><h1 class="text-text text-2xl">Building things, and figuring out how they work.</h1><h2 class="text-text text-lg">Notes on computer science, systems, and the open source projects that shaped how I think about software. I&#39;m Gabriel Franco — welcome.</h2></div></section><!-- <section class="mx-auto max-w-3xl px-4 pb-4 pt-14 sm:px-6 sm:pt-20 font-mono"> --><!-- <div class="flex flex-col items-start gap-8 sm:flex-row sm:items-center"> --><!-- <img --><!-- src="/logo.png" --><!-- alt="" --><!-- width="867" --><!-- height="458" --><!-- class="w-40 shrink-0 drop-shadow-sm sm:w-52" --><!-- /> --><!-- <div> --><!-- <p class="text-sm font-semibold uppercase tracking-wide text-primary">{t('hero.kicker')}</p> --><!-- <h1 class="mt-2 text-3xl font-bold tracking-tight text-text sm:text-4xl">{t('hero.title')}</h1> --><!-- <p class="mt-4 max-w-xl text-lg leading-relaxed text-text-muted">{t('hero.subtitle')}</p> --><!-- <div class="mt-6 flex flex-wrap gap-5"> --><!-- <a --><!-- href={postsHref} --><!-- class="text-primary hover:underline font-bold px-2 py-1 bg-primary/10" --><!-- > --><!-- {t('hero.cta.posts')} --><!-- </a> --><!-- <a --><!-- href={aboutHref} --><!-- class="text-text hover:underline font-bold px-2 py-1 bg-text/5" --><!-- > --><!-- {t('hero.cta.about')} --><!-- </a> --><!-- </div> --><!-- </div> --><!-- </div> --><!-- </section> --><section class="mx-10 font-mono"><div class="flex items-baseline justify-between gap-4"><div><h2 class="text-xl font-semibold text-text">Recent posts</h2><p class="mt-1 text-sm text-text-muted mb-2">The latest things I’ve written down.</p><a href="/posts" class="shrink-0 text-sm font-medium text-primary hover:underline">View all posts &rarr;</a></div></div><div class="mt-6"><article class="group border-b border-border py-6 first:pt-0 last:border-b-0 font-mono"><a href="/posts/hello-world" class="block"><time datetime="2026-09-22T00:00:00.000Z" class="text-xs font-medium uppercase tracking-wide text-text-muted">September 21, 2026</time><h3 class="mt-1.5 text-xl font-semibold text-text group-hover:text-primary group-hover:underline">This blog&#39;s Hello World (or whatever you want to call this site)</h3><p class="mt-1.5 text-[15px] leading-relaxed text-text-muted">A short note on why this exists and what I plan to write about here.</p></a><div class="mt-3 flex flex-wrap gap-2"><a href="/tags/meta" class="text-text-muted px-1 py-0.5 text-sm hover:text-accent underline">#meta</a><a href="/tags/blogging" class="text-text-muted px-1 py-0.5 text-sm hover:text-accent underline">#blogging</a></div></article><article class="group border-b border-border py-6 first:pt-0 last:border-b-0 font-mono"><a href="/posts/spotify-complaining" class="block"><time datetime="2026-09-02T03:00:00.000Z" class="text-xs font-medium uppercase tracking-wide text-text-muted">September 2, 2026</time><h3 class="mt-1.5 text-xl font-semibold text-text group-hover:text-primary group-hover:underline">Spotify&#39;s Time Capsule Change and the Enshittification of Software</h3><p class="mt-1.5 text-[15px] leading-relaxed text-text-muted">Spotify just removed one of its best features. Beyond a bit of complaining, I want to open a debate about what software is turning into.</p></a><div class="mt-3 flex flex-wrap gap-2"><a href="/tags/software" class="text-text-muted px-1 py-0.5 text-sm hover:text-accent underline">#software</a><a href="/tags/life" class="text-text-muted px-1 py-0.5 text-sm hover:text-accent underline">#life</a></div></article></div></section></main><footer class="border-t border-border/80 font-mono"><div class="mx-auto flex max-w-3xl flex-col gap-2 px-4 py-8 text-sm text-text-muted sm:flex-row sm:items-center sm:justify-between sm:px-6"><p>&copy; 2026 <span class="font-mono text-text">gabeefranco</span> &middot; All rights reserved.</p><div class="flex items-center gap-4"><span class="hidden sm:inline">Written by hand in Porto Alegre.</span><a href="https://github.com/gabeefranco" target="_blank" rel="noopener noreferrer me" class="transition-colors hover:text-primary">GitHub</a><a href="https://github.com/gabeefranco/gabeefran.co-blog" target="_blank" rel="noopener noreferrer" class="transition-colors hover:text-primary">Source</a></div></div></footer></body></html>