Django Chat

LearnDjango.com

Episode Summary

Will recently launched a new Django site, LearnDjango.com. We discuss architecting new projects, prototypes vs production, payments, performance, and more.

Episode Notes

Episode Transcription

Carlton Gibson  0:06  

Hi, welcome to another episode of Django Chat, a weekly podcast on the Django web framework. I'm Carlton Gibson joined as ever by Will Vincent,

 

Will Vincent  0:12  

how are you? Well, we're here, Carlton.

 

Carlton Gibson  0:18  

This way, we're going to talk about Will's new site, learn django.com. So Well, you've had, you've always still got a site, I guess. Well, wsvincent.com. Yes. So I'm, you've started a new one. I started it took us about that. And

 

Will Vincent  0:32  

yes, so this is a long term project that I'm working on. So canonical source of my own stuff on on Django that has tutorials, eventually books, courses, videos. And so I want to talk about what it was like building that and more broadly, what it's like building a new site from scratch, sort of the considerations and because I think there's, there's so many choices you have to make and some some matter and some don't, some of you just have to decide and don't really have huge architectural implications and some do. So we can But that.

 

Carlton Gibson  1:01  

So where to start? We'll talk about tell us why you decided to start a new site? Because Will Vincent has been your sort of personal brand.

 

Will Vincent  1:09  

Yeah. So site for a while while you're writing the books? Sure. Yeah. So so the wsvincent.com site. It's a Jekyll site, which is a static site generator written in Ruby. And it's really just, I've had it for four or five years, just as a way to put tutorials and things out there as I was working at different companies. And, you know, so it has reached a point where it gets six figure monthly unique traffic, and it's gonna have a couple of million people a year. I mean, that's pretty. To me, that's pretty high for just a personal site that I don't spend too much time on. And it's just got a mix of things like Python JavaScript book reviews, you know, so I think I want to have a more Django specific place where I can put tutorials that are on Django, I can lead people by the hand and really the goal is to mimic what I do in person, which is to Assess kind of what someone's level is, are they a total beginner intermediate? And, you know, I've sort of built a library of learning materials, but I want to direct people a little bit better towards them instead of just searching, you know, how do they find stuff most most people come in through Google search. And then they leave. But I know that they come in and they look at something on Django rest framework, you know, and there's four or five other things I have that I could tee up or present. or, even better, I could do a linear progression where I could say, oh, you're at this stage. Here's, you know, here's how to go ding ding ding ding and feel like there's some order to learning not not there's a kaleidoscope of googling around and not knowing what you're doing yet for

 

Carlton Gibson  2:42  

a tutorial on this topic. Do a bit more Stack Overflow. Yes, a bit more Google. There are another tutorial that was good. Like a an experience to choose your own adventure. Yeah,

 

Will Vincent  2:51  

so the site is and part of this so I have the site up, it's not finished. It will always be worked on but there's Enough up there, there's there's searched through tutorials will be books, and I have it up, but maybe something to talk about it. So the site itself is I was I've been playing this for a long time as I give serious thought to, if I should build it in Django or make it a static site, because it's essentially a static site. And I like using static site generators I use I've been using nullify for my hosting, which is really fantastic that handles everything. SSL load again, it's, you know, a couple million pageviews and I don't do anything until recently I didn't really have to pay for it either though they've started adding some pricing their customer but at this, but this new site. And so I did waste a bit of time building out building out a whole version in with Jekyll because on the one hand, I so right now all my all my tutorials and stuff, they're their markdown files, and there's something more reassuring to me about having them. You know, in my In get as opposed to in a database, which Yes, I backup my database, but it could be lost and, and also it's even, you know, even me with I spend so much time on Django part of me was like, it's a lot of work to do a Django site, do I really want to do a Django site?

 

Carlton Gibson  4:15  

Okay, so what's the because I, you know, from your first description of what the site's about, I've already liked but you clearly need a dynamic site, but like, what, why don't you away from the statics?

 

Will Vincent  4:27  

