<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>RazerGhost — Projects</title>
		<link>https://razerghost.xyz/projects</link>
		<description>Personal site — link hub, devlog, watchlist, and listening history.</description>
		<atom:link href="https://razerghost.xyz/projects/rss.xml" rel="self" type="application/rss+xml" />
		<item>
			<title>RazerGhost</title>
			<link>https://razerghost.xyz/projects/razerghost-site</link>
			<guid>https://razerghost.xyz/projects/razerghost-site</guid>
			<pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate>
			<description>A personal link hub and devlog — the site you&apos;re looking at right now.</description>
			<content:encoded><![CDATA[<img src="https://razerghost.xyz/projects/razerghost-site/og.png" alt="" /><p>The site you&#39;re reading this on. A small, personal corner of the internet —
somewhere to point people instead of a dozen separate profiles, and a running
log of whatever I&#39;m building at the moment.</p>
<h2 id="why-it-exists">Why it exists</h2>
<p>The old razerghost.xyz was a static portfolio; that content moved to
<a href="https://rg-digital.dev">rg-digital.dev</a>, which left room for something
smaller and more personal here. No client work, no case studies — just links,
notes, and status.</p>
<h2 id="how-it-s-built">How it&#39;s built</h2>
<p>SvelteKit (Svelte 5) with Tailwind CSS 4, running as a real Node server
(<code>adapter-node</code>) in Docker behind Coolify and Traefik — not a static export.
Devlog and project posts alike are plain markdown files with frontmatter,
read straight off disk on every request. No CMS, no database, no build step
for content: push a <code>.md</code> file, redeploy, done.</p>
<p>Posts can also embed real, interactive Svelte components inline — a live
counter, a typed-terminal animation, a before/after image slider — mounted
client-side wherever a post drops in <code>&lt;div data-embed=&quot;Name&quot;&gt;</code>.</p>
<p>A few widgets (Spotify now-playing, Discord presence, live GitHub activity)
pull from external APIs and degrade gracefully — they just quietly disappear
or show a fallback state if their env vars or accounts aren&#39;t set up, rather
than breaking the page.</p>
<p>There&#39;s also a small private area behind GitHub login: <code>/notes</code> for a
personal notes graph — search, tags, folders, saved views — and <code>/admin</code>
for the actual site-editing tools, a dashboard of markdown editors for the
devlog and this projects page, a status editor for the homepage&#39;s &quot;Right
now&quot; card, and a Simkl cache inspector. Posts get drafted and previewed
against a real dev server before being committed and pushed.</p>
<h2 id="what-s-here">What&#39;s here</h2>
<ul>
<li><a href="/devlog">Devlog</a> — build logs, before/afters, TILs, whatever&#39;s worth
writing down</li>
<li>The homepage itself carries what I&#39;m currently up to, plus live
Discord/GitHub signal — no separate status page needed</li>
<li><a href="/gear">Gear</a> — the hardware and software I actually use, searchable and
filterable by category</li>
<li><a href="/watchlist">Watchlist</a> — what I&#39;m watching, backed by Simkl with a cached
fallback so it stays up even if Simkl&#39;s API doesn&#39;t</li>
<li><a href="/listens">Listens</a> — full listening history built from Spotify&#39;s own data
export (not just the last-50 the live API exposes), searchable as an
interactive card grid, kept current between exports by a scheduled
scrobble poller</li>
<li>This projects page — the same content model as the devlog, for things
worth a proper writeup instead of just a card</li>
</ul>
]]></content:encoded>
		</item>
	</channel>
</rss>