Build an Invoice App with Next.js 15

Поделиться
HTML-код
  • Опубликовано: 23 ноя 2024

Комментарии • 205

  • @punitmistry2406
    @punitmistry2406 Месяц назад +10

    Hey Everyone if you are using the next 15 the latest one and if you are getting the error while installing the shadcn so just paste this command and it will work !!
    command : npm config set legacy-peer-deps true

  • @John-eq5cd
    @John-eq5cd 8 дней назад +1

    What an interesting approach to use a and action to change the status of the invoice. Also, that was some crazy typescript for the statuses, I will have to go through it slowly.
    Going back to managing the change in status in the server component, I coded a small client side component specifically for the drop down menu which allowed me to use onClick. Then I imported it into the invoice details page. It seemed to work ok.

  • @WebDevCody
    @WebDevCody Месяц назад +31

    Commenting for the algorithm

  • @LaxMariappan
    @LaxMariappan Месяц назад +12

    Thanks Colby, Xata and Clerk for making it a community resource. I do enjoy your newsletters and content, thanks Colby🚀

    • @colbyfayock
      @colbyfayock  Месяц назад +3

      no problem! thanks for your support 🫡 enjoy!

  • @ONESTTEFTEO
    @ONESTTEFTEO Месяц назад +2

    I am a backend developer and new to Next.js. This tutorial has inspired me to start learning Next.js

    • @colbyfayock
      @colbyfayock  Месяц назад +1

      awesome, it's a great framework, hope it helps ease your way into the frontend

  • @melik2625
    @melik2625 Месяц назад

    Unlike other tutorials he is showing what impact his code is making. He also shows the best approach and practices which is very important for scalability. Hope i had tutorials like these when i was a beginner.

  • @JianhuaX
    @JianhuaX Месяц назад +1

    For whatever reason why the YT algorithm got this video in front of me, I am thankful and immediately subscribed to you and liked the video. I am an Angular dev but I truly enjoy your way of teaching. It makes me think why I haven't picked up React, yet. Bravo Colby! I look forward to picking up more experience tips from you.

    • @colbyfayock
      @colbyfayock  Месяц назад +1

      really appreciate the kind words 🙏

  • @erik-lnt
    @erik-lnt Месяц назад

    Hey Colby, I have to say this is one of the best tutorials I have ever watched! I was searching for something like this for like 4 weeks now (something that includes clerk, drizzle and stripe) and this is just perfect. Thank you for putting valuable information like this out for free. You truly have an amazing way to teach and explain, keep up the good work!

    • @colbyfayock
      @colbyfayock  Месяц назад

      really appreciate the kind words 🙏

  • @ExperiencePlusDigital
    @ExperiencePlusDigital 4 дня назад +1

    This is amazing🎉. Would be fantastic to have a similar video dealing with media (image, video and audio) how to store them (uploadthing, cloudinary, Vercel Blob, etc) and how to use them in a efficient way (cropped, reduced image sizes, ai edited). For me that is the missing understanding, compared to using traditional CMS systems (Drupal, Wordpress) in a headless manner.

  • @DragosPopescu-n7n
    @DragosPopescu-n7n Месяц назад +5

    Awesome work, Colby! Skipping through it for now, and it seems incredibly well made. Thank you for the time and effort to make this. I'm really excited to watch it in full

    • @colbyfayock
      @colbyfayock  Месяц назад +1

      thank you! a lot of love went into building it. let me know what you think!

  • @rasikjain7794
    @rasikjain7794 7 дней назад

    Hi Colby, YT has recommended this channel. Very informative and detailed oriented for a person to follow along. This is helpful for anyone newbies who are interested in learning concepts of css, react, typescript, sql, apis, deployment etc. I like the way you do use the multi-cursor for the editing. A video on VS extensions you use and especially multicursor video will be helpful.

    • @colbyfayock
      @colbyfayock  6 дней назад

      glad you found it helpful!! ill keep that video idea in mind, thanks

  • @StanislausKatczinsky
    @StanislausKatczinsky 21 день назад

    Subsriber earned. Just the intro is enough to show that you will learn something from this and not just mindlessly type what you see in the video. Keep it up. Will check your other videos.

  • @VincentFulco
    @VincentFulco Месяц назад +1

    Thanks Colby! I've been holding off on building with 15 due to all the canary changes. I appreciate this road map to the future!

    • @colbyfayock
      @colbyfayock  Месяц назад

      no problem! lots of good stuff in there

    • @VincentFulco
      @VincentFulco Месяц назад

      Really well done tutorial...

    • @colbyfayock
      @colbyfayock  Месяц назад

      @@VincentFulco thank you 🙏

  • @alexgeorge1768
    @alexgeorge1768 Месяц назад

    The way of explaining things are so clean. Much appreciate it.

  • @Code-sz9db
    @Code-sz9db 27 дней назад

    I look forward for this kind of format! I'm really glad to see a real project-based video!

  • @adnanamin3666
    @adnanamin3666 Месяц назад +1

    Man! I love you!! I've been wondering when you were going to share the full project. Thank you! 🙏🙏

  • @AnthonyObi-wr6ro
    @AnthonyObi-wr6ro Месяц назад

    RUclips Algo just brought this to me and I am really enjoying. Have gone through your channel and saw amazing content. Glad to meet you. You just earned a subscriber

  • @mahmoudtokura
    @mahmoudtokura Месяц назад

    I learned a lot from this. No time wasted, straight-up valuable information. Thanks Subbed

  • @John-eq5cd
    @John-eq5cd 11 дней назад

    Enjoying the content so far, thanks Colby.
    Is it too simplistic to suggest a 'View' button for each row with the link to the specific invoice details?

  • @tedb4440
    @tedb4440 Месяц назад

    This is just amazing!!! I missed you on egghead, and suddenly the youtube algo gods suggested you. So excited to work through this, can't wait!! Great stuff @colby!🔥

  • @notjustdev
    @notjustdev Месяц назад +2

    This is goldeeeen!

    • @colbyfayock
      @colbyfayock  Месяц назад

      thanks 🙌 you give a lot to aspire to with these kinds of courses 🫡

  • @JoseLopez-me2re
    @JoseLopez-me2re 29 дней назад

    Thank you for this great course Colby.
    Loving every second of it! ❤

  • @taffoo
    @taffoo Месяц назад

    Well done Colby! Super nice project, learned some new stuff.
    Regarding the Dialog not looking correct I think that was because you added the DialogFooter by mistake inside the DialogHeader 😉

    • @colbyfayock
      @colbyfayock  Месяц назад

      oof thanks for the heads up 🙈

  • @ktappdev
    @ktappdev Месяц назад

    IDK how i'm only now discovering your channel sir, thank you

  • @tumon001
    @tumon001 27 дней назад

    I'm your old fan and I always loved your content.

    • @colbyfayock
      @colbyfayock  25 дней назад +1

      thank you for your support 🙏

  • @normb9785
    @normb9785 Месяц назад

    Hey Colby 👋🏾 love your tutorials, very calming and easy to follow. Now I have to ask what VSCode theme are you using?

    • @colbyfayock
      @colbyfayock  Месяц назад

      thanks 😁 Night Owl! marketplace.visualstudio.com/items?itemName=sdras.night-owl

  • @mileslegend
    @mileslegend Месяц назад +1

    was looking for something like this ..thanks man ..i will surely build this with you

    • @colbyfayock
      @colbyfayock  Месяц назад

      no problem! let me know how you come out

  • @Website_TV_1
    @Website_TV_1 Месяц назад

    Next.js 15 is here, and it’s a game-changer! Learn how to build a fully-functional Invoice App step-by-step in this video. Whether you’re a beginner or an experienced developer, you’ll pick up valuable tips and tricks. 💻💡
    👉 Time to level up your coding skills!
    If you want to master Next.js and create powerful apps like this, make sure to stick around till the end! 👍 Don't forget to like, subscribe, and share with fellow developers!
    ⏱ Timestamps: 0:00 Introduction & App Overview
    2:30 Setting up Next.js 15
    8:45 Building Invoice UI Components
    15:20 Handling Data & State Management
    22:50 Adding Custom Features
    28:35 Deploying the Invoice App

  • @jamesgrubb
    @jamesgrubb Месяц назад +1

    Great job and and thank you for the hard work on this resource.

    • @colbyfayock
      @colbyfayock  Месяц назад

      thank you for your support 🙏

  • @markus_dev_cwb
    @markus_dev_cwb Месяц назад +1

    Awesome Project Colby!

  • @gephreychen6211
    @gephreychen6211 21 день назад

    such gr8 content and such an excellent teacher. Best of the yr, thank you!

  • @JoseLopez-me2re
    @JoseLopez-me2re 26 дней назад

    Hey Colby, I have a question regarding Security best practices. At around 2:57:00 you create the Invoice.tsx client component and eliminate all the backend logic from it. But still you import the Invoice schema into a client component. Isn't that giving away information about how our database is structured, tables, fields, etc. to the client?

    • @colbyfayock
      @colbyfayock  25 дней назад

      thats an interesting question, but generally speaking and i'd have to remember the exact context, but on that client component, i only use it for the TS definitions which would get stripped: github.com/colbyfayock/my-invoicing-app/blob/main/src/app/invoices/%5BinvoiceId%5D/Invoice.tsx

    • @JoseLopez-me2re
      @JoseLopez-me2re 24 дня назад

      @colbyfayock help!

  • @JoseLopez-me2re
    @JoseLopez-me2re Месяц назад

    Wow, thank you so much Colby. I am still hoping for your NextJS 15 course, any updates on when you are releasing it?
    EDIT: I think this was the much awaited course, I thought it was going to be a premium (paid) course! Or am I missing something? Thank you Colby!

    • @colbyfayock
      @colbyfayock  Месяц назад +1

      this is the course! thanks to Xata and Clerk I was able to publish it for free and make it available to all 🚀

    • @JoseLopez-me2re
      @JoseLopez-me2re Месяц назад

      @@colbyfayock Great! Thank you !!

  • @i_vishalsah01
    @i_vishalsah01 Месяц назад

    that's some quality content and very clearly explained concepts people should know more about this and this page....👌👌

  • @smellfungussports
    @smellfungussports Месяц назад

    Great stuff Colby. Any idea of extending this to real time notifications?

    • @colbyfayock
      @colbyfayock  Месяц назад +1

      thank you!! i dont plan on creating a direct extension, however i have a separate video with the same base app that uses Knock for the realtime notifications: ruclips.net/video/nS5flwLW7Fs/видео.html

  • @nikolas4749
    @nikolas4749 Месяц назад

    Thanks Colby
    react router lauch v7 pre release two weeks ago. It include most remix functionality.
    Would you consider making a full stack app with react router ?

    • @colbyfayock
      @colbyfayock  Месяц назад +1

      i love that idea! Ive been meaning to spin up on it. admittedly it would take a lot of prep as i want to be comfortable enough with the APIs to clearly explain them, but i'll add that ot my list to start exploring!

  • @mohamedbenighil1026
    @mohamedbenighil1026 Месяц назад

    hi Colby, thank you for the awsome course! i am at the beggining of the video trying to center the of the page
    With :
    export default function Home() {
    return (

    Invoicipedia


    Login



    );
    }
    i got the the content center between left and right but NOT left and right and top and bottom like your result, can you tell me what is messing please ?

    • @colbyfayock
      @colbyfayock  Месяц назад +1

      did you set min-h-screen on the parent inside of the layout? github.com/colbyfayock/my-invoicing-app/blob/main/src/app/layout.tsx#L34

  • @coderyan
    @coderyan Месяц назад

    Awesome job, Colby!

  • @jakubpalka8093
    @jakubpalka8093 Месяц назад

    Hey Colby, I'm having an issue with ClerkProvider. I'm getting the error: useClerk can only be used within the component. But everything is wrapped inside this element. Any advice?

    • @colbyfayock
      @colbyfayock  Месяц назад

      do you have it in the same location as in the video? github.com/colbyfayock/my-invoicing-app/blob/dd91115e86c6557738eed2930a77f1b9edfc1c06/src/app/layout.tsx#L1
      where are you trying to use it in that context?

  • @adeyalshire5724
    @adeyalshire5724 Месяц назад

    Very good video, the explanations are clear . Great job !!!!!

  • @YuriyChamkoriyski
    @YuriyChamkoriyski 25 дней назад

    Hi, Colby! Thanks for the comprehensive and full of new stuff tutorial. It is a great learning material. I have a question, though. Am I the only one who experience a problem with the searchParams. At around 4:06:40, when you define isSuccess and isCanceled constants and tried to console log them I am getting always false for both of them, regardless of setting the parameter manaually in the URL to "success" or "cancel" and even after a successful payment, which is working and I am getting the success in the URL automatically, those two constans never change values and that is why the updateStatusAction never fires, so the status is never updated. I concole log the searchParams.status itself and it is undefined! So, what am I doing wrong? Thanks for you time and consideration.

    • @colbyfayock
      @colbyfayock  23 дня назад +1

      hey did you happen to compare what you're doing to the code? github.com/colbyfayock/my-invoicing-app/blob/main/src/app/invoices/%5BinvoiceId%5D/payment/page.tsx#L26-L34

    • @harsimransingh1025
      @harsimransingh1025 20 дней назад +1

      I encountered the same problem. This worked for me to get the status right:
      let pstate;
      try {
      pstate = await searchParams;
      console.log("Status:", pstate.status);
      } catch (error) {
      console.error("Error:", error);
      }
      const isSuccess = pstate?.status === "success";
      const isCanceled = pstate?.status === "canceled";

    • @colbyfayock
      @colbyfayock  20 дней назад

      hey did you compare what im doing in the code here? github.com/colbyfayock/my-invoicing-app/blob/main/src/app/invoices/%5BinvoiceId%5D/payment/page.tsx#L26-L35

  • @sahilgupta-f3m
    @sahilgupta-f3m Месяц назад

    what shortcut did you use for selecting and inserting mutliple line , time = 16:34

    • @colbyfayock
      @colbyfayock  Месяц назад

      I use CMD+D after selecting something to select similar values. though im not sure if thats a native shortcut or if that's the sublime text keybindings i have installed, but then from there, i use CMD+Arrow to go to the end of the line

  • @MrNimbus3000
    @MrNimbus3000 Месяц назад

    In my case it was required to use `config({ path: "./.env.local", override: true });` to make migration working

  • @Daniel-D137
    @Daniel-D137 Месяц назад +1

    Awesome, many thanks!

  • @janmalmur1244
    @janmalmur1244 17 дней назад

    Can I ask you why when i make code from chapter "Dynamic Page Routes for Invoices" i get an error "Error: Route "/invoices/[invoiceId]" used `params.invoiceId`. `params` should be awaited before using its properties." I dont know how to fix it :/

    • @colbyfayock
      @colbyfayock  17 дней назад

      Next.js released a last minute change before publishing 15 stable that makes searchParams an async API: nextjs.org/docs/app/api-reference/file-conventions/page#searchparams-optional

  • @sam-j4zy
    @sam-j4zy Месяц назад +1

    nice project thanks for sharing.

  • @langagama
    @langagama 14 дней назад

    can i use any other payment system besides stripe?

  • @Deus-lo-Vuilt
    @Deus-lo-Vuilt Месяц назад +1

    Great, I leave like and sub , I will start the project now.

  • @akashkinkarpandey9788
    @akashkinkarpandey9788 Месяц назад

    Anyone else getting the error
    Application error: a client-side exception has occurred (see the browser console for more information).
    on dashboard page ?
    I am around 1:43:00

  • @tobiasjennerjahn8659
    @tobiasjennerjahn8659 26 дней назад

    Is the hidden forms 'trick' really idiomatic react/next? That feels very hacky imo. But maybe it's just because I'm not used to it.

    • @colbyfayock
      @colbyfayock  25 дней назад

      its not a trick... its a valid HTML input type and has been commonly used with forms for years and years and years

    • @tobiasjennerjahn8659
      @tobiasjennerjahn8659 24 дня назад

      @@colbyfayock Thanks, I appreciate the answer. This just isn't a setup I've really encountered before and using hidden elements just to pass a bit of data felt a bit off. Good to know that this is a common practice and wouldn't be out of place in a bigger project.

  • @succatash
    @succatash 28 дней назад

    High quality content

  • @TrostCodes
    @TrostCodes Месяц назад

    Amazing stuff, dude!

    • @colbyfayock
      @colbyfayock  Месяц назад

      thanks Alex 🙏 appreciate your support

  • @abdelrahmanmostafa9489
    @abdelrahmanmostafa9489 Месяц назад

    Xata is the best❤❤

  • @wirapramuja007
    @wirapramuja007 Месяц назад

    hello colby, i caucht on error "Cannot find module 'next/form' or its corresponding type declarations." i have browsing and i cannot find doc to fix this issues can you figure this out? Module not found: Can't resolve 'next/form'

    • @colbyfayock
      @colbyfayock  Месяц назад

      hey did you upgrade to the canary version of Next.js? should be in the video somewhere around there

    • @erik-lnt
      @erik-lnt Месяц назад

      I had it working for 1 day with the form component from next but then suddenly it din't work any more. I fixed it by just using the regular form component again. Maybe that'll fix it for you, too.

  • @pushingpixels98
    @pushingpixels98 2 дня назад

    Is ut possble for me to allow the client to make a payment directly to my bank account without using third pary softwares such as tripe or paypal

  • @anaf.2715
    @anaf.2715 Месяц назад +1

    That’s amazing!!!!

  • @Kunal_Rai
    @Kunal_Rai Месяц назад

    Amazing work! Maybe a video working with cursor AI

  • @gergoviktorjordan8103
    @gergoviktorjordan8103 Месяц назад +1

    Great video, I like it, but at 2:51:20 I got this bug on my form action and I cannot process forward :( I hope somebody can help to solve this.
    Paid

    • @doxlebuild6317
      @doxlebuild6317 7 дней назад

      yes getting an error with server side forms, once i click the drop down the updateStatusAction is not triggering. I checked the network tab also, I think the Radix's dropdown is closing before the form is submitted. Spend an hour on this :( and tried to have a client wrapper or change the drop down item to div may be. "he form submission is interrupted, causing the "Form submission canceled because the form is not connected" error." Get this error on console. Any help would be greatly appreciated. Colby you are a legend. Thx man

  • @aldikrasniqi739
    @aldikrasniqi739 Месяц назад

    Commenting for the algorithm too

  • @TheRedPheniox
    @TheRedPheniox Месяц назад

    Great tutorial

  • @fullstackspiderman
    @fullstackspiderman Месяц назад

    Thank you so much sir ❤

  • @meciau
    @meciau Месяц назад

    this is quality!

  • @projectroxas3307
    @projectroxas3307 Месяц назад

    I really can't figure out what's happening sadly... I also cloned your repo, so I could verify if something broke all of a sudden but it seems I'm the only one who is dealing with the following error: Internal error: TypeError: Cannot create property 'digest' on string 'This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects.' This error occurs in the /dashboard page, I stopped at around 1.28.00 timestamp of the video, and if I try to render my component with CSR, everything works fine (but of course in this case I was not retrieving anything from the database) but the issue arises when I try with SSR, and specifically when I try to render the shadcn components such as TableRow, TableCell and TableHead, the rest are fine. I don't know what's wrong, did you encounter the same issue?

    • @colbyfayock
      @colbyfayock  Месяц назад +1

      sorry i didnt hit that error... not totally sure what it could be

  • @destocot1729
    @destocot1729 Месяц назад +2

    oh it's a free course your awesome I'll enjoy going through it

    • @colbyfayock
      @colbyfayock  Месяц назад +1

      would love to hear what you think as you work thruogh it!

    • @destocot1729
      @destocot1729 Месяц назад

      ​@@colbyfayock about 1/4th through it heres are my thoughts so far
      NOTES
      - Styling seems off (ignoring for now since not a focus of the video)
      - my content seems more centered when yours is left aligned (is bothering me a lot tho)
      - my content remains at the top when yours is centered
      - my content seems to have a smaller container
      - using action AND `onSubmit` together
      - never seen this before !?!? the `createInvoice` action is being
      called into the action and `handleSubmit` is it guaranteed that both of them
      will not run?
      UPDATED COMMENTS:
      - you removed the `createInvoice` action from `handleSubmit` later on
      that just made it confusing why it was showcased in the first place
      - When JavaScript is disabled you are still able to spam the submit form and create
      multiple entries (maybe there is no way to avoid this?)
      TESTS:
      - I removed the `handleSubmit` as well as the `useState('ready')` entirely
      it did not seem to affect anything? More questions as to why this part was added
      - I recommend 'opacity-0' or 'hidden' instead of 'text-transparent' where you can still the
      text by clicking/highlighting the button
      (stopped before integrating clerk for now)
      explanation of error.tsx and loading.tsx were good is the NextError component new?
      PERSONAL:
      - why do you wrap buttons in p tag?
      - what do you think about the fact that /invoices/new and /invoices/[invoiceId] both live on the same segment of /invoices/X
      I've done it before many times it just feels weird, was wondering if thats a bad practice or not? maybe its okay because in this case our invocieId is an int but what if it was a uuid would the thought process change?

  • @JA1810HV
    @JA1810HV Месяц назад

    How did it took the whole screen with h-full in 11:15 ? Making the main take 100% does not mean it will stretch the parent body element.

    • @colbyfayock
      @colbyfayock  Месяц назад +1

      i have min-h-screen on the body

    • @JA1810HV
      @JA1810HV Месяц назад

      @@colbyfayock Oh I see, thanks

  • @i_vishalsah01
    @i_vishalsah01 Месяц назад

    Displaying all invoices for public demo. Creation is disabled. Am I doing something wrong cuz console show's no error and app runs fine but i'm unable to create any invoice can anyone help!!! please

    • @colbyfayock
      @colbyfayock  Месяц назад

      Are you referring to my public demo? It's not intended for public use

    • @i_vishalsah01
      @i_vishalsah01 Месяц назад

      @@colbyfayock oo okay i created my own version of it api keys, xata, clerk of my own and made some changes..

  • @CodeCraftAcademy-dd1qd
    @CodeCraftAcademy-dd1qd Месяц назад

    I love you so much. Thank you :)

  • @eliuddyn
    @eliuddyn Месяц назад

    Amazing 🔥🔥

  • @MaziSaidSo
    @MaziSaidSo Месяц назад

    Great Stuff !

  • @riham644
    @riham644 Месяц назад

    Thanks in advance ❤

  • @VLADICA94KG
    @VLADICA94KG 20 дней назад

    4:16:15 line 32 isError conditions contradicts each other : D

  • @wbecher
    @wbecher Месяц назад

    I`m having trouble with the redirect after delete...
    my server action is like this:
    export async function deleteSessionAction(formData: FormData) {
    console.log("inicia processo de delete");
    const { userId } = auth();
    if (!userId) {
    return;
    }
    const sessionId = formData.get("id") as string;
    await db
    .delete(Sessoes)
    .where(
    and(eq(Sessoes.id, parseInt(sessionId)), eq(Sessoes.userId, userId))
    );
    redirect("/dashboard");
    }
    If I comment the db.delete command, the redirect works fine... but with the code uncommented, the redirect fails:

    • @colbyfayock
      @colbyfayock  Месяц назад

      its possible it's failing, try wrapping the db call with a try/catch and logging out the results, that might give you a clue

    • @wbecher
      @wbecher Месяц назад

      @@colbyfayock The delete works on the database... that's the odd part... the record is deleted on the database, but the redirect fails. I'm getting crazy!
      This is the result of the delete command:
      -------------------------------------
      Result {
      command: 'DELETE',
      rowCount: 1,
      oid: null,
      rows: [],
      fields: [],
      _parsers: undefined,
      _types: TypeOverrides {
      _types: {
      getTypeParser: [Function: getTypeParser],
      setTypeParser: [Function: setTypeParser],
      arrayParser: [Object],
      builtins: [Object]
      },
      text: {},
      binary: {}
      },
      RowCtor: null,
      rowAsArray: false,
      _prebuiltEmptyResultObject: null
      }
      -------------------------------------

    • @wbecher
      @wbecher Месяц назад

      -------------------------------------
      Result {
      command: 'DELETE',
      rowCount: 1,
      oid: null,
      rows: [],
      fields: [],
      _parsers: undefined,
      _types: TypeOverrides {
      _types: {
      getTypeParser: [Function: getTypeParser],
      setTypeParser: [Function: setTypeParser],
      arrayParser: [Object],
      builtins: [Object]
      },
      text: {},
      binary: {}
      },
      RowCtor: null,
      rowAsArray: false,
      _prebuiltEmptyResultObject: null
      }
      -------------------------------------

  • @henrymunoz2035
    @henrymunoz2035 29 дней назад

    Wow you are amazing

  • @Armys2940
    @Armys2940 Месяц назад

    Why my dynamic route is not working like it gives me the invoice id NaN i debugged it same issue

    • @colbyfayock
      @colbyfayock  Месяц назад

      the value should only be NaN after parseInt, did you test the value coming out of the parameters? console log it out into the terminal

    • @Armys2940
      @Armys2940 Месяц назад

      @@colbyfayock DONE Sir

    • @Armys2940
      @Armys2940 Месяц назад

      @@colbyfayock Error Solved

    • @colbyfayock
      @colbyfayock  Месяц назад

      @@Armys2940 💯

  • @adeonir
    @adeonir Месяц назад

    Awesome ❤

  • @cb73
    @cb73 Месяц назад

    isn’t it funny that the theme that is “default” selected in shadcn is not in fact the “default” theme

  • @nishithkhambhati3260
    @nishithkhambhati3260 Месяц назад

    Where is products details ?

    • @colbyfayock
      @colbyfayock  Месяц назад

      could you elaborate on your question? what product and what specifically are you looking for?

  • @life0fmeek
    @life0fmeek Месяц назад

    Colby!

  • @MrNimbus3000
    @MrNimbus3000 Месяц назад

    Regarding 2:49:05
    I did it in a next way (we are not using type assertions):
    ```
    const statuses = AVAILABLE_STATUSES.map((status) => status.id);
    export const statusEnum = pgEnum("status", [statuses[0], ...statuses.slice(1)]);
    ```

  • @browninc254
    @browninc254 Месяц назад

    Awesome

  • @irfaanvallapilm3847
    @irfaanvallapilm3847 Месяц назад

    thanks for this

  • @jordon7999
    @jordon7999 Месяц назад

    epic 🎉

  • @whizzie3367
    @whizzie3367 Месяц назад

    ❤❤

  • @SayfSentinel
    @SayfSentinel Месяц назад

    What in the Chatgpt is this GEM 💎?!

  • @CarlosTello-m8h
    @CarlosTello-m8h Месяц назад

    nice

  • @054m4
    @054m4 Месяц назад

    PHP Can does the same in almost 1/4 time and without all these external integrations 😀

  • @Remi___________________416
    @Remi___________________416 Месяц назад

    are the services all free?

    • @colbyfayock
      @colbyfayock  Месяц назад

      all services have a generous free tier!

  • @cant_sleeeep
    @cant_sleeeep Месяц назад

    why drizzle? why not prisma? just about i got used to prisma this comes up ffs

    • @colbyfayock
      @colbyfayock  Месяц назад

      i dont have experience with Prisma yet but I really enjoyed the Drizzle APIs. while I totally get the pain of switching tools, definitely worth having a basic understanding of each to see which you prefer, the concepts should apply to both, but with different syntax.

  • @OmarLahsenRamirez-cn9kg
    @OmarLahsenRamirez-cn9kg Месяц назад

    I love you

  • @Nisha-nb6rv
    @Nisha-nb6rv Месяц назад

    is all things u used free?

    • @colbyfayock
      @colbyfayock  Месяц назад

      everything has a free trial except Stripe which is transaction based

  • @MrNimbus3000
    @MrNimbus3000 Месяц назад

    Is it a clickbait? There is no Next 15 in this course. Next 15 is still is "release candidate" phase and can't be insalled even with `latest` flag with CLI. We can confirm that this is still next 14 as well as React 18 according to dev server logs it when author is firsr starting his dev server in the console. Are we going to upgrade Next to version 15 later in the course or the title is wrong? And why we are using src directory anyway if reccommended approach is different?

    • @colbyfayock
      @colbyfayock  Месяц назад +1

      sounds like you only watched the first 1m. if not you'll notice it upgrades later when Next.js 15 features that are RC/Canary are used. `src` directory is not an antipattern, you're thinking of `pages` vs `app` which again is not an antipattern, Next.js specifically maintains the Pages router as a valid, supported application path

    • @MrNimbus3000
      @MrNimbus3000 Месяц назад

      @@colbyfayock I see. That is exactly what I was asking about. Thanks. Until this point your course looks amazing. I have seen some 1 hour for now

  • @colbyfayock
    @colbyfayock  Месяц назад +8

    Where to go next? 👀
    - Data Pagination with Suspense: ruclips.net/video/RlzrXSVYPIw/видео.html
    - Generate PDFs: ruclips.net/video/4V5HbqYJCVI/видео.html
    - Realtime Notifications with Knock: ruclips.net/video/nS5flwLW7Fs/видео.html

  • @psmontte
    @psmontte Месяц назад

    Seriously! Have you seen an Invoice, in your life?

  • @sdfsfsfd437
    @sdfsfsfd437 Месяц назад

    Aweeesssooomeeee!!!!! 💯❤👍

  • @YassineZaroui
    @YassineZaroui Месяц назад

    const where = orgId
    ? and(eq(Invoices.id, id), eq(Invoices.organizationId, orgId))
    : and(
    eq(Invoices.id, id),
    eq(Invoices.userId, userId),
    isNull(Invoices.organizationId)
    );
    await db
    .update(Invoices)
    .set({ status })
    .where(where);