This repository houses the personal portfolio and review site for @gurupanguji. It is built as a high-end static site using Jekyll, following the philosophy of “Das Wesentliche” (The Essential).
@gurupanguji (lowercase) as the author name for all reviews, blog posts, and site-wide metadata./about/index.html page. Do not use it in reviews, headers, footers, or meta descriptions.The site uses Jekyll to generate a static portfolio and a 1,200+ post blog archive:
/_config.yml # Jekyll Configuration (Pagination, SEO, Timezone)
/Gemfile # Ruby dependencies (with Ruby 4.0 compatibility patches)
/index.html # Home: Portal to Blog & Reviews (Jekyll powered)
/404.html # Custom 404 & Legacy WP Link Redirector
/GEMINI.md # Core Agent Mandates (Branching Policy)
/_layouts/
/post.html # Standard layout for blog posts & archive
/_posts/
/YYYY-MM-DD-slug.md # 1,200+ migrated WordPress posts
/_snippets/
/YYYY-MM-DD-slug.md # Companion social snippets for each blog post
/about/
/index.html # About page
/blog/
/index.html # Jekyll-paginated Blog Archive
/rss/
/index.html # RSS Feed Portal
/photography.xml # Photography RSS Feed
/assets/
/gurupanguji.jpeg # Profile image (Favicon & Avatar)
/whatsapp-preview.jpg # Default social preview image (OG/Twitter/WhatsApp)
/css/style.css # Global Design System (Resets, Header, Footer)
/images/blog/ # Locally hosted images for blog posts
/reviews/
/index.html # Visual Portal for all reviews
/camera/
/$brand/$model/ # e.g., /reviews/camera/leica/m11-p/ or /reviews/camera/fujifilm/x100vi/
/index.html # The review content
/images/ # Published assets referenced by the review
To ensure the stability of the main branch, all changes must follow these rules:
main: All work should be done in a separate feature branch.main before creating a new feature branch.The design is inspired by German precision engineering (Leica):
#e30613), Off-White (#f5f5f7), Black Chrome (#1c1c1e).assets/css/style.css includes mandatory resets for img (max-width: 100%) and figure (margin: 0).Every page should include this div immediately after the <body> tag:
<div class="dot-grid"></div>
.header-minimal)Used on all pages. Note: Use absolute paths (/about/index.html, /assets/...) to ensure consistency across Jekyll’s nested directory structure.
<header class="header-minimal">
<a href="/" class="logo-link">
<img src="/assets/gurupanguji.jpeg" alt="Avatar" class="avatar avatar-sm">
gurupanguji
</a>
<nav class="nav-links">
<a href="/about/index.html" class="nav-link">About</a>
<a href="/blog/index.html" class="nav-link">Blog</a>
<a href="/reviews/index.html" class="nav-link">Photography</a>
</nav>
</header>
Standardized copyright signature and 6 social icons.
<footer>
<!-- Social Links -->
<div class="copyright">
© 2026 // gurupanguji //
<span class="das-wesentliche" style="letter-spacing: 2px; font-size: 0.5rem">Das Wesentliche.</span>
</div>
</footer>
_posts/ following the YYYY-MM-DD-slug.md naming convention.---
layout: post
title: "Your Post Title"
date: YYYY-MM-DD HH:MM:SS +0000
categories: ["category1", "category2"]
tags: ["tag1", "tag2"]
---
Note: Using +0000 ensures the URL date matches your filename exactly.
> for blockquotes (rendered in Newsreader serif).wp-* WordPress block markup when a clean native option exists.assets/images/blog/.._snippets/ with the same YYYY-MM-DD-slug.md filename. Include platform-specific copy for Twitter, Tumblr, LinkedIn, Threads, Bluesky, Mastodon, Instagram, and Pixelfed.bundle exec jekyll serve and check http://localhost:4000/blog/ before committing.reviews/camera/ or reviews/lens/.images/ subfolder.reviews/index.html and assets/photography.json (for RSS).To prevent 404s for old WordPress blog links, 404.html acts as a routing layer:
/YYYY/MM/DD/post-slug/./blog/YYYY/MM/DD/post-slug/./sitemap.xml via jekyll-sitemap. Do not edit manually./feed.xml.bundle exec jekyll serve for local development.Gemfile includes monkey patches for Ruby 3.2+ / 4.0+ to support older versions of Liquid used by GitHub Pages./ for site-wide navigation and assets._snippets/ excluded from Jekyll output. It is a content-operations folder, not a rendered collection..github/workflows/validate_html.yml checks for raw Markdown in HTML files on every PR.Updated March 2026