Skip to content

Minimalist static site for traditional oil paintings. Built with Jekyll, GitHub Actions, S3, and CloudFront for fast global delivery.

License

Notifications You must be signed in to change notification settings

rehmpke/oilstrokes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

33 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

oilstrokes

Deploy Node Version Jekyll Ruby AWS S3 CloudFront GitHub Actions License

This repository powers oilstrokes.com, a minimalist Jekyll-based showcase of Roger Ehmpke’s traditional oil portrait work. The site emphasizes clean markup, strong accessibility practices, fast performance, and zero-framework dependency for maximal longevity.

Deployment is handled through an automated GitHub Actions β†’ S3 β†’ CloudFront pipeline, enabling fast and reliable pushes from the master branch with instant CDN cache invalidation.

Oil portrait example


πŸ”§ Requirements

Ruby

Ruby Version: 3.3.4
(defined in .ruby-version)

Install dependencies:

gem install bundler
bundle install

Jekyll

This project uses classic Jekyll without additional build tooling:

bundle add jekyll

🧱 Architecture Overview

This site is intentionally simple and durable β€” no frameworks, no JavaScript bundlers, and no heavy build chains.

1. Jekyll handles:

  • Templating and layouts
  • Page rendering
  • Head metadata + SEO
  • Final HTML output into _site/

2. GitHub Actions handles:

  • Ruby environment setup
  • Running the Jekyll production build
  • Syncing _site/ to the S3 bucket
  • CloudFront cache invalidation (instant global updates)

3. AWS handles:

  • S3 β€” static hosting origin
  • CloudFront β€” CDN + HTTPS + caching

This combination gives full control without the overhead of an all-in-one service like Amplify.
It also keeps AWS fundamentals sharp.


πŸš€ Local Development

To serve the site locally with autoreload:

bundle exec jekyll serve --livereload

Jekyll will rebuild the site on every file change and serve from _site/.


πŸ“¦ Deployment (GitHub Actions β†’ S3 β†’ CloudFront)

Commits pushed to master automatically trigger the deployment workflow:

  1. Install Ruby + Bundler
  2. Run jekyll build
  3. Sync the _site/ directory to S3
  4. Invalidate CloudFront cache

No AWS keys appear in this repository β€” all credentials are injected securely via GitHub Secrets.


🧰 Tech Stack

  • Jekyll 4.x β€” static site generator
  • Ruby 3.3.x β€” runtime
  • AWS S3 β€” object storage + hosting
  • AWS CloudFront β€” global CDN + cache
  • GitHub Actions β€” automated CI/CD

No Node-based asset pipeline is used here, keeping the project fast, simple, and easy to maintain long-term.


πŸ“ Key Directories

oilstrokes/
β”œβ”€β”€ _includes/          # Reusable components
β”œβ”€β”€ _layouts/           # Jekyll page layouts
β”œβ”€β”€ _site/              # Generated output (ignored)
β”œβ”€β”€ assets/             # Static images, CSS
β”œβ”€β”€ _config.yml         # Jekyll config
β”œβ”€β”€ Gemfile             # Ruby dependencies
└── .github/workflows/  # CI/CD deployment pipeline

πŸ“œ Changelog

2025-12-01

  • Added GitHub Actions deploy pipeline
  • Updated documentation and README
  • Improved Jekyll config and AWS setup

2020-02-21

  • Initial launch of oilstrokes.com

πŸ”’ License

Β© 2025 Roger Ehmpke. All rights reserved.

This repository is publicly visible for transparency but is not licensed for reuse.
See the LICENSE file for complete details.

About

Minimalist static site for traditional oil paintings. Built with Jekyll, GitHub Actions, S3, and CloudFront for fast global delivery.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published