Jacob Paris
Articles, guides, and cheatsheets
Remix with React PDF
Consuming a Remix backend from a mobile app or external client
#28 Express and SVG Vite plugins, Simple RBAC – Remix Community Newsletter
Data fetching in useEffect vs Remix loader
Custom routing with Remix
Simple RBAC in Remix
Nested arrays and objects in Form Data with Conform
Use API keys to connect apps and services
Multiple action handlers with Zod in Remix
Merge search params with Zod in Remix
#27 Epic Web Conf 2024 Recap and more – Remix Community Newsletter
Set up PostgreSQL on Fly
Deploy a new Remix app to Cloudflare Pages
Add Drizzle+PostgreSQL to Remix Vite with Cloudflare
Add Drizzle ORM to Remix with SQLite and Fly.io
Add Drizzle ORM to Remix Vite with Cloudflare D1
#26 Conform v1, Epic Web Conf, and Unpic – Remix Community Newsletter
Handle both JSON and FormData in Remix
Use svg sprite icons with Sly and svg-icons-cli
#25 Trellix Demo, SPA Mode, and more – Remix Community Newsletter
Build custom fetchers with Remix
Remove empty query parameters from URLs
#24 Client Hints, Client Data, and Optimistic UI – Remix Community Newsletter
Submit a form without overwriting existing parameters
Server-side pagination with Remix
Upload images with pending UI
Solve React hydration errors in Remix/Next apps
#23 Remix Utils v7 and Remix becomes a Vite plugin – Remix Community Newsletter
Generate open graph social preview images with Remix
Where to host your Remix app in 2024
Insert Remix loaders and actions with VS Code snippets
Redirecting from a resource route
#22 Remix Dev Tools, and everyone goes v2 – Remix Community Newsletter
Build a server-side filter UI with Remix
URL based database filtering with OData
#21 PartyMix, Remix v2-pre, and a new Dev Rel Manager – Remix Community Newsletter
Build your own headless UI components
Create a custom Remix hook to access loader data from any component
Implement Radix's asChild pattern in React
#20 Moulton x Jacob Paris – Remix Community Newsletter
#19: June 2023 Roundup
#18: May 2023 Roundup
#17: April 2023 Roundup
Use createStateContext to share a useState hook
Set up a server-side cache for your backend
Use svg sprite icons in React
Autosave form inputs with Remix
Form validation with Conform, Zod, and Remix
Add Prisma to a Remix app
Typesafe environment variables with Zod
Serve an image from a resource route
Feature folders with Remix Custom Routes
Guidelines for optimistic UI in modern CRUD apps
Avoid hydration errors with CSS and progressive enhancement
Show a loading state while images load
Thumbnails for file input images in React
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
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
#16: Nuttin' but Remix for Christmas
Build a sticky hover effect with Tailwind and React
Develop and deploy multiple Remix apps with an integrated Nx monorepo
#15: The web platform isn't so bad after all.
#14: Moulton Newsletter
#13: Cognoscenti
#12: Meliorism
#11: Phantasmagoric
#10: Galvanized
#9: Engarland
#8: Hypnopedia
#7: Hankering
#6: Recommence
Add data to a Google Sheet from a Node.js backend
#5: Huckmuck
#4: Liberosis
#3: Sonder
#2: Chrysalism
#1: Nikhedonia
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
Moulton
Moulton
Hey there! I'm a developer, designer, and digital nomad building cool things with Remix, and I'm also writing Moulton, the Remix Community Newsletter
About once per month, I send an email with:
- New guides and tutorials
- Upcoming talks, meetups, and events
- Cool new libraries and packages
- What's new in the latest versions of Remix
Stay up to date with everything in the Remix community by entering your email below.