diff --git a/CLAUDE.md b/CLAUDE.md index 84deecb..0e40224 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -68,7 +68,8 @@ copyrightable); copying her stylesheets is not. - Skill progress bars only render `{{ if gt $level 0 }}` — so **omitting `level`** in the author YAML removes them. No override needed. - The collection block defaults to **`count: 5`**. It is explicitly `count: 0` - (unlimited), so the synchronized Research list is never silently capped. + (unlimited), so the four synchronized Research entries plus their reserved + next-entry placeholder are never silently capped. ## Local toolchain — three version walls (all worked around in scratch) diff --git a/README.md b/README.md index c184de2..3b48338 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,8 @@ Motion is disabled automatically for visitors whose OS asks for reduced motion. No template assumes how many entries a list holds. Adding a project is one folder under `content/projects/`; adding a skill is one line in `data/authors/me.yaml`. The research collection is explicitly set to `count: 0` so all four synchronized -research entries remain visible without a default cap. +research entries and the reserved next-entry card remain visible without a default +cap. Education and Internship also end with one clearly labeled placeholder. The **Publications** section renders even while it is empty ("In preparation"). It does not get deleted just because there is nothing in it yet. diff --git a/content/projects/more/index.md b/content/projects/more/index.md new file mode 100644 index 0000000..c12e6f0 --- /dev/null +++ b/content/projects/more/index.md @@ -0,0 +1,9 @@ +--- +title: "Add another research entry" +summary: "Reserved for your next entry. Replace this card when new information is ready." +date: 2025-12-31 +tags: + - Research +--- + +Reserved for your next entry. Replace this card when new information is ready. diff --git a/data/authors/me.yaml b/data/authors/me.yaml index a66880a..22d0c44 100644 --- a/data/authors/me.yaml +++ b/data/authors/me.yaml @@ -45,6 +45,10 @@ education: summary: | Applied Linear Algebra; Dynamical Systems; Design & Manufacturing; Dynamics & Vibrations. + - degree: Add another education entry + institution: Placeholder + summary: | + Reserved for your next entry. Replace this card when new information is ready. experience: - role: WeCom Full-Stack Development @@ -53,6 +57,10 @@ experience: end: 2025-05-31 summary: | Contributed to internal WeCom tools with JavaScript, Node.js, and Vue.js, supporting APIs, interfaces, data migration, information retrieval, and workflow automation. + - role: Add another internship entry + org: Placeholder + summary: | + Reserved for your next entry. Replace this card when new information is ready. skills: - name: "Languages" diff --git a/tools/sync-profile.py b/tools/sync-profile.py index 95852b5..906c045 100755 --- a/tools/sync-profile.py +++ b/tools/sync-profile.py @@ -6,7 +6,7 @@ into the two places Hugo reads: data/authors/me.yaml the profile: bio, education, internship, skills, ... - content/projects// the four Research cards shared with the 3D site + content/projects// four Research cards plus one next-entry placeholder Run it after any change to profile.json, then commit the result. Nothing here is hand-maintained; editing me.yaml directly means the next run overwrites you. @@ -15,8 +15,9 @@ tools/sync-profile.py --check exit non-zero if the checked-in files are stale Identity and skills come from profile.json. The public bio, Mars Internship, and -four Research descriptions below intentionally match the 3D website. Cover images -(content/projects/*/featured.png) are not touched. +four Research descriptions below intentionally match the 3D website. Education, +Internship, and Research each retain one visible next-entry placeholder. Cover +images (content/projects/*/featured.png) are not touched. """ import argparse @@ -65,6 +66,7 @@ "summary": "Building a full-stack workflow for materials-science data preparation, interactive model fitting, and human-verified AI assistance.", }, ] +ENTRY_PLACEHOLDER = "Reserved for your next entry. Replace this card when new information is ready." def q(s: str) -> str: @@ -133,6 +135,10 @@ def build_author(d: dict) -> str: summary: | Applied Linear Algebra; Dynamical Systems; Design & Manufacturing; Dynamics & Vibrations. + - degree: Add another education entry + institution: Placeholder + summary: | + {ENTRY_PLACEHOLDER} experience: - role: {PUBLIC_INTERNSHIP['role']} @@ -141,6 +147,10 @@ def build_author(d: dict) -> str: end: {PUBLIC_INTERNSHIP['end']} summary: | {PUBLIC_INTERNSHIP['summary']} + - role: Add another internship entry + org: Placeholder + summary: | + {ENTRY_PLACEHOLDER} skills: {skills} @@ -169,7 +179,7 @@ def build_author(d: dict) -> str: def project_pages(d: dict) -> dict: - """Return the four public research pages shared with the 3D website.""" + """Return four public research pages and one next-entry placeholder.""" pages = {} for r in PUBLIC_RESEARCH: pages[r["id"]] = f"""--- @@ -183,6 +193,16 @@ def project_pages(d: dict) -> dict: **University of Michigan · 2026–present** {r['summary']} +""" + pages["more"] = f"""--- +title: "Add another research entry" +summary: {q(ENTRY_PLACEHOLDER)} +date: 2025-12-31 +tags: + - Research +--- + +{ENTRY_PLACEHOLDER} """ return pages