The Bygones Collective

Devlog #3: plots.club has a pilot environment!

I'm happy to report that I've done a lot with plots.club over the last few months - enough that I'm burying the lede a little with that title. I've done so much work, in fact, that I'm upset at myself for conversely doing so little with my blog as of late. In the interest of not letting perfect be the enemy of good, below I'll be blasting out a (relatively) compact list of all of the things I've crammed into the last couple of months with some short explanations and some fun highlights & lowlights around the process.

BUT before I get to that, I want to start off by again emphasizing this post's title - plots.club officially has a pilot site up and running on the Internet! I'm not quite ready to open it up to the first wave of beta testers, though I would imagine I'll start letting folks in within the month. While I do want the "production" iteration of plots.club to be open to the public, I am not interested in opening the unfinished pilot experience up to the world quite yet. With that in mind, the pilot site will serve as a "very loosely closed beta," and in order to access it, you'll need some info from me. It's shut with the Internet-security version of a bread bag twisty-tie holding a door latch shut, but it's enough to keep crawlers and convenience-based bad actors out, and that's about all I'm looking to block myself from at the moment.1

Having said all of that, it would be my pleasure to extend anyone and everyone interested in trying plots.club an invite to the beta experience! Please email me and let me know you'd like an invite to the plots.club beta, and I'll send you everything you need to get in.

Of course, being a beta experience, it goes without saying that anything and everything you see is a work in progress, and it's through community feedback that I'll continue to grow and evolve the site. It's my hope that, if I get enough folks evolved and get some proper looks at the site, I can get the production version up and running in relatively short order afterwards! In my heart of hearts, I want this fully off the ground before the end of the year, but I know better than to make any promises, as with all things now that I'm living that #dadlife.2

I look forward to hearing from folks interested in joining in on the beta experience, and I thank you in advance for being willing to give it a try!

With that out of the way, let's dig a little deeper into what's been going on in the plot-o-club-o-sphere (name is a work in progress) during the last several months:

User / login functionality

First and foremost, I want to make it clear that EVERYONE (whether you do or don't sign up) can view everything that plots.club has to offer. You just won't be able to participate, i.e. sign logbooks or create your own plots. As far as functionality of these accounts go, this will be about as barebones as it gets--I basically want there to be enough buy-in that folks (or bots) can't come out of the woodwork en masse and spam the site without a way for me to track activity at the very least. You will need to enter an email address to make an account, but it's strictly for password resetting purposes. I mention this on the site itself too, but I encourage folks to create a "child" email address that you only use for this site, i.e. (your_standard_email_name).plots@provider.com. That way, if you ever get marketing emails directed towards that email address, you can firmly lay the blame on me :)

Forms rewrite

Nothing too fancy here. I realized that Django has a neat little forms.py functionality built in, and the signup & plot-creation forms that I built out were not so robust or featureful that I needed to build custom forms, so I refactored my changes to use Django's stuff instead. A lot more structure and built-in handling, which should in turn mean a lot more stability for the end user.

Fully overhauled my existing Markdown/HTML parsing flow

I'm still not totally sold on how I'm approaching this, but here's my current philosophy: in capturing the essence of the "old web," I want plots.club to allow for the creativity that old, more "Wild-West" hosting sites allowed for, but I also appreciate that times have changed, and in some ways for the better. With that in mind, styling and formatting for the body of your plot can be written in either Markdown or HTML, but I've consciously decided to lean more towards HTML. In doing so, I have very slightly limited the amount of Markdown you're able to do on the page. It's small potatoes, and will basically boil down to that folks will need to use <blockquote> instead of being able to prefix a paragraph with > for a blockquote, and folks will need to use <mark> to highlight instead of wrapping a text block with leading and trailing ---s. Outside of that, virtually all the normal and expected Markdown and/or HTML tags for webpage formatting should work. I am not allowing for inline <style> tags, though I hope to alleviate this a little bit with the concept of "plot vibes," which I'll get into down below.

Implemented plot logbooks

I've settled on "logbook" for now, though I might change this to "guestbook" to make it a little more conducive to the idea of visitors stopping by and signing a guestbook to say hello and wish their neighbor well. At any rate, logbooks are plots.club's analogy to comment logs on an individual's plot. They are baked into the plots themselves and exist on all plots by default. I toyed around with the idea of making them optional, but in my opinion it's against the spirit of what I'm trying to accomplish with plots.club existing as a cozy community site that encourages light, if ephemeral interaction.

Email delivery / password recovery

Again, nothing fancy here - the logic flow to set up user registration is baked into Django's existing helper templates. The only real lifting I had to do was to figure out an external mail client, which was new to me. There exist plenty of walkthroughs and documentation for how to do this, but it was really satisfying to get it hooked up properly and be able to send emails from a plots.club address.

Plots now exist on "Isles"

