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.28.1 by Michael Rose
  Copyright 2013-2026 Michael Rose - mademistakes.com | @mmistakes
  Copyright 2024-2026 iBug - ibugone.com | @iBug
  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" dir="ltr">
  <head>
    
<meta charset="utf-8">


<!-- begin _includes/seo.html --><title>Hello, I’m Jonathan: A Life in the Virtual Skies - jonbeckett.com</title>
<meta name="description" content="I’m Jonathan Beckett: software developer, aviation enthusiast and virtual pilot.">


  <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.com">
<meta property="og:title" content="Hello, I’m Jonathan: A Life in the Virtual Skies">
<meta property="og:url" content="https://jonbeckett.com/2026/11/04/introducing-jonathan-beckett/">


  <meta property="og:description" content="I’m Jonathan Beckett: software developer, aviation enthusiast and virtual pilot.">



  <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-11-04T00:00:00+00:00">






<link rel="canonical" href="https://jonbeckett.com/2026/11/04/introducing-jonathan-beckett/">












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



  <link href="/feed.xml" type="application/atom+xml" rel="alternate" title="jonbeckett.com 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">
    
<nav class="skip-links" aria-label="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" aria-label="Primary navigation">
        
        <a class="site-title" href="/">
          jonbeckett.com
          
        </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">
        
          Hello, I’m Jonathan: A Life in the Virtual Skies

        
      </h1>
      
        <p class="page__lead">I’m Jonathan Beckett: software developer, aviation enthusiast and virtual pilot.
</p>
      
      


  <p class="page__meta">
    
      
      <span class="page__meta-date">
        <i class="far fa-calendar-alt" aria-hidden="true"></i>
        
        <time datetime="2026-11-04T00:00:00+00:00">November 4, 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">Hello, I'm Jonathan: A Life in the Virtual Skies</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.com/">
        <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.com/" itemprop="url">Jonathan Beckett</a>
    </h3>
    
      <div class="author__bio p-note" itemprop="description">
        <p>Content Creator</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-location-dot" 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://ko-fi.com/jonbeckett/shop" rel="nofollow noopener noreferrer me" itemprop="sameAs"><i class="fas fa-fw fa-bag-shopping" aria-hidden="true"></i><span class="label">Ko-Fi</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="https://discord.gg/rmA5XqV69s" rel="nofollow noopener noreferrer me" itemprop="sameAs"><i class="fab fa-fw fa-discord" aria-hidden="true"></i><span class="label">Discord</span></a></li>
          
        
          
            <li><a href="https://bsky.app/profile/jonbeckett.bsky.social" rel="nofollow noopener noreferrer me" itemprop="sameAs"><i class="fab fa-fw fa-bluesky" aria-hidden="true"></i><span class="label">BlueSky</span></a></li>
          
        
          
            <li><a href="https://mastodon.online/@jonbeckett" rel="nofollow noopener noreferrer me" itemprop="sameAs"><i class="fab fa-fw fa-mastodon" aria-hidden="true"></i><span class="label">Mastodon</span></a></li>
          
        
          
            <li><a href="https://x.com/thejonbeckett" rel="nofollow noopener noreferrer me" itemprop="sameAs"><i class="fab fa-fw fa-x" aria-hidden="true"></i><span class="label">X</span></a></li>
          
        
      

      

      
        <li>
          <a href="mailto:jonbeckett@outlook.com" rel="me" class="u-email">
            <meta itemprop="email" content="jonbeckett@outlook.com" />
            <i class="fas fa-fw fa-square-envelope" 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 h-entry" itemscope itemtype="https://schema.org/CreativeWork">
    <meta itemprop="headline" content="Hello, I’m Jonathan: A Life in the Virtual Skies">
    <meta itemprop="description" content="I’m Jonathan Beckett: software developer, aviation enthusiast and virtual pilot.">
    <meta itemprop="datePublished" content="2026-11-04T00:00:00+00:00">
    

    <div class="page__inner-wrap">
      

      <section class="page__content e-content" itemprop="text">
        
        <p>Hello, and welcome. I’m Jonathan Beckett: software and web developer by day, aviation enthusiast and virtual pilot whenever I can be. I’m <strong>not a real pilot</strong>, but I enjoy learning about aircraft and sharing what I discover in the world of flight simulation.</p>

<h2 id="from-an-8-bit-cockpit-to-the-virtual-skies">From an 8-bit cockpit to the virtual skies</h2>

<p>My interest in flight simulation goes back to the mid-1980s, when I tried <em>Flight Sim 737</em> on an 8-bit computer. A few years later, I was flying <em>Sublogic Flight Simulator II</em> on an Atari ST. I kept coming back to simulators on the PC over the years, although there was a long pause while my daughters were young and I didn’t have a computer capable of running one.</p>

<p>The journey really took off again when I inherited a computer from my Dad. He and his friends in a virtual airline were learning to fly the ZiboMod 737 in X-Plane, so I made a few tutorial videos to help them. I had no idea that those first videos would lead to so many more.</p>

<h2 id="sharing-what-i-learn">Sharing what I learn</h2>

<p>In the years since, I’ve made more than a thousand videos and built a community of nearly 50,000 fellow virtual aviators on YouTube. I make tutorials, share aircraft and simulator discoveries, write guides and flight plans, and livestream flights with the community. The subjects range from learning a cockpit’s systems to planning a route and seeing where a flight takes us.</p>

<p>I still work as a software and web developer for a Microsoft partner, building large systems whose details I can’t usually share. Flight simulation is a very different kind of problem-solving: there’s always another aircraft to learn, another procedure to understand, or another corner of the world to explore.</p>

<h2 id="what-youll-find-here">What you’ll find here</h2>

<p>This website will become my homepage in the new year - a jumping off point for everything I do online. Whether you’re new to flight simulation or have been flying virtual skies for years, I hope you’ll find something useful, interesting, or at least entertaining via the links on the front page.</p>

<p>Thanks for stopping by. I hope to see you in the virtual skies!</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/#aviation" class="page__taxonomy-item p-category" rel="tag">aviation</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/#introduction" class="page__taxonomy-item p-category" rel="tag">introduction</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-11-04T00:00:00+00:00">November 4, 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://ko-fi.com/jonbeckett/shop" rel="nofollow noopener noreferrer"><i class="fas fa-fw fa-bag-shopping" aria-hidden="true"></i> Ko-Fi</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="https://discord.gg/rmA5XqV69s" rel="nofollow noopener noreferrer"><i class="fab fa-fw fa-discord" aria-hidden="true"></i> Discord</a></li>
        
      
        
          <li><a href="https://bsky.app/profile/jonbeckett.bsky.social" rel="nofollow noopener noreferrer"><i class="fab fa-fw fa-bluesky" aria-hidden="true"></i> BlueSky</a></li>
        
      
        
          <li><a href="https://mastodon.online/@jonbeckett" rel="nofollow noopener noreferrer"><i class="fab fa-fw fa-mastodon" aria-hidden="true"></i> Mastodon</a></li>
        
      
        
          <li><a href="https://x.com/thejonbeckett" rel="nofollow noopener noreferrer"><i class="fab fa-fw fa-x" aria-hidden="true"></i> X</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-square-rss" aria-hidden="true"></i> Feed</a></li>
    
  </ul>
</div>


<div class="page__footer-copyright">&copy; 2026 <a href="https://jonbeckett.com">jonbeckett.com</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-0J6K0088RD"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-0J6K0088RD', { '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