Why'd why don't why not do a static site? There's two reasons why, I guess the main I think, the main reason, but three, three reasons. So one is that I do do Django and I need and want just to evergreen projects that I can perfect and play around with. Because I found myself recently writing these books that I've done a lot of kind of hobby project sites. And there's something a little bit unfulfilling about that it's also because I need payments and I know what the future site will need. And so even though it's a little bit more work upfront, I'd, I'd rather build that I know I'm going to need an eye Don't I've, I don't see that as over engineering, as opposed to just getting up and running. And the third, you know, the third is we can get get to this payments. So payments, if your payments are really hard right now, it's stripe and all the other companies, there's was s SLC, there's a new European law. So historically, you had to have a dynamic site to do payments. So you could pass the token back and forth. There are now options where you can do one hosted by stripe or PayPal and do a web hook in, but I basically knew I would need it. And I think what I've my current site is actually I'm really happy. I've did all sorts of versions of it and over engineering, but it's really quite basic what I have now where I have the site itself I have so I have tutorials so I have essentially a tutorials app with a ListView and a detail view. Same thing for books off Same thing for courses. And I the maybe the biggest thing for performance because I'm I'm now redirecting the blog post to my personal Over, because I have CloudFlare sitting in front as a CDN. So it's a dynamic site that loads instantaneously. And it's fast and it doesn't take much. I don't have to have a big database or anything behind it.

 

Carlton Gibson  6:14  

Because it essentially is still loading templates off the file system. Right. And so the Django view is loading template. Yeah, yeah. So

 

Will Vincent  6:20  

rendering it sending it right. So two things to say. So one is, it's it's all server side right now. I certainly had played around and would love to probably build it with view and, you know, do all these nice things. But that's very much third, third phase for me. Yeah, we've talked about this, you don't need to jump to that you probably shouldn't for a solo project.

 

Carlton Gibson  6:38  

Right. But it's right. But it's actually it's a solo project. Right. So you're building it yourself. Right. So you there's a big question about what's possible with one pair of hands, right.

 

Will Vincent  6:47  

Yeah. And the other bit is, if you're just note, if you're doing redirects, you need to watch yourself, you need you don't want to get those wrong, you want to do a 301 redirect, and we could do a whole episode on that but you want be a little bit careful because you're the blackbox. That is SEO, you lose some some of your juice when you do a redirect. But you could lose like all of it, or you could really lose stuff. So it is sort of a long term play like my traffic has gone down a bit, because now there's this new site. And even though I'm redirecting, so I sort of know that as part of, you know, a project where you started and just have all these things, then you go more specific.

 

Carlton Gibson  7:24  

I believe it's important that you put in this ref canonical header in the old place. Yes, point. Yeah.

 

Will Vincent  7:28  

And things and there's a way so within jaql there's a there's a way to do it properly, and actually, interest someone interesting natla phi just notified me that I have two weeks to change because how they handle redirects is going to be muffed up. And so I'm like, Great, thanks nullify, that's just what I need, like, something important and technical to deal with. But anyways, so it's built in. It's built in Django and you know, the considerations when you start a project from scratch. I put a lot of thought into, you know, again, it's it's it's sort of like contemplation when you over engineering. When you're in when are you not thinking about the authentication and users? You and I had a discussion about this, and we put on the forum of, Okay, well, how do I want to handle authentication because I do want to have it because I'll need that for people who log in and pay

 

Carlton Gibson  8:13  

you, but also login and build up a reading list and things like this. And you know, if you're going to offer a learning path, and you know, it's alright doing that statically. But if there can be little ticks that appear for an individual user, and all of that kind of stuff. Yeah, I guess you could do it with JavaScript. But really, you want that to be back end driven,

 

Will Vincent  8:28  

right. So you, it's nice to have, you know, checking your progress. I mean, there's this whole there's a whole it's actually not really gender specific ideas, thoughts around Do you require a login? How much do you get How much do you not for now, I have a mailing list at the bottom so newsletter, because, you know, some people want to get updated whenever there's a new article or once a month, and some people don't, but they still want to be in the system. So that's actually something I'm still going. That's going back and forth a bit on. For how do you handle that, right. there's sort of two streams of thought, one As you, you put you do this drip campaign thing where people come in and you basically hit them with automated sequence until they unsubscribers or stay, basically until they buy something or leave. And the other is maybe more like, like a West boss approach where you require the email upfront, and then you only email like, when you have a new course once or twice a year. Yeah, most people would recommend the former, but I feel like there's something to the ladder, especially if you're an individual where it's, it's you it's not a company, you know, they

 

Carlton Gibson  9:30  

