- 19
- 65 895
manfra․io
เข้าร่วมเมื่อ 3 ก.ย. 2023
Learn programming and develop your own ideas through practical tutorials and hands-on projects!
Integrate Twilio with Node.js - Send SMS and MMS, make phone calls and implement text-to-speech
In this video, we're gonna learn how to integrate Twilio with Node.js.
We're gonna learn how to send SMS and MMS, make phone calls playing an audio file (.mp3) with a recorded message, send instructions using TwiML file (.xml) and implement text-to-speech in different languages.
🔗 GitHub Repository:
github.com/manfraio/twilio_with_nodejs
We're gonna learn how to send SMS and MMS, make phone calls playing an audio file (.mp3) with a recorded message, send instructions using TwiML file (.xml) and implement text-to-speech in different languages.
🔗 GitHub Repository:
github.com/manfraio/twilio_with_nodejs
มุมมอง: 430
วีดีโอ
Session-Based Authentication - Explanation + Full Node.js Tutorial
มุมมอง 719หลายเดือนก่อน
In this video we're gonna learn what is session based authentication and also build a complete example using Node.js with express, express-session and ejs template engine. We're gonna learn login and logout functionalities, protect routes using middleware, send logged user details to views and more. REST API Authentication and Authorization - Explanation Full Node.js Tutorial: th-cam.com/video/...
Integrate Whatsapp API with Node.js
มุมมอง 2.2Kหลายเดือนก่อน
In this video, we're gonna learn how to integrate the Whatsapp API with a Node.js project, using Axios. We're gonna learn how to send and create template messages, text messages, media messages, like images, how to upload an image to whatsapp cloud server so we can send to our contacts, and last, we're gonna learn how to generate a permanent API access token. 🔗 GitHub Repository: github.com/man...
Stripe Elements - Build a custom card form
มุมมอง 6832 หลายเดือนก่อน
In this video, we're gonna learn how to build a custom card form using Stripe Web Elements. We're gonna create a card payment method using the stripe card element, which contains in one input, the card number, expiry date and cvc, and later we'll split these fields using stripe cardNumber, cardExpiry and cardCvc elements, with HTML, CSS and JavaScript. We're gonna send the new card payment meth...
Stripe Checkout Subscriptions + Webhooks with Node.js
มุมมอง 4.4K3 หลายเดือนก่อน
In this video, we're gonna learn how to create Stripe Subscriptions, using the Stripe Checkout with Node.js. We're gonna use Express, EJS and the official Stripe module to create a simple page with two plans that will lead the customer to the Stripe Checkout page and then complete the payment by passing the card details. We're also gonna learn how to enable a customer portal for the customers t...
Custom Popup Boxes - With HTML, CSS and JavaScript
มุมมอง 1214 หลายเดือนก่อน
In this video, we're gonna learn how to build custom popup boxes with HTML, CSS and JavaScript. We're gonna create an alert, confirm and prompt popups, using the HTML dialog element, with animations, icons, export/import declarations and much more. Exploring the HTML Dialog Element: th-cam.com/video/HuaepozXIWY/w-d-xo.html Github Repo: github.com/manfraio/custom_popup_boxes
REST API Authentication and Authorization - Explanation + Full Node.js Tutorial
มุมมอง 7K5 หลายเดือนก่อน
In this video we're gonna learn how to implement REST API authentication and authorization with Node.js, using JSON Web Tokens (JWT), Refresh Tokens and Two-Factor Authentication (2FA) using an authenticator app and many other features. Scheduling Jobs with Node.js: th-cam.com/video/2t1jn6zk3zw/w-d-xo.html Github repo: github.com/manfraio/rest_api_auth_nodejs
How to integrate Stripe Checkout with Node.js
มุมมอง 12K6 หลายเดือนก่อน
In this video, we're gonna learn how to integrate the Stripe Checkout with a Node.js project. We're gonna use Express, EJS and the official Stripe module to create a simple page with some products that will lead the buyer to the Stripe Checkout page and then complete the payment by passing the card details and shipping address. 🔗 GitHub Repository: github.com/manfraio/stripe_checkout_with_nodejs
How to integrate PayPal API with Node.js
มุมมอง 8K6 หลายเดือนก่อน
In this video, we're gonna learn how to integrate the PayPal Orders API with a Node.js project. We're gonna use Express, EJS and Axios to create a simple page with a product that will lead the buyer to the PayPal Checkout page and then complete the payment. 🔗 GitHub Repository: github.com/manfraio/paypal_with_nodejs
Dynamic Email Templates with Node.js and Nodemailer - Using Pug
มุมมอง 4327 หลายเดือนก่อน
In this video, we're gonna learn how to send email templates with dynamic data, with Node.js and Nodemailer, using a template engine called Pug. Sending emails with Node.js using Nodemailer: th-cam.com/video/i2wcosjgcC0/w-d-xo.html Dynamic Email Templates with Node.js and Nodemailer - Using Handlebars: th-cam.com/video/JbmZ86Ho01s/w-d-xo.html Dynamic Email Templates with Node.js and Nodemailer ...
Dynamic Email Templates with Node.js and Nodemailer - Using EJS
มุมมอง 1.6K7 หลายเดือนก่อน
In this video, we're gonna learn how to send email templates with dynamic data, with Node.js and Nodemailer, using a template engine called EJS. Sending emails with Node.js using Nodemailer: th-cam.com/video/i2wcosjgcC0/w-d-xo.html Dynamic Email Templates - using Handlebars: th-cam.com/video/JbmZ86Ho01s/w-d-xo.html 🔗 GitHub Repository: github.com/manfraio/dynamic_email_templates_using_ejs
Dynamic Email Templates with Node.js and Nodemailer - Using Handlebars
มุมมอง 2.1K7 หลายเดือนก่อน
In this video we're gonna learn how to send email templates with dynamic data, with Node.js and Nodemailer, using a template engine called Handlebars. Sending emails with Node.js using Nodemailer: th-cam.com/video/i2wcosjgcC0/w-d-xo.html 🔗 GitHub Repository: github.com/manfraio/dynamic_email_templates_using_handlebars
Exploring the HTML Dialog Element
มุมมอง 1467 หลายเดือนก่อน
In this video, we're gonna explore the native HTML dialog element. We're gonna see functions and attributes that the dialog element offers, and many other features like events, watching for changes on the dialog element attributes using JavaScript Mutation Observer, animations, how to use the dialog with a form, how to close when clicking outside the dialog and much more, with just few CSS and ...
REST API with Node.js and PostgreSQL
มุมมอง 14K8 หลายเดือนก่อน
In this video, we're gonna learn how to build an complete products REST API with Node.js, Express and PostgreSQL. We're gonna create endpoints based on CRUD operations and use a module called node-postgres (pg) to connect with PostgreSQL. We'll use a cloud database from a platform called ElephantSQL. We'll also learn about SQL commands, built-in PostgreSQL functionalities, relationships between...
REST API with Node.js and MongoDB
มุมมอง 2.4K9 หลายเดือนก่อน
In this video, we're gonna learn how to build an complete products REST API with Node.js, Express and MongoDB. We're gonna create endpoints based on CRUD operations and use Mongoose module to connect with MongoDB. We'll use MongoDB Atlas, an integrated cloud database suite with services to speed and simplify the way we build with data. REST API - Explanation Full Node.js Tutorial: th-cam.com/vi...
REST API - Explanation + Full Node.js Tutorial
มุมมอง 7K10 หลายเดือนก่อน
REST API - Explanation Full Node.js Tutorial
Uploading files with Node.js + Express using Multer
มุมมอง 43511 หลายเดือนก่อน
Uploading files with Node.js Express using Multer
Sending emails with Node.js using Nodemailer
มุมมอง 1K11 หลายเดือนก่อน
Sending emails with Node.js using Nodemailer
These days, there are so many resources available on the internet. Some are very helpful, but others can trap us in a loop. Tools like ChatGPT and resources like CodePen are useful, but when we start relying too much on them, we end up just copy-pasting everything. Because of this, we aren't able to develop ourselves, and we don't improve our skills properly. What's the solution to this?
Thank you for this video. It's all I needed!
Great video once again, one question, when performing a user registration we can use bcrypt to save the password and compare when the user wants to login right?
Yes you should definitely use bcrypt to store the password on the database.
this is a great tutorial I implemented this on a Nuxt App I was working on. Can you please make a video on how to set reset password endpoint?
Thank you for the comment. Yes, I’ll do soon a video about the reset password endpoint.
Thanks from South Africa, this was really helpful
Great Video! Just a question here; why Blacklist AT and delete RT? why not delete both tokens? why not delete AT and blacklist RT? why not blacklist both tokens?
Thank you for the comment. The AT we’re not storing anywhere. Just sending directly on the response. To invalidate the AT then we need to store somewhere to check if that AT is invalid (in case the user already logged out). The RT we are storing on the DB. So in that case we need to delete. You could store both the AT and RT on the database as well, and create a boolean flag to invalidate the AT. It all depends on the way you want to work.
@@manfraio Thanks a lot! Access and refresh tokens help in preventing replay attacks. Ideally, blacklisting both will prevent an attacker from using a sniffed AT or RT to gain access to the system when the user is logged out AND the token is not yet expired. (Side Note: in case the user is already logged in and the hacker was able to obtain his AT or RT and use it; this can be detected from the list of concurrent sessions of that user then the system can take actions accordingly; maybe block the user's account or log out "both"). However, it creates an overhead on the backend server and DB due to the logout-login pattern of many users. That is when many users log out (blacklist each AT and RT) then log in (create new AT and RT) then logout (blacklist newly created AT and RT) and so on. On the DB side, a "clean-up" job could remove expired AT and RT. Therefore, I think the meet-me-in-the-middle solution is to delete the RT (since there is nothing to compare against between user's RT AND server's RT; deleted one) and blacklist AT until it expires then the system (e.g DB job) can safely delete it. Much appreciated!
@@manfraio Thanks a lot! Access and refresh tokens help in preventing replay attacks. Ideally, blacklisting both will prevent an attacker from using a sniffed AT or RT to gain access to the system when the user is logged out AND the token is not yet expired. (Side Note: in case the user is already logged in and the hacker was able to obtain his AT or RT and use it; this can be detected from the list of concurrent sessions of that user then the system can take actions accordingly; maybe block the user's account or log them out "both"). However, it creates an overhead on the backend server and DB due to the logout-login pattern of many users. That is when many users log out (blacklist each AT and RT) then log in (create new AT and RT) then logout (blacklist newly created AT and RT) and so on. On the DB side, a "clean-up" job could remove expired AT and RT. Therefore, I think the meet-me-in-the-middle solution is to delete the RT and blacklist AT until it expires then the system (e.g DB job) can safely delete it. Much appreciated!
@@manfraio Thanks a lot! Access and refresh tokens help in preventing replay attacks. Ideally, blacklisting both will prevent an attacker from using a sniffed AT or RT to gain access to the system when the user is logged out AND the token is not yet expired. (Side Note: in case the user is already logged in and the hacker was able to obtain his AT or RT and use it; this can be detected from the list of concurrent sessions of that user then the system can take actions accordingly; maybe block the user's account or log them out "both"...etc). However, it creates an overhead on the backend server and DB due to the logout-login pattern of many users. That is when many users log out (blacklist each AT and RT) then log in (create new AT and RT) then logout (blacklist newly created AT and RT) and so on. On the DB side, a "clean-up" job could remove expired AT and RT. Therefore, I think the meet-me-in-the-middle solution is to delete the RT and blacklist AT until it expires then the system (e.g DB job) can safely delete it. Much appreciated!
@@manfraio Thanks a lot! Access and refresh tokens help in preventing replay attacks. Ideally, blacklisting both will prevent an attacker from using a sniffed AT or RT to gain access to the system when the user is logged out AND the token is not yet expired. (Side Note: in case the user is already logged in and the hacker was able to obtain his AT or RT and use it; this can be detected from the list of concurrent sessions of that user then the system can take actions accordingly; maybe block the user's account or log them out "both"...etc). However, it creates an overhead on the backend server and DB due to the logout-login pattern of many users. That is when many users log out (blacklist each AT and RT) then log in (create new AT and RT) then logout (blacklist newly created AT and RT) and so on. On the DB side, a "clean-up" job could remove expired AT and RT. Therefore, I think the meet-me-in-the-middle solution is to delete the RT and blacklist AT until it expires then the system (e.g DB job) can safely delete it. Much appreciated!
great!!! thanks! really appreciate your good vibe and excellent tutorial!!
Thank you so much.
thanks, bro you save me time
After subscription expire it will auto renew? What can we do for auto pay according this
On Stripe, subscriptions typically auto-renew unless explicitly configured otherwise.
bro can you make video on ' how to switch from sandbox to live' if you are not able to make it then please guide me
I intend to do a video about this but with a complete project. But for now here are the steps you can follow to move from sandbox to production (live mode): Make sure to create a PayPal business account. Then login to that account - switch to the Live mode by selecting the option at the top-right corner - in the dashboard, navigate to My Apps & Credentials - create an app - replace the sandbox credentials, inside your code, to the live credentials (clientId and secret) - replace the endpoints in your code, with the production (live) one (api.paypal.com). PayPal may require additional information (e.g., business details) before allowing your app to go live. They might also review your integration to ensure compliance with their policies.
for some reason link button is not showing for me :(
Sometimes it doesn’t show and that’s normal, but you can add on the payment settings inside Stripe dashboard. Please check this video, where I show you how to add or remove other payment methods: th-cam.com/video/cheDHoEazPs/w-d-xo.html
@@manfraio ive checked and it is turned on
@FauzulFadzil are you using the stripe card element?
❤❤❤ thanks 👍
Hi! Thank you for video! very informative! What if we want to send verification code for the user? In such a case the user won't answer, we must send the code as a first message. Do you have any idea how to implement this?
Thank you for the comment. You can create a template message with a variable that is gonna be the verification code. Just like on the video, instead of sending the user name on the variable , you send the code. Does that make sense?
@@manfraio Yes! Awesome! This way I don't need a Twillio in order to send just verification codes;) Thank you!
@@manfraio Other question, adding my own phone number to sending messages through Whatsapp, can I use the same number on my phone?
The WhatsApp Business API requires you to register a dedicated WhatsApp Business number that is separate from your personal WhatsApp number.
@@manfraio I found the issue that whatsapp doesn't want to accept my templates with verification code. Do you have any template that they would accept?
I'm not able to select the test phone numbers. In your case the test phone is automatically generated but that's not same in my case. Can you provide any guidance?
You mean the test number that whatsapp generated for you to use to send messages or the phone number you add, to send to that number?
@manfraio All of them please 😢
When I try this is typescript, I keep getting this error, and I cant figure out how to fix it: (Error [ERR_REQUIRE_ESM]: require() of ES Module node_modules/nodemailer-express-handlebars/index.js from dist/services/mailer.js not supported.) Can anyone help?
5:10
Are you from Brazil?
Sim 🇧🇷
can we create a chatbot from Whatsapp API with Node.js ?
Yes. You would need to create a webhook on your server to listen for incoming messages, and configure this webhook on your whatsapp business platform: // Webhook to receive messages from WhatsApp app.post('/webhook', (req, res) => { const webhookEvent = req.body; // Check if this is a message event if (webhookEvent.entry && webhookEvent.entry[0].changes && webhookEvent.entry[0].changes[0].value.messages) { const messageEvent = webhookEvent.entry[0].changes[0].value.messages[0]; const from = messageEvent.from; // The user's phone number const messageText = messageEvent.text.body; // The message content // Chatbot logic to respond to the message let responseMessage; // Basic chatbot responses (you can expand this logic) if (messageText.toLowerCase().includes('hello')) { responseMessage = 'Hello! How can I assist you today?'; } else if (messageText.toLowerCase().includes('price')) { responseMessage = 'Our products range from $10 to $100. How can I help with pricing?'; } else if (messageText.toLowerCase().includes('bye')) { responseMessage = 'Goodbye! Have a great day!'; } else { responseMessage = 'Sorry, I did not understand that. Can you please rephrase?'; } // Send the response back to the user sendMessage(from, responseMessage); } // Send a 200 OK response back to WhatsApp res.sendStatus(200); }); // Verification route to verify the webhook with WhatsApp app.get('/webhook', (req, res) => { const verifyToken = process.env.VERIFY_TOKEN || 'your_verify_token'; const mode = req.query['hub.mode']; const token = req.query['hub.verify_token']; const challenge = req.query['hub.challenge']; // Validate the webhook token if (mode && token === verifyToken) { console.log('Webhook Verified'); res.status(200).send(challenge); } else { res.sendStatus(403); } });
can i give that say or play URL of audio as dynamically in between the call , I mean I want play URL of audio or say as Multiple Times with different data in single call
Yes, you can use the say and play properties together multiple times on the call.
@@manfraio i mean if user says 'hi' in call I want to play some relevant audio on ongoing call , is it possible ?
Here is an example of how to make an outbound call using Twilio, wait for the user to say something, and then respond accordingly by either playing an audio file or saying something: 1. Create an endpoint to make the call and when the user answer, pass another endpoint to the url property to handle the answering: app.post('/make-call', async (req, res) => { const toNumber = req.body.to; // Get the user's number from the request try { const call = await client.calls.create({ url: 'your_app_url/voice', // This won't work on localhost. To test locally you would have to use something like ngrok to: toNumber, from: 'YOUR_TWILIO_PHONE_NUMBER' // Your Twilio number }); res.send(`Calling ${toNumber}...`); } catch (err) { console.error(err); res.status(500).send('Error making the call.'); } }); 2. Create the endpoint to handle the response (the same endpoint you passed on the URL parameter on the make-call endpoint) : app.post('/voice', (req, res) => { const twimlResponse = new twilio.twiml.VoiceResponse(); const gather = twimlResponse.gather({ input: 'speech', speechTimeout: '3s', // Wait 3s for the user to say something action: '/process-speech', // This won't work locally as well. Use something like ngrok method: 'POST', // Method from the /process-speech endpoint passed above on the action attribute }); gather.say('Please say something to continue.'); // If no speech is detected, re-prompt twimlResponse.say('I did not hear anything. Please try again.'); twimlResponse.redirect('/voice'); res.type('text/xml'); res.send(twimlResponse.toString()); }); 3. Create the third endpoint to process the speech, that means handle whatever the user said: app.post('/process-speech', (req, res) => { const twimlResponse = new twilio.twiml.VoiceResponse(); const speechResult = req.body.SpeechResult; // Check what the user said if (speechResult) { twimlResponse.say(`You said: ${speechResult}. Now playing audio.`); twimlResponse.play('www.example.com/path/to/your/audio.mp3'); // Replace with your audio file URL } else { twimlResponse.say('I did not recognize that. Please try again.'); twimlResponse.redirect('/voice'); } res.type('text/xml'); res.send(twimlResponse.toString()); });
@@manfraio can you make a separate video about that
can you please make videos on zustand, react-query, zod, react router and lastly how can we use them all together efficiently?
Yes we have plans to add react, react native and next.js videos. We’re focusing more on backend for now but soon we’ll have full stack projects. Stay tuned!
good, how can I send document(pdf) along text message
Use the upload function to upload the pdf file to whatsapp server: async function uploadFile(filePath) { const data = new FormData() data.append('messaging_product', 'whatsapp') data.append('file', fs.createReadStream(filePath) data.append('type', 'application/pdf') const response = await axios({ url: 'graph.facebook.com/v20.0/phone_number_id/media', method: 'post', headers: { 'Authorization': `Bearer ${process.env.WHATSAPP_TOKEN}` }, data: data }) return response.data.id } Then call the uploadFile function and send a message along with the file: async function sendPDFFile() { const pdfFileId = await uploadFile(filePath) const response = await axios({ url: 'graph.facebook.com/v20.0/phone_number_id/messages', method: 'post', headers: { 'Authorization': `Bearer ${process.env.WHATSAPP_TOKEN}`, 'Content-Type': 'application/json' }, data: JSON.stringify({ messaging_product: 'whatsapp', to: 'phone_number', type: 'document', document: { id: pdfFileId, caption: 'This is message', filename: 'any_filename' } }) }) console.log(response.data) }
Could you please create a full-stack project using modern popular tech? I truly appreciate the time and effort you've invested in creating such amazing videos.
Thank you for your comment. For next year we’ll have full stack videos with react and react native as well. We’ll also have a website with templates that we can use for the frontend. Stay tuned my friend.
Thanks a lot. Sometime ago, I didn't have knowledge about the Stripe payment gateway system. After watching both of your videos, I learned so many things about Stripe and subscriptions. Thanks, man. Love you from India.
That’s great my friend. Glad I could help.🤜🏻🤛🏻
sir do you have a PC or a laptop? Please share its specifications, and if you have both, kindly share the specs of both
I have a mac pro with apple chip and a HP laptop with windows. Mac with 1T and 24gb of RAM and HP with 1T and 16gb RAM.
@@manfraio I heard that most programmers use Linux.
Yes, since a was developing for iOS, I use Mac for a long time. I just got used to it.
Thank you so much, sir! Your videos have been extremely helpful to me. Please continue creating more content, and I wish you good health and success in achieving all your goals in life.
Thank you my friend. Glad I could help. I wish you the same🤜🏻🤛🏻
Hey man. Thank you for this
Love from Pakistan
sir you are back 😇
sir do you run a business, work a job, or do freelancing?
@snacksports8188 I actually do all 3 lol. But I’m more focused on my job, which is backend with ai, and a little of frontend as well.
Thanks you a lot.
thanks for this sir. Can you do another video with updated technology of postgresSql with prisma or other ORM and Nodejs sir
Yes sure. We’ll publish 3 videos soon with Postgres and Node.js, using Prisma, TypeORM and Sequelize. Stay tuned!!
@@manfraio thanks a lot sir, I'll be waiting. Btw I am your new subscriber.
Very helpful, thanks alot.
Love it. Can you make more video like this on more advanced stuff in node pleasee!! You are very clear.
Nice content bro! I see that you always type Brazil, are you Brazilian as well?
Obrigado meu amigo. Sou sim rsrs
@@manfraio tem linkedin irmao??
@@manfraio sou muito grato para esse video, vou precisar integrar o Twilio no meu micro-saas esse mes.
TOP TOP TOP Thanks
Thank you very much. Very long time before I started to understand this. Now I got it .
Thanks man, do you have experience how to send to WhatsApp or viber messages with twilio or maybe another service?
For WhatsApp I recommend using their official API. There’s a video here o the channel explaining how to use WhatsApp API with Node.js. Integrate Whatsapp API with Node.js: th-cam.com/video/4cvQxqFZTIQ/w-d-xo.html
@@manfraio 🤝 thanks a lot, bro
Please Help!! Followed same flow but facing below error. We’re sorry. This seller doesn’t accept payments in your currency. Please return to the seller and choose another way to pay. Thank you in Advance 🙌
Hey my friend, hope this will fix your issue: 1. Log in to the PayPal business account. 2. Go to Profile > Account Settings. 3.Under Money, banks, and cards, click Manage currencies. 4. Add the currency you want to accept payments in.
These bro's contents is on another level 🙌🏾. I subscribed and hit the bell to receive every video you uploaded since the day I found you on YT. Keep it up, we are here to support you. Bless.
Thank you very much my friend.🤜🏻🤛🏻
Sir your content just ❤
great
This is great
Thanks. great simple explanation
thank you, this is exactly what i needed
Where did you learn all these NodeJs knowledge yourself?
Thank you for the comment. I work with Node for 8+ years, so I learn a lot working in different projects.
Hi, one quick question... when I first run "npm init" and then again click enter in the terminal, it doesn't create the package.json file
okay nvm I got it now
Great. Sometimes you might have to refresh VSCode when using npm init for the package.json file to appear.
How does it work if someone wants to upgrade part way through the month? Ie get more licenses or something
When a user upgrades to a different plan in the middle of the billing cycle, by default, Stripe will automatically apply proration to account for the time left in the current billing cycle. This ensures the customer only pays for the upgraded plan for the remaining period and credits any unused portion of the previous plan.
@manfraio thanks for the reply. So it would also be able to adjust the licences etc via a Web hook to suit?
Sorry I didn't get your question. When you say license you want to actually update the subscription price?
@@manfraio no more along the lines of if my white label product can create 10 items for £10 a month and the upgrade to 20 for £20 could I use a webhook to change the limit mid month as its tied in with the subscription
Thanks a LOT, you're awesome. Great explanation!
I just closed all my paypal accounts after struggling for 8y with their ass Documentation that is rarely up to date and mostly merges v1 with v2 in a total mess. (+ their website loads like ass; even though documentation is mainly text) But today , was too much. I have 2FA enabled on account so imagine what happens when the SMS CODE is no longer coming. Try to ask for help in support chat ? Nope, you need to be loggedin. Try to call ? Robot handler. Try on forums ? Nope, Paypal loggin. Try to make new dummy account ? Nope, it requires phone number , that uses OTP code .. back to square 1, since their SMS does not work/is down. I am locked out from account for 3days now. With no remedy in sight. Thanks for the video. I knew Stripe integration was easier .. but damn , this is too easy.
Thank you a lot, it's the first time I found a 1 hour tutorial video REALLY interesting and well built ! I didn't lost my time, your lesson is pure gold, thanks again !
Thank you for the comment. Glad you liked🤜🏻🤛🏻
@@manfraio You litteraly saved my life, your tutorial clearly deserve at least 1 million views 😀 Keep this kind of content bro !