Module 1 - Introduction
1. Welcome to the course2. Why Go3. Why start and build a blog?4. What about React/Vue/Angular?5. Getting setup and source filesModule 2 - Tech Stack Walkthrough
1. Introduction to Golang Part 12. Introduction to Golang Part 23. Introduction to Golang Part 34. Structuring Golang Applications5. Templating with Templ6. Just enough interactivity with HTMX7. Getting started with postgres8. Servers, routers and endpointsModule 3 - Creating the MVP
1. What are the minimal requirements?2. Doing some initial plumbing3. Embedding static assets4. Creating our first views5. Tailwind & Utility-first CSS6. Styling the Landing Page7. Styling the Article PageModule 4 - Managing Content
1. Choose your own adventure2. Writing in Markdown3. Parsing Markdown to HTML4. Frontmatter and Meta Information5. Making our code examples look nice6. Adding error pagesModule 5 - Adding the Database
1. What is a Migration?2. Our first migration: articles table3. Creating the Database Layer4. Showing the Latest Posts5. Slugs and Human Readable URLsModule 6 - Managing the Blog
1. What are the minimum requirements?2. A new layout approaches3. Introduction to authentication4. Our second migration: Users Table5. Storing passwords securely6. Authenticating users Part One7. Authenticating users Part Two8. Remember me/Forget me9. Managing posts using a hypermedia API - Part One10. Managing posts using a hypermedia API - Part Two11. Managing posts using a hypermedia API - Part Three12. Managing posts using a hypermedia API - Part Four13. Implementing CRUD For Articles - Part One14. Implementing CRUD For Articles - Part Two15. Implementing CRUD For Articles - Part Three16. Implementing CRUD For Articles - Part Four17. Flashing Ourselves/Providing Visual Feedback - Part One18. Flashing Ourselves/Providing Visual Feedback - Part Two19. Flashing Ourselves/Providing Visual Feedback - Part ThreeModule 7 - Adding Subscribers
1. What are the minimum requirements?2. Expanding the database: Tokens & Subscribers3. Creating the token and subscriber models - Part One4. Creating the token and subscriber models - Part Two5. Creating the subscription form6. Saving and verifying subscribers - Part One7. Saving and verifying subscribers - Part Two8. Saving and verifying subscribers - Part Three9. Emails and Clients - Part One10. Emails and Clients - Part Two11. Emails and Clients - Part Three12. Our fifth migration: Tokens Table13. Email validation view14. Email validation tokens15. Sending validation emails with SES16. Making it all come togetherAdding Subscribers
Saving and verifying subscribers - Part Three
Summary
Coming soon.
Transcript
We need one more handler and that's the handler that's gonna handle the error cases where we show the we could not validate you, please request a new token. And this one is gonna look very similar to the subscription create handler we just made, right? So I'm just gonna copy paste it here. Save. And then we're gonna go through it, right? So we still accept an email, we pass it, we begin the transaction, get this email. And then instead of creating a subscriber, we just get the subscriber, create a new token, we send the validation email back to them, which is gonna be the same email as the one we're gonna send in the original flow, commit the results and then return a subscription response message. So this one very similar to our create, the only difference is we don't create a subscriber, we only create a new token for the subscriber with that email. And of course, if there's no email for the provided email they provided, you know, we are so far down the rabbit hole that they will probably just go back and try originally again. So we could return that. Yeah, that's it. But this is a very robust flow. We deal with a lot of the cases. And yeah, this is all the elements we need to start accepting subscribers and having them validate their emails. One final thing, we need to add our new controllers to our routes. So let's go into routes here. And under the load app, we are gonna be adding the just at the post here, we're gonna add the slash subscribers. And we don't need to add middleware, we need to just return our subscriber create controller pass the echo context. There we go. Then we also need to have a get that goes to slash subscribers email verify. Again, that just returns our CTIO, our subscriber subscriber email verify handler, then we also need another post here for our subscription validation token. Don't know why this word is so hard for me. Nope, we don't need that re post that's correct. We need a regular there we go. There we go. Let me need to return the subscriber verification token handler. Finally, in our fragments, let's just register our subscription form fragment, our subscription form as a fragment so we can return that with HTMX subscription form. We're gonna pass the func. No, it's weird. It keeps doing this. Funk. I'm just gonna grab this up right here. Hopefully, it will play a little bit nicer. And it's gonna be our subscription subscription. Do we actually not have a form? We have not created our subscriptions form fragments. Okay, so back into controllers. Let's create this really quick. We shouldn't really need that much since we only need to return views subscription form and CCSRf token request render and arcs CTX. So there we go. Now if you go back, yeah, the output. So I like to register fragments whenever we can call them in the way we call the subscription form. So that these fragments gets reusable. Now, the final thing we need is we need to add the emails, we need to create the emails, we just need to create a client that can send emails and then we can actually finish up the controllers and start testing our subscription flow.