Source for https://taemincode.github.io — a Jekyll-powered personal site with a long-form homepage, blog, and Manim-generated visuals.
Live site: https://taemincode.github.io
- Landing page sections –
index.htmlrenders a hero (with email reveal toggle), timeline, “Snapshot” profile card, work-in-progress/“Now” board, social links, and blog preview cards styled by_sass/_about.scss. - Blog listing & previews –
blogs.htmlbuilds an animated card grid (AOS) with full-card keyboard activation and an “Inspired by …” ribbon wheninspired_byfront matter is present; the homepage pulls the three latest posts, auto-detecting cover art from front matter or the first<img>, and the script disables animations for touch/reduced-motion users. - Post UX –
_layouts/post.htmlshows published/updated metadata (viajekyll-last-modified-at), categories, copy-to-clipboard buttons, MathJax, Rouge styling, and a JS lightbox for in-article images. - Global theming – SCSS design tokens in
_sass/_variables.scssdrive light/dark themes; the navbar toggle persists preference tolocalStorageand respects system defaults. - SEO & discovery –
jekyll-seo-tagrenders structured metadata whilejekyll-sitemapandjekyll-feedkeep search engines and readers up to date automatically. - Accessibility & motion – Reduced-motion visitors skip AOS and hover flair; keyboard focus states, ARIA labels, and responsive typography are wired throughout.
- 404 easter egg –
404.htmlincludes an accessible “launch the rocket” animation with optional Typed.js heading reveal. - Visual assets – Manim scenes under
manim/render tomedia/; responsive WebP imagery for posts lives inassets/images/posts/and hero art instatic/.
- Jekyll 4.3.x, Kramdown/rouge markdown & highlighting
- Plugins:
jekyll-feed,jekyll-seo-tag,jekyll-last-modified-at,jekyll-sitemap - Front-end: SCSS partial pipeline, Bootstrap 5, Font Awesome, AOS, MathJax
- Tooling: Ruby/Bundler for site, Python + Manim for animations
├── index.html / blogs.html # Landing + blog index pages
├── 404.html # Interactive not-found page
├── _config.yml # Site metadata & plugin config
├── _layouts/ # Layouts (default, post)
├── _includes/ # Shared snippets (e.g., responsive image helper)
├── _posts/ # Markdown posts (YYYY-MM-DD-title.md)
├── _sass/ # SCSS partials (variables, base, blog, post, ...)
├── assets/
│ ├── css/site.scss # SCSS entry point (imports partials)
│ └── images/posts/<year>/... # Post imagery (WebP + responsive widths)
├── certificates/ # PDF certificates linked from timeline
├── static/ # Static hero/about assets
├── manim/ # Python scenes that generate blog graphics
├── media/ # Manim output dump (images/videos, ignored by posts)
├── _site/ # Jekyll build output (do not edit; auto-generated)
├── Gemfile / Gemfile.lock # Ruby dependencies
└── README.md # This doc
Prerequisites: Ruby (≥ 3.x recommended), Bundler, and optionally a Python environment for Manim.
bundle install
bundle exec jekyll serve --livereload
# Visit http://127.0.0.1:4000Build the static site (useful for deployment previews):
bundle exec jekyll build-
Create
_posts/YYYY-MM-DD-title.mdwith front matter:--- layout: post title: "Your Title" date: 2025-03-16 categories: [ml] description: Optional SEO summary inspired_by: Claude Monet # optional overlay credit for cards last_modified_at: 2025-03-20 # optional, uses git history if omitted thumbnail: /assets/images/posts/2025/example/cover.webp # optional ---
-
Write Markdown content. MathJax is enabled for LaTeX:
- Inline:
$a^2 + b^2 = c^2$ - Display:
$$\int_a^b f(x)\,dx$$
- Inline:
-
Images:
- Store permanent assets under
assets/images/posts/<year>/<slug>/ - Prefer WebP (supply
*-<width>w.webpvariants for responsive loading) - Reference with
 - Post layout wraps images with a lightbox; clicking opens a full-size view.
- Store permanent assets under
-
Optional metadata:
last_modified_at,updated, oreditedtriggers the “Updated” badge.thumbnail,cover_image,image, orfeatured_imagefeed the blog cards; otherwise the first<img>in the post is used.inspired_by(orartist_inspiration) prints the “Inspired by …” ribbon on listing cards; leave unset if not needed.
-
Python scripts in
manim/generate graphics referenced throughout machine-learning posts. -
Suggested workflow (macOS):
brew install cairo pkg-config pango ffmpeg python -m venv .venv && source .venv/bin/activate pip install manim # Example renders manim -pqh manim/linear_regression_scene.py LinearRegression --format=png manim -pqh manim/logistic_regression.py LogisticRegression --format=png
-
Outputs land in
media/images/<scene>/ormedia/videos/<scene>/; copy finished assets intoassets/images/posts/...when ready to publish.
- Theme toggle updates
data-themeon<html>and mirrors system dark-mode unless overridden. - AOS animations auto-disable on touch devices or when
prefers-reduced-motionis set. - Hero email icon toggles
aria-expanded/aria-pressedto reveal#hero-email-message; preserve markup when editing the social list. - Code blocks get a copy button (
.code-copy-btn) injected by_layouts/default.html. - Blog cards (
blogs.html) rely ondata-hrefplus JS to open on click/Enter and replay AOS animations; maintainrole="link"andtabindex="0". - Navbar gains a “scrolled” class after 50px to adjust shadows.
- The 404 rocket listens for click/keyboard events and can be tuned via the
CONFIGobject (exposed helpers:setRocketExitOffset,setRocketExitMode).
- Hosted at https://taemincode.github.io (
baseurlleft empty). - GitHub Pages can build the site directly; commit only source files (never
_site/). - The RSS feed (
jekyll-feed) and SEO tags (jekyll-seo-tag) activate automatically when layouts include{% seo %}(head already prepared).
No license file is included. All rights reserved unless a license is added.
Taemin Park — https://github.com/taemincode