The first thing that I feel like I have to say is how wonderful of a time that I had at Laracon US in Chicago. The speakers spoke on a wide variety of subjects, ranging from coding practices, time management, having a timeless product...such a wonderful experience!
For the first time in awhile, though, there was not going to be a livestream ticket available for attendees who wouldn't be able to make it to Chicago. To be fair, the venue did not have terribly good access to Wi-Fi as it was, and slamming it with 800 other devices trying to connect to the network (as well as devices connecting from regular museum-goers) would have been too rough to handle, I imagine. Along those same lines, I want to contribute to some way to Laravel.
So hey, I'll keep a running blog of what's going on!
While I'm not terribly active in the Laravel community, I've been working on being active in Atlanta's PHP community, most notably by giving talks at the AtlantaPHP user group meetup. A few weeks ago, I volunteered to give a 15-minute talk about static site generation, which is something that I had started using on my personal site (you know, this site). In some of the back and forth emails between Chris Spruck and me, he brought up Netlify as something related to static site generation. Based on that and their sponsorship of the Syntax podcast, I signed up for an account.
Back to Present Day
Well, how can I keep a running blog going? I'd want it to have to deploy pretty darn frequently, and the more steps I could off-load to other services, the better. While I had recently switched to an unlimited data plan, I didn't want to get close at all to using up my hotspot plan (10GB at 4G speeds, very slow afterwards). So hey, I'll build the blog using Jigsaw, as I make changes, I'll commit code automatically and push it up a private GitLab repository, then I'll tell Netlify to watch that GitLab repository and run Jigsaw's build command and deploy.
So those were a number of steps, but if done right, I could just write HTML/Markdown, save frequently, and the site itself would get automatically updated every minute or so. Sounds great!
I looked at the clock in my hotel room. It read 7:54am; I had roughly 15 minutes before I wanted to leave for the venue.
Let's do this.
So now that I have the site up (sort of) and going (mostly), time to leave for the venue!
I got to my seat a few minutes early so that I could continue my setup. Since I knew I was going to deploy pretty frequently, I went ahead and wrote a cronjob to commit all changed files and push it up to my GitLab repository:
* * * * * cd /Users/chris/Projects/laracon && git commit -am 'Minute progress' && git push origin master
I tested with a few commits, and it looked like it was working. Awesome! Let's get rolling! I typed a few words or a line at a time, then I'd save my file, keep typing, rinse and repeat.
I'm writing this part of the blog post on Saturday, July 28th, so my memory isn't quite as fresh as it could've been, but here are a few specific things that I remember:
- I started out by writing Blade files (and writing `<li>` elements), but before Jason's talk, I decided to switch to simply markdown files. This sped up my workflow considerably, which was great, considering...
- My first challenge was keeping up with the pace of Jason Fried's Q&A. Part of the challenge was Sublime Text's autocompletion starting to change intended words into a word that I had stated earlier.
- For a little bit, I had added the Bulma CSS library into the application to try and add some semblance of styling, especially for after the conference. However, I just was not going to have enough time to get it done just right _during_ the conference, so I ended up removing it. It was actually the right call; I got a good number of compliments about my site's minimal nature, especially on metered/mobile networks.
- When I split out the talks into multiple files (I think starting before Jason Fried's talk), I did mess up a few times by not adding the new files manually to the commit before referencing them in my blade file. That resulted in a few broken builds, which (fortunately) would still leave the site up with the latest proper build! Wednesday evening, I just created the markdown files for each talk and committed them in one go so I wouldn't run into that issue for Thursday.
- I can peak at typing around 97WPM, and at times, that limit definitely felt pushed!
- Early on, I thought it'd be fun to add my laptop's battery percentage in the title of the site. After a bit, I thought it might be a good idea as well to add my phone's battery (since it was acting as a hotspot). I did end up getting through both days without either device passing out!
- There was a time on Thursday morning when the site wasn't updating; I'd see a dozen enqueued Netlify deployments. By the time I was writing out a quick email to Netlify apologizing for my heavy usage over the past day (especially for a new account), the queue had cleared and it was running. Phew!
- Thursday morning, I pondered why I didn't just use a shared Google Doc.
- Thursday morning, I split out the announcements section that I had previous had in index.blade.php
- As I'm writing this and rewatching the setup video, I realized that I created a chrisforrence.com repository for laracon.chrisforrence.com...wiping out my existing chrisforrence.com repository. Whoops. I'll have to shuffle my repository names around a little bit.
And just as a fun bit, here's a timelapse of the index page of the blog over the course of each commit!
So here are the different technologies that I used, and how I used them
- Jigsaw is a static site generator. Essentially, it lets you write out Blade files (or Markdown files, txt files...), be able to reference other pages as layouts or partials. There's a quick build process (each build took less than a half of a second), and you'd have an HTML site that you can host anywhere.
- Netlify lets you build and deploy modern web projects, particularly static sites. It's a pretty quick spin-up process where you connect your repository, specify a little bit of configuration (e.g. which branch to use, what command to use to build the site, which folder should be served) and the rest happens automatically.
- GitLab is where I have my git repositories. They also have great DevOps modules which I try to use on other projects (the role of DevOps was being played by Netlify in my case).
- Sublime Text is the editor I used; it runs pretty quickly.
I need to send a Thank You/Sorry card to be sent to Netlify's corporate office for hitting their service to redeploy the site literally once a minute for around 16 hours.
After all was said and done I had made 612 commits, resulting in around 595 deployments (a few deployments either failed or were skipped in favor of later commits). I have no idea how many site visitors I ended up getting (since I did not add analytics). However, here's some data that I pulled from Twitter (the only place where I advertised the blog):
- "Your Tweets earned 8.4K impressions over this 2 day period" (over 11 tweets). As a point of comparison, according to Twitter Analytics, I usually garner an average of about 170 impressions per tweet.
- My initial Tweet ("I'm going to try and live-blog the #Laracon conference at laracon.chrisforrence.com. Depends on Wi-Fi and Netlify, but I'll try keeping up!") garnered 1,747 impressions, 100 engagements and 62 link clicks.
- The phrase "laracon.chrisforrence.com" was tweeted 17 times (only 5 times by me). That included a tweet from Taylor Otwell, which itself got 200 likes, 41 RTs and 8 replies.
I'll keep the site up indefinitely, but I'll make a few changes over the next few days like fixing typos, adding in links to slides, and eventually the talk's video link once those get released.
I honestly enjoyed the experience; it was rewarding to me that so many people got value out of it. On the second day of the conference, a few people thanked me in person for doing the blog (to help them corroborate their notes, so they could share the link to people who couldn't make it to Chicago), and I got an offer of help from someone to work on a different way of handling updates (through sockets, auto-updates). It's been so far the best way that I've connected with the Laravel community, and I do plan on doing it again at next year's Laracon US conference!