Deployment Workflow

Overview

The jonbeckett.com blog uses an automated deployment workflow through GitHub Pages, which builds and deploys the site automatically whenever changes are pushed to the main branch.

Git-Based Deployment

Standard Deployment Process

  1. Local Development: Write and test content locally
  2. Git Commit: Commit changes to local repository
  3. Git Push: Push changes to GitHub main branch
  4. Automatic Build: GitHub Pages triggers Jekyll build
  5. Deployment: Built site deployed to GitHub’s CDN

Command Sequence

# 1. Check status and stage changes
git status
git add .

# 2. Commit with descriptive message
git commit -m "Add post: Web request journey"

# 3. Push to GitHub (triggers deployment)
git push origin main

# 4. Monitor deployment status
# Check GitHub repository "Actions" tab

GitHub Pages Build Process

Build Trigger Events

Build Environment

Build Steps

  1. Environment Setup: Initialize build environment
  2. Dependency Installation: Install gems via Bundler
  3. Content Processing: Parse Markdown and front matter
  4. Asset Compilation: Process SCSS to CSS
  5. Site Generation: Generate static HTML files
  6. HTML Compression: Minify output (if enabled)
  7. Deployment: Deploy to CDN edge locations

Build Status Monitoring

GitHub Actions Tab

View build status at: https://github.com/jonbeckett/jonbeckett.github.io/actions

Build Status Indicators

Build Notifications

Deployment Verification

Post-Deployment Checklist

  1. Site Accessibility: Verify https://jonbeckett.com loads
  2. New Content: Check new posts appear correctly
  3. Navigation: Verify menu links work
  4. Feed Updates: Confirm RSS feed includes new content
  5. Archive Pages: Check category/tag pages update
  6. Mobile Responsiveness: Test on mobile devices

Automated Verification

# Check site status
curl -I https://jonbeckett.com

# Verify RSS feed
curl -s https://jonbeckett.com/feed.xml | head -20

# Test specific post URL
curl -I https://jonbeckett.com/2026/01/28/web-request-journey/

Branch Management

Main Branch Protection

Development Workflow Options

Option 1: Direct to Main (Current)

# Work directly on main branch
git checkout main
git pull origin main
# Make changes
git add .
git commit -m "Update content"
git push origin main

Option 2: Feature Branch Workflow

# Create feature branch
git checkout -b feature/new-post
# Make changes
git add .
git commit -m "Add new post"
git push origin feature/new-post
# Create pull request via GitHub interface
# Merge after review

Rollback Procedures

Quick Rollback via Git

# Revert to previous commit
git revert HEAD
git push origin main

# Or reset to specific commit (destructive)
git reset --hard [commit-hash]
git push origin main --force

Content-Only Rollback

# Remove problematic post
git rm _posts/2026/2026-XX-XX-problematic-post.md
git commit -m "Remove problematic post"
git push origin main

Emergency Procedures

  1. Identify Issue: Determine the problematic commit
  2. Local Fix: Make corrective changes locally
  3. Emergency Push: Push fix immediately
  4. Verification: Confirm site recovery
  5. Post-Mortem: Document issue and prevention

Deployment Environments

Production Environment

Development Environment

Staging Environment

Currently not configured. Could be set up using:

Performance Optimization

Build Performance

Deployment Performance

Monitoring & Analytics

Build Monitoring

# GitHub CLI for build status
gh run list --repo jonbeckett/jonbeckett.github.io

# View specific build details
gh run view [run-id] --repo jonbeckett/jonbeckett.github.io

Site Monitoring

Error Handling

Common Build Errors

YAML Front Matter Errors

# Invalid YAML (missing quote)
title: This is a "quoted title
# Fix: Properly escape quotes
title: "This is a \"quoted\" title"

Liquid Template Errors

<!-- Invalid liquid syntax -->
<!doctype html>
<!--
  Minimal Mistakes Jekyll Theme 4.27.3 by Michael Rose
  Copyright 2013-2025 Michael Rose - mademistakes.com | @mmistakes
  Free for personal and commercial use under the MIT license
  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE
-->

