feat: initial release of pengzhan.dev personal editorial blog platform

- Editorial web platform built with Node.js, Express, EJS, and Vanilla CSS
- Markdown content engine with YAML frontmatter, bilingual variants, and hot-reload watcher
- Unified SQLite with FTS5 search indexing, query logging, and schema filters
- Centered editorial post layout with margin-docked left TOC and mobile bottom sheet
- WordPress-grade comment system with moderation dashboard and bulk operations under /guanli
- Complete SEO suite (JSON-LD structured data, RSS/Atom feeds, XML sitemap, robots.txt)
- CI/CD workflows for linting, security audits (Gitleaks), automated tests, and Docker releases
This commit is contained in:
2026-09-16 23:08:53 -07:00
parent ac2c4c09ef
commit 8c0b04db0e
126 changed files with 8515 additions and 3984 deletions
+42
View File
@@ -0,0 +1,42 @@
<header class="site-header">
<div class="container header-inner">
<a href="/" class="brand">
<span class="brand-title"><%= site.title %></span>
<% if (site.tagline) { %>
<span class="brand-tagline"><%= site.tagline %></span>
<% } %>
</a>
<!-- Desktop Navigation -->
<nav class="site-nav desktop-nav">
<% (navigation || []).forEach(item => {
const isActive = (currentPath === item.path) || (item.path !== '/' && currentPath.startsWith(item.path));
%>
<a href="<%= item.path %>" class="nav-link <%= isActive ? 'active' : '' %>">
<%= item.label %>
</a>
<% }) %>
</nav>
<!-- Mobile Hamburger Toggle Button -->
<button type="button" class="mobile-menu-toggle" id="mobile-menu-toggle" aria-label="Toggle Navigation Menu" aria-expanded="false">
<span class="hamburger-line"></span>
<span class="hamburger-line"></span>
<span class="hamburger-line"></span>
</button>
</div>
<!-- Mobile Slide-Down Drawer -->
<div class="mobile-nav-drawer" id="mobile-nav-drawer">
<nav class="mobile-nav-links">
<% (navigation || []).forEach(item => {
const isActive = (currentPath === item.path) || (item.path !== '/' && currentPath.startsWith(item.path));
%>
<a href="<%= item.path %>" class="mobile-nav-link <%= isActive ? 'active' : '' %>">
<span><%= item.label %></span>
<span class="mobile-nav-arrow">&rarr;</span>
</a>
<% }) %>
</nav>
</div>
</header>