About
May 20, 2026 · View on GitHub
Personal blog generated by jekyll on github pages
Tech Stack
- Jekyll 4.4.1 - Static site generator
- GitHub Pages - Hosting and deployment
- SCSS/Sass - CSS preprocessing
- Markdown - Content authoring
- HTMLHint & Stylelint - Code quality
- Google Analytics - Traffic tracking
- GitHub Actions - Automated workflows
Development
Prerequisites
- Ruby 2.7+ (recommend 3.x via Homebrew:
brew install ruby) - Node.js and npm
Local Setup
# Install Ruby dependencies
bundle install
# Install Node dependencies
npm install
Running Locally
# Start local server with drafts (http://127.0.0.1:4000)
bundle exec jekyll serve --drafts
# Or use npm script
npm run jekyll:serve
# Build site without serving
bundle exec jekyll build
# With app secrets (e.g. Café au Le notifications)
bundle exec jekyll serve --config _config.yml,_config_secrets.yml --drafts
Linting
SCSS linting runs automatically via pre-commit hook.
npm run lint- Run SCSS lintingnpm run lint:fix- Auto-fix SCSS issues
Configuration: .stylelintrc.json
Pre-commit Hooks
Automated code quality checks run before each commit via Husky (.husky/pre-commit):
- SCSS linting
- Post filename validation (kebab-case, only when
_posts/files are staged)
Post filenames must follow the format: YYYY-MM-DD-kebab-case-title.markdown
Commands:
npm run prepare- Reinstall Husky hooks after changes--no-verifyflag - Skip hooks temporarily
Mobile Blogging
Create blog posts from anywhere using GitHub Issues:
-
Create a new issue (from phone or desktop):
- Title: Your post title
- Body: Your post content in markdown
- Optional: Include
Tags: tag1, tag2on its own line
-
Publish immediately — add the
new-postlabel:- Workflow creates a formatted post in
_posts/YYYY/ - Issue is closed with a link to the published post
- Workflow creates a formatted post in
-
Save as draft — add the
draftlabel:- Workflow saves to
_drafts/ - Issue stays open with the filename noted
- Preview locally with
bundle exec jekyll serve --drafts
- Workflow saves to
-
Publish a draft — add the
publishlabel to the same issue:- Workflow moves the file from
_drafts/to_posts/YYYY/ - Issue is closed with a link to the live post
- Workflow moves the file from
-
Edit existing posts:
- Navigate to
_postsfolder in GitHub and edit directly
- Navigate to
Image Optimization
Images are automatically optimized when added or modified in the repository:
-
How it works:
- GitHub Actions workflow runs whenever images are added or modified
- Uses the Calibre image optimization engine to compress images
- JPEG and PNG files are compressed to 80% quality (good balance of size/quality)
- Optimized images are automatically committed back to the repository
-
Adding images:
- Place images in the
assetsfolder - Reference in posts using markdown:
 - Optimization happens automatically on commit
- Place images in the
-
Manual optimization:
- You can manually trigger optimization by running the workflow from the Actions tab
- Select the "optimize-images" workflow and click "Run workflow"
Link Checker
Broken links are automatically checked:
- Runs weekly (Sundays at midnight)
- Runs on pushes to main that modify posts or pages
- Creates a GitHub issue if broken links are found
Apps
Interactive tools at alexanderle.com/apps:
- Café au Le - Order a fresh pourover from Alex's home bar (ntfy.sh push notifications)
- Pace Calculator - Running pace, distance, and time calculator with VDOT race predictions
- FIRE Calculator - Financial independence projections with asset allocation and withdrawal strategies
- Regex Lab - Live regex matching with capture groups and quick reference
- GitHub Stats - GitHub user profiles, language breakdown, and top repositories
Build Validation
Pull requests are automatically validated:
- Jekyll build is tested on every PR
- Ensures site builds successfully before merging