Project memory for the 2D personal site. The parent personal_website/CLAUDE.md and
the user-level ~/.claude/CLAUDE.md both load automatically; this file adds only
what is specific to this repo. Code and comments here are English-only.
A Hugo Blox site, built on the Academic CV
template (MIT — LICENSE.md must stay verbatim). Static site, deployed to
GitHub Pages by GitHub Actions. Default branch master. Live:
https://jackiectl.github.io.
It was originally a clone of bencentra/centrarium (Jekyll), redesigned by hand.
The owner found the result too plain and asked for something flashier, with motion
and a bright palette, built on a popular off-the-shelf project rather than hand-written
CSS. The whole Jekyll site was replaced by Hugo Blox on 2026-07-11 and the git
history was squashed to a single commit, so git log no longer shows any of it.
Centrarium code no longer exists here — do not credit it, and do not go looking for
_config.yml / _layouts / _sass.
al-folio (15.8k stars, the AI-researcher default) was built out with the same content and shown side by side. The owner picked Hugo Blox because it is far more animated and colourful. This was an informed aesthetic call, not an accident — do not "helpfully" revert it toward a plainer academic look.
AmberLJC.github.io came up repeatedly as a reference. Facts, established by
inspection:
- Her repo is a fork of centrarium, 132 commits ahead, and she deleted the MIT LICENSE.
- GitHub reports its license as
null. - The
README.mdin it declaring CC BY-SA 3.0 is the unmodified README of theorderedlist/minimaltheme, left behind from an early copy. It describes a theme she no longer uses. Her actual CSS (theme-1-minimal.css, CSS custom properties) is her own work. - Even taken at face value, CC BY-SA is copyleft — building on it would force this whole site to be CC BY-SA too.
→ Her code cannot be copied. Imitating a layout genre is fine (that is not copyrightable); copying her stylesheets is not.
| Where | What |
|---|---|
data/authors/me.yaml |
The entire profile. |
content/_index.md |
Homepage section order = CV order: Education → Internship → Research → Skills → Additional. Nav in config/_default/menus.yaml matches. |
content/projects/*/ |
One folder per project + featured.png. |
layouts/_partials/hooks/head-end/custom.html |
Motion layer. Uses Hugo Blox's own head-end hook (partial "functions/get_hook"), so no theme file is edited. |
layouts/_partials/hbx/blocks/<id>/block.html |
Block overrides. The module mounts blox/ → layouts/_partials/hbx/blocks/, so a project file at the same path wins. Two exist: resume-languages (name inside the ring, no bogus "100%") and resume-experience (adds design.hide_education, since the hero already renders education). |
assets/media/icon.svg |
Favicon. Overrides the theme's default red "H" — the theme picks up media/icon.svg from the project automatically. |
- There is no
<main>element. CSS scoped tomain ...silently matches nothing. This cost a debugging cycle. - Section headings are written three different ways:
<h2>,<h3>, and<div class="text-3xl font-bold">. Style all three or headings look inconsistent. - The site name in the header comes from
params.yaml→site.name, not fromhugo.yaml→title. - Skill progress bars only render
{{ if gt $level 0 }}— so omittinglevelin the author YAML removes them. No override needed. - The collection block defaults to
count: 5, which silently hid the trailing "to be continued" card. It is now explicitlycount: 0(unlimited). Never let a default cap hide entries.
The cluster's own modules are all slightly too old. Everything lives in
/scratch/nmasoud_owned_root/nmasoud_owned1/ctlang/pw-cache/sandbox/bin/:
- Hugo
extendedwill not run — it needs GLIBC 2.34; RHEL 8 has 2.28. Use the standard (pure-Go, static) Hugo binary instead, and let the npm Tailwind CLI do the CSS.module load go/1.25.7is required (Hugo Modules). module load node.js/22.14.0is 0.01 too old. Hugo ≥ 0.164 usesregisterHooksfromnode:module, added in Node 22.15. Downloaded Node 22.23 into scratch.- Tailwind CLI must be installed (
npm install).
node_modules must live IN the repo — do not symlink it out to scratch. That
is what 铁律 C prescribes, and it breaks this build: Hugo runs the Tailwind CLI
under Node's permission model, which refuses to read outside the project tree, so a
symlink resolving to /scratch dies with Access to this API has been restricted.
It is only 105 MB and it is gitignored, so the cost is small and never reaches
GitHub. This is a deliberate, size-checked exception.
SB=/scratch/nmasoud_owned_root/nmasoud_owned1/ctlang/pw-cache/sandbox
module load go/1.25.7
export PATH="$SB/bin:$PWD/node_modules/.bin:$PATH" # scratch node FIRST
export GOPATH=$SB/gopath HUGO_CACHEDIR=$SB/hugocache
hugo server --disableFastRender --bind 0.0.0.0 --port 4020None of this affects CI — GitHub's Ubuntu runners have current glibc/Node and use Hugo extended normally. This is a local-preview problem only.
Claude's background servers are not auto-forwarded by VS Code (it only forwards what its own terminals start). Tell the user to add the port by hand in the PORTS panel, or to open an SSH tunnel.
firefox --headless --screenshot out.png --window-size=1400,2600 URL works, and
Claude can Read the PNG — the design loop is closed without the user looking.
static/uploads/resume.pdf ← tools/build-cv.sh, which compiles the LaTeX in
../cv (Overleaf-backed). LaTeX does build on this machine — TinyTeX is in
$HOME/.TinyTeX with tlmgr. Two traps: TinyTeX does not symlink biber into
~/bin (put $HOME/.TinyTeX/bin/x86_64-linux on PATH), and latexmk replays its
cached failure until the outdir is wiped.
Actions builds and publishes on every push to master. Pages was enabled by the
workflow itself via actions/configure-pages with enablement: true — the
fine-grained PAT cannot enable Pages (POST /repos/{o}/{r}/pages → 403). The PAT
can push workflow files.
No custom domain. github.io is free and sufficient; jackiectl.com is reserved
for the 3D site only.
- No blog posts yet.
- Project cover images are procedurally generated geometry, not AI illustrations — Claude has no image-generation model here. Replace them if the owner supplies real art.
- Publications is empty by design ("In preparation"). Fill
content/publications/when papers exist. Do not delete the section.