say this mailing lists are so common now. Like, you know, and these these nurture sequences. I don't know that. It seems like everyone's got a subscription you can sign up to and you get so many emails and the value of them isn't always that, you know, this is a nurture sequence that really is giving me something so

 

Will Vincent  9:48  

yeah, I've I've, I've talked to a number of people running successful learning companies, you know, like companies with people and consistent advice I've gotten is you are not your customer. So you and I Carlton We're power users. And we I personally don't like drip sequences, I find it off putting, but hard to say no, for now, I'm not browsing people, they do have a login thing. And to get back on that topic, one of the, maybe you can talk about so there's, I like doing this idea of you. I use Django all auth, which is a package. And I like having email and password, actually not using username. And then the last bit of that is I have to wire up my email service, which I use sendgrid for that, which is pretty straightforward. I have some tutorials on that. But you have this nice approach that you like to use, right? Well,

 

Carlton Gibson  10:38  

yeah, well, I like usernames. Okay, so I'm just really old fashioned, but it's that, you know, the username for me is like something that can appear on the site, you know, so if you've got a profile page, it's like get out. Well, yeah, yeah, like it right to that kind of publicly exposed mobile user unique user identifier. That's your username. That's my username. That's someone so using it. I don't I like to use email for logging because people like that, and I'd want all auth gives you is it's nice email, email ability to handle multiple emails and you can verify them individually. And you can mark one as primary and it allows you to helps you to do the login with the emails, and it's got some good stuff going on with it all. And then the user ID is like, you know, the actual ID that's in the database, but that never goes public. So I never put that in the URL, or I never put that anywhere. That's that's, that's, that's the, the, the internal unique identifier, which picks out the user, but that's not the username. Right? Yeah. What an email, you know, it can have multiple emails per account. And it depends on the needs

 

Will Vincent  11:39  

of the site. I mean, that's something I so for my site, it doesn't really, you don't need a public username, because it's you log in and you have access to courses, but it's just as if there were if it was, yeah, that's a GitHub or Twitter clone or something. Absolutely. I would adopt the approach your address Yeah. And indeed, I built the whole, you know, version kind of the way you had described. And then I really thought about I was like, No, you don't ever need that for what I'm building, which is just basically an L, you

 

Carlton Gibson  12:11  

know? Sure. And when I say, when you say advocate, it's what I like to use insights that I build for these reasons. Yeah, but

 

Will Vincent  12:17  

but this is it's a this is a fundament, you know, one of the decisions that really does matter that has to be made is worth some thought, as opposed to, you know, I don't know, when you do the start project command, do you put it in the same you know, do you add a period or not, you know, is there an extra directory like there's a whole bunch of those. And side note, my book Django for professionals, I walk through a lot of these steps of showing one way and talk about the trade offs for how to do all this. So if I appear tired and garbled in this, which I am, that book is a resource. But what else models right so if you are switching Yeah, switch gears. So models, there's let's take the tutorials. Actually, I probably should pull up what I even have in models. Okay, so so model. So I mean, I think it might be interesting to talk about the model I have for tutorials where and this and again, this pattern repeats itself for in many projects. So I have an author, which uses get user model. So that refers to who writes it as you watch me, it's me. And I guess that's perhaps that's slight over engineering because it because you've scaled you've already scaled up for when you've got the whole media empire fleet, and it's 40. Yeah, he's right. That's a whole separate thing, but I have the capability of doing if I want to, and I have the title and the description. And I've had the slug, I haven't got a whole Django slug tutorial, because I want to use slugs. And again, because it's just me, I don't worry about collisions there. If I was building a Twitter, or I don't know, a Twitter clone or something, I would and that's actually a great example of if you have a username. You don't have to worry about these collisions as much like if you're building a blog platform, if it's blog.com slash Carlton slash, you know, you don't have to worry about you and I write in the same hello world example

 

Carlton Gibson  14:06  

and what post like in you might have a an extra part segment for a date which I know isn't fashionable but if it's actually you know, a blog, you might have a date which helps you keep it you need to be unique for that day or unique year unique for that month or whatever. Or you can have an extra little slug component I'm sure we talked about hash IDs and

 

Will Vincent  14:26  