<html lang="en-GB" class="no-js">
  <head>
    <meta charset="utf-8">

<!-- begin _includes/seo.html --><title>Welcome! Here’s Where to Find Me - jonbeckett.online</title>
<meta name="description" content="A quick introduction to who I am, what I do, and where you can follow along with my flight simulation adventures.">


  <meta name="author" content="Jonathan Beckett">
  
  <meta property="article:author" content="Jonathan Beckett">
  


<meta property="og:type" content="article">
<meta property="og:locale" content="en_GB">
<meta property="og:site_name" content="jonbeckett.online">
<meta property="og:title" content="Welcome! Here’s Where to Find Me">
<meta property="og:url" content="https://jonbeckett.online/2026/02/10/welcome-to-the-blog/">


  <meta property="og:description" content="A quick introduction to who I am, what I do, and where you can follow along with my flight simulation adventures.">



  <meta property="og:image" content="https://images.unsplash.com/photo-1436491865332-7a61a109cc05?w=1200&amp;h=400&amp;fit=crop&amp;crop=entropy&amp;auto=format&amp;q=80">





  <meta property="article:published_time" content="2026-02-10T00:00:00+00:00">






<link rel="canonical" href="https://jonbeckett.online/2026/02/10/welcome-to-the-blog/">












<!-- end _includes/seo.html -->



  <link href="/feed.xml" type="application/atom+xml" rel="alternate" title="jonbeckett.online Feed">
<meta name="viewport" content="width=device-width, initial-scale=1.0">

<script>
  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
  
</script>

<!-- For all browsers -->
<link rel="stylesheet" href="/assets/css/main.css">
<link rel="preload" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@latest/css/all.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@latest/css/all.min.css"></noscript>



    <meta name="follow.it-verification-code" content="46JJqqLrzpNsmCFk3FRQ"/>
<link rel="icon" type="image/svg+xml" href="/assets/images/favicon.svg">
<link rel="shortcut icon" href="/assets/images/favicon.svg">
  </head>

  <body class="layout--single" dir="ltr">
    <nav class="skip-links">
  <ul>
    <li><a href="#site-nav" class="screen-reader-shortcut">Skip to primary navigation</a></li>
    <li><a href="#main" class="screen-reader-shortcut">Skip to content</a></li>
    <li><a href="#footer" class="screen-reader-shortcut">Skip to footer</a></li>
  </ul>
</nav>

    

<div class="masthead">
  <div class="masthead__inner-wrap">
    <div class="masthead__menu">
      <nav id="site-nav" class="greedy-nav">
        
        <a class="site-title" href="/">
          jonbeckett.online
          
        </a>
        <ul class="visible-links"><li class="masthead__menu-item">
              <a
                href="/"
                
                
              >Home</a>
            </li><li class="masthead__menu-item">
              <a
                href="/about/"
                
                
              >About</a>
            </li><li class="masthead__menu-item">
              <a
                href="/contact/"
                
                
              >Contact</a>
            </li></ul>
        
        <button class="greedy-nav__toggle hidden" type="button">
          <span class="visually-hidden">Toggle menu</span>
          <div class="navicon"></div>
        </button>
        <ul class="hidden-links hidden"></ul>
      </nav>
    </div>
  </div>
</div>


    <div class="initial-content">
      
  







<div class="page__hero--overlay"
  style=" background-image: linear-gradient(90deg, rgba(0,0,0,0.8) 0%, rgba(0,0,0,0.4) 100%), url('https://images.unsplash.com/photo-1436491865332-7a61a109cc05?w=1200&h=400&fit=crop&crop=entropy&auto=format&q=80');"
>
  
    <div class="wrapper">
      <h1 id="page-title" class="page__title" itemprop="headline">
        
          Welcome! Here’s Where to Find Me

        
      </h1>
      
        <p class="page__lead">A quick introduction to who I am, what I do, and where you can follow along with my flight simulation adventures.
