<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Roy Portas - Writing</title>
        <link>https://royportas.com/</link>
        <description>Articles on microfrontend architecture, frontend platform engineering, and scaling frontend teams.</description>
        <lastBuildDate>Thu, 07 May 2026 19:21:12 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>© 2026 Roy Portas</copyright>
        <atom:link href="https://royportas.com/rss.xml" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[My Testing Strategy: Unit, E2E, Load, and Chaos Testing Explained]]></title>
            <link>https://royportas.com/posts/my-testing-strategy</link>
            <guid isPermaLink="false">https://royportas.com/posts/my-testing-strategy</guid>
            <pubDate>Mon, 04 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[A practical breakdown of the four test types I use on every production app, with tools and trade-offs for each.]]></description>
        </item>
        <item>
            <title><![CDATA[Coolify Reference Notes]]></title>
            <link>https://royportas.com/posts/coolify-notes</link>
            <guid isPermaLink="false">https://royportas.com/posts/coolify-notes</guid>
            <pubDate>Sun, 03 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[A reference for getting Coolify running and configuring apps: server setup, swap, OrbStack local dev, and deploying via volumes or ports.]]></description>
        </item>
        <item>
            <title><![CDATA[Setting up Drizzle ORM with Bun SQLite]]></title>
            <link>https://royportas.com/posts/drizzle-orm-bun-sqlite</link>
            <guid isPermaLink="false">https://royportas.com/posts/drizzle-orm-bun-sqlite</guid>
            <pubDate>Sat, 18 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[How I wired up Drizzle ORM with Bun's native SQLite driver.]]></description>
        </item>
        <item>
            <title><![CDATA[Automated deployments to a VPS with GitHub Actions and Docker Compose]]></title>
            <link>https://royportas.com/posts/deploy-docker-compose-vps-github-actions</link>
            <guid isPermaLink="false">https://royportas.com/posts/deploy-docker-compose-vps-github-actions</guid>
            <pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[How I set up automated deployments to a VPS without a public IP address, using a self-hosted GitHub Actions runner.]]></description>
        </item>
        <item>
            <title><![CDATA[An opinionated TanStack Start project structure]]></title>
            <link>https://royportas.com/posts/tanstack-start-project-structure</link>
            <guid isPermaLink="false">https://royportas.com/posts/tanstack-start-project-structure</guid>
            <pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[The directory structure I use for TanStack Start apps, with explanations of each convention and why the routing layer is laid out the way it is.]]></description>
        </item>
        <item>
            <title><![CDATA[Homebrew Cheatsheet]]></title>
            <link>https://royportas.com/posts/homebrew-cheatsheet</link>
            <guid isPermaLink="false">https://royportas.com/posts/homebrew-cheatsheet</guid>
            <pubDate>Fri, 03 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Common commands for interacting with Homebrew, the macOS package manager]]></description>
        </item>
        <item>
            <title><![CDATA[Manual @font-face rules for variable fonts]]></title>
            <link>https://royportas.com/posts/variable-fonts-manual-font-face</link>
            <guid isPermaLink="false">https://royportas.com/posts/variable-fonts-manual-font-face</guid>
            <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Why I replaced fontsource's auto-injected @font-face rules with manual declarations to trim unnecessary @font-face rules and load Latin-only subsets.]]></description>
        </item>
        <item>
            <title><![CDATA[PostHog analytics in TanStack Start]]></title>
            <link>https://royportas.com/posts/posthog-analytics-in-tanstack-start</link>
            <guid isPermaLink="false">https://royportas.com/posts/posthog-analytics-in-tanstack-start</guid>
            <pubDate>Wed, 18 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[How I set up PostHog in a statically prerendered TanStack Start site, covering SSR-safe initialisation, SPA pageview tracking, and proxying through Vercel.]]></description>
        </item>
        <item>
            <title><![CDATA[Custom sitemaps in TanStack Start]]></title>
            <link>https://royportas.com/posts/custom-sitemaps-in-tanstack-start</link>
            <guid isPermaLink="false">https://royportas.com/posts/custom-sitemaps-in-tanstack-start</guid>
            <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[How I replaced the auto-generated sitemap in TanStack Start with a hand-rolled server route to get real lastmod dates and per-URL priority control.]]></description>
        </item>
        <item>
            <title><![CDATA[Load testing TanStack Start with k6 and Prometheus]]></title>
            <link>https://royportas.com/posts/load-testing-tanstack-start</link>
            <guid isPermaLink="false">https://royportas.com/posts/load-testing-tanstack-start</guid>
            <pubDate>Sun, 01 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[How I built a realistic SSR load test rig for TanStack Start, wired up prom-client for Prometheus metrics, and what the results looked like under load.]]></description>
        </item>
        <item>
            <title><![CDATA[Deploying a static TanStack Start app to Vercel]]></title>
            <link>https://royportas.com/posts/deploying-tanstack-start-static-to-vercel</link>
            <guid isPermaLink="false">https://royportas.com/posts/deploying-tanstack-start-static-to-vercel</guid>
            <pubDate>Mon, 23 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[How to configure TanStack Start's static prerender target and deploy it correctly to Vercel, including the non-obvious vercel.json settings that make routing work.]]></description>
        </item>
        <item>
            <title><![CDATA[Markdown in Next.js]]></title>
            <link>https://royportas.com/posts/markdown-in-nextjs</link>
            <guid isPermaLink="false">https://royportas.com/posts/markdown-in-nextjs</guid>
            <pubDate>Sun, 21 Sep 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[A deep dive into the options for handling Markdown content in Next.js applications]]></description>
        </item>
        <item>
            <title><![CDATA[Using GitHub Models with ai-sdk]]></title>
            <link>https://royportas.com/posts/github-models-ai-sdk</link>
            <guid isPermaLink="false">https://royportas.com/posts/github-models-ai-sdk</guid>
            <pubDate>Sat, 16 Aug 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[A quick guide on how to use GitHub Models with the AI SDK]]></description>
        </item>
        <item>
            <title><![CDATA[Mac Dev Setup]]></title>
            <link>https://royportas.com/posts/mac-dev-setup</link>
            <guid isPermaLink="false">https://royportas.com/posts/mac-dev-setup</guid>
            <pubDate>Sun, 27 Apr 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[My current macOS development setup guide, covering installing apps and configuring system settings]]></description>
        </item>
        <item>
            <title><![CDATA[2025 Portfolio Redesign]]></title>
            <link>https://royportas.com/posts/2025-portfolio-redesign</link>
            <guid isPermaLink="false">https://royportas.com/posts/2025-portfolio-redesign</guid>
            <pubDate>Wed, 23 Apr 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Every couple years I like to redesign my portfolio using the trending technologies in the web development community. This year I wanted to try out Next.js with App Router, Tailwind CSS and Content Collections.]]></description>
        </item>
        <item>
            <title><![CDATA[Next.js Forms and Server Actions]]></title>
            <link>https://royportas.com/posts/nextjs-forms-and-server-actions</link>
            <guid isPermaLink="false">https://royportas.com/posts/nextjs-forms-and-server-actions</guid>
            <pubDate>Mon, 21 Apr 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[I've recently been working with Next.js and React Server Components, which provides a nice way to build fullstack web applications quickly. One of the trickiest parts was working with forms and server actions, these are my notes on what I figured out.]]></description>
        </item>
        <item>
            <title><![CDATA[Setting up a Nomad dev environment on macOS]]></title>
            <link>https://royportas.com/posts/nomad-dev-environment</link>
            <guid isPermaLink="false">https://royportas.com/posts/nomad-dev-environment</guid>
            <pubDate>Sun, 13 Aug 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[I found some tricks with getting a Nomad dev environment working reliably on Mac, particularly a Apple Silicon Mac.]]></description>
        </item>
        <item>
            <title><![CDATA[Simple GitOps with Nomad]]></title>
            <link>https://royportas.com/posts/simple-gitops-with-nomad</link>
            <guid isPermaLink="false">https://royportas.com/posts/simple-gitops-with-nomad</guid>
            <pubDate>Sun, 13 Aug 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[I was looking at a simple way to do GitOps with Nomad for my Homelab. Unlike the Kubernetes ecosystem, there doesn't seem to be many examples of GitOps workflows in Nomad.]]></description>
        </item>
        <item>
            <title><![CDATA[Building webapps fast with Next.js app router]]></title>
            <link>https://royportas.com/posts/building-webapps-fast-with-nextjs-app-router</link>
            <guid isPermaLink="false">https://royportas.com/posts/building-webapps-fast-with-nextjs-app-router</guid>
            <pubDate>Fri, 09 Jun 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Setting up webapps can be time consuming, particularly when the goal is to build a quick proof of concept of something]]></description>
        </item>
        <item>
            <title><![CDATA[Easily switch dark mode on macOS]]></title>
            <link>https://royportas.com/posts/easily-switch-dark-mode-mac</link>
            <guid isPermaLink="false">https://royportas.com/posts/easily-switch-dark-mode-mac</guid>
            <pubDate>Sun, 28 May 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[I like to change my color theme based on the environment I'm working in, this guide outlines how to setup single-click dark mode switching on macOS.]]></description>
        </item>
        <item>
            <title><![CDATA[Devcontainers for frontend development]]></title>
            <link>https://royportas.com/posts/devcontainers-for-frontend-development</link>
            <guid isPermaLink="false">https://royportas.com/posts/devcontainers-for-frontend-development</guid>
            <pubDate>Tue, 09 Aug 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[My notes on using devcontainers for frontend development]]></description>
        </item>
        <item>
            <title><![CDATA[Installing Linux on an External HDD]]></title>
            <link>https://royportas.com/posts/install-linux-on-external-hdd</link>
            <guid isPermaLink="false">https://royportas.com/posts/install-linux-on-external-hdd</guid>
            <pubDate>Tue, 04 Jun 2019 00:00:00 GMT</pubDate>
            <description><![CDATA[I wanted to install Linux on a portable SSD I had and make it bootable from my Macbook, so it needed UEFI support. I didn't find a nice method of doing it online, so I found my own way.]]></description>
        </item>
        <item>
            <title><![CDATA[Setting up CORS with Python]]></title>
            <link>https://royportas.com/posts/cors-python</link>
            <guid isPermaLink="false">https://royportas.com/posts/cors-python</guid>
            <pubDate>Sat, 02 Mar 2019 00:00:00 GMT</pubDate>
            <description><![CDATA[CORS (Cross Origin Resource Sharing) allows access to resources from other domains, a good use case for this is a web app trying to fetch data from an API on another domain. These are my notes on setting up CORS with Python.]]></description>
        </item>
    </channel>
</rss>