say no expert identify which is Yeah, and I cover user. I don't use hash ID in this I was gonna say I do in the Django professionals book one of the chapters I walked through ID UU ID, hash ID, you know, kind of that's tricky for beginners to understand how you how you implement that. But but with learn Django, what you've got it because it's just you at the moment, you don't need to worry so much about the collision so you can make sure that Yeah, I don't have to worry about that at all. And actually, this is in my my Django slug tutorial, which you can find in the search thing on learn Django calm Use the admin section because for now I'm putting any admin so it auto populates the, the slug so it saves me a step of, you know, if it's hello world, it'll automatically lowercase it and be Hello dash world.

 

Carlton Gibson  15:14  

And I'll link to that again. So you're using using the admin, you've got super win there, because you've got a UI which is perfectly acceptable.

 

Will Vincent  15:20  

Yeah, yeah. for free. Exactly. Um, the last bit is two things. One is I so I added created at and updated at field. So the, the created add is auto now add update as auto. Now, a nice way to do this actually, that I wasn't aware of that Jeff Triplett showed me is if you use Django extensions, there's a one of the Swiss Army features in there will automatically add these updated, but but basically any, almost any model that's gonna have users update, you want to add a create that update just as a, you're gonna want it later. situation. Yeah. And then the last bit is I have a is live Boolean field so I can do, I can do drafts and, you know, decide if something's flagged or not. Yeah. And that's, that's really it. I mean, I also, you know, have to underscore string method, you know, get absolute URL for the detail view. And, and that's kind of it I've, I've made more complicated versions of it, but it really doesn't have to be much more complicated than that. And that's the same approach I have for

 

Carlton Gibson  16:24  

what I say like the thought across mine, you and you say about not making it more complicated is dead, right? start there. And then you can always add a migration, right? You can always add a few that right, the Django is migration framework is super, and it lets you evolve your model as you sit there spend three months planning all the fields and all the possible interactions. And you've got this model which has got 42 feet and you only ever build the software for the first four fields because, yeah, you never you never get to that. So just drop all that time and just write the four fields and work with those that I need new field fine,

 

Will Vincent  16:58  

you can always add them in Make migration definitely going that route of. I can always add stuff in and migrations are fantastic. I guess two other big buckets to talk about. So one is deployment. Yeah. So how are you deploying? So from so I'm using, I'm just using Heroku. Because I'm familiar with it, because there is a slight cost. But I think what I have now with decent traffic cost me $7 a month or something. I mean, okay. And again, because I have CloudFlare sitting in front of it is the CDN that absorbs the bulk of it. And it makes it fast, and I'm not getting the data, you know, the server's barely being hit, because everything is cached. So can I can I just

 

Carlton Gibson  17:37  

call Yes, sir. Can I call you up? You've said CDN a couple of times. But for CDN, when someone says that then brings to mind like images and static files, but it also can be distributed to edge location. But is it also a caches? Yes. Okay, so how are you setting the caching headers to tell

 

Will Vincent  17:54  

Yeah, so for now, I'm for now it's just updating Every I should double check with is I think it's, I think it's every once a once a day. So this is something I will go a lot deeper on when I have where I'll, it'll be section or page specific. But for now, what I want to do is have it. And actually I should double check. So when I, whenever I do an update, it refreshes the cache automatically, but I'm just doing very broad strokes, you know, Django

 

Carlton Gibson  18:22  

on its own, because they're still largely static pages, right?

 

Will Vincent  18:25  

Yeah, everything is static right now. I mean, there's nothing you know, if, you know, when I start having, when you're logged in, you see things that you've checked in progress that you've made, you know, that's when I will fine tune that. And there and I'm actually not quite sure exactly how I'll do that, you know, so Django comes with a built in caching framework that you can use, I have a tutorial on that, but then also CloudFlare lets you do it sort of the CloudFlare level and I'll probably do it okay within CloudFlare CloudFlare CloudFlare. More than Django, but I haven't done that for real yet. So right now As we need Brad stone

 

Carlton Gibson  19:00  

Django says how you say you're rendering markdown, right, which is an expensive, which

 

Will Vincent  19:04  

I'm also doing, by the way, another tutorial on how to do that.

 

Carlton Gibson  19:07  

Right? So say you're rendering markdown, which expensive process, you want that rendering bit to be done. So you could at least the rendered markdown fragment, you would cache that in Django. Yeah. So that that, that, you know, if multiple requests are made for the page, then it just it doesn't have to re render the markdown is, which is the expensive bit was rendering the template. That's pretty quick. You know, if if the markdown is already converted to HTML, injecting into the template and sending the template along, you know, that's not a slow process.

 

