lmdexpr のプロフィール・スライド・ブログを集約するサイト。 ReScript + React + Vite の SPA で、ビルド時ではなくブラウザから直接 GitHub API / raw.githubusercontent.com / Zenn を叩いてコンテンツを取得する。バックエンドを持たない完全な静的サイト。
| タブ | 内容 | データソース |
|---|---|---|
| Profile | 経歴・コミュニティ活動・執筆歴 | 手書き(src/ProfileView.res) |
| Slides | 発表スライド一覧・埋め込み表示 | GitHub API: lmdexpr/slides |
| Blog | Zenn 記事一覧・本文の埋め込み表示 | GitHub API: lmdexpr/zenn-docs |
Slides・Blog とも「一覧に必要な情報だけを最初に取る → 個別ページを開いたときだけ詳細を取る」設計で、GitHub API(未認証 60 req/hr/IP)を極力消費しないようにしている(src/GitHub.res)。
direnv allow
npm install.envrc が use flake(Nix dev shell)に加えて node_modules/.bin を PATH に通す(rescript-language-server 等のローカル CLI を Neovim の LSP クライアントがそのまま見つけられるようにするため)。direnv を使わない場合は nix develop && npm install で同等。
npm run dev # rescript watch + vite dev server (localhost:5173)
npm run build # rescript build && vite build → dist/
npm run preview # dist/ をローカルでプレビュー
npm run format # rescript format -allnix build で dist/ を Nix derivation として再現可能にビルドできる(flake.nix 参照。npmDepsHash は package-lock.json を変更したら nix run nixpkgs#prefetch-npm-deps -- package-lock.json で再計算して更新すること)。
GitHub Pages を使用予定。.github/workflows/ci.yml で main への push → build → deploy まで組んである。