</p>
      
      

  <p class="page__meta">
    
      
      <span class="page__meta-date">
        <i class="far fa-calendar-alt" aria-hidden="true"></i>
        
        <time datetime="2026-02-10T00:00:00+00:00">February 10, 2026</time>
      </span>
    

    <span class="page__meta-sep"></span>

    
      
      

      <span class="page__meta-readtime">
        <i class="far fa-clock" aria-hidden="true"></i>
        
          1 minute read
        
      </span>
    
  </p>


      
    </div>
  
  
</div>






  
    




  <nav class="breadcrumbs">
    <ol itemscope itemtype="https://schema.org/BreadcrumbList">
      
      <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
        <a href="/" itemprop="item"><span itemprop="name">Home</span></a>
        <meta itemprop="position" content="1" />
      </li>
      <span class="sep">/</span>
      
      
      
        
          
          <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
            <a href="/categories/#announcements" itemprop="item"><span itemprop="name">announcements</span></a>
            <meta itemprop="position" content="2" />
          </li>
          <span class="sep">/</span>
        
      
      
      
      <li class="current">Welcome! Here's Where to Find Me</li>
    </ol>
  </nav>

  


<div id="main" role="main">
  
  <div class="sidebar sticky">
  


<div itemscope itemtype="https://schema.org/Person" class="h-card">

  
    <div class="author__avatar">
      <a href="https://jonbeckett.online/">
        <img src="/assets/images/jonbeckett.jpg" alt="Jonathan Beckett" itemprop="image" class="u-photo">
      </a>
    </div>
  

  <div class="author__content">
    <h3 class="author__name p-name" itemprop="name">
      <a class="u-url" rel="me" href="https://jonbeckett.online/" itemprop="url">Jonathan Beckett</a>
    </h3>
    
      <div class="author__bio p-note" itemprop="description">
        <p>Flight Simulation and Aviation Enthusiast</p>

      </div>
    
  </div>

  <div class="author__urls-wrapper">
    <button class="btn btn--inverse">Follow</button>
    <ul class="author__urls social-icons">
      
        <li itemprop="homeLocation" itemscope itemtype="https://schema.org/Place">
          <i class="fas fa-fw fa-map-marker-alt" aria-hidden="true"></i> <span itemprop="name" class="p-locality">UK</span>
        </li>
      

      
        
          
            <li><a href="https://youtube.com/@jonbeckett" rel="nofollow noopener noreferrer me" itemprop="sameAs"><i class="fab fa-fw fa-youtube" aria-hidden="true"></i><span class="label">YouTube</span></a></li>
          
        
          
            <li><a href="https://jonbeckett.substack.com/" rel="nofollow noopener noreferrer me" itemprop="sameAs"><i class="fas fa-fw fa-newspaper" aria-hidden="true"></i><span class="label">Substack</span></a></li>
          
        
          
            <li><a href="https://www.facebook.com/jonbeckettnotarealpilot" rel="nofollow noopener noreferrer me" itemprop="sameAs"><i class="fab fa-fw fa-facebook" aria-hidden="true"></i><span class="label">Facebook</span></a></li>
          
        
      

      

      
        <li>
          <a href="mailto:jonathan.beckett@gmail.com" rel="me" class="u-email">
            <meta itemprop="email" content="jonathan.beckett@gmail.com" />
            <i class="fas fa-fw fa-envelope-square" aria-hidden="true"></i><span class="label">Email</span>
          </a>
        </li>
      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      <!--
  <li>
    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs" rel="nofollow noopener noreferrer me">
      <i class="fas fa-fw" aria-hidden="true"></i> Custom Social Profile Link
    </a>
  </li>
-->
    </ul>
  </div>
</div>

  
  </div>



  <article class="page" itemscope itemtype="https://schema.org/CreativeWork">
    <meta itemprop="headline" content="Welcome! Here’s Where to Find Me">
    <meta itemprop="description" content="A quick introduction to who I am, what I do, and where you can follow along with my flight simulation adventures.">
    <meta itemprop="datePublished" content="2026-02-10T00:00:00+00:00">
    

    <div class="page__inner-wrap">
      

      <section class="page__content" itemprop="text">
        
        <p>Hello, and welcome to my corner of the internet!</p>