Will Vincent  19:36  

Yeah. And you you were very helpful as I was actually, I got a little bit tripped up in the markdown part of last year. And in the tutorial I wrote around it I showed I talked a little bit about some of those options. And again, it's a little different to where this is just me now so I don't have to deal with it's not a public blogging platform or something like medium where these things matter a lot more for now. It's just me and the performance. If I can

 

Carlton Gibson  20:01  

toss behind the shooting with the public platform, as you know, people are going to submit markdown you have to make sure that that sanitize. So you might use something like bleach or

 

Will Vincent  20:08  

absolutely right. So all these security concerns

 

Carlton Gibson  20:10  

if it's just you, you can trust that you're not going to, you know, inject malicious HTML into your site.

 

Will Vincent  20:16  

Yeah, hopefully not. And that is actually something where you know, how you configure your static files and stuff when you're dealing with. If you're using white noise, which you probably are for serving static things. It will not do user uploaded. things. You have to use Django storage. Yes. And again, apologies. I'm super sleep deprived. But

 

Carlton Gibson  20:37  

there's no no, but that's exactly right. Yeah.

 

Will Vincent  20:40  

So that that I had a small little bug on that. And I'm like, what's going on here, and that's what it was Django storage is a white noise will not do that. You have to use Django storage is just to get around that and that's security thing. So some extras. So this is more of the list of when you break down like just a basic Django site. There's so many things you can and should add to it. So you know, searches one. So I have basic search set up where I'm, I have a tutorial on this where it's just nothing fancy. I'm not using Postgres built in search, even though I'm using Postgres. So I will add that later on. That's sort of a nice feature to add sitemap Sitemaps are so that's there'll be like a slash sitemap dot XML, which you can point to Google or whomever and say, Hey, here's a listing of my site. And you can add meta information around, like how often to update it. That's something you should do. There are some gotchas on that. If you have a very large site, so I had this on a project, a Django project couple years ago, where I had 200,000 things in the database. The Sitemaps will only do I think it's 50,000. You can't just have a single canonical sitemap. You can break it into sections, and that's something you want to do. A little tricky there. syndication the number was something like many thousands, I think the limit is 50 30,000 within Django, I think I found that generating them was so slow on my server in such a hit that I made it 5000. Right. But you know, that could be, you could change that number of ways. But just be aware that there is a limit and you want to, you want to have Sitemaps syndication framework. So that's if you want to have like a RSS feed. Django also comes with built in support for that, but you need to add that, that's something else you should add, even if you think people don't use that a lot of people still use that. And you can point other things to it. Especially if you're doing you know, like a blog kind of site.

 

Carlton Gibson  22:38  

As I am, like, you know, if you've got an RSS feed, then you can really easily go to Zapier or you know, Microsoft's power automate, or whatever they call it, and you can wire up your RSS feed to post to Twitter or post to Facebook. And it's all because you create an RSS feed, whereas if you didn't, you can say, Well, you know, I've got to write a little agent that runs on this And it checks every so often if there's an update or you know, don't do any of that just create an RSS feed and then use, you know, power automate, or Zapier. Oh,

 

Will Vincent  23:08  

yeah. And I guess relate to just the the suite of tools that you use. Obviously, I'm using Google Analytics, I'd like to use something else long term, but you know, analytics are good. I'm using uptime robot to just check if the site goes down. There is a Django has a translation, fantastic translation framework that comes with it, because this is just me, I'm probably not going to use that what I found actually, and this is another reason why I want to move from PDFs to online is that readers, you know, can use the built in browser translations, which is very powerful and very good for my for my book, so I'm not gonna be using that. But a lot of larger projects, you'd want to use that and what else there's just there's so many little things right? Even though I build these, I build sites all the time. It's been a little while since it like fully built one out and there's just so many small steps that I find myself kind of, you know, it's like I have Have a list of like the first 10 steps, but then to get to step 100, you know, I kind of even I meander,

 

Carlton Gibson  24:06  

