From 0 to Production - The Modern React Tutorial (RSCs, Next.js, Shadui, Drizzle, TS and more)

แชร์
ฝัง
  • เผยแพร่เมื่อ 2 ก.พ. 2025

ความคิดเห็น • 699

  • @t3dotgg
    @t3dotgg  9 หลายเดือนก่อน +250

    UPDATES:
    - create-t3-app now uses latest Next, which should fix some bugs with hot reloading on parallel routes
    - MAKE SURE YOU USE THE DEFAULT PREFIX WHEN SETTING UP VERCEL POSTGRES
    - Clerk Core 2 is no longer in beta! If you just `pnpm install @clerk/nextjs` you will have this version now :)
    Oh also - GITHUB REPO IS HERE: github.com/t3dotgg/t3gallery

    • @mshivam019
      @mshivam019 9 หลายเดือนก่อน

      Should I use dependency injection with posthog? if in case I want to migrate to something like mixpanel?

    • @mazwrld
      @mazwrld 9 หลายเดือนก่อน

      💜

    • @kynjal23
      @kynjal23 9 หลายเดือนก่อน +3

      when will the t3 stack updated

    • @georgepetroff2364
      @georgepetroff2364 9 หลายเดือนก่อน

      Thanks Theo, amazing tutorial as always ❤Recently you are bringing back the vibes of the time when pokemon roundest was around 😁would be amazing bringing new updated version of it tho'. UPLOADTHING is a game changer, finally something more about it too

    • @JordanGigg-07
      @JordanGigg-07 9 หลายเดือนก่อน +5

      Heya!!!! Thank you for the video!!! it was super helpful. You said at the start you would explain why no TRPC. Are you able to? Also, a follow on for this where you show how to for production state management / the zustand setup would be really cool:) Thank you for your content and the effort you put in!! your contributions to the community are never ending and appreciated greatly by me and so many others!!!!

  • @R0cky0
    @R0cky0 9 หลายเดือนก่อน +195

    Yo, I want to appreciate for the amount of work and effort you put into this also by not putting up a paywall and choosing not to take the easy path. Making this available (for free) to the community is truly commendable. Your work is worth so much more than those who charge for courses however are much less informative than this. A million thanks!

    • @carvierdotdev
      @carvierdotdev 9 หลายเดือนก่อน +1

      Yes and yes. I completely agree with you. I feel that we are very lucky to have such incredible people in the JS community with such background..

  • @embedyt
    @embedyt 9 หลายเดือนก่อน +212

    Timestamps
    00:00 - Intro
    00:47 - Who, What & Why
    03:30 - Scaffolding the project
    06:12 - Creating our todo list
    08:39 - Creating repo & pushing to GitHub
    10:23 - Linking our repo to Vercel
    11:00 - Fixing the Environment Variables
    12:07 - Deploying to Vercel
    13:32 - Setting up uploadthing for images
    15:40 - Displaying our mock data
    17:35 - Next.js Layouts Explained
    19:45 - Scaffolding our UI
    21:47 - Tidying up builds & enabling turbo
    24:18 - Setting up our Database
    35:14 - Dynamic Routes
    37:40 - Changing our database schema
    43:00 - Adding authentication
    54:04 - Setting up image uploading
    01:04:10 - Connecting users to images
    1:09:07 - What's next (Take break here)
    1:09:41 - server-only & React Taint
    1:17:18 - The next/image Component
    1:22:58 - Error management w/ Sentry
    1:32:07 - Image page w/ Parallel Routes
    2:04:15 - Fixing the upload button
    2:11:05 - Setting up toaster w/ shadcn/ui
    2:26:40 - Adding analytics w/ PostHog
    2:38:21 - Delete button w/ Server Actions
    2:49:52 - Adding rate limits w/ Upstash
    2:55:05 - Redeploying to Vercel
    2:56:44 - Locking down uploads
    3:00:59 - Challenges for the Viewer
    3:02:35 - Outro

    • @t3dotgg
      @t3dotgg  9 หลายเดือนก่อน +58

      THANK YOU

    • @akinoreh
      @akinoreh 9 หลายเดือนก่อน +3

      @@t3dotgg It'd be nice if this was also a playlist with shorter videos. It's easier to consume that way. Personally, I won't be watching this in one go. While having chapters help, it's still one video.
      Haven't started yet, but I'm curious how beginner friendly this is. While I'm good at JS, I haven't tried any front-end library/framework (although, I keep tabs on them). So I think it requires some kind of leap from plain JS to front-end libraries. I currently have that mental gap. Hope this helps a little.

    • @RogueTravel
      @RogueTravel 9 หลายเดือนก่อน +12

      @@akinorehI’d be so sad if this was broken up into a playlist.

    • @akinoreh
      @akinoreh 9 หลายเดือนก่อน +1

      @@RogueTravel Notice the "also". Besides, what's the advantage of a single video (contrary to a playlist)?

    • @JSLegendDev
      @JSLegendDev 9 หลายเดือนก่อน +11

      @@akinoreh As someone who makes programming tutorials (JavaScript gamedev tutorials), there are big negatives with publishing in multiple parts. Here are the main two :
      - Next parts will always make progressively less views than the first part giving the impression that your channel is dying.
      - It clutters your channel and makes it hard to find content.

  • @lukem121
    @lukem121 9 หลายเดือนก่อน +406

    Wow nice, I have been looking forward to a video that isn't you reading an article or documentation. It's nice to see some actual programming 😁 Thank you for the vid!

    • @Amruth
      @Amruth 9 หลายเดือนก่อน +18

      Honestly, this is the kind of content I subscribed for. Really respect Theo for putting out content like this for free that's extremely useful and especially targeted towards intermediate devs. A lot of the content is only for beginners.

    • @RobertMcGovernTarasis
      @RobertMcGovernTarasis 9 หลายเดือนก่อน +3

      Indeed, only came across Theo a little while back and only ever seen him as a talking head. Not an actual coder, so this was quite informative

    • @Joseph-Codes
      @Joseph-Codes 9 หลายเดือนก่อน +1

      Watch his lives

    • @good_eats876
      @good_eats876 9 หลายเดือนก่อน +1

      Amazing comment !!!!!

    • @crowlsyong
      @crowlsyong 9 หลายเดือนก่อน +1

      I agree

  • @qwerasdfhjkio
    @qwerasdfhjkio 9 หลายเดือนก่อน +466

    "primeagen still had a job"🤣

  • @oxnull738
    @oxnull738 9 หลายเดือนก่อน +21

    Finally, a video where you're not just reading from an article.

  • @lasso01
    @lasso01 9 หลายเดือนก่อน +10

    Amazing content. I don't usually watch that many tutorials anymore, but this feels exactly what i needed to hone my skills with all the new stuff. Thanks Theo!

  • @MrMazvaz
    @MrMazvaz 9 หลายเดือนก่อน +13

    Quick tip using as a modal. To style the backdrop, just use the ::backdrop pseudo-class. In tailwind it would be className="backdrop:bg-zinc-900/50". This way you dont have to worry about the margins and having it cover the entire screen etc. The backdrop is already there for you

  • @Fanaro
    @Fanaro 9 หลายเดือนก่อน +10

    Crazy that a master software engineer such as Theo has infra this accessible and simple.

  • @zilvinas5130
    @zilvinas5130 9 หลายเดือนก่อน +6

    Just finished tutorial. Gotta say, gallery app was, in my opinion, an amazing choice for a project to showcase RSCs. For me, handling file uploads, storage, all the authentication that comes with it, was always a stressful experience and seamless integration this project provides is an amazing resource.
    10/10. Keep up the amazing work, Theo!

    • @divyanshrawat2859
      @divyanshrawat2859 9 หลายเดือนก่อน

      bro my drizzle sudio is not opening at 4983 instead its showing 404 error , can you help ?

  • @madhudson1
    @madhudson1 9 หลายเดือนก่อน +19

    haven't watched it yet, but the fact that you've put this out for free is incredible

  • @ErikTheHalibut
    @ErikTheHalibut 9 หลายเดือนก่อน +4

    Theo, please keep making tutorials like this! This is extremely helpful as a learning dev.

  • @M.G.Simard
    @M.G.Simard 7 หลายเดือนก่อน +3

    Keeping it short; for anyone running into a build problem near 27:00 and you followed instructions not to rename POSTGRES_URL (and you might be paused wondering if it's fine to just replace all instances of "DATABASE_URL" to "POSTGRES_URL" in your project). He does go and fix that at around 30:00. Still useful for anyone who might pause vid after running into issue trying to fix it themselves before it's presented 3min later.

  • @23rbnHD
    @23rbnHD 9 หลายเดือนก่อน +10

    0 to Production with Full Test Coverage. That would be such an interesting follow up. Breaking down how each of the best practices and starting points your tutorial covers would fit into a CI testing stack (end to end and unit). That said, so far, so really really helpful. Thanks a bunch.

    • @catalinpreda4666
      @catalinpreda4666 5 หลายเดือนก่อน +2

      Theo doesn't really do TDD iirc - he thinks shipping code fast >>> maintaining both the codebase & tests (his mindset is very "move fast and disrupt this is sillicon valley let's make money" so he values good analytics and deploying a fix quickly more than deploying tested code; if he had a background in banking, medical or other sensitive software he might think differently)
      A good start is keeping your UI code decoupled from business logic (the new server actions seem useful for this) and have some Jest unit tests for each action. The better you are at separation of concerns the easier it is to test logic. There are libraries to test UI renders how you want or mock interactions and test a user journey end to end, but I find those very easy to break and a lot of overhead. With UI I think easily doing "prototype -> get feedback -> redesign" is very valuable so you have to balance if UI tests are adding value or it's just a development burden

  • @joshuaborseth
    @joshuaborseth 9 หลายเดือนก่อน +57

    The hair covering your face is giving me OG roundest Pokémon theo vibes

    • @t3dotgg
      @t3dotgg  9 หลายเดือนก่อน +20

      This was semi intentional

    • @l-Il.-._.-.lI-l
      @l-Il.-._.-.lI-l 9 หลายเดือนก่อน +1

      Keeping it real for the nerds

    • @vitorwindberg4212
      @vitorwindberg4212 9 หลายเดือนก่อน

      damn the roundest pokemon nostalgia hit me with this comment

  • @CharlieBelvo18
    @CharlieBelvo18 9 หลายเดือนก่อน +5

    Incredible tutorial, maybe the best overview I"ve ever seen to build and deploy a webapp. Thanks Theo for showing the rest of us the way

  • @codewithantonio
    @codewithantonio 9 หลายเดือนก่อน +54

    Lets goooooooooo

    • @t3dotgg
      @t3dotgg  9 หลายเดือนก่อน +32

      I think you released 20 tutorials since I started planning this one 🙃

    • @DMZT_dhruv
      @DMZT_dhruv 9 หลายเดือนก่อน +6

      Thanks to both of you, I was able to learn coding because of you guys, thanks my real teachers🙇🏻‍♂️

  • @psrs985
    @psrs985 7 หลายเดือนก่อน +3

    Just finished watching the whole video and doing almost all things. As a noob it felt like this is so advanced code for me but now I got introduced to the analytics and ratelimiting

  • @Oseille
    @Oseille 9 หลายเดือนก่อน +3

    just finished this awesome tutorial, the modal is not closing when deleting the image from the photo modal, but it works from the photo page. very valuable content to kickstart nextjs learning.

  • @beesilva9373
    @beesilva9373 8 หลายเดือนก่อน +4

    Amazing tutorial! As a next.js noob this is honestly gold, and I learned a ton. Thank you!

  • @nikensss
    @nikensss 9 หลายเดือนก่อน +3

    6:23 right! so let's build a todo-list app first! haha Great video, I was actually considering asking somewhere if there were plans for a tutorial after the recent changes in so many technologies and platforms. Thanks a ton for videos like this. Introductory tutorials are nice, but at some point people start needing next level content, and this is about it!

  • @johnbauer9907
    @johnbauer9907 9 หลายเดือนก่อน +4

    Thank you. I dont use any of this stack except for typescript and it is nice to see the start to finish...

  • @woet7891
    @woet7891 9 หลายเดือนก่อน +3

    Love it! Was needing this a lot 🙏🙏 Most tutorials out there tend to leave important stuff out that's needed for any decent production application like the error monitoring, event tracking and rate limiting so it was super useful to see how you're tackling this

  • @Herxh428
    @Herxh428 9 หลายเดือนก่อน +10

    I forget your name and searched mustache man reactjs funny part is it showed your video in third 😂😂

  • @thek4in
    @thek4in 3 หลายเดือนก่อน +9

    1:00:34 i could get the generic upload buttons only to work when i added "use client" at the top of the utils/uploadthing.ts file.
    alternatively, importing the Buttons directly from the library worked as well.
    Generally, i'd recommend doing this tutorial without --turbo, since it produced a lot of errors for me while more and more features were added.
    Thank you for this amazing tutorial. I learned a lot about how things work together

    • @arumals3995
      @arumals3995 3 หลายเดือนก่อน

      Thanks, you solved my problem.

    • @mangoherpson
      @mangoherpson 2 หลายเดือนก่อน

      This fixed one error but the button just became stuck on loading indefinitely for me, I followed the tutorial to a T. I guess thats it.

    • @ManuelPeyon
      @ManuelPeyon 2 หลายเดือนก่อน

      solved my problem as well thank you!

    • @chinodanxd
      @chinodanxd 2 หลายเดือนก่อน

      Jesus christ. Thank you so much I was being unable to understand the reason for this error. People like you rock. Don't ever stop being you.

    • @judeboachie
      @judeboachie หลายเดือนก่อน

      @@mangoherpson Did you every find a fix for this?

  • @genegade
    @genegade 5 หลายเดือนก่อน +6

    @31:50 hit a roadblock here. You need to change the line at the top of app/page.tsx from import { db } from "@vercel/postgres";
    to import { db } from "../server/db";
    (which does the vercel import)

  • @jaafarskafi1
    @jaafarskafi1 6 หลายเดือนก่อน +1

    Thanks!

  • @wolpumba4099
    @wolpumba4099 8 หลายเดือนก่อน +9

    "From 0 to Production - The Modern React Tutorial" - Video Summary
    This tutorial shows how to build a full-stack image gallery app with authentication, image uploading, and other production-ready features.
    *Project Setup & Deployment*
    * *3:30**:* Scaffolds the project using `create-t3-app` with Next.js, TypeScript, TailwindCSS, Shadcn/UI, Drizzle ORM, and Vercel Postgres.
    * *8:39**:* Initializes a GitHub repository and links it to Vercel for automatic deployments.
    * *13:32**:* Uses UploadThing for image hosting and retrieves initial mock image URLs.
    *Basic UI & Database Integration*
    * *15:40**:* Creates a basic UI with a top navigation bar and displays the mock images.
    * *17:35**:* Explains Next.js layout system and implements nested layouts for the app.
    * *24:18**:* Sets up a Postgres database on Vercel and connects it to the app using Drizzle.
    * *35:14**:* Populates the database with the mock images and displays them dynamically on the homepage.
    * *35:14**:* Implements dynamic routes to ensure the page content updates when the database changes.
    *Authentication & Image Uploading*
    * *43:00**:* Adds authentication using Clerk with GitHub and Google sign-in options.
    * *54:04**:* Restricts image viewing on the homepage to authenticated users.
    * *54:04**:* Integrates UploadThing for image uploading with client-side and server-side components.
    * *1:04:10**:* Persists uploaded images to the database and associates them with the logged-in user.
    * *1:09:41**:* Explains and implements the "taint" concept to prevent sensitive data from reaching the client.
    *Production-Ready Features*
    * *1:17:18**:* Replaces standard image tags with `next/image` for automatic image optimization.
    * *1:22:58**:* Integrates Sentry for error monitoring and demonstrates how to capture and view errors.
    * *1:32:07**:* Implements an image details page with parallel routes for a better user experience.
    * *2:04:15**:* Styles the upload button using Shadcn/UI components and adds a loading spinner.
    * *2:26:40**:* Integrates PostHog for analytics and tracks user actions like image uploads and deletions.
    * *2:38:21**:* Implements a delete button using server actions to remove images from the database.
    * *2:49:52**:* Adds rate limiting using Upstash to prevent abuse of the upload functionality.
    * *2:56:44**:* Restricts image uploads to users with specific permissions set in Clerk metadata.
    *Challenges for Viewers:*
    * Fix the page layout for images with different resolutions.
    * Implement image selection on the gallery page with state management (using Zustand).
    * Add infinite scroll to the gallery page.
    * Implement folders or albums to organize images.
    i used gemini 1.5 pro

    • @continuouslearner
      @continuouslearner 7 หลายเดือนก่อน

      What was the exact prompt you used?
      it only gave me below summary.
      This video is a tutorial on how to build a production-ready React application using the T3 stack.
      The video is divided into the following sections:
      Introduction (0:00 - 2:02)
      Tech Stack Overview (2:02 - 10:22)
      Sponsors (10:22 - 12:12)
      Setting up the project (12:12 - 14:47)
      Installing Dependencies (14:47 - 19:17)
      Setting up PostHog (19:17 - 25:22)
      Data Model (25:22 - 27:22)
      Conclusion and Challenges (27:22 - 3:03:12)
      I hope this is helpful!

    • @wolpumba4099
      @wolpumba4099 7 หลายเดือนก่อน +1

      @@continuouslearner i can't find the exact prompt now. but typically i use two prompts in sequence, something like: (1) "i don't want to watch the video. create a bullet list summary: ". (2) "add starting (not stopping) timestamps"

    • @continuouslearner
      @continuouslearner 7 หลายเดือนก่อน

      @@wolpumba4099 thanks, where you say , what does that mean? i.e are you uploading the transcript along with asking the prompt?

    • @wolpumba4099
      @wolpumba4099 7 หลายเดือนก่อน +1

      @@continuouslearner yes, I just copy paste the transcript. You can find a link in most TH-cam descriptions. but keep in mind that a three hour transcript hits the boundary of what is possible with Gemini 1.5 pro. In my experiments Gpt4 was even worse and typically gave bad summaries for more than 1 hour videos

    • @continuouslearner
      @continuouslearner 7 หลายเดือนก่อน

      @@wolpumba4099 thank you, its so much clear now. For some reason i thought/was expecting gemini 1.5 pro to do both the transcription and then the summarization and was wondering why its output was so poor (not detailed enough) compared to your original comment above. A bit disappointed that 1.5 pro cant pull the transcription straight from youtube and we have to explicitly, manually, provide it ... but at least now i know how to get the detail. Much appreciated.

  • @zainraz4
    @zainraz4 9 หลายเดือนก่อน +11

    YESSS BEEN WAITING FOR THIS!! Can’t wait to watch and follow along!

  • @bossrabbit
    @bossrabbit 6 หลายเดือนก่อน

    This was really helpful, thank you so much 🙏 Been sleeping on TypeScript, but now a fully signed up convert. Dropped a paid subscription to uploadthing, truly a thing of beauty. You Sir are a gentleman and a scholar.

  • @julietaparpinelli7162
    @julietaparpinelli7162 9 หลายเดือนก่อน +1

    This video is just amazing! Thank you so much!! I appreciate that we can all see you coding and facing real-life errors and being honest about them. 👏

  • @jessequartey
    @jessequartey 9 หลายเดือนก่อน

    Watching this, i realize how much influence Theo has. I use most of these technologies in my production apps. And the startups i build for might keep using them for a long time too. I hope they are paying you a lot of money for the market you bring.

  • @Matiast9477
    @Matiast9477 5 หลายเดือนก่อน +1

    1:36:40 (Parallel Routes section)
    If your page changes when clicking the link instead of printing the ID on the page
    -Make sure you have the default.tsx file
    -Restart the dev server (what worked for me)

  • @mchisolm0
    @mchisolm0 9 หลายเดือนก่อน

    Thanks again for the tutorial. Finally made it through and I feel I have learned a lot. Appreciate your time and the sponsors' willingness to partner with you to make it happen.

  • @garcipat
    @garcipat 6 หลายเดือนก่อน

    one of the biggest ad turorial i have seen so far. i learn nothinh i would expect from this video.

  • @Szachrajek
    @Szachrajek 9 หลายเดือนก่อน

    Theo, just four words: you made amazing tutorial!!! Thank you

  • @kaizenza
    @kaizenza 6 หลายเดือนก่อน +1

    Great video! Love it! Would love to see a video on how you manage DEV to PROD in Vercel and any lessons learned you have experienced.

  • @jhkmatthews
    @jhkmatthews 9 หลายเดือนก่อน

    thanks Theo, great vid!
    at 1:40:45 - another approach that I like for breaking down changes into smaller commits is using VSCode Source Control tab to stage changes file by file (or line by line) for each commit

    • @vitorwindberg4212
      @vitorwindberg4212 9 หลายเดือนก่อน

      yeah you can use terminal for that but I also use vscode interface for that, super useful and a lot easier to visualize

  • @metatronicx
    @metatronicx 9 หลายเดือนก่อน

    Thank you Theo for this video.
    Thanks for showing us how we should manage and succeed in every project. Y'all dev brothers, never forget to-do lists. They are crucial

  • @dehrk9024
    @dehrk9024 9 หลายเดือนก่อน

    idk what it is but theos videos make me so ready & awake & never give up never back down

  • @webapple1
    @webapple1 8 หลายเดือนก่อน +6

    if any of you having issues with parallel routing - firstly make sure you have the default in the @modal folder , then the page in the [id] folder. secondly , you will need to restart your dev server.

    • @LukasK-rt8mv
      @LukasK-rt8mv 4 หลายเดือนก่อน

      restarting did it for me! thanks! spent hours trying to figure this out.

    • @bench500lb4
      @bench500lb4 4 หลายเดือนก่อน

      Thank you! It works now

    • @lockitdrop
      @lockitdrop 4 หลายเดือนก่อน

      Mucho gusto good sir, didn't think to restart the dev server.

  • @Pixelume
    @Pixelume 9 หลายเดือนก่อน +2

    Theo you are a ROCKSTAR! I can barely contain my excitement to work through this tutorial. Thank you!

  • @bkschatzki
    @bkschatzki 6 หลายเดือนก่อน +5

    For those having an issue with it trying to getImage of the image you just deleted: check whether it only applies to parallel routes or also after hard navigating to that image. Ask yourself why that is. Search "next 14.2 parallel routes redirect workaround". The default.tsx just needs a page.tsx also returning a null. This has to do with how Next handles soft navigation. A few behaviors must have changed since this video was made, and the docs show a slightly different setup for the slot.

  • @kirso
    @kirso 9 หลายเดือนก่อน

    Effin missed this, I really loved your beginnings with Pokemon app. In fact I claim that you sparked the Poimandres revolution in VSCode setups. I wish you'd do these videos more often!

  • @longcatza
    @longcatza 7 หลายเดือนก่อน +10

    Not sure if anyone has come across this issue but: Whenever I delete and image and I redirect back to the root path redirect("/"); and then I want to click on another image to open it in the "modal" I can see the url change but nothing happens in the UI (i..e I am trying to open image on @modal/(.)image/[id]/ again, the screen just stays the same (homepage screen). I have to do a full page reload for it to work... not sure what I did wrong but struggling to debug this.

    • @cosminvoinopol705
      @cosminvoinopol705 6 หลายเดือนก่อน +7

      Came to comment cause I had a similar issue, I imagine it was the same cause but you noticed a different behaviour due to different versions.
      The root problem is that redirect("/") does not cause the modal to dismiss itself properly, even though the path has changed and it should not stay up. I had this problem in 2 versions. In Next 14.2.4 the modal completely stays up even though redirect was called and the path is changed. So it's not dismissed at all. In Next 14.2.3 what you're describing happens: the modal is dismissed, but something breaks and we cannot open other images to see their modals.
      I downgraded to 14.1.4, I think this is what Theo had in the video. It works. So it's a Next bug. For others having problems with deleting, try another Next version until it works. Easiest fix, unless you need specific Next versions.
      And a side note. Though I can't remember what the issue was, something from an earlier part of the video forced me to downgrade from 14.2.4 to 14.2.3. A rule of thumb: if the code is the same as in the video but yours doesn't work, your Next version has a bug. Hope this helps

    • @mariotjimenez
      @mariotjimenez 6 หลายเดือนก่อน

      ​@@cosminvoinopol705 I ran into this issue too and this helped! Thank you so much

    • @xmontarox85
      @xmontarox85 6 หลายเดือนก่อน +4

      @@cosminvoinopol705 I was having the exact same issue with redirect("/") not dismissing the modal. Whenever I would delete an image, the app would crash because FullPageImageView would try to render the deleted image and throw an "Image not found" error.
      By downgrading Next to 14.1.4, it works perfectly now. Hopefully Next can fix this bug in the modal. It's such a cool feature.

    • @TomRaine
      @TomRaine 5 หลายเดือนก่อน

      @@cosminvoinopol705 Thanks, this worked for me, I got really confused trying to debug this.

    • @thomas_ruegg
      @thomas_ruegg 5 หลายเดือนก่อน +1

      @@xmontarox85 This is it. Thanks for the comment :)

  • @jacobvanschenck
    @jacobvanschenck 9 หลายเดือนก่อน

    What a legend. Thank you sir for all the work you put into this. Something to learn here for any dev of any skill level!

  • @brayan_joan
    @brayan_joan 7 หลายเดือนก่อน

    Damn bro, i learned a lot with this, now i have a greater overlook of how js works and the ecosystem around this language , ty so much

  • @caiolaytynher5994
    @caiolaytynher5994 9 หลายเดือนก่อน +3

    Literally started learning this stuff yesterday, seems made for me

  • @senorclouds
    @senorclouds 9 หลายเดือนก่อน

    This was so awesome, thanks so much for pouring all the time, blood and syntax into it for us ^^

  • @bbpfreddy
    @bbpfreddy 9 หลายเดือนก่อน +1

    Amazing guide. always learn a thing or 2 by walking through this

  • @JiggidyP
    @JiggidyP 6 หลายเดือนก่อน

    I learn an incredible amount from these videos - thank you for everything you do!

  • @NaranuCS
    @NaranuCS 8 หลายเดือนก่อน

    Great tutorial btw, I'm starting to branch out towards next.js and react coming from Java and PHP (not together but from my last two jobs) so is extremely exciting to see how powerful all these tools are!

  • @sonalita_
    @sonalita_ 9 หลายเดือนก่อน +4

    I had a warning after adding the @apply rule at 17:02 - VSCode said "Unknown at rule @apply". The fix is to install the PostCSS Language support extension. I kinda wish Leo would have gone over the VSCode extensions he uses.

  • @M.G.Simard
    @M.G.Simard 7 หลายเดือนก่อน +1

    2:29:46 for anyone running into an issue where Posthog doesn't work check console, your browser is probably blocking it. Turn off your adblock/ublock if you had one.
    He goes over the solution for making it work with adblockers around 2:34:40

  • @drunkenpigtnt1359
    @drunkenpigtnt1359 8 หลายเดือนก่อน

    Built a blog app with the help of this tutorial. Great vid, Theo.

  • @havokgames8297
    @havokgames8297 9 หลายเดือนก่อน +1

    00:25:00 Postgres supports multiple 'schema'. Similar to a prefix but more like a folder. Is this supported by t3 + drizzle?

    • @flwi
      @flwi 9 หลายเดือนก่อน +1

      I bet it's supported by drizzle. But maybe there's a limitation on the free vercel postgres.

  • @shubhamprakash2331
    @shubhamprakash2331 8 หลายเดือนก่อน +5

    If anyone gets the error during deployment on Vercel :  "ERR_PNPM_BAD_PM_VERSION. This project is configured to use v9.1.1 of pnpm. Your current pnpm is v9.0.4"
    Put the code below in your environment variables and redeploy, it should work again.
    ENABLE_EXPERIMENTAL_COREPACK=1
    COREPACK_ENABLE_STRICT=0

    • @staticwasabi
      @staticwasabi 8 หลายเดือนก่อน

      Thank you!
      I was getting this error and adding these environment variables to vercel fixed it.

  • @Osirisdigitalagency
    @Osirisdigitalagency 9 หลายเดือนก่อน

    2mins 57 secs in and I already know this is going to be crazy. One time for Theo. U re the man. ❤

  • @rajkumardongre3085
    @rajkumardongre3085 หลายเดือนก่อน +5

    1:00:57 onUploadComplete callback is not triggering, on uploadthing files section it's showing "Callback Failed" status

    • @utsavpatel7954
      @utsavpatel7954 หลายเดือนก่อน +1

      YESSS, if you or anyone fixed this error, PLEASE comment here and let me know
      EDIT: It deploys just fine and the upload works on vercel after disabling the authentication on vercel but on my local, I still cannot upload

    • @megamind-h8r
      @megamind-h8r หลายเดือนก่อน +5

      in "api/uploadting/route.ts" you need to set the isDev config flag
      export const { GET, POST } = createRouteHandler({
      router: ourFileRouter,
      config: {
      isDev: process.env.NODE_ENV === "development",
      }
      });

    • @megamind-h8r
      @megamind-h8r หลายเดือนก่อน

      @@utsavpatel7954 left a reply

    • @jason420
      @jason420 หลายเดือนก่อน

      @@megamind-h8rThank you so much

    • @eikyoutube
      @eikyoutube 26 วันที่ผ่านมา

      @@megamind-h8r this is not working for me
      even in prod

  • @valentinerontez627
    @valentinerontez627 9 วันที่ผ่านมา +1

    You’re playing In my background and 1:19:30 you suggested users to pay vercel for image optimization, while you’re teaching; this can be done CILENT side. Then I remembered this is a sponsored video…

  • @erickhar
    @erickhar 9 หลายเดือนก่อน +4

    For people struggling with posthog - just turn off adblock if you get cors error

    • @chinodanxd
      @chinodanxd 2 หลายเดือนก่อน

      Thank you! I was using Opera and was wondering what went wrong.

  • @chadcummings4600
    @chadcummings4600 9 หลายเดือนก่อน

    Congrats on the React Status Cooperpress newsletter headline mention. Love your channel and the work you do

  • @sovapid
    @sovapid 9 หลายเดือนก่อน +1

    At the 1 hour 40 minute mark, you can do this:
    const image = await getImage(+photoId);
    with the plus sign to convert the photoId string into a number.

    • @OnePercentAhead
      @OnePercentAhead 9 หลายเดือนก่อน

      bad practice. make it easy to understand and readable, this is junior code

    • @sovapid
      @sovapid 8 หลายเดือนก่อน

      @@OnePercentAhead you confused by i++ ?

    • @OnePercentAhead
      @OnePercentAhead 8 หลายเดือนก่อน

      @@sovapid no that is well established in every major programming language in contrast to this implicit type conversion going on in your original code...

  • @marvinxu2950
    @marvinxu2950 8 หลายเดือนก่อน

    Wow, just started learning t3, very timely update! Thank you so much!

  • @TEHSOULREAPER
    @TEHSOULREAPER 7 หลายเดือนก่อน +2

    at 29:00 i have my index.ts set up exactly like yours but the sql parameter is complaining...
    Argument of type 'VercelPool & ((strings: TemplateStringsArray, ...values: Primitive[]) => Promise)' is not assignable to parameter of type 'Sql'.
    Type 'VercelPool & ((strings: TemplateStringsArray, ...values: Primitive[]) => Promise)' is missing the following properties from type 'Sql': CLOSE, END, PostgresError, options, and 13 more.ts(2345)
    ive tried restarting the TS server incase, and its weird because it seems fine, i may ts-ignore it for the moment unless something bad happens but yeah

    • @TEHSOULREAPER
      @TEHSOULREAPER 7 หลายเดือนก่อน +1

      nevermind im an idiot, the top line was not drizzle from vercel-postgres (it was postgres-js), changing it fixed it

    • @evangroneman5408
      @evangroneman5408 7 หลายเดือนก่อน +2

      @@TEHSOULREAPER you're not an idiot, it's a small difference that also took me a hot minute to spot!

    • @TEHSOULREAPER
      @TEHSOULREAPER 7 หลายเดือนก่อน

      ​@@evangroneman5408 yeah im now just getting an issue with production not uploading the image to db, at 1:09:00, getting a 401 reflected on uploadThing that im trying to debug, my middleware file is the same as his which is what it suggests it could be

    • @TEHSOULREAPER
      @TEHSOULREAPER 7 หลายเดือนก่อน

      so seems as though i was going to the build link of the site which didnt work, but going to the actual latest site one did, weird

  • @alexandermackintosh1755
    @alexandermackintosh1755 9 หลายเดือนก่อน

    Thank you so much this is incredibly useful content!! Just as i decided like a week ago to take the plunge to learn a bit about next hahah ❤

  • @Goglarnik
    @Goglarnik 9 หลายเดือนก่อน

    I rarely comment on any videos at all, but felt the need to say: "Thank you". Thank you :)

  • @keithjohnson6510
    @keithjohnson6510 9 หลายเดือนก่อน

    Just started using Drizzle, gets a thumbs up from me.
    Of course the typing's are a real +, but what I really like is that you can use composition to build your query's. eg. lets assume you have a complex sub query you want to say do an `inArray` with, you can then create a function and re-use in other query's, you could say it's a bit like Views but been able to use props, and of course still have strong typing's. Nice!!!!

  • @M.G.Simard
    @M.G.Simard 7 หลายเดือนก่อน +1

    Edit: I submitted the issue on the uploadthing repo, apparently should be fixed now?
    For anyone following this tutorial at this time you'll probably run into an issue where your upload won't work at 1:00:00:
    You'll run into an "effect" version mismatch due to the uploadthing package requiring effect 3.4.2 while also installing latest @effect/schema which will require latest effect (currently 3.4.5). This will cause your file upload to not work, return a code 500 error and notify you in-terminal that you have an effect version mismatch.
    My fix was downgrading @effect/schema to 0.68.9 which uses effect 3.4.2 && downgrading to effect 3.4.2 - the mismatch error went away and the upload functions correctly. Filed an issue on Github, can't say for sure where the fault lies because there might be something I don't know but I let them know regardless as even their own minimal template runs into this version mismatch problem while looking at its package-lock.json file.
    Edit: The dependency issue was marked as critical and promptly fixed

  • @guy7373
    @guy7373 5 หลายเดือนก่อน

    Amazing walkthrough!!
    learned a lot, disagreed with some of your strong opinions but they are appreciated.
    Thanks

  • @NoelmineZockt
    @NoelmineZockt 9 หลายเดือนก่อน +7

    My Go2Stack currently:
    React (RSCs), Next (App Router), Tailwind, react query, Shadcn, Drizzle, Lucia, (TS, pnpm). Hosting: Vercel, Turso, Railway
    Last year:
    React, Next (Page Dir), Tailwind, tRPC (with react query), Prisma, NextAuth, (TS, npm). Hosting: Vercel, Planetscale

  •  8 หลายเดือนก่อน +5

    The sponsor stack

  • @SebastianGrantElKiva
    @SebastianGrantElKiva 9 หลายเดือนก่อน

    Far away our best tutorial since

  • @mikealejandro3938
    @mikealejandro3938 9 หลายเดือนก่อน +1

    Theo, i'm diego, i'm from colombia, i'm a fullstack dev and you're one of those people who inspired me to do this, thanks for existing my nigga 🔥❤‍🔥

  • @recksonkhiangte1488
    @recksonkhiangte1488 9 หลายเดือนก่อน

    Oh wow! This is crazy, thank you for putting this out.

  • @ustav_o
    @ustav_o 9 หลายเดือนก่อน +2

    thats amazing. im doing it tomorrow and will come back here when i finish

    • @sirklatt
      @sirklatt 9 หลายเดือนก่อน +1

      Have you started yet

    • @ustav_o
      @ustav_o 9 หลายเดือนก่อน +2

      ​@@sirklattjust finishes now, really great tutorial. one of the best we have here at youtube.
      really cool stuff, very well explained and would totally recommend

    • @sirklatt
      @sirklatt 9 หลายเดือนก่อน

      @@ustav_o I found it to be pretty ass but okay

  • @rikschaaf
    @rikschaaf 7 หลายเดือนก่อน

    1:33:11 Funnily enough, I just implemented something similar with HTMX, using the HX-Request header to determine if it should return a full page or just the page element that got updated
    1:40:45 Lol, glad I did not forget. I was already confused that you didn't show the commit part, but at first I thought you just cut it from the video :D

  • @coffeeOverBhairavi
    @coffeeOverBhairavi 19 วันที่ผ่านมา

    This is so cool, for someone getting started... Thank you.

  • @francesay8478
    @francesay8478 9 หลายเดือนก่อน +1

    Theo during copilot cli: I don't want AI anywhere near my terminal
    Also Theo: *uses warp*

  • @Jay-s4u8j
    @Jay-s4u8j 9 หลายเดือนก่อน

    Fantastic tutorial! For someone who has never used TS/TW/analytics/ratelimiting....I managed to follow along just fine, and even understand, (i think) what was going on! Either way it works so thank you @t3dogg for such a great walkthrough

  • @joeljededemekong5628
    @joeljededemekong5628 9 หลายเดือนก่อน

    This is a blessing fr
    I’m so thankful that this exists

  • @JEM_GG
    @JEM_GG 9 หลายเดือนก่อน

    It was all worth it for the biscuits at the very end

  • @christianbauer3417
    @christianbauer3417 9 หลายเดือนก่อน

    Wow, you are providing a ton of useful advice! This is awesome. Thanks a lot Mr T3 :-)

  • @subhranshudas8862
    @subhranshudas8862 9 หลายเดือนก่อน +1

    Thanks Theo. You are a gift.

  • @MrMagicboard
    @MrMagicboard 9 หลายเดือนก่อน

    I love when Theo teach, i just follow and finish it

  • @ralphlaurage
    @ralphlaurage 3 หลายเดือนก่อน

    I'm happy you made this video, thank you

  • @bro-watch
    @bro-watch 9 หลายเดือนก่อน +1

    amazing content
    drizzle seems truly awesome

  • @josef-stampede-ai
    @josef-stampede-ai 9 หลายเดือนก่อน +3

    Fantastic, cant wait to get stuck in !!!

  • @dainius84
    @dainius84 9 หลายเดือนก่อน +2

    great tutorial, thank you, what's the extension used for autocomplete during this tutorial?

    • @永Tom
      @永Tom 5 หลายเดือนก่อน

      supermaven?

  • @IronMaidzen
    @IronMaidzen 9 หลายเดือนก่อน +2

    i use bun and drizzel studio without any issues so im wondering what problems you encountert? I dont use postgres maybe thats where it happens?

    • @t3dotgg
      @t3dotgg  9 หลายเดือนก่อน

      Might have been the migrate in drizzle kit. It was struggling to run the sql client and the errors were impossible to debug. Switched to pnpm and had no issues, have not dug into it much

  • @Kjetilmann
    @Kjetilmann 9 หลายเดือนก่อน +1

    More of this! More tutorials. More projects. More ShadcnUI component modifications. More interacting with databases and fetching different content. More State management tutorials (Zustand?). More Github Actions....

    • @andiuptown1711
      @andiuptown1711 6 หลายเดือนก่อน

      Get out of tutorial hell…

  • @prickitt
    @prickitt 9 หลายเดือนก่อน +2

    This is great, thanks for making it!

  • @lgf-sq9yf
    @lgf-sq9yf 9 หลายเดือนก่อน +1

    Amazing tutorial Theo! Thought could've complete this 3 hour tutorial in a day but it actually took me 3, and I'd learnt so much from it!
    However I have few questions:
    1. Why did you not use tRPC for this? Is it because it currently doesn't support multipart form for uploading images?
    2. Why did you decided to change to use pnpm from npm, I tried using pnpm too and I'm so not used to the syntax. Is the benefit of using pnpm in the long run be greater than just sticking to npm?

  • @itsobinna
    @itsobinna 9 หลายเดือนก่อน +1

    first... thanks for the vid. 3 hrs of gems.
    a question. why no trpc? @4:30 we got a hint, but it might've slipped your mind 3 hours later.
    was really interested in next14 + trpc in the context of a larger project with tools like drizzle, but I understand we can't have our cake and eat it too.
    thnx again

  • @danielugbeye
    @danielugbeye 9 หลายเดือนก่อน +1

    Thanks for the video Theo, but how about error handling, I can see some errors being thrown, but not how they are handled especially in the server actions.
    Would love to see how to handle them

  • @t1m3__
    @t1m3__ 9 หลายเดือนก่อน +1

    Thanks Theo, it's a great tutorial!

  • @AbdulRafay-vi6hz
    @AbdulRafay-vi6hz 9 หลายเดือนก่อน +10

    As a former web developer who now develops Android and iOS applications, I've noticed that web development has become more complex than ever.

    • @harshthakur1444
      @harshthakur1444 9 หลายเดือนก่อน +1

      which shows how much flexible and a bitch JavaScript is 😂😂😂😂😂😂 , I think why some people decide to js instead of ts

    • @AbdulRafay-vi6hz
      @AbdulRafay-vi6hz 9 หลายเดือนก่อน

      @@harshthakur1444 🤣🤣

  • @jamesgphillips91
    @jamesgphillips91 8 หลายเดือนก่อน +1

    Hey, I just wanted to thank you for this video. I've been working with react for almost 5 years, next for 3. I know a lot of what you've covered in this video already but it was really nice having such a thorough and comprehensive refresher. I was laid off about a year ago and I became really skeptical of the value of my React skillset after not being able to find a job for sometime and have been somewhat a drift in my personal projects and coding. I just want you to know you reignited a bit of my spark and love for React/Next and that I genuinely appreciate you content. Side note... from boston... can kickflip... but does he hardcore?

  • @kevin-3422
    @kevin-3422 27 วันที่ผ่านมา +1

    Awesome video, I appreciate all the work that went into this. I followed it this past weekend and my project had some minor differences than yours. My clerk client syntax was slightly different and my parallel route awaits the id to avoid browser warnings. It's been a minute since I've written code and I did get stuck a few times, but I got really stuck on the home stretch.
    When you create a form action to delete an image in order for me to get it to redirect properly from my parallel route I had to add a @modal/page.tsx file that returns null similar to the @modal/default.tsx file. (/vercel/next.js/issues/64433)

    • @daanishnasir
      @daanishnasir 11 วันที่ผ่านมา

      are you using vercel neon? saw postgres is no long an opntion on vercel, believe it migrated to neon now. Wonder how much this is going to affect this tutorial

    • @nicolekho7791
      @nicolekho7791 16 ชั่วโมงที่ผ่านมา

      Thank you this is exactly what I was looking for, when I clicked on my images I wasn't getting the id returned under my images. Creating that @modal/page.tsx with exactly the same contents of default.tsx made it work

  • @CoenBijpost
    @CoenBijpost 6 หลายเดือนก่อน

    You can create the backdrop by using backdrop: classnames from tailwind. You don’t even need a separate backdrop div. You can create blur, darkening, even sepia and other cool effects and it’s all styling ON the dialog element. Which is amazing, tbh…