<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Joonas&apos; blog</title>
<link>https://catjam.fi/blog</link>
<description>Notes from building web apps with Supabase, Postgres and Next.js: fixes, reference tables and what I&apos;d do differently.</description>
<language>en</language>
<atom:link href="https://catjam.fi/rss.xml" rel="self" type="application/rss+xml" />
<item><title>Security Testing Supabase PostgREST</title><link>https://catjam.fi/articles/postgrest-security-notes</link><guid>https://catjam.fi/articles/postgrest-security-notes</guid><pubDate>Sun, 06 Apr 2025 00:00:00 GMT</pubDate><description>Some common enumeration, recon and exfiltration methods for Supabase</description><category>supabase</category><category>security</category></item>
<item><title>Keep your API elegant only in its signature</title><link>https://catjam.fi/articles/api-implementation-barrier</link><guid>https://catjam.fi/articles/api-implementation-barrier</guid><pubDate>Tue, 25 Feb 2025 00:00:00 GMT</pubDate><description>Messy code inside a function is fine if the call site stays simple. A worked example from an internal API client, inspired by React&apos;s design principles.</description><category>api-design</category></item>
<item><title>Bringing &lt;Button&gt; to the React Server Component world</title><link>https://catjam.fi/articles/buttons-in-rsc-world</link><guid>https://catjam.fi/articles/buttons-in-rsc-world</guid><pubDate>Mon, 19 Aug 2024 00:00:00 GMT</pubDate><description>How React Server Components change a design system &lt;Button&gt;: async onClick, loading state, submit status and confirm prompts.</description><category>react</category><category>nextjs</category><category>design-systems</category></item>
<item><title>Next.js + Supabase app in production: what would I do differently</title><link>https://catjam.fi/articles/next-supabase-what-do-differently</link><guid>https://catjam.fi/articles/next-supabase-what-do-differently</guid><pubDate>Fri, 16 Aug 2024 00:00:00 GMT</pubDate><description>My learnings for building a Next.js and Supabase app and keeping it running in production</description><category>nextjs</category><category>supabase</category><category>postgres</category></item>
<item><title>How does Apple wifi password sharing work?</title><link>https://catjam.fi/articles/apple-wifi-password-sharing</link><guid>https://catjam.fi/articles/apple-wifi-password-sharing</guid><pubDate>Thu, 01 Aug 2024 00:00:00 GMT</pubDate><description>A look into how Apple devices share WiFi passwords between (semi-anonymous) devices without internet</description><category>networking</category></item>
<item><title>Visiting Japan</title><link>https://catjam.fi/articles/visiting-japan</link><guid>https://catjam.fi/articles/visiting-japan</guid><pubDate>Fri, 19 Jul 2024 00:00:00 GMT</pubDate><description>Notes from a trip to Japan: eSIMs, cash and 7/11 ATMs, Suica, hotels, food, and what to see in Tokyo, Osaka, Kyoto and Hiroshima.</description><category>travel</category></item>
<item><title>Next.js: request parameter reference</title><link>https://catjam.fi/articles/nextjs-params-reference</link><guid>https://catjam.fi/articles/nextjs-params-reference</guid><pubDate>Wed, 01 Nov 2023 00:00:00 GMT</pubDate><description>How to read route params, query params, headers, cookies and the client IP, and how to redirect, in each kind of Next.js component and handler.</description><category>nextjs</category></item>
<item><title>Migrating to PKCE-compatible generateLink in Supabase</title><link>https://catjam.fi/articles/supabase-generatelink-fix</link><guid>https://catjam.fi/articles/supabase-generatelink-fix</guid><pubDate>Sat, 02 Sep 2023 00:00:00 GMT</pubDate><description>auth-helpers-nextjs 0.7.0 made PKCE the default and broke generateLink. What changed, and the route handler that fixes it.</description><category>supabase</category><category>auth</category></item>
<item><title>Next.js app directory: URL-synced state</title><link>https://catjam.fi/articles/next-urlsynced-state</link><guid>https://catjam.fi/articles/next-urlsynced-state</guid><pubDate>Thu, 10 Aug 2023 00:00:00 GMT</pubDate><description>How to store state in URL with Next.js app directory</description><category>nextjs</category></item>
<item><title>PostgREST/Supabase: joins and join conditions</title><link>https://catjam.fi/articles/postgrest-joins</link><guid>https://catjam.fi/articles/postgrest-joins</guid><pubDate>Tue, 08 Aug 2023 00:00:00 GMT</pubDate><description>A look at how postgREST does joins and the gotchas involved</description><category>supabase</category><category>postgres</category></item>
<item><title>How to fix a NPM package mess</title><link>https://catjam.fi/articles/fix-package-lock</link><guid>https://catjam.fi/articles/fix-package-lock</guid><pubDate>Fri, 28 Jul 2023 00:00:00 GMT</pubDate><description>How to fix broken npm installs, starting with a clean reinstall and a known-good package-lock.json, then missing packages and binaries.</description><category>tooling</category></item>
<item><title>Git: set working directory contents to a commit</title><link>https://catjam.fi/articles/git-working-dir-to-commit</link><guid>https://catjam.fi/articles/git-working-dir-to-commit</guid><pubDate>Fri, 28 Jul 2023 00:00:00 GMT</pubDate><description>Update files in the working tree to match the version in given [commitref] without updating HEAD</description><category>tooling</category></item>
<item><title>Blog idea hack: source your ideas from web history</title><link>https://catjam.fi/articles/blog-inspiration-from-google</link><guid>https://catjam.fi/articles/blog-inspiration-from-google</guid><pubDate>Thu, 27 Jul 2023 00:00:00 GMT</pubDate><description>A method to write about topics your past self wishes existed</description><category>writing</category></item>
<item><title>PostgREST datetime operators</title><link>https://catjam.fi/articles/postgrest-datetime-operators</link><guid>https://catjam.fi/articles/postgrest-datetime-operators</guid><pubDate>Mon, 24 Jul 2023 00:00:00 GMT</pubDate><description>Quick reference to PostgREST operator behavior with datetime columns</description><category>supabase</category><category>postgres</category></item>
<item><title>Opinionated UI: SVG icons in React</title><link>https://catjam.fi/articles/ui-icons</link><guid>https://catjam.fi/articles/ui-icons</guid><pubDate>Fri, 21 Jul 2023 00:00:00 GMT</pubDate><description>Opinionated way to use SVGR to serve SVG icons in a React design system library</description><category>react</category><category>design-systems</category></item>
<item><title>Implement user impersonation in Supabase</title><link>https://catjam.fi/articles/supabase-admin-impersonation</link><guid>https://catjam.fi/articles/supabase-admin-impersonation</guid><pubDate>Wed, 21 Jun 2023 00:00:00 GMT</pubDate><description>Let admins log in as any user in a Next.js and Supabase app, with the code to start and stop impersonation.</description><category>supabase</category><category>auth</category><category>nextjs</category></item>
<item><title>Generating Supabase JWT/access token manually</title><link>https://catjam.fi/articles/supabase-gen-access-token</link><guid>https://catjam.fi/articles/supabase-gen-access-token</guid><pubDate>Wed, 21 Jun 2023 00:00:00 GMT</pubDate><description>How to manually generate JWT tokens to use Supabase services as any user</description><category>supabase</category><category>auth</category></item>
<item><title>Type-safe prop passing in Next.js server components</title><link>https://catjam.fi/articles/nextjs-appdir-data-pattern</link><guid>https://catjam.fi/articles/nextjs-appdir-data-pattern</guid><pubDate>Tue, 20 Jun 2023 00:00:00 GMT</pubDate><description>Flexible method for easily passing typed data from server in Next.js server components</description><category>nextjs</category><category>react</category></item>
<item><title>Creating a Postgres function for a Supabase RLS policy</title><link>https://catjam.fi/articles/supabase-rls-function</link><guid>https://catjam.fi/articles/supabase-rls-function</guid><pubDate>Tue, 20 Jun 2023 00:00:00 GMT</pubDate><description>Postgres function templates that move repeated access checks out of your Supabase RLS policies, starting with a join table membership check.</description><category>supabase</category><category>postgres</category></item>
<item><title>Opinionated UI: &lt;Button&gt; in React</title><link>https://catjam.fi/articles/ultimate-button-component</link><guid>https://catjam.fi/articles/ultimate-button-component</guid><pubDate>Mon, 05 Jun 2023 00:00:00 GMT</pubDate><description>Opinionated way to create a Button component in a React design system library</description><category>react</category><category>design-systems</category></item>
<item><title>Building complex and interactive forms for React</title><link>https://catjam.fi/articles/building-complex-forms</link><guid>https://catjam.fi/articles/building-complex-forms</guid><pubDate>Sun, 02 Oct 2022 00:00:00 GMT</pubDate><description>How I built a complex form for React (with react-hook-forms). An introduction and learned best practices on how some common complex form usecases might be handled.</description><category>react</category></item>
<item><title>2D Navmesh generation and pathfinding in Javascript</title><link>https://catjam.fi/articles/2d-navmeshes-javascript</link><guid>https://catjam.fi/articles/2d-navmeshes-javascript</guid><pubDate>Sun, 03 May 2020 00:00:00 GMT</pubDate><description>Minimal-dependency navmesh generation and path-finding in Javascript</description><category>gamedev</category></item>
<item><title>JSON Serialization might be your Rails bottleneck</title><link>https://catjam.fi/articles/json-serialization-in-rails</link><guid>https://catjam.fi/articles/json-serialization-in-rails</guid><pubDate>Sun, 29 Mar 2020 00:00:00 GMT</pubDate><description>Why your Rails app might surprisingly be bottlenecked by JSON serialization and what can you do about it</description><category>rails</category><category>performance</category></item>
<item><title>PostGIS marker culling</title><link>https://catjam.fi/articles/postgis-marker-culling</link><guid>https://catjam.fi/articles/postgis-marker-culling</guid><pubDate>Sun, 29 Mar 2020 00:00:00 GMT</pubDate><description>Implementing low-priority marker culling for PostGIS queries</description><category>postgres</category><category>postgis</category></item>
</channel>
</rss>