I mentioned in my first devlog post that I would have a way to allow navigation from between plots which would naturally carry a little bit of friction (you're forced to click from plot to plot instead of being able to jump around) without being too obnoxious, but I never clarified what the latter half of this was suggesting. The answer is the concept of what I'm calling Isles. Any given group of 24 plots will exist on a 5x5 grid that can be navigated by traveling in a "cardinal direction" from plot to plot, i.e., if you're at a plot with the (virtual) isle coordinates of (2,2), then there will be a plot to the south and a plot to the west. New isles will be spun up and created when users create a plot and there isn't space left on an existing isle. This solves my initial quandary about plot-level navigation in two ways. First, users are still forced to travel from plot to plot and interact with neighbors while also never having to click more than 4 times on a single isle to get to the plot they want to visit. Last thing I want to touch on for this point - 5x5 isles are entirely arbitrary. It felt like a good balance between any given individual having a nice amount of immediate neighbors while still being entirely feasible to learn the "lay of the land" around you. I figure that if we get any bigger, it will quickly become tough to not only remember where you are on a given isle, but by whom you're surrounded. Let's now jump to the next important facet of this - being able to leave one's isle and visit others.

Each isle has an airport at (0,0)

If users want to visit a separate isle entirely, that's where the concept of the airport comes in. When a new isle is created, creation automation first builds a new plot at (0,0) within the isle which serves as the airport. This is our local plot proprietor's connection to the rest of plots.club. At the airport, you can do three key things: first, you can learn your isle's common name (more on that shortly). Second, you can visit any isle at random. Finally, you can visit a specific isle, provided you know that plot's common name. Therein lies the community aspect of what we're building here. Users who want to find each other within the plot space, or build community connections between isles, will need to travel across their isle to reach the airport, at which point they will learn their isle's common name and can share that out with others on different isles. Those other plot proprietors on different isles will then travel to their own airports, plug in the common name you shared, and be transported to your isle's airport, at which point they can visit your plot. Again, there is some forced friction here - if you and your friend have plots on separate isles, you may (in the very worst-case scenario) have to click 9 times (and enter in a short text string) to reach their plot.3 If you don't have any IRL friends on plots.club (yet!), or if you just want to explore more of what the site has to offer, simply visit a random isle and start exploring! Again, this forced friction is the core of the plots.club experience, so I hope you'll give it a try :^]

plots.club has a development pipeline

On the flip side of all this feature talk, a strictly development-related update: I was able to get a pipeline up and running for this whole process. My day job has me working adjacent to plenty of CI/CD stuff, but I've never stood anything up like this from scratch. It was an incredibly gratifying experience, and I feel like I have a much better idea of how pipelines work behind the scenes now. As expected, there was some healthy hair-pulling here and there, but I worked through it. Like many of the other items I've mentioned, Django has some built-in functionality to help with this in the form of nginx and Gunicorn integration, both of which are (relatively) fuss-free and beginner-friendly. Now I can make changes in my local codebase, have separate features in play, etc., everything you'd expect in a development environment, and when I want to make things more official, I merge with my staging branch which kicks off a GitHub action. That deployment action interfaces with my server's services to run tests and sanity-check my environment before proceeding to update my staging codebase, redeploy static assets, and refresh any running daemons. Assuming all goes well, the process from merging my local branch with the staging branch all the way to seeing those changes go live on my pilot site takes ~35 seconds. It's a really cool development despite its simplicity in the grand scheme of things. I've also already tested it from staging to main and production deployment, but since plots.club is just pointing at a static preview site for the moment, I don't have anything to show for it for the time being outside of knowing that the pipeline itself is up and running.

plots.club has been imbued with vibes

Finally, I've added the idea of "vibes" to a plot. In practice, these are just pre-built CSS themes that folks can choose to style their site. My first iteration of this is to allow a very specific subset of styling options, limited primarily to keep the overhead light on the back end, but also to ensure that plots still feel vaguely the same from page to page. As much as I love the utter chaotic variety one can find in the Web of Auld, I also acknowledge that, in forcing my users to click from plot to plot, they do need to be able to navigate through a page that isn't irrevocably borked by purposefully loud and incomprehensible aesthetics.4 In time, I'm considering letting users build custom plot vibes, at least custom insofar as custom font choices, custom background/text colors, light things like that. Maybe a background image or gradient if I want to get super goofy, but certainly more to come here regardless.

I think that wraps up my updates for the time being. Again, should you have any interest at all in being a pilot tester for plots.club, I'd love to connect!


  1. additionally, I'm keeping it as light as possible so I don't make it any more annoying for folks to hop in whenever their hearts desire.

  2. totally absolutely unrelated, but did you know it's super easy for adults to catch Hand, Foot, and Mouth Disease, pink eye, and Covid from their kids' daycare, even in the middle of summer, and also if you're really lucky, both parents catch it all too within the span of ~a month and everybody in the house just plays virus tag? Not bringing this up for any reason, of course, just thought it was a cool fun fact.

  3. I say this is the very worst case scenario because you'd both have to have plots in the very corner of your given isles, i.e you're each at (-2,2). So you'd click four times to travel across three plots to end up at the airport, you'd type in the common name and click "go," and then you'd click four more times across three more plots to end up at your friend's plot. Best case scenario, it's only three clicks!

  4. I need to make this clear: I adore sites that do this. It's so charming and goofy and it feels like a trip down nostalgia lane. But folks are gonna need to find the "visit the plot to the east" button at the end of the day.

#devlog