<p>I’m Jonathan—a software developer by day and virtual pilot by… well, every other available moment. When I’m not wrestling with corporate codebases, you’ll find me attempting to fly all manner of simulated aircraft in a questionably correct manner.</p>

<p><strong>Disclaimer:</strong> I’m not a real pilot. The virtual skies are safer that way.</p>

<h2 id="whats-this-site-about">What’s This Site About?</h2>

<p>This site is a place for me to share resources related to flight simulation.</p>

<p>But if you want to see me <em>actually</em> flying (and occasionally crashing) virtual aircraft, you’ll want to head over to my main hangouts:</p>

<h2 id="watch-on-youtube">Watch on YouTube</h2>

<!-- Courtesy of embedresponsively.com -->

<div class="responsive-video-container">
    <iframe src="https://www.youtube-nocookie.com/embed/d0spDi0o29Y" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe>
  </div>

<p>I share my flight simulation adventures with nearly <strong>50,000 fellow virtual aviators</strong> on YouTube. You’ll find:</p>

<ul>
  <li><strong>Livestreams</strong> — Join me in real-time as I fly routes around the world</li>
  <li><strong>First looks</strong> — New aircraft add-ons and what I think of them</li>
  <li><strong>Tutorials</strong> — Startup procedures, systems walkthroughs, and tips</li>
  <li><strong>Community flights</strong> — Flying with viewers and the wider sim community</li>
</ul>

<p><strong><a href="https://youtube.com/@jonbeckett">Subscribe on YouTube →</a></strong></p>

<h2 id="subscribe-for-email-updates">Subscribe for Email Updates</h2>

<p>For those who prefer reading, I write a regular blog on <strong>Substack</strong> where I document my flight simulation escapades. Over <strong>1,800 subscribers</strong> already receive updates straight to their inbox—completely free.</p>

<p>You’ll get:</p>

<ul>
  <li>Stories from my virtual flying adventures</li>
  <li>Behind-the-scenes thoughts on what I’m working on</li>
  <li>Updates on new videos and content</li>
  <li>Access to my archive of procedures and guides</li>
</ul>

<p><strong><a href="https://jonbeckett.substack.com/">Subscribe on Substack →</a></strong></p>

<h2 id="support-the-channel">Support the Channel</h2>

<p>If you’d like to support what I do, you can grab my <strong>startup procedures and guides</strong> for various aircraft on Ko-Fi. I’ve created detailed procedures for aircraft including:</p>

<ul>
  <li>Airbus A310, A350</li>
  <li>Boeing 737, 777</li>
  <li>MD-11</li>
  <li>Eurofighter Typhoon</li>
  <li>And many more…</li>
</ul>

<p>There’s also the popular <strong>Garmin G1000 Flight Plan Programming Quick Reference</strong> that’s helped hundreds of virtual pilots.</p>

<p><strong><a href="https://ko-fi.com/jonbeckett">Visit Ko-Fi →</a></strong></p>

<h2 id="lets-connect">Let’s Connect</h2>

<p>I love hearing from fellow aviation enthusiasts. Whether you’ve got questions about flight simulation, want to share your own virtual adventures, or just fancy saying hello—drop me a line:</p>

<ul>
  <li><strong>Email:</strong> <a href="mailto:jonathan.beckett@gmail.com">jonathan.beckett@gmail.com</a></li>
  <li><strong>Facebook:</strong> <a href="https://www.facebook.com/jonbeckettnotarealpilot">jonbeckettnotarealpilot</a></li>
</ul>

<p>Thanks for stopping by. See you in the virtual skies!</p>

