41554 blogs · [ { "id": "01a0878a-8d57-711e-903b-c45f30c2a7f5", "title": "Why Flue and Unkey Deploy Are a Natural Fit for Shipping AI Agents", "url": "https://www.jamesperkins.dev/post/flue-agent-framework-with-unkey/", "published_at": "2026-05-03T00:00:00+00:00" }, { "id": "01a0878a-8d57-711e-903b-c45f30e3d17c", "title": "MUMPS is everywhere and nobody knows it", "url": "https://www.jamesperkins.dev/post/mumps-is-everywhere/", "published_at": "2026-04-24T00:00:00+00:00" }, { "id": "01a0878a-8d57-711e-903b-c45f31b2b4dc", "title": "Deploying and Securing Your API with Unkey", "url": "https://www.jamesperkins.dev/post/deploy-with-unkey/", "published_at": "2026-04-23T00:00:00+00:00" }, { "id": "01a0878a-8d57-711e-903b-c45f32057af0", "title": "The Vercel Compromise and the Case for Secret Management", "url": "https://www.jamesperkins.dev/post/what-we-learnt-from-vercel-breach/", "published_at": "2026-04-19T00:00:00+00:00" }, { "id": "01a0878a-8d57-711e-903b-c45f32fc43aa", "title": "Unkey Is Staying Open Source", "url": "https://www.jamesperkins.dev/post/why-unkey-stays-open-source/", "published_at": "2026-04-19T00:00:00+00:00" }, { "id": "01a0878a-8d57-711e-903b-c45f332267be", "title": "Beyond the Grind: Why Early-Stage Founders Need a Life", "url": "https://www.jamesperkins.dev/post/beyond-the-grind-why-early-stage-founders-need-a-life/", "published_at": "2025-08-18T00:00:00+00:00" }, { "id": "01a0878a-8d57-711e-903b-c45f33f521f4", "title": "Why & How We Built a Better Auth Abstraction Layer", "url": "https://www.jamesperkins.dev/post/we-built-a-better-auth-abstraction-layer/", "published_at": "2025-08-17T00:00:00+00:00" }, { "id": "01a0878a-8d57-711e-903b-c45f34048631", "title": "Build, Don't Just Babble", "url": "https://www.jamesperkins.dev/post/build-dont-just-babble/", "published_at": "2025-08-16T00:00:00+00:00" }, { "id": "01a0878a-8d57-711e-903b-c45f346557cc", "title": "Ratelimiting tRPC with Unkey", "url": "https://www.jamesperkins.dev/post/ratelimiting-trpc-with-unkey/", "published_at": "2025-08-15T00:00:00+00:00" }, { "id": "01a0878a-8d57-711e-903b-c45f35369b3d", "title": "Unlock Literal Types: The Magic of as const in TypeScript", "url": "https://www.jamesperkins.dev/post/unlock-literal-types-the-magic-of-as-const-in-typescript/", "published_at": "2025-08-13T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f61eff5d33", "title": "Fundraising doesn't always go to plan", "url": "https://www.jamesperkins.dev/post/fundraising-doesnt-always-go-to-plan/", "published_at": "2025-08-11T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f61f42a6d8", "title": "Rate limiting in Next.js in under 10 minutes", "url": "https://www.jamesperkins.dev/post/rate-limiting-nextjs/", "published_at": "2025-08-05T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f61f6991c7", "title": "Edit Predictions in Zed: A Game-Changer for Developers", "url": "https://www.jamesperkins.dev/post/zed-edit-predictions/", "published_at": "2025-02-14T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f62066561c", "title": "One dollar stats", "url": "https://www.jamesperkins.dev/post/dollar-analytics/", "published_at": "2025-01-06T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f62130a959", "title": "Decoding CLI Authentication", "url": "https://www.jamesperkins.dev/post/cli-auth-with-unkey/", "published_at": "2024-04-03T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f621c2d2b1", "title": "Supercharge Your Application Insights with PostHog", "url": "https://www.jamesperkins.dev/post/posthog-web-analytics/", "published_at": "2024-03-04T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f6229437cf", "title": "Why flag parameters suck", "url": "https://www.jamesperkins.dev/post/why-flag-parameters-suck/", "published_at": "2024-02-05T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f62319285d", "title": "Building Command-Line Interfaces Made Easy with Clack", "url": "https://www.jamesperkins.dev/post/cli-with-clack/", "published_at": "2024-01-22T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f624172195", "title": "Dropping User Tables in 2023", "url": "https://www.jamesperkins.dev/post/dropping-user-tables-2023/", "published_at": "2023-05-07T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f624b9f6b4", "title": "Use Git in the Terminal THE LAZY WAY", "url": "https://www.jamesperkins.dev/post/learning-the-terminal-with-lazy-git/", "published_at": "2023-04-08T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f6251e9039", "title": "Improving Commit Messages with Conventional Commits", "url": "https://www.jamesperkins.dev/post/conventional-commits/", "published_at": "2023-03-10T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f625cc2609", "title": "Breaking Up with Visual Studio Code: Switching to Zed IDE", "url": "https://www.jamesperkins.dev/post/zed-lightweight-ide/", "published_at": "2023-03-09T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f6261df3bb", "title": "HouseForm - Simplify Form Creation in React", "url": "https://www.jamesperkins.dev/post/houseform-forms-made-easy/", "published_at": "2023-03-03T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f626a9bfa6", "title": "Vercel Cron Jobs are here!", "url": "https://www.jamesperkins.dev/post/vercel-cron/", "published_at": "2023-03-03T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f627254089", "title": "Webhookthing... a webhook testing tool", "url": "https://www.jamesperkins.dev/post/webhook-thing/", "published_at": "2023-03-03T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f627e1de87", "title": "Understanding Assignability in TypeScript", "url": "https://www.jamesperkins.dev/post/understanding-assignability-in-typescript/", "published_at": "2022-12-25T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f628c0f1e9", "title": "Zod Typesafe User Input", "url": "https://www.jamesperkins.dev/post/zod-typesafe-user-input/", "published_at": "2022-11-22T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f629bd23fe", "title": "Did the Next.js team fumble Next.js 13 release", "url": "https://www.jamesperkins.dev/post/did-nextjs-team-fumble-next13/", "published_at": "2022-11-18T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f62a14b291", "title": "Code profiles make YouTube creation easier", "url": "https://www.jamesperkins.dev/post/youtube-creation-vscode/", "published_at": "2022-11-16T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f62aa0d99a", "title": "Using Next Middleware to access and use geolocation in a non dynamic route", "url": "https://www.jamesperkins.dev/post/using-next-middleware-for-geolocation/", "published_at": "2022-05-22T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f62b45de3a", "title": "How to reload an SSR page", "url": "https://www.jamesperkins.dev/post/page-reload-with-ssr/", "published_at": "2022-04-01T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f62c1235a5", "title": "Chakra Prose is finally here", "url": "https://www.jamesperkins.dev/post/chakra-prose/", "published_at": "2022-03-27T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f62cdba74d", "title": "How to handle page to page loading in Next.js", "url": "https://www.jamesperkins.dev/post/page-to-page-loading-in-next/", "published_at": "2022-03-22T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f62db189a3", "title": "Dealing with Date objects in Next data fetching", "url": "https://www.jamesperkins.dev/post/next-date-type-data-fetching/", "published_at": "2021-11-09T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f62e9a81cc", "title": "DaisyUI - Make Tailwind components with ease!", "url": "https://www.jamesperkins.dev/post/daisyui-make-tailwind-components-with-ease/", "published_at": "2021-10-21T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f62f1510e3", "title": "Force Reload Next.js Pages", "url": "https://www.jamesperkins.dev/post/force-reload-next-pages/", "published_at": "2021-10-12T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f62fd25f7b", "title": "Developer Relations what is it", "url": "https://www.jamesperkins.dev/post/developer-relations-what-do-we-do/", "published_at": "2021-07-21T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f630485c94", "title": "Create content to solidify your knowledge", "url": "https://www.jamesperkins.dev/post/create-content-to-solidify-your-knowledge/", "published_at": "2021-04-05T00:00:00+00:00" }, { "id": "01a0878a-8d58-709d-b51e-94f63099b477", "title": "Pick a lanaguage and do something", "url": "https://www.jamesperkins.dev/post/pick-a-language-and-do-something/", "published_at": "2019-09-04T00:00:00+00:00" } ] posts Claim your blog
Back to jamesperkins.dev
Blog · corpus.blog/blogs/jamesperkins.dev/posts

jamesperkins.dev

jamesperkins.dev

2026

2025

2024

2023

2022

2021

2019