A simple blog powered by Jekyll and the Minima theme, built with the GitHub Pages stack. The site is published under the path /blog at https://vivianlobo.com/blog.
- macOS prerequisites
- Ruby (3.4+ works here)
- Bundler
- Command Line Tools for Xcode may be required for native gems
- Install deps
bundle install- Serve locally
bundle exec jekyll serveThen open http://localhost:4000/blog/ (note the /blog baseurl).
- Build static site
bundle exec jekyll buildOutputs to _site/.
_posts/— Blog posts (YYYY-MM-DD-title.md)_includes/— Theme includes (customgoogle-analytics.html)index.html— Home page (useslayout: home, supports pagination)about.md— About pagefavicon.ico— Site icon served from the root_config.yml— Site configuration
Create a new file in _posts/ with this naming convention: YYYY-MM-DD-your-title.markdown.
Minimal front matter example:
---
layout: post
title: "Post title"
date: 2025-08-29 12:00:00 +0000
categories: [life]
tags: [note]
excerpt: "One‑sentence summary for feeds and previews."
# published: false # uncomment to hide a draft post
# image: /assets/images/cover.jpg
---Drafts (optional): place files in _drafts/ and run:
bundle exec jekyll serve --draftsPagination is enabled via _config.yml:
paginate: 5
paginate_path: "/page:num/"The homepage must be an HTML template (this repo uses index.html with layout: home). Jekyll will paginate your posts there.
Enabled plugins:
jekyll-seo-tag— metadatajekyll-feed— RSS/Atom feedjekyll-sitemap— XML sitemap
These are GitHub Pages–compatible and work automatically.
Configured via _config.yml:
google_analytics: G-TSKPPBVCB6The custom include at _includes/google-analytics.html injects GA4 only in production builds. You don’t need to paste the script in pages.
Replace favicon.ico in the project root with your own icon. Browsers request /favicon.ico by default; keeping it at the root avoids 404s.
From _config.yml:
baseurl: "/blog"
url: "https://vivianlobo.com/"- Local serve → http://localhost:4000/blog/
- Production → https://vivianlobo.com/blog/
If you change the publication path (e.g., move the blog to /), update baseurl accordingly and test.
This project uses the github-pages gem so local builds match GitHub’s environment.
Typical steps:
- Push your changes to the repository branch configured for Pages in GitHub settings (commonly
gh-pagesormain). - If using a custom domain, configure it in the repository Pages settings and DNS.
- Ensure
_config.ymlurlandbaseurlare correct for the final domain/path.
- Pagination warning: “Pagination is enabled, but I couldn't find an index.html …”
- Ensure
index.htmlexists and useslayout: home(not Markdown).
- Ensure
- Favicon 404
- Keep a
favicon.icoat the project root.
- Keep a
- Faraday v2 retry message: “To use retry middleware with Faraday v2.0+, install faraday-retry gem”
- This is harmless for most local builds. You can ignore it.
- Recursive include /
stack level too deep- Avoid overriding
_includes/head.htmlto include itself. Use_includes/google-analytics.htmland setgoogle_analyticsin config instead.
- Avoid overriding
# Serve locally (auto-regenerate)
bundle exec jekyll serve
# Serve with drafts
bundle exec jekyll serve --drafts
# Build the site (no server)
bundle exec jekyll build
# Clean and rebuild
rm -rf _site && bundle exec jekyll build- Jekyll 3.x via
github-pagesgem - Theme:
minima - Plugins:
jekyll-feed,jekyll-seo-tag,jekyll-sitemap,jekyll-paginate,jekyll-redirect-from,jekyll-mentions,jekyll-include-cache
If you want more customization (custom layouts, SCSS, or components), I can scaffold those next.