<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>John Kenneth Fernandez · Blog</title><description>Senior full-stack developer with 10+ years building scalable web apps with React, Vue, and TypeScript, and now full-stack with Python, FastAPI, GraphQL, and AWS.</description><link>https://johnkennethfernandez.com/</link><item><title>Why I chose Astro over Next.js for this portfolio</title><link>https://johnkennethfernandez.com/blog/astro-over-nextjs/</link><guid isPermaLink="true">https://johnkennethfernandez.com/blog/astro-over-nextjs/</guid><description>This site is a portfolio and blog, not an app behind a login. Here&apos;s why that shape pointed at Astro instead of Next.js.</description><pubDate>Mon, 27 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Going full-stack after ten years on the frontend</title><link>https://johnkennethfernandez.com/blog/going-full-stack/</link><guid isPermaLink="true">https://johnkennethfernandez.com/blog/going-full-stack/</guid><description>What actually changed when I moved from frontend specialist to full-stack, and the lessons from a decade and 80+ projects that carried over.</description><pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate></item><item><title>True full-stack context engineering</title><link>https://johnkennethfernandez.com/blog/true-fullstack-context/</link><guid isPermaLink="true">https://johnkennethfernandez.com/blog/true-fullstack-context/</guid><description>The complete version: two monorepos, a Dockerized backend with a database, API, and Mailpit, and Chrome DevTools MCP watching both the UI and the API traffic. One system the agent sees end to end.</description><pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Why we moved from Cursor to Claude Code</title><link>https://johnkennethfernandez.com/blog/cursor-to-claude/</link><guid isPermaLink="true">https://johnkennethfernandez.com/blog/cursor-to-claude/</guid><description>Cursor is a great AI editor. Our workflow shifted from in-editor assistance to delegating whole tasks to an agent, and that is where Claude Code fit better.</description><pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate></item><item><title>The agent-skills workflow I actually ship with</title><link>https://johnkennethfernandez.com/blog/agent-skills-workflow/</link><guid isPermaLink="true">https://johnkennethfernandez.com/blog/agent-skills-workflow/</guid><description>Spec to plan to build with TDD, then review and a performance pass. How I use Claude Code&apos;s agent-skills to move fast without breaking things.</description><pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate></item><item><title>AI that reaches into Linear and Figma</title><link>https://johnkennethfernandez.com/blog/ai-mcp-linear-figma/</link><guid isPermaLink="true">https://johnkennethfernandez.com/blog/ai-mcp-linear-figma/</guid><description>The best thing about MCP is not the model, it is the access. Connecting Linear and Figma to my AI agent means it works from the real ticket and the real design, not my paraphrase.</description><pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Context engineering: giving an AI agent the whole stack</title><link>https://johnkennethfernandez.com/blog/context-engineering/</link><guid isPermaLink="true">https://johnkennethfernandez.com/blog/context-engineering/</guid><description>Running the frontend and backend together, a monorepo, and a typed GraphQL contract turn an AI coding agent from a guesser into a teammate.</description><pubDate>Tue, 14 Jul 2026 00:00:00 GMT</pubDate></item><item><title>A Dockerized backend for full-stack context engineering</title><link>https://johnkennethfernandez.com/blog/docker-backend-context/</link><guid isPermaLink="true">https://johnkennethfernandez.com/blog/docker-backend-context/</guid><description>Running the database, Mailpit, and the whole backend in Docker gives me and my AI agent one real, reproducible stack to work against. Add Chrome DevTools MCP and the loop is closed.</description><pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate></item><item><title>How I use the PostHog MCP in my dev loop</title><link>https://johnkennethfernandez.com/blog/posthog-mcp/</link><guid isPermaLink="true">https://johnkennethfernandez.com/blog/posthog-mcp/</guid><description>Connecting PostHog to my AI coding agent means product data is one question away, right where I write the code that changes it.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Lessons from leading frontend</title><link>https://johnkennethfernandez.com/blog/lessons-leading-frontend/</link><guid isPermaLink="true">https://johnkennethfernandez.com/blog/lessons-leading-frontend/</guid><description>A few things a decade of frontend work and years of leading it taught me, mostly about leverage and people, not code.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate></item><item><title>How our startup survives without a QA team</title><link>https://johnkennethfernandez.com/blog/surviving-without-qa/</link><guid isPermaLink="true">https://johnkennethfernandez.com/blog/surviving-without-qa/</guid><description>No QA team does not mean no QA. Here is the setup that lets a small team ship with confidence: Vitest, Playwright, and an AI agent with Chrome DevTools MCP doing the manual pass.</description><pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Killing flaky tests with hermetic Playwright</title><link>https://johnkennethfernandez.com/blog/hermetic-playwright/</link><guid isPermaLink="true">https://johnkennethfernandez.com/blog/hermetic-playwright/</guid><description>Flaky end-to-end tests almost always come from depending on something you do not control. The fix is to make each test own its entire world.</description><pubDate>Mon, 12 May 2025 00:00:00 GMT</pubDate></item><item><title>Vitest and Playwright: a testing stack that fits Vite</title><link>https://johnkennethfernandez.com/blog/vitest-playwright-stack/</link><guid isPermaLink="true">https://johnkennethfernandez.com/blog/vitest-playwright-stack/</guid><description>When your apps build with Vite, Vitest is the unit runner that shares its pipeline, and Playwright covers the rest. Here is why that pairing works.</description><pubDate>Thu, 10 Apr 2025 00:00:00 GMT</pubDate></item><item><title>How we run multiple frontend apps in one Turborepo monorepo</title><link>https://johnkennethfernandez.com/blog/turborepo-monorepo/</link><guid isPermaLink="true">https://johnkennethfernandez.com/blog/turborepo-monorepo/</guid><description>One repo, several apps, a shared design system, and Turborepo keeping builds fast. Here is how it fits together and why it is worth it.</description><pubDate>Sat, 15 Mar 2025 00:00:00 GMT</pubDate></item><item><title>Why my design system runs on shadcn/ui, React, and Zod</title><link>https://johnkennethfernandez.com/blog/design-system-tooling/</link><guid isPermaLink="true">https://johnkennethfernandez.com/blog/design-system-tooling/</guid><description>A design system is a pile of tool choices. Here is the reasoning behind mine, and the one problem each piece actually solves.</description><pubDate>Sat, 15 Feb 2025 00:00:00 GMT</pubDate></item><item><title>Why we chose Vite over Next.js</title><link>https://johnkennethfernandez.com/blog/vite-over-nextjs/</link><guid isPermaLink="true">https://johnkennethfernandez.com/blog/vite-over-nextjs/</guid><description>Next.js is excellent, but our apps are authenticated SPAs and an embeddable widget backed by a GraphQL API. Here is why Vite was the better fit.</description><pubDate>Mon, 20 Jan 2025 00:00:00 GMT</pubDate></item></channel></rss>