From bc44443cf0cc5575398e5469e1cbcebfeb9cfa8b Mon Sep 17 00:00:00 2001 From: Drew Kennedy Date: Tue, 10 Jun 2025 19:34:00 +1000 Subject: [PATCH 01/42] Refactor GitHub Actions workflow for PR previews and enhance Jekyll configuration with navigation links; remove obsolete staging files and add test staging post. --- .github/workflows/preview.yml | 45 +++++---- _config.yml | 8 ++ _config_preview.yml | 20 ---- ...25-06-08-remote-development-environment.md | 18 ++++ _posts/2025-06-09-welcome-to-devnomadic.md | 14 +++ _posts/2025-06-10-albatross.md | 12 +++ assets/css/custom.css | 44 +++++++++ staging/2025-06-10-test-staging-post.md | 29 ++++++ staging/index.md | 98 ------------------- 9 files changed, 152 insertions(+), 136 deletions(-) delete mode 100644 _config_preview.yml create mode 100644 staging/2025-06-10-test-staging-post.md delete mode 100644 staging/index.md diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index 810520f..697880a 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -9,36 +9,45 @@ on: - closed permissions: - contents: write - pull-requests: write + contents: read + pages: write + id-token: write -concurrency: preview-${{ github.ref }} +concurrency: + group: "pages" + cancel-in-progress: false jobs: - deploy-preview: + build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - + - name: Setup Ruby uses: ruby/setup-ruby@v1 with: ruby-version: '3.1' bundler-cache: true - - - name: Build Jekyll site - if: github.event.action != 'closed' - run: | - # Remove CNAME file for previews to avoid routing conflicts - rm -f CNAME - bundle exec jekyll build + + - name: Build with Jekyll + run: bundle exec jekyll build env: JEKYLL_ENV: production - - - name: Deploy preview - uses: rossjrw/pr-preview-action@v1 + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 with: - source-dir: ./_site - preview-branch: gh-pages - umbrella-dir: pr-preview + path: ./_site + + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 + diff --git a/_config.yml b/_config.yml index de29662..54a6bd4 100644 --- a/_config.yml +++ b/_config.yml @@ -28,6 +28,14 @@ dash: show_author: true avatar_source: "local" avatar_path: "/assets/avatar.gif" + show_nav: true + nav_links: + - url: /about + title: About + - url: /archive + title: Archive + - url: /tags + title: Tags social_links: - url: https://github.com/devnomadic icon: github diff --git a/_config_preview.yml b/_config_preview.yml deleted file mode 100644 index 9103d2a..0000000 --- a/_config_preview.yml +++ /dev/null @@ -1,20 +0,0 @@ -# Preview-specific configuration -# This extends the main _config.yml for preview builds - -# Collections for staging posts -collections: - staging: - output: true - permalink: /:collection/:name/ - -# Make staging posts appear in site.posts -defaults: - - scope: - path: "staging" - type: "staging" - values: - layout: "post" - -# Include staging directory in the build -include: - - staging diff --git a/_posts/2025-06-08-remote-development-environment.md b/_posts/2025-06-08-remote-development-environment.md index a9e0eb7..3e74925 100644 --- a/_posts/2025-06-08-remote-development-environment.md +++ b/_posts/2025-06-08-remote-development-environment.md @@ -8,6 +8,24 @@ tags: remote-work development tools productivity vscode docker # Creating Your Remote Development Paradise +## 📝 TL;DR + +Complete guide to **setting up a productive remote development environment** for digital nomads: + +**Hardware Essentials:** +- 💻 **MacBook Pro M3** (16GB+ RAM) + portable monitor +- ⌨️ **Compact mechanical keyboard** + wireless mouse + +**Software Stack:** +- 🔧 **VS Code** with Remote Development extensions +- 🐳 **Docker** for consistent environments +- ☁️ **Cloud services** (GitHub Codespaces, AWS Cloud9) +- 🔒 **VPN** + secure backup solutions + +**Key Tips:** Prioritize battery life, internet reliability, and portable ergonomics! + +--- + Working remotely as a developer requires a carefully crafted environment that enables productivity from anywhere in the world. Here's my guide to setting up the perfect remote development setup. ## Essential Hardware diff --git a/_posts/2025-06-09-welcome-to-devnomadic.md b/_posts/2025-06-09-welcome-to-devnomadic.md index 430fcb2..9f7db1f 100644 --- a/_posts/2025-06-09-welcome-to-devnomadic.md +++ b/_posts/2025-06-09-welcome-to-devnomadic.md @@ -8,6 +8,20 @@ tags: introduction devnomad remote-work digital-nomad software-engineering trave # Welcome to my digital nomad journey! +## 📝 TL;DR + +🚀 **Starting devnomadic** - a blog documenting my journey as a software engineer embracing the digital nomad lifestyle. + +**What you'll find here:** +- 🔧 **Technical tutorials** & best practices +- 🌍 **Remote work insights** from distributed teams +- ✈️ **Travel stories** from a developer's perspective +- 📱 **Tool recommendations** for nomadic developers + +Join me as I explore the intersection of **code, travel, and remote work**! + +--- + Hello and welcome to devnomadic! This blog represents the beginning of documenting my journey as a software engineer embracing the digital nomad lifestyle. ## Why devnomadic? diff --git a/_posts/2025-06-10-albatross.md b/_posts/2025-06-10-albatross.md index 097bcd0..ed4459c 100644 --- a/_posts/2025-06-10-albatross.md +++ b/_posts/2025-06-10-albatross.md @@ -10,6 +10,18 @@ tags: BlazorWebAssembly CloudflareWorkers DevSecOps WebDevelopment CyberSecurity *Published: June 9, 2025* +## 📝 TL;DR + +Built **Albatross**, a secure IP abuse checker using Blazor WebAssembly + Cloudflare Workers. Key features: +- 🔐 **Secure API proxy** with HMAC authentication (no exposed API keys) +- ⚡ **Fast client-side app** with server-side API protection +- 🛡️ **Real-time IP reputation checking** via AbuseIPDB +- 🏗️ **Modern architecture** combining the best of client and edge computing + +**Tech Stack:** Blazor WASM, Cloudflare Workers, HMAC-SHA256, AbuseIPDB API + +--- + In an era where cybersecurity threats are constantly evolving, having reliable tools to check IP addresses for malicious activity has become essential. Today, I'm excited to share the journey of building **Albatross** - a secure, modern web application that leverages the AbuseIPDB API to provide real-time IP abuse checking through a sophisticated architecture combining Blazor WebAssembly and Cloudflare Workers. ## The Challenge: Secure API Proxy Architecture diff --git a/assets/css/custom.css b/assets/css/custom.css index 7ce2dfa..be8f0ca 100644 --- a/assets/css/custom.css +++ b/assets/css/custom.css @@ -66,3 +66,47 @@ color: #202124; line-height: 1.5; } + +/* Remove text justification on mobile devices */ +@media (max-width: 768px) { + body, p, div, article, section { + text-align: left !important; + } + + /* Specifically target post content */ + .post-content, + .post-body, + .content, + .post-excerpt { + text-align: left !important; + } +} + +/* TLDR section styling */ +.post-content h2:has(+ p):where(:contains("TL;DR"), :contains("TLDR")), +.post-content h2 + p:has-text("📝 TL;DR") { + background: linear-gradient(135deg, #f8f9ff 0%, #e8f2ff 100%); + border-left: 4px solid #4285f4; + padding: 1.5rem; + margin: 1.5rem 0; + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0,0,0,0.1); +} + +/* Alternative approach - target by content */ +.post-content > h2 + p:first-of-type, +.post-content h2 + p { + background: linear-gradient(135deg, #f8f9ff 0%, #e8f2ff 100%); + border-left: 4px solid #4285f4; + padding: 1.5rem; + margin: 1.5rem 0; + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0,0,0,0.1); +} + +/* TLDR heading style */ +.post-content h2:contains("TL;DR") { + color: #4285f4; + font-size: 1.1rem; + margin-bottom: 0.5rem; +} diff --git a/staging/2025-06-10-test-staging-post.md b/staging/2025-06-10-test-staging-post.md new file mode 100644 index 0000000..ecf4e41 --- /dev/null +++ b/staging/2025-06-10-test-staging-post.md @@ -0,0 +1,29 @@ +--- +layout: post +title: "Test Staging Post" +date: 2025-06-10 12:00:00 -0500 +tags: [test, staging] +--- + +# Test Staging Post + +This is a test post that lives directly in the staging directory. + +## Purpose + +This post is used to test the staging preview system: + +- It's a real blog post with proper front matter +- It lives in the `staging/` directory +- It will be built as part of the staging collection +- It appears in the preview site + +## Content + +This is just sample content to verify that: + +1. Jekyll can build staging posts +2. The staging collection works +3. Posts appear in the preview deployment + +When this works, we know the staging system is functioning correctly! diff --git a/staging/index.md b/staging/index.md deleted file mode 100644 index cc07e6f..0000000 --- a/staging/index.md +++ /dev/null @@ -1,98 +0,0 @@ ---- -layout: default -title: Staging Area -permalink: /staging/ ---- - -# 🚧 Staging Area - -This is where posts are staged for preview before going live. - -
- STAGING - Preview posts appear here before publication -
- -## Staged Posts - -
- {% if site.staging and site.staging.size > 0 %} - {% assign staging_posts = site.staging | sort: 'date' | reverse %} - {% for post in staging_posts %} -
- {{ post.title }} - -
- {% endfor %} - {% else %} -