right? Even though you can't get it like you, you have, how can I phrase it like you have this you sit down with a piece of paper and you know, loss of wine or whatever and coming up with a plan for your site, and it's gonna have all these features and this bit will be written in react and you know, all that stuff goes on. And the reality is that, you know, getting just getting the logins, right, so that it's 100% and getting it so that when people sign up for the newsletter, like they actually get the newsletter and they only get one and they don't, you know, they can control that preference and all the unsubscribe links are in the right places and that takes ages and then put again your tutorial so that they come up nicely and people can you know, view them right or get an update from their RSS feed or whatever. It just takes ages to get this.

 

Will Vincent  24:52  

Yeah, there's a big difference between that

 

Carlton Gibson  24:53  

you never ever reach you'll react.

 

Will Vincent  24:56  

Now never get well I think there's a what's needed. About this site is assists the prototype versus production thing is that unusually I already because I'm redirecting traffic like I know it's going to get a lot of, you know reasonable amount of traffic. So I'm, I'm a little more careful with this than I would be if I was just throwing it on the wall and see if it would stick. But it does take a lot of time. You know, of course I've changing the admin, it's not it's slash admin. That's the best practice we've talked about. And I'm using Docker throughout, which that's a separate discussion, but I find that I know how to use it, it works for me, I'm just deploying the container

 

Carlton Gibson  25:32  

up there. I know how to work it works for me. That's like, that's the that's deployment.

 

Will Vincent  25:38  

Yeah, isn't it? You know, at some, what are some other cool things? So for for my continuous integration, I'm using GitHub actions, which actually works pretty well.

 

Carlton Gibson  25:49  

Is that deploying straight to Heroku? Every, every commit to master something? Yes.

 

Will Vincent  25:53  

So I don't have a server as staging setup right now. I am against that tension between getting stuff up there and adding all the things that I know, I probably will at some point, but again, because it's because it's just me, I, you know, I'm, it's different than a team production site. Yeah, if I need to, I can always you know, I can revert a commit, I can rollback something. So I'm a little more fast and loose there than I would be if this was a team of people.

 

Carlton Gibson  26:23  

But that's, that's exactly the right thing. And like, you know, it's like, using Kubernetes, which is great if you're a big team and you need 500 engineers, and they all need to work on separate projects, and they need to be able to do that fine, brilliant, but if you were to man man or two person, bam, what on earth using Kubernetes? Well, I mean, you

 

Will Vincent  26:42  

know, it was your Twitter comment, but I love the other day about Kubernetes

 

Carlton Gibson  26:46  

Well, just you getting your eldest to sort of look after your newborn like this, like using Kubernetes.

 

Will Vincent  26:53  

Oh, yes. Because I was saying, you know, if you just space out the kids, then they take care of themselves. Yeah. So I will and then and then so and then the last bit is payments so payments is a total it's unbelievably messed up how hard it is for a small business to do because you have taxes you have the you know all these requirements that have come in I would love to just use a service and be basically like so for me as a small business content creator I just want credit card and PayPal. PayPal is important because a lot of people use that. PayPal is very challenging to work with, you know, stripe obviously doesn't have PayPal support. So then you go Okay, what am I going to use? There's charge B there's Braintree there's a new one paddle. I believe it's called that dampener wheel pythons using that handles in theory all the tax stuff for you but they're opaque on their pricing and notes and so much of this you know I've tried to talk to lawyers and other people who run platforms. A lot of these rules around Nexus So do you have to collect state tax you have to collect you know VAT even though I'm based in the States, they don't really apply until you are at a larger scale than I am, you know, something like seven figures. But yet so basically you, I find that I, even though I want to and I will put time into do this properly, there is no way to do it properly because the rules are being changed. It's completely onerous for small business to do, there's no all in one solution. But if someone were to have, you know, credit card, and PayPal, and handle the taxes, there's services like tax jar and stuff that you can plug in, but it's a real cost. And this is the other content creators I talked to. We all just go oh my god, this is so hard to do. It's even harder for subscriptions, that part of the new rules is around, you have to you can't just indefinitely have someone be subscribed. I'm gonna be doing not I'm not gonna be doing subscriptions. I'll be doing courses, but it's still a lot of work. And honestly, it's something that's post paternity leave hopefully post Corona virus that I integrated All that?

 

Carlton Gibson  29:01  

Yeah, no. I mean, it's always been the way that I remember, you know, 15 years ago trying to it was always iframes. And you know, it was just horrendous. And then stripe came along and it was a lot. It was a lot better.

 

Will Vincent  29:13  

