A clean, single-page resume theme built with Jekyll. Designed for developers who want a professional minimal resume without the bloat.
- Single-page layout with smooth scrolling
- Particle.js animated header
- Data-driven expertise section (no HTML editing needed)
- Responsive design (mobile-first)
- Social/SEO meta tags and JSON-LD structured data
- Sass-based styling with simple color customization
- Docker support for quick preview
- Deploys to GitHub Pages, Netlify, or any static host
- Site generator: Jekyll 3.10 via the
github-pagesgem, so what builds locally is what GitHub Pages builds. Content comes from_config.ymland YAML data files, not hardcoded HTML. - Styling: Sass, one partial per section (
_header,_about,_stats,_footer), with colors and breakpoints insrc/styles/_vars.scss. - Build: Gulp compiles Sass and JavaScript from
src/intoassets/, then hands off to Jekyll.npm run servewatches both and reloads the browser. - Front-end: no framework and no jQuery. particles.js draws the animated hero background, sweet-scroll handles anchor scrolling.
- Icons: Font Awesome for social links, Devicon for the technology logos in the expertise grid. Both are self-hosted from
assets/fonts, so the page makes no third-party requests. - Deployment: plain static output. Netlify, GitHub Pages, or any static host. Docker Compose is included for a preview with no Ruby or Node installed.
jekyll-theme-minimal-resume/
│
├── _config.yml # site and user settings (name, title, bio, social handles)
├── index.html # entry page; layout does the work
│
├── _data/
│ ├── expertise.yml # "What I Do" panels: titles, copy, Devicon icon names
│ └── stats.yml # optional stat band (disabled by default in the layout)
│
├── _includes/
│ ├── head.html # meta tags, Open Graph, JSON-LD structured data
│ ├── header.html # hero: name, title, social icons
│ ├── about.html # renders _data/expertise.yml
│ ├── stats.html # renders _data/stats.yml
│ └── footer.html # footer and script tags
│
├── _layouts/
│ └── default.html # assembles the includes
│
├── src/ # sources; edit these, not assets/
│ ├── styles/ # Sass partials + main.scss
│ ├── js/app.js # particles.js and sweet-scroll config
│ └── fonts/ # Font Awesome and Devicon webfonts
│
├── assets/ # Gulp output; committed so GitHub Pages can serve it
├── gulpfile.js # sass, js, fonts, and jekyll tasks
└── docker-compose.yml # preview stack (see docker-compose.dev.yml for live edits)
assets/is generated. Editsrc/and runnpm run build, otherwise your changes are overwritten on the next build.
- Install Ruby 3.3.6 (pinned in
.ruby-version), Bundler, and Node.js 20 or newer. - Fork this repository and clone your fork.
- Copy or edit
_config.ymlto personalize your site (see Settings).
Styles and scripts are built from src/ into assets/ with Gulp; Jekyll then copies them into _site.
-
Ruby dependencies: the repo pins Ruby 3.3.6 in
.ruby-versionso Bundler can resolvegithub-pages. With rbenv or asdf,rbenv install/asdf installpicks it up automatically, then:bundle install
Gemfile.lockis committed and the Docker image installs from it too, so local builds, container builds, and GitHub Pages all resolve the same gem versions. Ifbundlecomplains it cannot find the bundler version the lockfile was built with, install it (gem install bundler:2.5.22) or runbundle update --bundler. Running against your system Ruby instead of the pinned one is the usual cause. -
Node dependencies:
npm install
-
One-off build (compile Sass/JS, then Jekyll):
npm run build
-
Live reload (Gulp compiles
src/intoassets/;jekyll serve --livereloadserves the site and refreshes the browser):npm run serve
Or preview without the asset watcher after a build:
npm run build && bundle exec jekyll serve
Requirements: Docker and Docker Compose V2 (docker compose).
Use this to try the theme without installing Ruby or Node on your machine.
docker compose up --buildOpen http://localhost:4000. The site is baked into the image, so restart the container to pick up changes, or use the local workflow with npm run serve for live reload.
-
Build only (output stays in the container, no HTTP server):
docker compose run --rm site bundle exec jekyll buildTo write
_siteon the host:docker compose run --rm -v "$(pwd)/_site:/out" site \ sh -c "bundle exec jekyll build --destination /out"
Edits to _config.yml, _includes/, src/, etc. apply after you restart the container (the entrypoint runs bundle install, npm ci, and npm run build again). Named volumes cache gems and node_modules so the host tree does not need local node_modules.
docker compose -f docker-compose.yml -f docker-compose.dev.yml up --buildStop with Ctrl+C or docker compose down. Volumes jekyll_bundle and jekyll_node_modules persist until you remove them (e.g. docker volume rm).
| Variable | Default | Description |
|---|---|---|
JEKYLL_PORT |
4000 |
HTTP port for Jekyll |
Example:
JEKYLL_PORT=8080 docker compose -f docker-compose.yml -f docker-compose.dev.yml upIf you change the port, map it in docker-compose.yml as well (e.g. "8080:8080").
This theme does not require API keys or .env files. All customization is done via _config.yml and HTML includes.
Fill in the following in _config.yml to customize your site.
description: A short description for meta tags
baseurl: "" # subpath of your site, e.g. /blog/
url: "https://your-domain.example" # full site URL including protocol (needed for canonical URLs, Open Graph, and JSON-LD)
lang: en # document language (<html lang="...">)
social_image: /assets/favicon.png # Open Graph / Twitter preview image (path from site root)
og_locale: en_US # optional; og:locale meta tag
theme_color: "#1a222c" # optional; mobile browser chrome colorusername: Your Name
user_description: Short bio shown on the page
user_title: Your headline
email: you@example.com
linkedin_username: yourprofile
github_username: yourprofileSet
urlandbaseurlcorrectly before you deploy (GitHub Pages, Netlify, etc.). Social preview tags (og:image, etc.) need a validurlso absolute image URLs resolve.
The three columns under "What I Do" are driven by _data/expertise.yml: the section heading, plus a title, body copy, optional highlight caption, and Devicon class names per column (see Devicon for available icons bundled in the theme CSS). Edit that file instead of large HTML blocks.
After changing _data/expertise.yml, rebuild with Jekyll (or npm run build / npm run serve).
- Colors: edit Sass variables under
src/styles/(for examplesrc/styles/_vars.scss). - Particles: edit the configuration in
src/js/app.js(see particles.js for options). After changes, runnpm run buildornpm run servesoassets/js/main.jsis regenerated.
Edit _includes/header.html and _includes/footer.html for social links and layout. Use _data/expertise.yml for the expertise grid (see above). Add more pages via index.html or new files in the project root. Example link markup:
<a aria-label="My Github" target="_blank" rel="noopener noreferrer" href="https://github.com/youruser">
<i class="icon fa fa-github-alt" aria-hidden="true"></i>
</a>There are no automated tests in this repository; verify changes with npm run build and by opening the generated site under _site/.
Mauricio Urraco -- Software Engineer with 10+ years of experience.
- Report issues
- Open pull request with improvements
- Spread the word
- Reach out to me directly at mauriurraco@gmail.com
Released under the MIT License.
If this project helped you, consider buying me a coffee ☕️
