Low commit activity in last 3 years
A long-lived project that still receives updates
This is a simple efficient blog and portfolio
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

>= 2.4, < 3.0
~> 13.0

Runtime

 Project Readme

License: MIT Gem Version

CodeFactor Codacy Badge

Hits

Home pagespeed

GitHub PageSpeed GitHub PageSpeed

Blog pagespeed

GitHub PageSpeed GitHub PageSpeed

dev-portfolio-blog

This is a minimal jekyll theme for writing blogs and about yourself.

features

  1. Google Analytics
  2. Many themes such as: Default, Solarized, and Sepia. All in light and dark modes.
  3. Disqus comments
  4. Categorization
  5. Emojis Support
  6. Highly optimized blog

    PageSpeed Insights

Desktop Preview

Home Page

Blog List Page

Mobile Preview

Home Page

Blog List Page

Installation

Add this line to your Jekyll site's Gemfile:

gem "dev-portfolio-blog"

And add this line to your Jekyll site's _config.yml:

theme: dev-portfolio-blog

And then execute:

$ bundle install

Or install it yourself as:

$ gem install dev-portfolio-blog

Usage

To start using the theme you either follow these steps or simply fork my repo https://github.com/rohitjain00/rohitjain00.github.io and update the files.

Recommended

Please use the theme as the plugin so that all the latest updated for this theme comes directly in your website.

Clone the branch master and change the theme accordingly.

Starting from the beginning:

Assuming that you started your first website based on minima theme from here

  1. Add a favicon.ico to the root directory for favicon.

  2. Create blog.md in the root folder ans set its yaml parameters to

layout: blog
permalink: /blog/
title: [Blog Page Title]
pagination:
  enabled: true
  1. Change your about.md yaml parameters to following
layout: description
permalink: /about/
title: About
  1. In the index.md file add
layout: home
home_text: Text
title: [Home Page Title]
  1. Create a new categories.md file in root with following yaml parameters
layout: categories
permalink: /categories/
title: Categories
  1. In the _config.yml file add following and change accordingly

Path is relative to the root directory

resume_url: ""
author_name: "Your Name"
description: "A short description of the site."
url: "https://your-domain.example"
google_analytics: "G-XXXXXXXXXX"
disqus:
  shortname: ""

Leave resume_url blank to hide the Resume navigation link. Leave disqus.shortname blank to disable comments. The dummy G-XXXXXXXXXX value keeps Google Analytics disabled; replace it with a real measurement ID only when you want analytics enabled.

Minifier

Visit Jekyll-minifier and add this to your _config.yml file to enable minifier.

Pagination

Visit jekyll-paginate-v2 and add this to your _config.yml file to enable pagination.

Check here _config.yml for example config file.

Writing a new blog

Create a new folder _posts in root folder if not already exists.

  1. Create a new markdown file in the format yyyy-mm-dd-postname.md
  2. Set comments: true only when disqus.shortname is configured.
  3. Add YAML configuration to the post. Set description to control the summary shown on the blog index.
---
layout: post
comments: [true | false]
title: Hello World
categories: [category1, category2]
description: A short introduction to this post.
---
Post Text.

The blog index uses description when it is present. Otherwise, it shows a plain-text preview of the post excerpt, limited to 30 words. Individual post pages continue to display the complete post.

Troubleshooting

  • Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes Node JS is missing from your system. In ubuntu install using sudo apt-get install nodejs or refer to this

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/rohitjain00/dev-portfolio-blog/. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

Development

The project targets Ruby 3.2 and Jekyll 4.4. The repository is both the theme source and a demo Jekyll site, so running it locally lets you preview changes to the layouts, includes, Sass, JavaScript, and sample pages.

Docker

Docker is the recommended setup because it provides the required Ruby, Bundler, Jekyll, and Node.js runtime without installing them on your host machine.

Start Docker Desktop first. On Windows, make sure your terminal can access Docker; if docker info returns a permission error, open a new terminal after Docker Desktop starts or run the terminal with Docker access.

Build the image and start the demo site:

docker compose -f compose.yml up --build

Open http://localhost:4000.

Source files are mounted into the container, so Jekyll rebuilds the site when they change. Stop the server with Ctrl+C; remove the container with:

docker compose -f compose.yml down

If the server starts but http://localhost:4000 does not load, recreate the container so Docker applies the port mapping:

docker compose -f compose.yml down --remove-orphans
docker compose -f compose.yml up --build --force-recreate

Confirm that the PORTS column includes 127.0.0.1:4000->4000/tcp:

docker compose -f compose.yml ps

To verify that the site compiles without starting the server, run:

docker compose -f compose.yml build

If dependencies were changed or Docker reused an old bundle layer, rebuild without cache:

docker compose -f compose.yml build --no-cache

To run one-off Jekyll or Bundler commands in the same environment:

docker compose -f compose.yml run --rm site bundle exec jekyll build
docker compose -f compose.yml run --rm site bundle update dev-portfolio-blog

Run bundle update dev-portfolio-blog after changing dev-portfolio-blog.gemspec so the local demo lockfile reflects the current theme version and dependency bounds.

Native Ruby

If you prefer not to use Docker, install Ruby 3.2, Bundler, and Node.js, then run:

bundle install
bundle exec jekyll serve

Open http://localhost:4000. Use bundle exec jekyll build for a compile-only check.

The gem contains the files under _layouts, _includes, _sass, and assets, plus the README, license, and changelog. Update spec.files in dev-portfolio-blog.gemspec when adding another packaged directory.

Demo Publishing

The GitHub Actions workflow builds the demo site into _site and publishes that generated output to the sample-site branch. Configure GitHub Pages to serve from the sample-site branch.

The local _site directory is ignored because it is generated output. Rebuild it with Docker or bundle exec jekyll build; do not edit files inside _site by hand.

Release

Version 0.2.0 adds the Docker development environment, Ruby 3.2 and Jekyll 4.4 support, short blog-index previews, bounded gem dependencies, and updated Sass and minifier configuration. See CHANGELOG.md for the release history.

Before releasing a new version, update the version in dev-portfolio-blog.gemspec and add its changes to CHANGELOG.md. Run a clean build and create the gem from the verified container:

docker compose build --no-cache
docker compose run --rm --no-deps site gem build dev-portfolio-blog.gemspec

Inspect the generated gem before publishing:

docker compose run --rm --no-deps site gem specification ./dev-portfolio-blog-0.2.0.gem --yaml

Commit the release, create an annotated version tag, and push both:

git add dev-portfolio-blog.gemspec CHANGELOG.md
git commit -m "Release version 0.2.0"
git tag -a v0.2.0 -m "Release version 0.2.0"
git push origin master
git push origin v0.2.0

Sign in interactively so credentials and MFA codes are not stored in the repository or shell history:

docker run --rm -it -v "${PWD}:/app" -v "${HOME}/.gem:/root/.gem" -w /app ruby:3.2-bullseye gem signin

Publish the verified artifact using the saved RubyGems credentials:

docker run --rm -it -v "${PWD}:/app" -v "${HOME}/.gem:/root/.gem" -w /app ruby:3.2-bullseye gem push dev-portfolio-blog-0.2.0.gem

Never commit .gem/credentials or an API key. Confirm the published version at RubyGems.

Read about the themes and how it's implemented here

License

The theme is available as open source under the terms of the MIT License.

If you like my work, you can buy me a coffee here 😄

Buy Me A Coffee