- EPISODE 107 #meteor - Meteor Cloud Is a Full Service Hosting Solution for Meteor Apps- with Filipe Névola 
- EPISODE 106 #rails - CompanyCam Helps Contractors Document Their Job- with Chad Wilken 
- EPISODE 105 #flask - TinyPilotKVM Lets You Remote Control Your Server from Your Browser- with Michael Lynch 
- EPISODE 104 #rails - uscreen Is a Platform That Helps Content Creators Build a Business- with Nick Savrov 
- EPISODE 103 #rails - Great Question Makes It Easy for Teams to Perform Customer Research- with PJ Murray 
- EPISODE 102 #rails - Robot Accounts AI Provides a System to Let You Categorize Invoices- with Josh Kinabrew 
- EPISODE 101 #rails - Fundraze Is a Flexible Fund Raising and Campaign Management Service- with CJ Avilla 
- EPISODE 100 #jekyll - Running in Production Is a Podcast Where Devs Chat about Tech Stacks- with Nick Janetakis 
- EPISODE 099 #rails - A Custom Electronic Medical Record System for an Ophthalmology Clinic- with Jason Swett 
- EPISODE 098 #rails - Games Directory Lets You Sync Your Games and Achievements in 1 Place- with Vlad Radulescu 
- EPISODE 097 #rails - School Bus Hero Helps School Bus Drivers and Aides Find a Job- with Dieter Lunn 
- EPISODE 096 #rails - Hitobito Helps You Manage Communities with Complex Group Hierarchies- with Matthias Viehweger 
- EPISODE 095 #koa - Submotion Helps You Manage Access Control for Your SAAS Subscriptions- with Kristian Dupont 
- EPISODE 094 #django - HorseRecords Lets You Record Everything about Your Horses- with Andy Ide 
- EPISODE 093 #rails - Politico Europe Is a Business to Business News and Data Service- with Karl Roos 
- EPISODE 092 #akka - Couchmate Is a Social Chat Platform for Viewers of Live TV- with Matt Oliver 
- EPISODE 091 #ansible - Managing 40+ Servers in a Data Center at a Medical University- with Maciej Delmanowski 
- EPISODE 090 #rails - Avo Is a Framework for Creating Ruby on Rails Admin Panels- with Adrian Marin 
- EPISODE 089 #express - Optidash Is an Image Processing and Optimization API- with Przemek Matylla 
- EPISODE 088 #fastapi - CourseMaker Is an Online Course Builder for Technical Makers- with Chris Samiullah 
- EPISODE 087 #phoenix - Statuspal Is a Service for Hosted Status Pages and Monitoring- with Eduardo Messuti 
- EPISODE 086 #node - QA Wolf Helps You Create Automated Browser Tests as You Use Your Site- with Jon Perl 
- EPISODE 085 #rails - ListenAddict Lets You Subscribe to a Person Like You Would to a Show- with David Parker 
- EPISODE 084 #phoenix - PriceTable Mixes in Sales Automation, Project Management and Invoicing- with Ege Ersoz 
- EPISODE 083 #express - SongRender Lets You Create Audio Visualizer Videos from Audio Clips- with Jake Lazaroff 
- EPISODE 082 #pylons - Dropbox Gives You Secure Access to All of Your Files- with Utsav Shah 
- EPISODE 081 #jupyter - Mito Is a JupyterLab Extension to Make Python Data Analysis Easy- with Nate Rush 
- EPISODE 080 #laravel - 10Web Is an Automated WordPress Hosting Platform- with Tigran Nazaryan 
- EPISODE 079 #golang - NanoVMs Let You Run Your Apps Faster and Safer with Unikernels- with Ian Eyberg 
- EPISODE 078 #flask - AbstractCRE Helps Extract Key Data from Real Estate Property Documents- with Cole Simmons 
- EPISODE 077 #rails - Podia Has Everything You Need to Sell Online Courses- with Jason Charnes 
- EPISODE 076 #django - Building an Internal App to Track 1,200+ VMs and Servers at REI- with Sean Callaway 
- EPISODE 075 #django - Password Space Is a Password Manager for Families- with Nick Hnatiw 
- EPISODE 074 #laravel - Pod Hunt Helps You Find Great Podcast Episodes to Listen To- with Mubashar Iqbal 
- EPISODE 073 #django - Joyful Gifts Is an Automated Gift Giving Service- with Jonathan Adly 
- EPISODE 072 - This Episode Was Removed Because It's under Review- with Anders Hovmöller 
- EPISODE 071 #rails - DNSimple Is a Simple and Secure Domain Management Service- with Anthony Eden 
- EPISODE 070 #django - Buttondown Lets You Build, Grow and Launch Your Email Newsletter- with Justin Duke 
- EPISODE 069 #django - An Internal Financial Planning Service for Season Ticket Holders- with Denis Stepanenko 
- EPISODE 068 #phoenix - TextDB Is a Simple Way to Share Small Amounts of Data- with Ian Davidson 
- EPISODE 067 #django - Muze Is a Freeform iOS Chat Application- with Dash Winterson 
- EPISODE 066 #flask - MixedCRM Is a Sales and CRM Tool for Real Estate Property Developers- with Nidal Alhariri 
- EPISODE 065 #django - CareerVillage Is a Community Where Students Can Get Career Advice- with Jared Chung 
- EPISODE 064 #phoenix - Stacker Is an Internal Tool to Stitch Together Microservices Responses- with Sascha Wolf 
- EPISODE 063 #phoenix - Changelog.com Is a News and Podcast Platform for Developers- with Jerod Santo & Gerhard Lazu 
- EPISODE 062 #express - Browserless Gives You Fast, Scalable and Reliable Browser Automation- with Joel Griffith 
- EPISODE 061 #phoenix - Monitor Oban Jobs in Real Time with Oban Web Pro- with Parker Selbert 
- EPISODE 060 #flask - Fantasy Football Data Pros Teaches You Python through Fantasy Football- with Ben Dominguez 
- EPISODE 059 #django - Creative Hire Helps Match Designers and Companies to Various Jobs- with Kshitij Sinha 
- EPISODE 058 #django - Brightpath Is a Formative School Assessment Tool- with Kye Russell 
- EPISODE 057 #django - Crowdbotics Is a React Native + Django App Builder / Deployer- with Anand Kulkarni 
- EPISODE 056 #django - Divio Is a Cloud Platform for Managing Web Applications- with Daniele Procida 
- EPISODE 055 #django - Daughterly Care Is a CRM to Help Care for the Elderly- with Barton Ip 
- EPISODE 054 #django - Paparazzi Accessories Is an E-commerce Store That Sells Jewelry- with Dan Purcell 
- EPISODE 053 #django - An Inventory Management System for an E-commerce Platform- with Galen Rice 
- EPISODE 052 #express - A Video Course Platform Built for a Course Called Modern DevTools- with Umar Hansa 
- EPISODE 051 #django - An E-commerce Site That Lets Folks Buy Online Courses- with Dalton Polhill 
- EPISODE 050 #django - Tracking Games Played on a Flight Simulator- with Paul Cappaert 
- EPISODE 049 #django - Collecting and Processing Genomic Data to Help Cure Rare Diseases- with Dan Kolbman 
- EPISODE 048 #django - Social Hiring Platform for the Food and Beverage Industry- with Colin McFaul 
- EPISODE 047 #django - A Platform to Buy Gift Cards for Eco-Friendly Products- with Antonin Grêlé 
- EPISODE 046 #flask - Custom Hardware to Provide Affordable Email to the African Congo- with Clemens Wolff & Shaun Bathgate 
- EPISODE 045 #django - Skillwell Is a Video Platform That Helps You Unlock Physical Skills- with John Debs 
- EPISODE 044 #django - An Internal Employee Management App Focused on Schools- with Chris Goodwin 
- EPISODE 043 #django - DataWellness Helps Organizations Stay Safe and Compliant- with Dave Merwin 
- EPISODE 042 #golang - Creating a Video Course Hosting Platform to Learn Go- with Jon Calhoun 
- EPISODE 041 #django - Litt NYC Lets You Easily Find Friends and Things to Do- with Harry Moreno 
- EPISODE 040 #django - A Site to View 3D Scans of Cars with Twinner- with Jesse Hunt 
- EPISODE 039 #django - Place Card Me Lets You Create Printable Place Cards Online- with Cory Zue 
- EPISODE 038 #django - The CMS Front End for Lionel Trains' Products- with Mark Miscavage 
- EPISODE 037 #django - A Real Estate Order and Appraisal System for a Small Business- with Austin Lewis 
- EPISODE 036 #django - Passiv Is a Portfolio Management and Automation Platform- with Brendan Wood 
- EPISODE 035 #static-site - Determine What Your Toilet Paper Supply Is Based on Your Usage- with Ben Sassoon 
- EPISODE 034 #django - Confectionery Connect Is an E-commerce Video Course Marketplace- with Sean Parsons 
- EPISODE 033 #django - Zego Lets You Easily Buy Insurance by the Hour- with Stuart Kelly 
- EPISODE 032 #django - Building a Site Around Thousands of Diary Entries from Samuel Pepys- with Phil Gyford 
- EPISODE 031 #phoenix - Mux Is an API Based Platform That Lets You Process and Stream Videos- with Dylan Jhaveri 
- EPISODE 030 #flask - TradeRev Is a Machine Learning Vehicle Appraisal / Auctioning System- with Amit Jain 
- EPISODE 029 #flask - Cover Tuner Uses NLP to Help Improve Your Cover Letters- with Saad Malik 
- EPISODE 028 #dotnet - Easily Find, Reproduce and Track Your JavaScript Errors with TrackJS- with Todd Gardner 
- EPISODE 027 #python - A College Professor Self Hosts Jupyter Hub for His Students- with Peter Kazarinoff 
- EPISODE 026 #flask - Contextualise Is a Tool That Lets You Easily Organize Information- with Brett Kromkamp 
- EPISODE 025 #flask - A Cryptocurrency Powered E-commerce Store Called Strmline- with Ty Cooper 
- EPISODE 024 #rails - CovidNearMe Tracks Cases and Has Info for Citizens / Health Workers- with Scott Johnson 
- EPISODE 023 #flask - Taleas Is a Cute, Quirky, Random and Slightly Weird Webcomic- with Seth Black 
- EPISODE 022 #flask - Creating a Non-profit Food Ordering Service for Inner City Kids In LA- with Francisco Barcena 
- EPISODE 021 #phoenix - Get to Know Your Coworkers through Simple QA with This Slack App- with Adam Conrad 
- EPISODE 020 #flask - A Weather Analysis Service for Regular People and Meteorologists- with Nick Gregory 
- EPISODE 019 #phoenix - Hex.pm Is Elixir's Official Package Manager- with Eric Meadows-Jönsson 
- EPISODE 018 #phoenix - 6DOS Helps You Explore Your Personal Network- with Henry Popp 
- EPISODE 017 #rails - Smart Music Helps Musicians Practice More Efficiently- with Julien Blanchard 
- EPISODE 016 #rails - VA.gov Provides an API to Get Information about Veterans- with Charley Stran 
- EPISODE 015 #express - Kernl.us Helps WordPress Plugin and Theme Developers Manage Updates- with Jack Slingerland 
- EPISODE 014 #phoenix - ScrollKeeper Is a Collaboration Tool for Researchers- with Ian Butler 
- EPISODE 013 #phoenix - Remote.com Helps You Find Remote Jobs Anywhere- with Marcelo Lebre 
- EPISODE 012 #rails - Learn Ruby on Rails through Screencast Tutorials on GoRails- with Chris Oliver 
- EPISODE 011 #phoenix - Logflare Is a Log Management and Event Analytics Platform- with Chase Granberry 
- EPISODE 010 #flask - ScholarPack Runs 10% of the UK's Primary Schools and Gets Huge Traffic- with Gareth Thomas 
- EPISODE 009 #golang - Load Balance, Secure and Observe Your Web Applications with Nova ADC- with Dave Blakey 
- EPISODE 008 #koa - Openship Is a Shopify App for Drop Shipping and Order Fulfillment- with Junaid Kabani 
- EPISODE 007 #dotnet-core - Discworld Disorganizer Is a Discworld Book Series Search Engine- with Jamie Taylor 
- EPISODE 006 #golang - Qvault Is an Open Source Tool to Manage Passwords and Crypto Keys- with Lane Wagner 
- EPISODE 005 #flask - EarlyBrd Alerts You of New Job Board Postings So You Can Bid Faster- with Stetson Blake 
- EPISODE 004 #django - Real Python Is One of the Largest Python Learning Platforms Around- with Dan Bader 
- EPISODE 003 #phoenix - Learn Elixir and Phoenix by Building Things Over at Alchemist Camp- with Mark 
- EPISODE 002 #rails - A Video Based AWS Certificate Training Platform Called Exam Pro- with Andrew Brown 
- EPISODE 001 #phoenix - Serving Medical University Employees, Health Officials and Students- with Gabriel "OvermindDL1" Robertson 
- EPISODE 000 - Preview of What's to Come
Are you running a site in production? I'd love to hear your story, become a guest.
Building a Site Around Thousands of Diary Entries from Samuel Pepys
In this episode of Running in Production, Phil Gyford goes over building a community around 9+ years of diary entries from Samuel Pepys. The site was built with Django. It gets about 150k+ page views a month and has been up and running since 2002. It’s currently hosted on Heroku.
Phil talks about being in the sweet spot in terms of engagement while not being under high load, rewriting the platform with Django as a monolith, how Heroku helps him get it all up and running without needing to bother with servers and much more. The site is open source.
Topics Include
- 1:21 – Who is Samuel Pepys and why a weblog is a natural fit for this site
- 2:26 – John Carmack had daily write ups in the mid-1990s
- 3:35 – It gets about 150,000+ page views a month with 30,000+ users
- 4:39 – The site is more than just weblog entries, there’s 88k+ user comments
- 6:34 – It’s the sweet spot of engagement between popular but not crazy popular
- 7:05 – Motivation for using Django and Python after using Movable Type for 9 years
- 9:03 – Deadlines are a great way to ensure you abort the idea of perfect and release it
- 9:26 – Django was enjoyable to use, and Phil thought about using Rails and PHP too
- 11:17 – We live in a really nice time where we have so many good choices for web frameworks
- 12:23 – It’s a monolithic app with about 12,000 lines of Python across 200 files
- 12:53 – It’s split into a bunch of Django apps, here’s a few
- 13:45 – The idea of using apps to organize your code is a great idea
- 14:43 – This whole site is open source on GitHub, you can use it as a learning resource
- 16:08 – How new entries make their way onto the site (spoiler alert: it was laborious)
- 19:21 – The site uses server rendered Django templates with sprinkles of JavaScript
- 19:43 – Tiny bit of JS for things like maps (Leaflet) and charts (D3.js)
- 20:19 – Server rendered templates are simple and fast, it’s a great combo
- 21:21 – It runs on Heroku with PostgreSQL and a bit of caching with Redis
- 21:43 – The site runs on (1) $7 / month “Hobby” Dyno and it’s more than enough
- 23:43 – There’s full text search using Django’s built in PostgreSQL search features
- 26:12 – Django 3.0 powers the site as of today and Phil likes to keep it up to date
- 27:54 – If you postpone updating your dependencies for too long it can get painful
- 28:48 – What are you caching? Everything! At least for anonymous users
- 31:26 – The PostgreSQL database runs off the $9 / month Heroku add-on
- 32:54 – Have you ever thought about spinning up your own server?
- 35:17 – If you don’t like the idea of managing your own servers, Heroku can be decent
- 37:27 – Heroku handles issuing SSL certificates for you for free
- 38:13 – Sentry is used for error handling through the Heroku add-on
- 39:14 – Errors coming in are pretty rare
- 40:04 – Phil’s site holds its own in terms of SEO, even against Wikipedia
- 42:51 – Heroku handles backing up the database once a day, and Phil backs it up to S3 too
- 43:49 – He also uses S3 to store some of the static files, such as uploaded blog post images
- 45:15 – Django storage is used to handle uploading to S3
- 46:52 – Best tips? Start simple and grow it from there, writing any code is important
- 48:22 – Maybe using an app generator isn’t worth it, unless you make a lot of new apps
- 49:45 – You can find Phil on Twitter, he also has his own site at https://www.gyford.com/
Links
📄 References
- https://www.gutenberg.org/
- https://github.com/ESWAT/john-carmack-plan-archive/tree/master/by_day
- https://en.wikipedia.org/wiki/Movable_Type
- https://docs.djangoproject.com/en/3.0/ref/contrib/postgres/search/
- https://devcenter.heroku.com/articles/django-assets
⚙️ Tech Stack
🛠 Libraries Used
- https://github.com/django/django-contrib-comments
- https://d3js.org/
- https://leafletjs.com/
- https://django-storages.readthedocs.io/en/latest/
Support the Show
This episode does not have a sponsor and this podcast is a labor of love. If you want to support the show, the best way to do it is to purchase one of my courses or suggest one to a friend.
- Dive into Docker is a video course that takes you from not knowing what Docker is to being able to confidently use Docker and Docker Compose for your own apps. Long gone are the days of "but it works on my machine!". A bunch of follow along labs are included.
- Build a SAAS App with Flask is a video course where we build a real world SAAS app that accepts payments, has a custom admin, includes high test coverage and goes over how to implement and apply 50+ common web app features. There's over 20+ hours of video.
Questions
- Want to discuss this episode on Twitter? Tag @nickjanetakis or @philgyford
May 25, 2020
✏️ Edit on GitHub
