skip to content
JS John Sosoka

root@sosoka:~$ cat projects/jscom-ice.log

Active

jscom-ice

Jekyll theme for johnsosoka.com

  • --jekyll
  • --ruby
  • --scss
  • --theme

jscom-ice

Overview

jscom-ice is a custom Jekyll theme built specifically for johnsosoka.com. It’s a dark-themed, minimalist blog theme designed for technical writing and personal publishing. The theme is open source and published as a Ruby gem, though it’s primarily tailored for personal use.

The theme emphasizes readability with a carefully crafted typography system using IBM Plex Sans for body text and JetBrains Mono for code blocks. It features a responsive design with both light and dark color schemes, though the dark theme is the primary aesthetic.

Features

Core Layouts

The theme provides five primary layouts:

  • default — Base layout with common HTML structure, head, and scripts
  • home — Landing page layout for the site’s homepage
  • page — Standard content pages
  • post — Blog posts with navigation, tags, and author information
  • lore — Specialized layout for storytelling or narrative content

Reusable Components

The theme includes 15+ reusable includes for common UI patterns:

ComponentPurpose
navbar.htmlResponsive navigation with mobile hamburger menu
footer.htmlSite footer with links and newsletter signup
posts.htmlBlog post listing with excerpts
post_navigation.htmlPrevious/next post navigation
tags.htmlTag cloud and post categorization
carousel.htmlImage carousel for galleries
image-modal.htmlLightbox-style image viewer
contact-me-form.htmlContact form with validation
embed-audio.htmlAudio player embed
yearly_content.htmlArchive organization by year

Newsletter System

A complete newsletter subscription system with three components:

  • Footer signup — Compact horizontal form for site-wide signup
  • Subscribe form — Full subscription form with name/email fields
  • Unsubscribe form — Email-based unsubscription
  • Status check — Subscription status lookup with formatted results

The newsletter components integrate with a REST API and display Bootstrap-styled alerts for user feedback.

Styling Architecture

The theme uses a modular SCSS architecture organized into:

_sass/
├── main.scss # Entry point with variables
├── base/
│ └── _base.scss # Reset and base styles
├── layout/
│ ├── _layout.scss # Grid and structural styles
│ └── _footer.scss # Footer-specific styles
├── pages/
│ ├── _page.scss # Standard page styles
│ ├── _post.scss # Blog post styles
│ └── _home.scss # Homepage styles
└── component/
├── _all-components.scss # Component manifest
├── _navbar.scss # Navigation styles
├── _posts.scss # Post listing styles
├── _newsletter.scss # Newsletter form styles
├── _contact.scss # Contact form styles
├── _form.scss # Form element styles
├── _code.scss # Inline code styles
├── _codeblock.scss # Code block styling
├── _highlight.scss # Syntax highlighting
├── _carousel.scss # Image carousel
├── _author.scss # Author bio component
├── _table.scss # Table styles
├── _image-modal.scss # Lightbox modal
├── _post-navigation.scss # Post pagination
└── _github-gist.scss # GitHub Gist embedding

Typography System

  • Base font: IBM Plex Sans (18px base size)
  • Code font: JetBrains Mono
  • Modular scale: 1.25 ratio for consistent sizing
  • Line height: 1.6 for body text, 1.3 for headings

Color Palette

Dark Theme (Primary):

  • Background: #131418 (dark-black)
  • Text: #c7bebe (dark-text-base-color)
  • Links: #84a5ff (dark-text-link-blue)
  • Accent: #5b9cff (accent-blue)

Light Theme:

  • Background: #fff
  • Text: #434648
  • Links: #003fff

Frontend Dependencies

  • Bootstrap 5 — CSS framework and JavaScript components
  • jQuery 3.7 — DOM manipulation and event handling
  • Popper.js — Positioning engine for dropdowns and tooltips
  • Custom JS — Navbar toggle, image modal, newsletter forms

Usage

Installation

Add to your Jekyll site’s Gemfile:

group :jekyll_plugins do
gem "jscom_ice", '~> 1.0.1'
end

Add to _config.yml:

theme: jscom_ice

Run Bundler:

Terminal window
bundle install

Configuration

Enable footer newsletter signup in _config.yml:

newsletter:
api:
url: https://api.example.com/v1/newsletter
footer:
enabled: true
title: "Newsletter Signup"
description: "Get updates delivered to your inbox"

Creating a Newsletter Page

Create newsletter.md:

---
layout: page
title: Newsletter
permalink: /newsletter/
---
<div class="newsletter-page-container">
{% include newsletter-subscribe-form.html %}
{% include newsletter-unsubscribe-form.html %}
{% include newsletter-status-check.html %}
</div>

Gem Release

The theme is published to RubyGems. To release a new version:

  1. Update version in jscom_ice_theme.gemspec
  2. Build the gem: gem build jscom_ice_theme.gemspec
  3. Push to RubyGems: gem push jscom_ice-{version}.gem

Technology Stack

ComponentTechnology
Static Site GeneratorJekyll 4.3+
LanguageRuby
StylingSCSS with modular architecture
CSS FrameworkBootstrap 5
JavaScriptjQuery 3.7, vanilla JS
Package DistributionRubyGems
LicenseGPL-3.0

Repository

github.com/johnsosoka/jscom-ice