Today’s issue: What John Wooden taught me about FFmpeg, how Shopify really feels about React Native, and cake that tastes like Jason Bourne.
Welcome to #359.
Never go full Vercel
It was right in front of us the entire time: the black-and-white triangle logo, the open-source React (Native) framework – and now, Expo has just launched EAS Hosting and gone full Vercel.
Ok, that’s a joke. EAS Hosting is unique because it’s the first end-to-end deployment solution that’s designed to just work across all platforms. It’s also the culmination of years of work and innovation by the Expo team. Let’s zoom in.
How we got here: Expo released Expo Router v1 back in Feb 2023 to enable developers to build server-driven apps for Android, iOS, and web using the same codebase. Since then, they’ve launched API Routes for creating server endpoints, secure environment variables, and other features as they build towards the holy grail of Universal React Server Components.
These server features are powerful, but they can make deployment significantly more complex. And traditional website hosting services can’t always address these complexities – particularly for things like version control, routing, and observability.
That’s where EAS Hosting comes in (this sounds like an ad but I promise you, sadly, we’re getting no money from this). It gives you everything you need to instantly deploy and scale server-driven React Native apps, universal API routes, React websites, and more.
It’s still in developer preview, but let’s take a look at some of the key features they’ve already introduced:
One-command deployments for Expo web apps with eas deploy
, either in server
mode or static
mode.
Unlimited Deployments with paid plans, so you can deploy many versions of your API and tie them to your native apps’ released versions.
Detailed insights like runtime crash reports, requests, and logs.
Built on Cloudflare Workers for best-in-class scalability and reliability.
Like the Expo framework itself, this new hosting product will probably be mostly used by cross-platform mobile apps at first. But it could quickly become an attractive option for all React apps and websites, especially as Expo builds out Universal RSC.
Bottom Line: The battle over who gets to host your React app is heating up. May the best triangle win.
![]() ![]() ![]() ![]() |
When you build your entire backend with TypeScript
Their all-in-one backend platform gives web developers everything you need to build, launch, and scale a production-ready backend.
The best part? It lets you use TypeScript to write queries as code that are automatically cached and realtime, with an ACID-compliant relational database.
And that’s just the beginning. With Convex, you also get:
Try one of their Quickstarts – to instantly get up and running with React, Next.js, TanStack Start, Vue, or pretty much any other framework.
Their powerful Barcode API is designed to add seamless and efficient barcode reading capabilities to your applications.
function deepCopy(obj) {
return JSON.parse(JSON.stringify(obj));
}
const user = {
name: 'Tyler',
age: 32,
created: new Date(),
}
const copiedUser = deepCopy(user)
Hassan (aka Nutlope) created Agent Recipes, which is a website that shares some common AI agents with code examples – not a list of cake recipes that taste exactly James Bond and Jason Bourne.
The Chrome 133 beta comes with a bunch of new features like scroll-state container queries, text-box trim, and new popover improvements.
The Clerk team wrote this in-depth guide on how to build a session-based auth experience into a React app with Express. It’s super helpful, but wake me up when they make one for MooTools. [sponsored]
Mustafa Ali wrote about 5 years of using React Native at Shopify.
Jim Nielsen wrote about gotchas in naming CSS View Transitions. It’ll help you avoid crying in the shower like Kylie Jenner did after she named her son Wolf.
The new React Aria release comes with support for CSS transitions in their overlay components, a new Autocomplete component, and more.
DoomPDF is exactly what it sounds like – a port of the Doom game that runs inside a PDF file. Also known as a Hacker News moderator’s wet dream.
CarbonQA provides high-quality QA services, without wasting any of your team’s engineering time. Their US-based testers will break your app repeatedly, work directly in your tools, and do all the manual testing you hate doing yourself. [sponsored]
Learn Yjs is an interactive tutorial series that teaches you how to build realtime collaborative applications with the Yjs CRDT library.
FFmpeg by example is a website that showcases all the unique ways to use FFmpeg. I believe it was John Wooden who first said that “the best leaders always FFmpeg by example.”
function deepCopy(obj) {
return JSON.parse(JSON.stringify(obj))
}
const user = {
name: 'Tyler',
age: 32,
created: new Date()
}
const copiedUser = deepCopy(user)
A deep copy of an object is a copy whose properties do not share the same references as those of the source object from which the copy was made. One approach for deep copying in JavaScript is using JSON.stringify
and JSON.parse
.
This kind of works in our case, but it will convert created
to a string. To prevent that, you can use window.structuredClone
instead (assuming browser support).
function deepCopy(obj) {
return window.structuredClone(obj)
}