No posts currently staged for preview.

- {% endif %} -
- -## Navigation - -- [← Back to main site](/) -- [About](/about/) -- [Archive](/archive/) - - From 567f1c83a4bd26b150532f7b87423e8eeb783243 Mon Sep 17 00:00:00 2001 From: Drew Kennedy Date: Tue, 10 Jun 2025 19:43:48 +1000 Subject: [PATCH 02/42] Fix preview workflow to bypass GitHub Pages environment protection --- .github/workflows/preview.yml | 39 +++++++++++++++++------------------ 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index 697880a..d499482 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -9,16 +9,14 @@ on: - closed permissions: - contents: read - pages: write - id-token: write + contents: write concurrency: - group: "pages" + group: "pr-preview" cancel-in-progress: false jobs: - build: + deploy-preview: runs-on: ubuntu-latest steps: - name: Checkout @@ -35,19 +33,20 @@ jobs: env: JEKYLL_ENV: production - - name: Upload artifact - uses: actions/upload-pages-artifact@v3 - with: - path: ./_site - - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - needs: build - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 + - name: Deploy to gh-pages + run: | + # Switch to gh-pages branch + git fetch origin gh-pages:gh-pages || git checkout --orphan gh-pages + git checkout gh-pages + + # Clear and copy site + rm -rf * 2>/dev/null || true + cp -r _site/* ./ 2>/dev/null || true + + # Commit and push + git add -A + git config user.name "GitHub Actions" + git config user.email "actions@github.com" + git commit -m "Deploy preview from PR #${{ github.event.number }}" || exit 0 + git push origin gh-pages From be86cfcae3f634b2c6bf3342cf37c8d077ee9c87 Mon Sep 17 00:00:00 2001 From: Drew Kennedy Date: Tue, 10 Jun 2025 19:53:04 +1000 Subject: [PATCH 03/42] Refactor GitHub Actions workflow for PR previews: rename deploy-preview job to build, and update deployment steps; update email contact in about.md --- .github/workflows/preview.yml | 33 ++++++++++++++++----------------- about.md | 6 ++---- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index d499482..13abc3c 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -16,7 +16,7 @@ concurrency: cancel-in-progress: false jobs: - deploy-preview: + build: runs-on: ubuntu-latest steps: - name: Checkout @@ -33,20 +33,19 @@ jobs: env: JEKYLL_ENV: production - - name: Deploy to gh-pages - run: | - # Switch to gh-pages branch - git fetch origin gh-pages:gh-pages || git checkout --orphan gh-pages - git checkout gh-pages - - # Clear and copy site - rm -rf * 2>/dev/null || true - cp -r _site/* ./ 2>/dev/null || true - - # Commit and push - git add -A - git config user.name "GitHub Actions" - git config user.email "actions@github.com" - git commit -m "Deploy preview from PR #${{ github.event.number }}" || exit 0 - git push origin gh-pages + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: ./_site + + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/about.md b/about.md index 71b079d..fa320c8 100644 --- a/about.md +++ b/about.md @@ -26,8 +26,6 @@ This blog is where I share: Feel free to connect with me: - **GitHub**: [github.com/devnomadic](https://github.com/devnomadic) -- **Email**: hello@devnomadic.com +- **Email**: drew@devnomadic.com ---- - -*Currently coding from: [Current Location]* +--- \ No newline at end of file From 0f78590e09e6b676fa86ea1a13963d952b3eac01 Mon Sep 17 00:00:00 2001 From: Drew Kennedy Date: Tue, 10 Jun 2025 19:54:56 +1000 Subject: [PATCH 04/42] Update permissions in GitHub Actions workflow to restrict contents access to read --- .github/workflows/preview.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index 13abc3c..b065ac9 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -9,7 +9,9 @@ on: - closed permissions: - contents: write + contents: read + pages: write + id-token: write concurrency: group: "pr-preview" From 0a600e325ce973439e2e1e496f076eb4108c903b Mon Sep 17 00:00:00 2001 From: Drew Kennedy Date: Tue, 10 Jun 2025 20:01:32 +1000 Subject: [PATCH 05/42] Fix navigation links in Jekyll configuration to include trailing slashes; add new page layout for consistent styling. --- _config.yml | 6 +++--- _layouts/page.html | 8 ++++++++ 2 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 _layouts/page.html diff --git a/_config.yml b/_config.yml index 54a6bd4..3ecabd9 100644 --- a/_config.yml +++ b/_config.yml @@ -30,11 +30,11 @@ dash: avatar_path: "/assets/avatar.gif" show_nav: true nav_links: - - url: /about + - url: /about/ title: About - - url: /archive + - url: /archive/ title: Archive - - url: /tags + - url: /tags/ title: Tags social_links: - url: https://github.com/devnomadic diff --git a/_layouts/page.html b/_layouts/page.html new file mode 100644 index 0000000..4e0d4eb --- /dev/null +++ b/_layouts/page.html @@ -0,0 +1,8 @@ +--- +layout: default +--- + +
+