<p><em>— Jonathan</em></p>

        
      </section>

      <footer class="page__meta">
        
        
  


  

  <p class="page__taxonomy">
    <strong><i class="fas fa-fw fa-tags" aria-hidden="true"></i> Tags: </strong>
    <span itemprop="keywords">
    
      <a href="/tags/#community" class="page__taxonomy-item p-category" rel="tag">community</a><span class="sep">, </span>
    
      <a href="/tags/#flight-simulation" class="page__taxonomy-item p-category" rel="tag">flight-simulation</a><span class="sep">, </span>
    
      <a href="/tags/#welcome" class="page__taxonomy-item p-category" rel="tag">welcome</a><span class="sep">, </span>
    
      <a href="/tags/#youtube" class="page__taxonomy-item p-category" rel="tag">youtube</a>
    
    </span>
  </p>




  


  

  <p class="page__taxonomy">
    <strong><i class="fas fa-fw fa-folder-open" aria-hidden="true"></i> Categories: </strong>
    <span itemprop="keywords">
    
      <a href="/categories/#announcements" class="page__taxonomy-item p-category" rel="tag">announcements</a>
    
    </span>
  </p>


        

  <p class="page__date"><strong><i class="fas fa-fw fa-calendar-alt" aria-hidden="true"></i> Updated:</strong> <time class="dt-published" datetime="2026-02-10T00:00:00+00:00">February 10, 2026</time></p>

      </footer>

      

      

    </div>

    
  </article>

  
  
    
<div class="page__related">
  
  <h2 class="page__related-title">You May Also Enjoy</h2>
  <div class="grid__wrapper">
    
      
  </div>
</div>

  
</div>

      
    </div>

    

    <div id="footer" class="page__footer">
      <footer>
        <!-- start custom footer snippets -->

<!-- end custom footer snippets -->
        

<div class="page__footer-follow">
  <ul class="social-icons">
    

    
      
        
          <li><a href="https://youtube.com/@jonbeckett" rel="nofollow noopener noreferrer"><i class="fab fa-fw fa-youtube" aria-hidden="true"></i> YouTube</a></li>
        
      
        
          <li><a href="https://jonbeckett.substack.com/" rel="nofollow noopener noreferrer"><i class="fas fa-fw fa-newspaper" aria-hidden="true"></i> Substack</a></li>
        
      
        
          <li><a href="https://www.facebook.com/jonbeckettnotarealpilot" rel="nofollow noopener noreferrer"><i class="fab fa-fw fa-facebook" aria-hidden="true"></i> Facebook</a></li>
        
      
        
          <li><a href="/disclaimer/" rel="nofollow noopener noreferrer"><i class="fas fa-fw fa-info-circle" aria-hidden="true"></i> Disclaimer</a></li>
        
      
    

    
      <li><a href="/feed.xml"><i class="fas fa-fw fa-rss-square" aria-hidden="true"></i> Feed</a></li>
    
  </ul>
</div>


<div class="page__footer-copyright">&copy; 2026 <a href="https://jonbeckett.online">jonbeckett.online</a>. Powered by <a href="https://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/jekyll-themes/minimal-mistakes/" rel="nofollow">Minimal Mistakes</a>.</div>

      </footer>
    </div>

    
  <script src="/assets/js/main.min.js"></script>







  <!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-S960B8KY9Y"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-S960B8KY9Y', { 'anonymize_ip': false});
</script>








  </body>
</html>

<!-- Fix: Proper liquid filter syntax -->

Plugin Errors

# Unsupported plugin
plugins:
  - jekyll-unsupported-plugin
# Fix: Use only whitelisted plugins
plugins:
  - jekyll-feed
  - jekyll-sitemap

Error Resolution Process

  1. Check Build Logs: Review GitHub Actions build output
  2. Identify Error: Locate specific error message and file
  3. Fix Locally: Correct the issue in local development
  4. Test Locally: Verify fix with bundle exec jekyll build
  5. Deploy Fix: Commit and push corrected code

Backup Strategy

Git-Based Backup

Content Backup

# Clone repository for backup
git clone https://github.com/jonbeckett/jonbeckett.github.io.git backup/

# Export content only
cp -r _posts/ backup-posts-$(date +%Y%m%d)/
cp -r _pages/ backup-pages-$(date +%Y%m%d)/

Recovery Procedures

  1. Repository Recovery: Clone from GitHub backup
  2. Content Recovery: Restore from Git history
  3. Configuration Recovery: Restore _config.yml from version control
  4. Asset Recovery: Restore from assets directory backup

Deployment Method: GitHub Pages automatic builds
Trigger: Push to main branch
Build Time: 30-60 seconds
Global Distribution: GitHub’s CDN network
Rollback: Git-based version control