Lee starts with a simple JSON structure for a profile: a name, avatar, links with titles and URLs, and social accounts. He considers optional images for links and notes that keeping content separate from the application would let people update it without redeploying.
Building a Linktree Clone!
Lee Robinson, a developer at Vercel, builds a Linktree-style page with Next.js, React, Tailwind CSS, and Vercel Edge Config during a live coding session with audience questions.
He sets up Tailwind in a Pages Router project, then builds a profile header, link cards, and social icons. The styling includes a gradient background, responsive spacing, and optional link images. For external destinations, he uses ordinary anchor tags rather than Next.js Link.
Lee migrates the page to Next.js 13’s App Router, creating a root layout and moving the route into `page.tsx`. He explains that the layout replaces `_app` and `_document`, and that server components run on the server by default. He also notes that server components can reduce client-side JavaScript.
He moves the JSON profile into Vercel Edge Config and reads it from an async server component. The migration requires pulling environment variables locally and adding types for the returned data; Lee mentions schema validation as another option. He adds a fallback redirect for missing data.
Lee finds that the production build treats the Edge Config data as static, so he sets `dynamic` to `force-dynamic` to fetch fresh data on each request. He explains that the App Router can support static, dynamic, and revalidated data at the fetch level, though the demo makes the whole page dynamic. He deploys the finished profile page.
Takeaways
- Keep profile content in a data store so updates do not require redeploying the application.
- Use standard anchor tags for external links and Next.js Link for navigation within the app.
- In the App Router, server components can fetch data directly without client-side fetching logic.
- Check production behavior when choosing caching or dynamic rendering; development behavior may differ.
- Add explicit types or schema validation when remote JSON replaces a locally typed data file.
Mentioned in this talk
Search inside this talk
What was claimed 8
- usesNext.js 15 RC uses React 19 RC under the hood
“Next.js also released the RC version of Next.js 15, which uses React 19 RC under the hood”
3:09inReact Universe BriefingYouTube Verified3 sources· Talk
- feature
Turbo: Provides faster hot module reloading and faster updates after saving.
“which should give you faster hot module reloading”
YouTube Unverified1 source· Talk
- uses
“I'm using Turbopack through Next.js 13”
YouTube Unverified1 source· Talk
- feature
Next.js: The App Router uses Server Components by default and supports server-side data fetching.
“everything in app runs on the server by default as a Server Component”
YouTube Unverified1 source· Talk
- featureVercel Edge Config: Stores JSON and configuration data that can be updated without redeploying.
“You can update it very quickly without redeploying to fetch that data”
YouTube Unverified1 source· Talk
- integrates with
Next.js integrates with Vercel Edge Config
“inside my page, I can import this and get a value from the key-value store”
YouTube Unverified1 source· Talk
- uses
“the actual Linktree does use Next.js”
YouTube Unverified1 source· Talk
- feature
Next.js: The App Router can mix static, dynamic, and revalidated data fetching at the data-fetch level.
“this now happens at the fetch level, at the data-fetch level”
YouTube Unverified1 source· Talk
Related talks
1:21:37
50:44
1:57:48
25:41
18:46
4:21

