Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
9 changes: 9 additions & 0 deletions content/projects/more/index.md
Original file line number Diff line number Diff line change
@@ -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.
8 changes: 8 additions & 0 deletions data/authors/me.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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"
Expand Down
28 changes: 24 additions & 4 deletions tools/sync-profile.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
into the two places Hugo reads:

data/authors/me.yaml the profile: bio, education, internship, skills, ...
content/projects/<id>/ the four Research cards shared with the 3D site
content/projects/<id>/ 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.
Expand All @@ -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
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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']}
Expand All @@ -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}
Expand Down Expand Up @@ -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"""---
Expand All @@ -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

Expand Down
Loading