
- 11
- 60 960
Taylor Lindores-Reeves
United Kingdom
เข้าร่วมเมื่อ 4 ธ.ค. 2022
Welcome to the world of modern web development! My channel is your one-stop destination for mastering cutting-edge web technologies. I am here to simplify complex concepts, share best practices, and help you build future-ready digital applications.
With a deep focus on practical, project-based learning, we provide step-by-step tutorials, insightful tips, and comprehensive guides that cater to both beginners and advanced web developers. Each video is designed to enhance your understanding of core development principles and push your coding skills to new heights.
Whether you want to harness the power of TypeScript's strong-typing, explore the power of Next.js, or dive into other essential web development tools, we have got you covered. Beyond just teaching you how to code, we're committed to helping you understand what it takes to create scalable, high-performance web applications
Subscribe now to join a community of passionate developers and let's start coding the future!
With a deep focus on practical, project-based learning, we provide step-by-step tutorials, insightful tips, and comprehensive guides that cater to both beginners and advanced web developers. Each video is designed to enhance your understanding of core development principles and push your coding skills to new heights.
Whether you want to harness the power of TypeScript's strong-typing, explore the power of Next.js, or dive into other essential web development tools, we have got you covered. Beyond just teaching you how to code, we're committed to helping you understand what it takes to create scalable, high-performance web applications
Subscribe now to join a community of passionate developers and let's start coding the future!
Ultimate Guide: Function Calling with Vercel’s AI SDK RSC & NextJS 14
Join me in this comprehensive tutorial where I guide you through building a powerful crypto chatbot and stats interface with NextJS using Vercel’s AI SDK RSC package. This allows you to stream generative user interfaces to the browser using React Server Components & Server Actions.
I guide you through everything from setting up your environment, installing and configuring tools like TypeScript and Tailwind, and implementing code formatting with BiomeJS. You’ll learn how to handle API keys, manage environment variables, and stream various UI components for a truly unique user experience.
We incorporate tool calling in our AI integration which gives the LLM the ability to decide when and how to call custom functions based on certain conditions, inputs, or data. We then fetch real-time data using Binance and CoinMarketCap APIs to show cryptocurrency prices and stats. We also explore handling data formatting, loading states with skeleton components, and troubleshooting common errors.
This is perfect for developers looking to sharpen their skills in full stack AI development by leveraging awesome tools created by Vercel, NextJS and V0.dev.
Read this article to understand why I think these some of the coolest tools in web development currently: sdk.vercel.ai/docs/ai-sdk-rsc/generative-ui
🔑 Key Resources:
Vercel AI SDK RSC: sdk.vercel.ai/docs/ai-sdk-rsc/overview
V0.dev: v0.dev/
NextJS App Router: nextjs.org/docs/app
Create Next App: nextjs.org/docs/app/api-reference/create-next-app
BiomeJS: biomejs.dev/
Bun JS Runtime: bun.sh/
OpenAI API: platform.openai.com/
👨🏻💻 Source Code: github.com/taylor-lindores-reeves/ai-rsc
📖 Chapters:
00:00 Introduction to AI SDK React Server Components
01:04 Demonstration: Cryptocurrency Price Queries
03:20 Setting Up the Development Environment
05:11 Installing and Configuring BiomeJS
06:17 Integrating ShadCN UI Components
09:31 Setting Up Environment Variables
19:57 Building the Chat Interface
38:36 Creating Custom Hooks for Chat Functionality
47:04 Implementing Form Handling with React Hook Form
51:50 Styling the Chat Component
01:04:31 Handling User Messages and Responses
01:24:39 Setting Up the OpenAI Model
01:26:10 Configuring Initial Bot State
01:27:21 Handling LLM Responses
01:28:55 Implementing Tool Functions
01:33:45 Creating Generator Functions
01:42:33 Fetching Cryptocurrency Data
01:48:48 Building the UI Components
01:52:15 Integrating API Keys
01:54:39 Debugging and Testing
02:14:45 Finalising the Project
02:38:26 Conclusion and Feedback
I guide you through everything from setting up your environment, installing and configuring tools like TypeScript and Tailwind, and implementing code formatting with BiomeJS. You’ll learn how to handle API keys, manage environment variables, and stream various UI components for a truly unique user experience.
We incorporate tool calling in our AI integration which gives the LLM the ability to decide when and how to call custom functions based on certain conditions, inputs, or data. We then fetch real-time data using Binance and CoinMarketCap APIs to show cryptocurrency prices and stats. We also explore handling data formatting, loading states with skeleton components, and troubleshooting common errors.
This is perfect for developers looking to sharpen their skills in full stack AI development by leveraging awesome tools created by Vercel, NextJS and V0.dev.
Read this article to understand why I think these some of the coolest tools in web development currently: sdk.vercel.ai/docs/ai-sdk-rsc/generative-ui
🔑 Key Resources:
Vercel AI SDK RSC: sdk.vercel.ai/docs/ai-sdk-rsc/overview
V0.dev: v0.dev/
NextJS App Router: nextjs.org/docs/app
Create Next App: nextjs.org/docs/app/api-reference/create-next-app
BiomeJS: biomejs.dev/
Bun JS Runtime: bun.sh/
OpenAI API: platform.openai.com/
👨🏻💻 Source Code: github.com/taylor-lindores-reeves/ai-rsc
📖 Chapters:
00:00 Introduction to AI SDK React Server Components
01:04 Demonstration: Cryptocurrency Price Queries
03:20 Setting Up the Development Environment
05:11 Installing and Configuring BiomeJS
06:17 Integrating ShadCN UI Components
09:31 Setting Up Environment Variables
19:57 Building the Chat Interface
38:36 Creating Custom Hooks for Chat Functionality
47:04 Implementing Form Handling with React Hook Form
51:50 Styling the Chat Component
01:04:31 Handling User Messages and Responses
01:24:39 Setting Up the OpenAI Model
01:26:10 Configuring Initial Bot State
01:27:21 Handling LLM Responses
01:28:55 Implementing Tool Functions
01:33:45 Creating Generator Functions
01:42:33 Fetching Cryptocurrency Data
01:48:48 Building the UI Components
01:52:15 Integrating API Keys
01:54:39 Debugging and Testing
02:14:45 Finalising the Project
02:38:26 Conclusion and Feedback
มุมมอง: 12 139
วีดีโอ
NextAuth v5 for Beginners: Simple Server-Side Auth in NextJS
มุมมอง 1.2K4 หลายเดือนก่อน
In this video, learn how to set up AuthJS v5 beta for authentication on the server in NextJS 14. This tutorial covers configuring sign-in and sign-out processes, email-only authentication with sessions, and setting up NextAuth to handle everything on the server. We'll use a database for session management, and explore essential configurations, Prisma ORM integration, and securing pages and API ...
The Easiest Way to Generate Clean NextJS API Documentation
มุมมอง 3985 หลายเดือนก่อน
First of all, sorry for the audio quality... This beginner-friendly tutorial guides you through the process of building a Todo List app using NextJS API Routes with the Next REST Framework package, which automatically generates clean API documentation for each API request. Throughout the video, you'll gain hands-on experience as we code the app's functionality including create, read, update, an...
Mastering Fetch API and Caching in NextJS
มุมมอง 2.1K8 หลายเดือนก่อน
In this video, I guide you through a useful approach to managing the Fetch API and caching in NextJS. I demonstrate how the Fetch API by default caches data, which can be beneficial for reducing server resource load, but may also present obstacles when trying to display real-time data updates. I reveal a workaround that involves setting the cache on a global level, which allows for setting cach...
How to Build an AI Assistant using NextJS (Vercel)
มุมมอง 3.1K10 หลายเดือนก่อน
Throughout this in-depth tutorial, we’ll learn how to build a research paper summariser using OpenAI's Assistants API. The summariser takes in a document as form data and returns a summary of the document as the response. I will walk you through handling file data, form submissions, and responses from the API. We’ll also learn some of the limitations of the current version of the API. If you ar...
NextJS Server-Side Product Modals using URL, Suspense & Fetch
มุมมอง 13K11 หลายเดือนก่อน
Discover how to set up pop-up modals on the server! In this tutorial, learn how to build modals that are fully server-side rendered using Next.js. The video guide walks through how to create a product page by fetching data from a public API, manipulating URL state and using React Suspense for handling loading states. Attention is also given to building a loading UI and demonstrating a convenien...
New React Hooks with NextJS Server Actions (2024)
มุมมอง 1.6K11 หลายเดือนก่อน
Dive into my latest tutorial on the experimental useFormStatus and useFormState hooks! Discover how to enhance your web applications with server-side capabilities, enabling features like comment systems. This comprehensive guide walks you through the installation of these new hooks and demonstrates their potential with a practical example. I tackle the nuances of creating a comment system, show...
Database Session Authentication with Prisma & NextJS App Directory
มุมมอง 14Kปีที่แล้ว
In-depth tutorial on Next-Auth login authentication - you will learn how to protect your pages with authentication using advanced strategies like NextAuth database sessions and Prisma client extensions. Plus, passwordless login for a seamless user experience! 🔥 🔑 Key Takeaways 1. How to set up NextJS app in 2 minutes 2. How to set up a new database and Prisma query layer 3. How to set up NextAu...
Server-side Pagination with NextJS 13 Server Actions
มุมมอง 12Kปีที่แล้ว
Welcome to this in-depth tutorial on setting up SEO-optimised, server-side rendered pagination in Next.js 13.5 using Prisma ORM as the database querying layer. If you're looking to create a listing page or e-commerce shop, this guide is tailored for you. Pagination helps search engines understand your site structure and ensures all your pages are crawled and indexed, which is particularly impor...
NextJS 14 Image Optimisation using Imgix (2024)
มุมมอง 643ปีที่แล้ว
In this comprehensive tutorial, we'll dive deep into the world of image loading by leveraging NextJS's Image component, Imgix, and AWS S3. You'll learn how to create an Imgix Source, set up an S3 bucket, and create an IAM user with the necessary permissions and access keys. You'll also learn how to beautifully integrate these elements using NextJS's Image component with the loader prop and load...
Could you guide us how can we store these chats in our mongodb database? This is the best and the only tutorial exists on vercel ai rsc. Ver well and amazing no doubt about it.
Props is undefined for me? I have the middleware and everything?
This mf just copy pasting the code with no explanations…
Hey bro, You're a good developer, but it was just hard to follow, I couldn't understand it. Just a feedback from my side. Great Efforts though!!!
More content please! That was probably one of the best tutorial out there: Clear with room for real life mistakes so that we can know how to go about debugging stuff.
Thank you so much for you kind words, means a lot. I will be releasing another video soon, schedule has been so busy as of late but I do indeed have something coming 🎉
Thanks
when we get a session within the layout, is it considered best practice? is there any security issue there? Layout not able to change the state i think.
Possibly yes. I've since learned it's probably not best practice to include the session in the layout. Would recommend using it in page or Server Component instead.
@@taylorlindoresreeves I'm still confused on how to integrate database session with nextjs middleware. I found that we can do the session strategy jwt (using the next auth library, but need to split authConfig), but if we do this still we are using jwt not database. What's so far i found that according to the official nextjs doc about authentication, we can use the session management library. But I'm still not knowing how to do this with middleware. Perhaps we can share this info
there are only 3 ways you can get the database sessions working with middleware: 1. You need to set up an edge compatible database. Personally I've tried setting Prisma up but it's a hassle, I've always resorted to the following; 2. Set up a redirect based on the cookie existing in the middleware. You are able to use nextjs cookies() method to get the cookie, and use that as the session. In other words, redirect if the cookie exists. However, production cookies are prefixed with Secure__ so you need to account for that in a production environment. 3. Use nextJS redirect method on the layout or page level, effectively redirecting when the session doesn't exist. Only #1 wraps the middleware in auth(). #2 is just standard nextJS middleware. And #3 does not require middleware. Hope this helps!
@@taylorlindoresreeves yeah might be good to do 1# and 2# i think.
Awesome content. Thanks mate. please stripe subscriptions and stream sdk video calling. for a paid zoom service saas project
That's very specific, but I'll defo do more streaming and also stripe integrations, something I'm very familiar with 👌
@@taylorlindoresreeves Thank you so much
2 months nothing posted 😒
Bro thanks for the prompt, I've been a bit useless. Video editing is insanely time consuming and alongside my business I'm trying to manage it. The next video is going to be worth the wait 💪
Bro make more videos on vercel ai. plzz
Got a massive video coming soon, it includes Vercel AI structured outputs - keep your eyes peeled 👀
@@taylorreeves3642 looking forward to it.
this is by far the best tutorial I've seen on this topic. Great pace and well explained. Thanks!
Amazing content! so cool and straight forward to the topic liked it 💗
this is an amazing tutorial
did you deploy your code to vercel? I make my own and seem to run into timing out errors when deploying
What are the errors? I've often found issues with the AI packages when deploying to vercel. Was able to solve it by adding longer timeouts and force dynamic. Let me know what issues you're facing and I may be able to help.
This a real gem content.👌 Hoping for more nextjs video. Thank you so much.❤
More to come!
I like this speedy tutorial, also it's good as you haven't mentioned the word 'beginner' But I am not sure why people is expecting it to be beginner friendly Also no worries, I could easily read the code :)
Where can I get the callback url after submitting an email?
Fantastic video! I really appreciate it. Thanks a lot!
Using this tutorial i convert this code into recipe finder bot ?? What I can change?
the actions.tsx is the best place to start and then create new UIs in the components folder
Korean windows 11 cannot run bunx it seems endcoing problem. please use npm when you teach tutorial..
Hey can you please make a same video using trpc or t3 stack
Hey, I really like your UI settings. If you can make a video on them or share the json code, that would be amazing!
@@zak_porat hey the theme is Dracula Pro
What vscode theme are you using?
Hey it's called Dracula Pro 👍
Few more questions. After implementing it this way I noticed that my page in the background did a rerender when the searchParams changed, even if I did router.replace instead of pushing the params. Also I wonder what are the pros of doing it this way (besides the js bundle size difference of a single client/server component), instead of just toggling the modal with a provider and passing in the server components by prop? I'd assume a modal would be the ideal usecase for keeping the modal a client component and passing in the server components? I'm asking because I'm not entirely sure.
You could try using window.history.replaceState as this replaces the URL without browser refresh. The main benefit I think is SEO - pretty sure the search engines can pick up the URLs for each product modal when they're server rendered, but not with client components because it uses JavaScript to render the modal.
@@taylorlindoresreeves Thanks. Doesn't seem like you can "wait" executing/fetching from a server component child component until the parent modal client component is opened. It seem as if the modal is a client component, and ServerComponentThatFetches is passed as child/prop it starts fetching its data immediately and does not wait for the modal to show its content. So server modals might be our only option if we have serer components inside the modal that needs to fetch some data upon display.
Around thee 4.10 mark you mention that it's a bit of a technical challenge but definitely still doable to implement server side modals for global modals, but I'm curious how you'd do that let's say for a modal you trigger from clicking a button/icon in a global header, since you have no way of knowing whether search params changed from the root layout? :-)
You can achieve this using middleware to capture the search parameters, storing them in a cookie. This same cookie can then be accessed in the layout at load time and during server‑side rendering.
@@taylorlindoresreeves don't you mean setting them in a header and not a cookie? Just like you do for the pathname? That will opt all routes into dynamic rendering, but that might be acceptable.
github link not working
My bad, it was the incorrect link. Have updated it now!
knowledgeable
Thanks, hope you gained something from my content
There's 0 documentation on credentials provider + database session. When I asked the creator of AuthJS he told me there never will be because he doesn't like it and I should just use JWT. You seem well versed in what is undoubtedly the worst documented auth library in the world lol, so it would be extremely helpful if you could make a video about credentials + database session setup. It's really hard for me to understand as a newer developer since it's all abstracted away and I don't know how to implement the session logic.
Yeah, I've set up credentials across multiple projects so I certainly will create a video on that. It requires a few workarounds because as you said, the author doesn't want you to use credentials and it's obvious when trying to configure it, you have to implement a few hacks. Video will come soon. Thanks!
@@taylorlindoresreeves No man, THANK YOU! Coming from Laravel where everything is batteries included, setting up an actually useable nextJS environment with authentication is tough. So far I've had great success using lucia auth for database sessions + credentials, but I'd like to learn how to do the same in authJS.
Love this kinda content which is so natural that you didnt even bother editing the part where you missed importing Zod. Inspired me haha to not take my mistakes very seriously and get discouraged as a beginner
Absolutely 👍 I make mistakes all the time 😅 it's part of being a programmer! Enjoy the journey 👨💻
Great Tutorial Taylor ! Thank you. Hope you continue with more guides. Has anyone run into bun issue halfway through with error message: "ReferenceError: Can't find variable: TextDecoderStream" ? with with streamUI() function in actions file . It seems to work on Node but not on Bun. The workaround seemed complicated to me on Bun
Thanks, no I haven't unfortunately. Hopefully someone else knows about this issue 🤔
You have an apple keyboard :
Good call! 👍
Wow thanks very helpful
Thanks for watching :)
Great thanks for sharing
No worries, hope you enjoyed it
To the moon 🤘H
Exactly 🚀🌑
Thank you, great video! Can you please do a video about Credentials Provider with database sessions?
Sure can!
Thumb down, too slow. Might be right for some junior devs. But for me this is so slow, watching you install packages and remove icons 😮😢.
Yeah man, I felt feedback on my previous videos was I was too fast, not running through each step of the code. But I guess I could try a balance. Try on 2x 👍
As a senior dev do you know there is 2x speed for videos too
@@taylorlindoresreeves I think the video does not need to be cropped and accelerated, everything is clearly explained
It is slow but you can just look at the source code or forward 2x. I think still a great job!
Thank you for the video . Keep going bro !
Thanks man!
great tutorial💯...is it possible to do a recursive function call with this? for instance it calls the get_crypto_price function and then uses the result to call a different function? thanks for the content
Hmm you might be able to do it by updating the AI state with another system message that asks the LLM to run another function. What’s the use case out of curiosity?
My understanding was Next.js does optimization inherently within its Image component, is Imgix more effective at compression?
For sure, NextJS does indeed do some optimisation. But with the loader prop for the image component you get the benefit of handing off your images to an external source such as S3 bucket, which is always beneficial in terms of performance. But with Imgix as an additional caching and compression layer, you get fine grained control of your images, all while having them stored in an external source. Technically you could store 20mb images and not have to worry about how to handle compression and optimisation in the business logic or frontend layer image component (I think NextJS uses Sharp). You simply use the imgix URL and provide it with format and compress query parameters.
@@taylorlindoresreeves That makes sense! Do you know if there is a similar workflow that can be used alongside Expo’s Image component?
@@salieflewis hmm I’m not sure honestly, I don’t have experience with Expo. Good luck 🤞
Hey, I have noticed your code shows source in every paragraph. But I couldn’t understand how you managed to do that. Would you explain it to me or tell me when did you code that part?
I think it’s VSCode extension called GitLens 👍
Excellent video! keep em coming, cheers
Thanks, will do!
Beautiful Content🔥🔥 Deserve a lot more subs❤❤
Thank you, appreciate the comment!
Is this cache for a specific user-session or shared between every user? I'd like to understand if another user have accessed your site if he would trigger a new request or not
For a REST API it’s cached globally for all users. However, if using a server action, fetch requests are not cached.
Do you have an updated version by any chance for Vercel's latest versions?
Yeah I do, I’m just re-publishing. I forgot to add the intro to the final edit. Will be released in 1-2 hours. I think it’s the best video I’ve done. Hope you like it.
Thank you, this is great content ! ;)
You are very welcome friend
thanks for tuto. No offence, hovewer some code looks overwhelmed. For example this: const currentPage = Math.min(Math.max(Number(page), 1), totalPages); Why can not you just use "page" variable instead, why you doing those calculations (I know that it's edge case handling)? Would be nice if you would explain those parts in your videos as well because it is not obvious at the first look. Now the biggest part of your video you just copy pasting some code that makes me feel that you just reusing someone else solution. It just my thoughts that maybe can improve your content :)
No worries. I am definitely going to spend more time in future videos explaining things a bit better (I am new to this). With regards to the copy pasting, I will try to do more coding on the fly - it just takes significantly longer so my concern is that people will get bored watching me code easy frontend stuff. Thanks for the feedback.
This server sided thingy is out of hand. What next ,server sided client browser
Hi! is there a way to switch assistants?
You basically create the assistant. The assistants API has been updated significantly since I made this video. I will make another on the latest version (v2) and function calling.
You skipped over the entire coding of the pagination component...
Yeah I actually just re-used a component from v0.dev as it was quicker option. I am getting a lot of feedback to say I should stop re-using and just code the damn things, so I will take this on board and hopefully improve in future vids. Thanks for the feedback.
Bro. I appreciate your knowledge, but read the room. How do you expect people to follow what you are doing when you are not only making fast cuts, but completely skipping entire code creations steps that are vital to finish the project. You also never acknowledged when you made mistakes and did not show your changes to the code when you did. Constructive criticism: SLOOOOWWWWW DOOWWWWWWNNNNN. Make part 1 and part 2 if you need to. :)
Good point, thanks for the feedback. I am going to do more on-the-fly coding and fixing - my concern is it bores people watching me debug, which is why I try and do things quickly. But a lot of feedback I am reading just now is similar to this, so I will do more full-length, less edited videos where I go through the whole process and don't re-use any code or components.
cool.. explantion