{{ page.title }}

+ {{ content }} +
From 9bce0392cf8df365fb7fdd5816afcaa7877e7536 Mon Sep 17 00:00:00 2001 From: Drew Kennedy Date: Tue, 10 Jun 2025 20:06:15 +1000 Subject: [PATCH 06/42] Add header and navigation styling for improved layout and responsiveness --- _includes/header.html | 21 +++++++++++++++++++++ assets/css/custom.css | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 _includes/header.html diff --git a/_includes/header.html b/_includes/header.html new file mode 100644 index 0000000..0910407 --- /dev/null +++ b/_includes/header.html @@ -0,0 +1,21 @@ + diff --git a/assets/css/custom.css b/assets/css/custom.css index be8f0ca..dd754e1 100644 --- a/assets/css/custom.css +++ b/assets/css/custom.css @@ -110,3 +110,44 @@ font-size: 1.1rem; margin-bottom: 0.5rem; } + +/* Navigation styling */ +.site-nav { + display: inline-block; + margin-left: 2em; +} + +.nav-link { + display: inline-block; + margin-right: 1.5em; + color: #ffa7c4; + text-decoration: none; + font-size: 0.9em; + transition: color 0.3s ease; +} + +.nav-link:hover { + color: #ffffff; + text-decoration: underline; +} + +@media (max-width: 768px) { + .site-nav { + display: block; + margin-left: 0; + margin-top: 0.5em; + } + + .nav-link { + display: block; + margin-right: 0; + margin-bottom: 0.3em; + } + + .social_links { + float: none !important; + display: block; + text-align: left; + margin-top: 0.5em; + } +} From 5d4655c32ffe7e774252ef4df8199e6e591488eb Mon Sep 17 00:00:00 2001 From: Drew Kennedy Date: Tue, 10 Jun 2025 20:10:03 +1000 Subject: [PATCH 07/42] Refactor header and navigation styles for improved layout and responsiveness --- _includes/header.html | 22 ++++++++++++---------- assets/css/custom.css | 29 +++++++++++++++++------------ 2 files changed, 29 insertions(+), 22 deletions(-) diff --git a/_includes/header.html b/_includes/header.html index 0910407..704d3aa 100644 --- a/_includes/header.html +++ b/_includes/header.html @@ -1,6 +1,17 @@ diff --git a/assets/css/custom.css b/assets/css/custom.css index dd754e1..d8b62d1 100644 --- a/assets/css/custom.css +++ b/assets/css/custom.css @@ -112,9 +112,18 @@ } /* Navigation styling */ +.header-top { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 0.5em; +} + .site-nav { - display: inline-block; - margin-left: 2em; + display: block; + border-top: 1px solid rgba(255, 167, 196, 0.3); + padding-top: 0.5em; + margin-top: 0.5em; } .nav-link { @@ -132,9 +141,12 @@ } @media (max-width: 768px) { - .site-nav { - display: block; - margin-left: 0; + .header-top { + flex-direction: column; + align-items: flex-start; + } + + .social_links { margin-top: 0.5em; } @@ -143,11 +155,4 @@ margin-right: 0; margin-bottom: 0.3em; } - - .social_links { - float: none !important; - display: block; - text-align: left; - margin-top: 0.5em; - } } From f12a9a5c68fcc06a37f21130efd3ddd4353f8ebc Mon Sep 17 00:00:00 2001 From: Drew Kennedy Date: Tue, 10 Jun 2025 20:15:14 +1000 Subject: [PATCH 08/42] Refactor navigation styles for improved layout and responsiveness --- _includes/head-custom.html | 49 ++++++++++++++++++++++++++++++++++++++ assets/css/custom.css | 19 ++++++++------- 2 files changed, 60 insertions(+), 8 deletions(-) diff --git a/_includes/head-custom.html b/_includes/head-custom.html index 8b6cfcb..e0cc967 100644 --- a/_includes/head-custom.html +++ b/_includes/head-custom.html @@ -15,4 +15,53 @@ background-color: #e8eaed; color: #202124; } + +/* Navigation styling */ +.header-top { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1em; +} + +.site-nav { + display: block !important; + clear: both; + border-top: 1px solid rgba(255, 167, 196, 0.3); + padding-top: 0.75em; + margin-top: 0.5em; + width: 100%; +} + +.nav-link { + display: inline-block; + margin-right: 2em; + color: #ffa7c4 !important; + text-decoration: none; + font-size: 1em; + font-weight: 500; + transition: color 0.3s ease; +} + +.nav-link:hover { + color: #ffffff !important; + text-decoration: underline; +} + +@media (max-width: 768px) { + .header-top { + flex-direction: column; + align-items: flex-start; + } + + .social_links { + margin-top: 0.5em; + } + + .nav-link { + display: block; + margin-right: 0; + margin-bottom: 0.5em; + } +} diff --git a/assets/css/custom.css b/assets/css/custom.css index d8b62d1..34c4fc8 100644 --- a/assets/css/custom.css +++ b/assets/css/custom.css @@ -116,27 +116,30 @@ display: flex; justify-content: space-between; align-items: center; - margin-bottom: 0.5em; + margin-bottom: 1em; } .site-nav { - display: block; + display: block !important; + clear: both; border-top: 1px solid rgba(255, 167, 196, 0.3); - padding-top: 0.5em; + padding-top: 0.75em; margin-top: 0.5em; + width: 100%; } .nav-link { display: inline-block; - margin-right: 1.5em; - color: #ffa7c4; + margin-right: 2em; + color: #ffa7c4 !important; text-decoration: none; - font-size: 0.9em; + font-size: 1em; + font-weight: 500; transition: color 0.3s ease; } .nav-link:hover { - color: #ffffff; + color: #ffffff !important; text-decoration: underline; } @@ -153,6 +156,6 @@ .nav-link { display: block; margin-right: 0; - margin-bottom: 0.3em; + margin-bottom: 0.5em; } } From 5d29071d4d8f43a570484cb6c772f0bd68234cdc Mon Sep 17 00:00:00 2001 From: Drew Kennedy Date: Tue, 10 Jun 2025 20:22:49 +1000 Subject: [PATCH 09/42] Refactor navigation markup for debugging and testing purposes --- _includes/header.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/_includes/header.html b/_includes/header.html index 704d3aa..7f0353b 100644 --- a/_includes/header.html +++ b/_includes/header.html @@ -12,12 +12,12 @@ {% endfor %} - {% if site.dash.nav_links and site.dash.show_nav %} -