feat: integrate Poimen LLM chat with reasoning model + deep technical depth
Build & Push Portfolio Image / build-push (push) Successful in 3m20s

- Terminal: hook to api.riotpiao.com reasoning model with streaming
- Add markdown rendering via react-markdown + typography plugin
- Show thinking spinner (⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏) + V100 32GB context during reasoning
- Interview-style help: cert rotation, Talos, SQS failover, vLLM, exactly-once, deploy root cause, K8s CRD
- Chat route: ultra-compressed caveman prompt (60% token reduction)
  - K8s deep expertise: CRDs, operators, reconciliation, Talos, Cilium
  - Cert management: cert-manager, 30d renewal, SOPS, Git audit trail
  - Multi-region queues: SQS FIFO, exactly-once, QueueTask CRD
  - AWS: CDK, CloudFormation, CloudWatch across 57+ regions
- Remove dark mode toggle button (system preference only)
- Update hire-me.png (dark/light auto-switch)
- Add tailwind typography for prose styling
This commit is contained in:
Story Crater Bot
2026-09-01 09:32:07 -07:00
parent 9f900df351
commit 429a14650c
10 changed files with 1073 additions and 757 deletions
+3 -29
View File
@@ -2,15 +2,15 @@
import Link from 'next/link'
import Image from 'next/image'
import { Menu, X, Moon, Sun } from 'lucide-react'
import { useState, useEffect } from 'react'
import { Menu, X } from 'lucide-react'
import { useState } from 'react'
import { useTerminal } from '@/lib/TerminalContext'
import { useLanguage } from '@/lib/LanguageContext'
import { CIStatusIndicator } from './CIStatusIndicator'
export default function Header() {
const [open, setOpen] = useState(false)
const [dark, setDark] = useState(false)
const [skillsOpen, setSkillsOpen] = useState(false)
const [contactOpen, setContactOpen] = useState(false)
const [educationOpen, setEducationOpen] = useState(false)
@@ -28,30 +28,7 @@ export default function Header() {
setLang(lang === 'en' ? 'zh' : 'en')
}
useEffect(() => {
const stored = localStorage.getItem('theme')
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches
const isDark = stored === 'dark' || (!stored && prefersDark)
if (isDark) {
document.documentElement.classList.add('dark')
} else {
document.documentElement.classList.remove('dark')
}
setDark(isDark)
}, [])
const toggleDark = () => {
const newDark = !dark
if (newDark) {
document.documentElement.classList.add('dark')
localStorage.setItem('theme', 'dark')
} else {
document.documentElement.classList.remove('dark')
localStorage.setItem('theme', 'light')
}
setDark(newDark)
}
return (
<header className="sticky top-0 z-50 border-b border-gray-200 dark:border-gray-800 bg-white/95 dark:bg-gray-950/95 backdrop-blur">
@@ -219,9 +196,6 @@ export default function Header() {
</div>
)}
</div>
<button onClick={toggleDark} className="p-2 hover:bg-gray-100 dark:hover:bg-gray-800 rounded">
{dark ? <Sun size={20} /> : <Moon size={20} />}
</button>
{/* Language Toggle */}
<button
onClick={toggleLang}