Jacob Paris
Articles, guides, and cheatsheets
Colocate your routes into feature folders with Remix Custom Routes
Guidelines for optimistic UI in modern CRUD apps
Solving hydration errors in Remix
Progressively enhanced client rendering to avoid SSR hydration issues in Remix.
Where to host your Remix app in 2023
Show a loading state while images load
Thumbnails for file input images in React
Uploading images in Remix with optimistic UI (like Slack)
Debounce your useFetcher submissions with this custom Remix hook
Custom Fetcher Hooks are Remix's Typesafe RPCs
Reset React state when a prop changes with useResetCallback
Find and fix performance bottlenecks in your Remix app with Server Timing
Set route headers and loader headers with Remix
Save money by autoscaling your Fly apps to zero when inactive
The URL is the ultimate global state management tool
Persist data client-side in React with useLocalStorageState
The state of type-safe data fetching
3 runtime validation libraries for Typescript that all look the same to me
Use an emoji favicon
Building a markdown input with a preview tab (like GitHub and Stack Overflow) with Remix
Show active user presence (like Google Docs or Figma) with Remix
Generate open graph social preview images with Remix
Autosave form inputs on change or blur with Remix's useFetcher (not useSubmit)
Show toast notifications on form submit with Remix
Multi-step forms with Remix
Animated page transitions with Remix's nested routes
Custom HTML5 browser form validation with React
Multiple forms and actions on a page with Remix
Server-side render dates across timezones with Remix
Dynamic form inputs with Remix
Integrating BullMQ into a Node application
Offload work to a background process in Node JS
Wait for a BullMQ job to complete with Remix Deferred Loaders
Stream BullMQ job progress with Remix EventSources
Stream Progress Updates with Remix using Defer, Suspense, and Server Sent Events
Build a sticky hover effect with Tailwind and React
Develop and deploy multiple Remix apps with an integrated Nx monorepo
Add data to a Google Sheet from a Node.js backend
A tech interview that doesn't suck
Add a simple query resolver
Add footnotes to your content
Add a Key to a React Fragment
Write good scrum tickets
Animate a Stripe Checkout with Framer and React
Automatically update your secrets and environment variables from a 1Password vault
Bash Cheatsheet
Break text responsively
Solve parserOptions.project bug with Typescript and ESLint
Build a sliding sidebar with pure CSS
Build a sliding sidebar with vanilla javascript
Build Vue Components with ESBuild
Center anything with CSS
Write a contact form in XState
Integrate Remix with Cloudflare Pages
Speed up your Mac by triggering early cooling
Create a custom local eslint rule
Use CSS print styles with Tailwind
Analyze the data supply chain to detect overfetching
Design a login flow UI
Initialize a destructured argument
The Developer's Guide to Hoisting
Create databases with Docker Compose
Dynamically generate test cases with Jest
Enter the Tech World
Export Passwords from 1Password to iCloud Keychain
Filter an array in Typescript
Format text with XState (Part 1)
Format text with XState (Part 2)
Format text with XState (Part 3)
Getting started with testing
Import ENV file from 1Password shared note into Gitpod environment
HTML for Absolute Beginners
Optional closing elements in HTML
Understanding HTML's mysterious Void elements
Send messages from an embedded iframe to the parent page
The Inverted Switch Pattern in Javascript
Basic javascript functions
Basic javascript promises
JSDoc to Typescript Cheatsheet
Laying out pages with HTML
Logging out with remix-auth
Basic javascript loops
Feature Request: Can you let us set the mortgage balance?
Notes for Modern Redux with Redux Toolkit (RTK) and TypeScript
Notes for Measuring Developer Relations on swyx.io
Notes for Build a Real-Time Data Syncing Chat Application with Supabase and Next.js
Partially match a subset of an object's fields in Typescript
Use Prettier and ESLint in harmony
Configure Prettier for Opt-In Usage
Understanding React's useCallback
Understanding React's useEffect
Understanding React's useMemo
Serving files as routes with Remix
Submit a form with basic HTML
Reverse a Record in Typescript
Sort an array into groups with reduce
Set up multi-repo workspaces with Gitpod and Tailscale
Watch Youtube Streams and Chat with React
Write a type-safe singleton module in Typescript
Use Twitter tweet intents
Use ActionData to get form post body in Remix
Structure your website with nested layouts with Remix
Guidelines for validating phone numbers
File Utils - Favourite VS Code Extensions
Paste Image - Favourite VS Code Extensions
Import Vue SFC files with Typescript

Hi, I'm Jacob
Hey there! I'm a developer, designer, and digital nomad with a background in lean manufacturing.
About once per month, I send an email with new guides, new blog posts, and sneak peeks of what's coming next.
Everyone who subscribes gets access to the source code for this website and every example project for all my tutorials.
Stay up to date with everything I'm working on by entering your email below.