Blog Visual Redesign Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: Reskin the Jekyll blog to a dark-mode, soft-purple-accent aesthetic with a Featured + Grid homepage layout.
Architecture: CSS-override approach — update _config.yml color vars (which Jekyll injects into CSS via Liquid), promote the existing prefers-color-scheme: dark block to always-on, swap the blue accent to purple, and replace the flat post list in index.html with a featured-hero + 2-column card grid. No theme switch, no new dependencies.
Tech Stack: Jekyll (Beautiful Jekyll theme), Liquid templates, plain CSS
File Map
| File | What changes |
|---|---|
_config.yml |
Update all color vars to dark values; remove page-img |
css/main.css |
Strip prefers-color-scheme: dark wrapper → always-on; blue→purple accent; add new .featured-post, .post-grid, .post-card, .post-tag-pill classes |
index.html |
Replace flat paginator loop with featured-hero (page 1) + post-card grid |
_layouts/post.html |
No structural changes needed — .blog-tags already uses the CSS class we’re updating |
Task 1: Update _config.yml colors
Files:
-
Modify:
_config.yml:42-57 -
Step 1: Edit color values and remove page-img
Replace the color block (lines 42–57) with:
navbar-col: "#161b22" navbar-text-col: "#c9d1d9" navbar-children-col: "#21262d" page-col: "#0d1117" link-col: "#d2a8ff" hover-col: "#d2a8ff" footer-col: "#161b22" footer-text-col: "#8b949e" footer-link-col: "#8b949e"Delete this line entirely (it enables the bg image):
page-img: "/images/bgimage.png" -
Step 2: Verify Jekyll builds without error
bundle exec jekyll build 2>&1 | tail -5Expected:
...done in X seconds.with no errors. -
Step 3: Commit
git add _config.yml git commit -m "config: switch to dark mode colors with purple accent"
Task 2: Promote dark-mode CSS to always-on and swap blue → purple
Files:
- Modify:
css/main.css
The existing file already has a @media (prefers-color-scheme: dark) { ... } block at the bottom (lines 1022–1131). This task removes the media-query wrapper so the styles apply unconditionally, swaps all blue values to purple, and adds a body text-color override (since body color: #404040 is hardcoded in the base styles).
-
Step 1: Remove the media query wrapper
In
css/main.css, delete line 1022 (@media (prefers-color-scheme: dark) {) and line 1131 (the closing}). Leave all the rules inside intact.Also delete the matching
@media (prefers-color-scheme: dark)block for.share-btnat lines 840–846:@media (prefers-color-scheme: dark) { .share-btn { background-color: #21262d; border-color: #30363d; color: #c9d1d9; } }Replace with the unwrapped version:
.share-btn { background-color: #21262d; border-color: #30363d; color: #c9d1d9; } -
Step 2: Add body text-color override
Directly after the
body { background-color: #0d1117; ... }rule (which is now unwrapped), add one line so the full rule reads:body { background-color: #0d1117; background-image: none !important; color: #c9d1d9; } -
Step 3: Swap blue accent → purple throughout the former dark-mode block
Do a find-and-replace only inside the block you just unwrapped (the rules from the old media query). Apply these substitutions in order:
Find Replace Used for #58a6ff#d2a8fflinks, navbar hover, blockquote border, code border, progress bar #79c0ff#e2c0fflink hover #388bfd#9a6fd8pager hover bg, back-to-top button, code badge bg, selection bg After replacement the block should contain no
#58a6ff,#79c0ff, or#388bfd.The
.blog-tags arule inside the block should end up as:.blog-tags a { background-color: #21262d; color: #d2a8ff; } .blog-tags a:hover { background-color: #9a6fd8; color: #fff; }And the blockquote rule:
blockquote { background-color: #161b22; color: #8b949e; border-left-color: #d2a8ff; }And
.blog-post h3:.blog-post h3 { border-left-color: #d2a8ff; } -
Step 4: Update the footer border rule
In the unwrapped block find:
footer { background-color: #161b22; border-top-color: #30363d; }And add a border-top style line (it’s already there but verify it reads exactly):
footer { background-color: #161b22; border-top: 1px solid #30363d; } -
Step 5: Add post-preview border-left accent on hover
Inside the unwrapped block, update the
.post-previewrule to add a subtle purple left accent:.post-preview { background-color: #161b22; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.4); border-left: 3px solid transparent; transition: box-shadow 0.2s ease, border-left-color 0.2s ease; } .post-preview:hover { box-shadow: 0 4px 18px rgba(0, 0, 0, 0.6); border-left-color: #d2a8ff; } -
Step 6: Serve and verify
bundle exec jekyll serve --livereloadOpen
http://localhost:4000. Check:- Background is dark (
#0d1117) ✓ - Navbar is
#161b22✓ - Links are purple, not blue ✓
- Code blocks have dark bg with purple left border ✓
- Blockquote has purple left border ✓
- Background is dark (
-
Step 7: Commit
git add css/main.css git commit -m "style: promote dark mode to always-on, swap accent blue→purple"
Task 3: Homepage featured-hero + post-card grid
Files:
- Modify:
index.html -
Modify:
css/main.css(append new classes at bottom) -
Step 1: Add new CSS classes to
css/main.cssAppend the following to the end of
css/main.css:/* --- Featured post hero --- */ .featured-post { display: block; text-decoration: none; background: #161b22; border: 1px solid #30363d; border-left: 3px solid #d2a8ff; border-radius: 6px; padding: 28px 32px; margin-bottom: 32px; transition: border-left-color 0.2s ease, box-shadow 0.2s ease; } .featured-post:hover, .featured-post:focus { border-left-color: #e2c0ff; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5); text-decoration: none; } .featured-post-meta { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; } .featured-label { font-family: 'Courier New', monospace; font-size: 11px; color: #6e7681; text-transform: uppercase; letter-spacing: 0.5px; } .featured-title { font-size: 22px; color: #e6edf3; font-weight: 700; margin: 0 0 10px; line-height: 1.3; } .featured-excerpt { font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; color: #8b949e; line-height: 1.7; margin: 0 0 14px; } /* --- Post tag pill --- */ .post-tag-pill { display: inline-block; background: #1f2937; color: #d2a8ff; font-family: 'Courier New', monospace; font-size: 11px; text-transform: uppercase; letter-spacing: 0.5px; padding: 2px 10px; border-radius: 3px; text-decoration: none; } .post-tag-pill:hover, .post-tag-pill:focus { background: #9a6fd8; color: #fff; text-decoration: none; } /* --- Post meta line --- */ .post-meta-line { font-family: 'Courier New', monospace; font-size: 12px; color: #6e7681; } /* --- Post card grid --- */ .post-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 40px; } @media only screen and (max-width: 600px) { .post-grid { grid-template-columns: 1fr; } } .post-card { display: block; text-decoration: none; background: #161b22; border: 1px solid #21262d; border-radius: 6px; padding: 20px; transition: border-color 0.2s ease, background 0.2s ease; } .post-card:hover, .post-card:focus { border-color: #d2a8ff; background: #1a1f29; text-decoration: none; } .card-title { font-size: 15px; color: #e6edf3; font-weight: 700; margin: 8px 0; line-height: 1.4; } -
Step 2: Rewrite
index.htmlReplace the entire content of
index.htmlwith:--- layout: page title: Bonjour subtitle: A record of how I become a ML Engineer use-site-title: true --- <div class="post-grid"> </div> -
Step 3: Serve and verify
bundle exec jekyll serve --livereloadOpen
http://localhost:4000. Check:- Page 1: purple-bordered hero card for latest post, 2-column grid for remaining posts ✓
- Featured post shows tag pill, excerpt, date + read time ✓
- Grid cards show tag pill, title, date + read time (no excerpt) ✓
- Clicking any card navigates to the post ✓
- On mobile (resize to <600px): grid collapses to 1 column ✓
- Navigate to page 2 (
http://localhost:4000/page2): no hero, all posts in grid ✓ - Pagination “Older Posts →” / “← Newer Posts” links work ✓
-
Step 4: Commit
git add index.html css/main.css git commit -m "feat: featured-hero + post-card grid homepage layout"
Task 4: Final polish and cleanup
Files:
-
Modify:
css/main.css(minor fixes after visual review) -
Step 1: Check post page rendering
With
bundle exec jekyll servestill running, open any post (e.g.http://localhost:4000→ click the featured post). Verify:- Post title is
#e6edf3(bright white) ✓ - Body text is
#c9d1d9(light grey) ✓ - Tags at bottom render as purple pills ✓
- Code blocks have dark bg, purple left border ✓
- Blockquote has purple left border ✓
- Reading progress bar is purple ✓
- Back-to-top button is purple ✓
- Post title is
-
Step 2: Check the tags page
Open
http://localhost:4000/tags. Verify tag buttons render correctly (purple on dark bg). -
Step 3: Remove now-redundant post-preview CSS from light-mode section
In
css/main.css, the original.post-previewrules (lines ~354–504) set light backgrounds and box shadows that are now fully overridden. They’re harmless but add noise. Optionally, remove or comment the hardcoded light values that are superseded:/* these are overridden by the always-on dark block below */ .post-preview { padding: 24px; border-bottom: none; margin-bottom: 20px; /* background: #ffffff; — removed, dark block sets #161b22 */ border-radius: 8px; /* box-shadow: ...; — removed, dark block overrides */ transition: box-shadow 0.2s ease, border-left-color 0.2s ease; }Note: This step is optional — the site works correctly without it. Skip if you prefer not to touch the base rules.
-
Step 4: Add
.superpowers/to.gitignoreThe visual companion wrote session files to
.superpowers/. Add this to.gitignoreso they don’t get committed:echo ".superpowers/" >> /Users/harbui/axon/axon-ai/minhhoangbui.github.io/.gitignoreIf there is no
.gitignore, create it with that one line. -
Step 5: Final commit
git add css/main.css .gitignore git commit -m "chore: polish dark mode styles, add .superpowers to gitignore"
Verification Checklist (after all tasks)
Run bundle exec jekyll serve and check:
- Homepage (page 1): dark bg, purple hero card, 2-column grid
- Homepage (page 2+): dark bg, all posts in 2-column grid, no hero
- Any post page: dark bg, purple tags, dark code blocks, purple blockquote border
- Tags page: purple tag buttons on dark bg
- About Me page: dark bg, readable text
- No white flash / light-mode flickering
- Mobile (<600px): grid collapses to single column
- Disqus comments section still loads on post pages