DavidHLPL is a multilingual personal blog and evidence-backed AI knowledge base built on Astro. It follows the content workflow of ThoughtLite and adapts the interactive 3D archive terminal from RhineLabUI while keeping the site's own content, translations, and knowledge-base rules in this repository.
Published notes and jottings are rendered as locale-aware pages, feeds, and searchable archive records. The site is static and does not require a database, API key, or backend service.
The full archive interface uses WebGL 2, while a generated HTML article directory remains available when JavaScript or WebGL cannot run.
- Interactive archive OS — Three.js boot sequence, archive browsing, category and keyword search, article details, favorites, text export, and a 360° model viewer with decryption and assembly interactions.
- Evidence-backed knowledge base — Stable
notepages, lightweightjottingentries, and immutablerawsource material follow the project's editorial workflow. - Content-driven archive — Archive records are generated at build time from the current locale's published
noteandjottingentries; drafts, underscored files, and raw sources are not published into the archive. - Astro content pipeline — Markdown and MDX support with syntax highlighting, math, Mermaid, tables, images, footnotes, reading time, and automatic headings.
- Multilingual routing — English, Simplified Chinese, and Japanese routes with
zh-cnas the canonical knowledge-base language. - Theme and responsive support — Light/dark themes, responsive layouts, touch-friendly navigation, and reduced-motion preferences.
- Static publishing — Atom feeds, sitemap generation, Open Graph metadata, and a static
dist/output suitable for GitHub Pages or another static host. - Graceful fallback — Empty archives, disabled JavaScript, or failed WebGL loading still expose a generated HTML article directory.
- Content protection rules — Raw sources and knowledge-base logs remain separate from published collections and are handled by the repository's documented invariants.
The embedded Rhine interface is adapted for this blog. The upstream project's standalone PWA and Wallpaper Engine host features are not enabled here.
- Node.js 22.12 or newer.
- pnpm 10.30.0, as declared by
package.json. - A modern browser with WebGL 2 for the full archive experience.
git clone https://github.com/DavidHLP/DavidHLP.github.io.git
cd DavidHLP.github.io
pnpm install --frozen-lockfile
pnpm devOpen the address printed by Astro, normally http://localhost:4321. If the local environment does not resolve localhost correctly, use:
pnpm dev --host 127.0.0.1pnpm build
pnpm previewThe production site is written to dist/. Serve it through an HTTP server; do not open dist/index.html directly.
| Command | Purpose |
|---|---|
pnpm install --frozen-lockfile |
Install the locked dependency set |
pnpm new |
Create a new content file through the project helper |
pnpm dev |
Start the Astro development server on port 4321 by default |
pnpm check |
Run Astro and TypeScript checks |
pnpm test:run |
Run the Vitest test suite once |
pnpm build |
Build the static production site |
pnpm preview |
Preview the built site locally |
pnpm format |
Format supported source files with Biome |
pnpm lint |
Run Biome lint checks |
pnpm kb:lint |
Validate the knowledge-base evidence and index invariants |
node scripts/editorial-smoke.mjs |
Validate generated routes, archive records, assets, and licenses after a build |
| Path | Responsibility |
|---|---|
src/components/RhineArchive.astro |
Connect Astro content collections to the archive interface and provide the HTML fallback directory |
src/rhine/ |
Adapted Three.js archive UI, boot sequence, model viewer, audio, motion, and rendering controls |
src/content/note/{locale}/ |
Stable, evidence-backed knowledge pages |
src/content/jotting/{locale}/ |
Lightweight notes and the knowledge-base intake queue |
src/content/information/{locale}/ |
Introduction, policy, links, chronology, knowledge-base index, and log |
src/content/preface/{locale}/ |
Preface content used by the site |
src/content/raw/{locale}/ |
Immutable source material for knowledge-base pages; not a public collection |
src/i18n/ |
Translation resources for en, zh-cn, and ja |
src/components/ |
Reusable Astro and Svelte UI components |
src/pages/[...locale]/ |
Locale-aware routes for the home page, archive, content, feeds, and information pages |
src/layouts/ |
Shared page and document layouts |
public/assets/ |
Runtime models and other archive assets |
public/audio/ |
Archive audio, source notes, and generation metadata |
public/fonts/ |
MiSans webfonts and their notices/licenses |
public/licenses/ |
Third-party license texts used by the integrated UI |
docs/rhine-migration.md |
Migration scope, content mapping, fallback behavior, and verification notes |
site.config.ts |
Site identity, locale, content, pagination, and feed configuration |
astro.config.ts |
Astro integrations, Markdown/MDX processing, routing, sitemap, and build behavior |
Published content is organized by locale and collection:
notecontains carefully structured technical and engineering knowledge.jottingcontains lightweight observations and material waiting to be compiled into stable knowledge pages.informationcontains the introduction, policy, links, chronology, and knowledge-base indexes/logs.prefacecontains site prefaces.rawpreserves source material as an immutable evidence layer and is not listed as public content.
The knowledge base uses zh-cn as its canonical language. English and Japanese pages are maintained as translations when a multilingual output is required. New published entries are picked up by the archive, generated routes, and feeds on the next build.
The main configuration entry points are:
site.config.ts— site identity, author, description, locales, pagination, feed, and latest-content settings.astro.config.ts— Astro integrations, Markdown/MDX processing, locale routing, aliases, sitemap, and build behavior.src/i18n/— interface translations and labels.
The repository is configured for GitHub Pages. Pushes to main start the deployment workflow, which first reuses the validation workflow; only after validation succeeds does it install the locked pnpm dependencies, build dist/, add .nojekyll, and publish the result through GitHub Pages.
The validation workflow runs Biome checks, type checks, unit tests, the static build, archive/resource smoke checks, committed SVG checks, and browser/print smoke checks for the about page at desktop and mobile widths.
For a local validation pass:
pnpm check
pnpm test:run
pnpm build
node scripts/editorial-smoke.mjsThis repository combines two upstream layers with the site's own content and integration code:
- ThoughtLite provides the original Astro content-theme foundation. See the upstream README. The project license remains GPLv3.
- RhineLabUI provides the adapted Three.js archive interface. The integrated source is kept at
src/rhine/and pinned to the reviewed commit8799b03179a9a0ebd2611843e644a5a0530b24bf. See the upstream README and the local MIT license notice.
The RhineLabUI MIT notice applies only to the covered adapted interface code; it does not relicense every file or asset in this repository. MiSans, Rolling Number, audio files, other dependencies, and the names, logos, models, and source material associated with the referenced work retain their own rights and notices. See public/fonts/NOTICE.txt, public/audio/README.md, public/licenses/rolling-number.txt, and docs/rhine-migration.md.
The original RhineLabUI project is an unofficial interface recreation and is not affiliated with the owners of the referenced game, characters, logos, or source video. The rights to those third-party works remain with their respective owners.