feat: design-system upgrade + brand to 'Mr Hoelee'
Deploy / build (push) Successful in 16s

- Extract CSS into src/styles/global.css with design tokens (hoelee.com brand palette)
- Self-hosted Inter + JetBrains Mono via @fontsource
- Sticky nav + manual light/dark toggle + copy-button code blocks
- Author card + Person JSON-LD (E-E-A-T), article meta, related posts, reading time
- Full SEO: canonical, OG (with dims), twitter:card, favicon (all sizes), RSS + sitemap
- New /categories/ and /categories/[category]/ pages
- Add docs/ knowledge guides (content, design, seo, ops) + README index
- Brand name: hoelee.dev -> Mr Hoelee
This commit is contained in:
hoelee committed 2026-09-06 06:21:28 +08:00
1 parent 43b6f65c1c
commit a0b238bc98
25 files changed
+1306 -120

No files matched your search

+23
View File
@@ -0,0 +1,23 @@
---
import { SITE } from '../config';
interface Props {
bio?: string;
}
const { bio = 'Full-stack developer & DevOps engineer. I build web apps, self-host infrastructure, and automate things — this blog is my living portfolio.' } = Astro.props;
---
<div class="author-card">
<div class="avatar" aria-hidden="true">{SITE.handle.charAt(0)}</div>
<div>
<p class="who">{SITE.author}</p>
<p class="bio">{bio}</p>
<div class="links">
<a href={SITE.linkedin} target="_blank" rel="noopener">LinkedIn</a>
<a href={SITE.github} target="_blank" rel="noopener">GitHub</a>
<a href={SITE.gitea} target="_blank" rel="noopener">Gitea</a>
<a href={SITE.website} target="_blank" rel="noopener">hoelee.com</a>
</div>
</div>
</div>
+29
View File
@@ -0,0 +1,29 @@
---
import type { CollectionEntry } from 'astro:content';
interface Props {
posts: CollectionEntry<'posts'>[];
limit?: number;
}
const { posts, limit } = Astro.props;
const shown = limit ? posts.slice(0, limit) : posts;
const fmt = (d: Date) =>
d.toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' });
---
<ul class="post-list">
{shown.map((post) => (
<li>
<a href={`/posts/${post.slug}/`}><h2>{post.data.title}</h2></a>
<div class="meta">
<time datetime={post.data.pubDate.toISOString()}>{fmt(post.data.pubDate)}</time>
<span class="sep">·</span>
<a class="tag" href={`/categories/${post.data.category}/`}>{post.data.category}</a>
{post.data.tags.map((t) => <span class="tag">{t}</span>)}
</div>
<p>{post.data.description}</p>
</li>
))}
</ul>