Home pagespeed
Blog pagespeed
dev-portfolio-blog
This is a minimal jekyll theme for writing blogs and about yourself.
features
- Google Analytics
- Many themes such as: Default, Solarized, and Sepia. All in light and dark modes.
- Disqus comments
- Categorization
- Emojis Support
- Highly optimized blog
PageSpeed Insights
Desktop Preview
Mobile Preview
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-blogAnd 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
-
Add a
favicon.icoto the root directory for favicon. -
Create
blog.mdin the root folder ans set its yaml parameters to
layout: blog
permalink: /blog/
title: [Blog Page Title]
pagination:
enabled: true- Change your
about.mdyaml parameters to following
layout: description
permalink: /about/
title: About- In the
index.mdfile add
layout: home
home_text: Text
title: [Home Page Title]- Create a new
categories.mdfile in root with following yaml parameters
layout: categories
permalink: /categories/
title: Categories- In the
_config.ymlfile 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.
- Create a new markdown file in the format
yyyy-mm-dd-postname.md - Set
comments: trueonly whendisqus.shortnameis configured. - Add YAML configuration to the post. Set
descriptionto 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 runtimesNode JS is missing from your system. In ubuntu install usingsudo apt-get install nodejsor 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 --buildOpen 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 downIf 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-recreateConfirm that the PORTS column includes 127.0.0.1:4000->4000/tcp:
docker compose -f compose.yml psTo verify that the site compiles without starting the server, run:
docker compose -f compose.yml buildIf dependencies were changed or Docker reused an old bundle layer, rebuild without cache:
docker compose -f compose.yml build --no-cacheTo 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-blogRun 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 serveOpen 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.gemspecInspect the generated gem before publishing:
docker compose run --rm --no-deps site gem specification ./dev-portfolio-blog-0.2.0.gem --yamlCommit 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.0Sign 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 signinPublish 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.gemNever 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 😄