Yeah, but still not that stripes fault. But stripes had to react to this, this new European law, which just mix it all up. And PayPal is still challenging, and you know, and that's the bit to where I like, I really don't want to get that part wrong, right, like so I have testing but obviously, I really don't want to get payments wrong for a lot of reasons. So for now, I'm still

 

Carlton Gibson  29:34  

in testing payments is just so long that it's really hard to there's no they they don't offer any way of like, for instance stripe with their off Connect platform where there's no way of testing it short of manually creating an account and, you know, stepping through it in the browser and to know that it works, but that's not a sustainable testing program. That process that's not like, you know, pi test goal.

 

Will Vincent  29:58  

Yeah, I mean, I in theory, you could Do you could do some headless stuff? Or you could do some of its practice from people who've spent time on this? Yeah, it's it's just there's no perfect way to do it. It's really

 

Unknown Speaker  30:14  

yeah. challenging. Yeah, challenging. So. So that's the state of things.

 

Will Vincent  30:20  

The site and the design of the site is something that I've kind of punted on. I mean, I love doing design, but it's a bit of a time trap for me. I'm just using bootstrap. It looks fine. It's up. You know, I'm focusing on keeping it up to date. At some point I will eagerly look forward to devoting time to making it look great, but I'm not letting that get in there are acessory do something like that? Yeah. What else? Is there anything is there anything else you know? And so video I'll probably be doing video at some point. Because I have things structured the way most people do this is you can use for private video you can use you could use YouTube, but then it has ads you can use live people use Vimeo or they use Wistia Wistia is a bit better, but it's quite expensive. And what a lot of people do, which I'll probably do is you you use YouTube for the free stuff so you don't have to handle the bandwidth yet and then you use something else for the you know, behind the paywall version. But we'll do the episodes as I build these things out, it'd be interesting to talk about. But the basic site, you know, if I knew what I knew now, I mean, it's not that much code. It's really a couple apps. It's the authentication, I'm using CloudFlare you know, payments will be a big struggle. I've got Sitemaps and syndication, but it's, it's simpler than I thought it would be actually. And partly, that's because other people who build sites in Django on this are doing things like they're using Redis and they're, like, sharding, and all these things that I don't quite understand. To me, you know, it's like this running joke with my friends and

 

Carlton Gibson  31:50  

like you're over in engineering. This is a good idea, but, you know, rather than shard get a bigger Redis

 

Will Vincent  31:56  

you know, yeah, to a certain point. Yeah, I mean, so I you know, As the site grows, that's, you know, something, the email signup, that's something that would make sense to move over, but I'm just stepping through it. And I'm and I'm actually I'm, I'm really excited about having a project where I can do what I want with it so I can have fantastic test coverage, I can play around with new things, you know, I've sort of realized that even though I could have had this up a lot quicker doing different ways. It's worth having a personal playground. And, you know, it feels good, right. And that's the challenge too. For developers. If you're working on a production product, you're just constantly given, you know, agile sprint, Sprint, Sprint, Sprint, and sometimes I want to write tests, sometimes I want to play around with something and I, you know, because of, because of where I'm at, with the work, you know, if I learn something I can teach it, and part of that I can monetize. So I sort of self justifies or justifies taking the time to spend extra time on things is to do it properly. Yeah. So I'm, I'm excited about that sounds. And, you know, you have your own project. You're working on Carlton when it's ready, we'll talk about it but

 

Carlton Gibson  33:00  

Yeah like you but you know I'm full kids following snow rush.

 

Will Vincent  33:07  

So, thank you everyone for listening. I'm happy to you know, we'll do further episodes on stuff. get feedback Yeah, there's more to be said about you know, this this prototype first production it's just for everyone. It's it's a, it's a big jump and you just have to kind of make some decisions on how you do it. And important thing is not to waste six months, making it perfect locally and never getting it up. You just got to,

 

Carlton Gibson  33:29  

yes, throw it out, release early release often, you know, get it out there and just incrementally improve and that you the minimum viable product for learn Django is that you're putting tutorials up there. They're readable, you could subscribe to them is the newsletter. Brilliant, get it up. There's no reason for it not to be up.

 

Will Vincent  33:47  

So we will be back in future weeks episodes on Django. Thanks, everyone, for listening. We're at chat Django on Twitter.

 

Carlton Gibson  33:55  

Join us next time. Bye bye