diff --git a/CLAUDE.md b/CLAUDE.md index 8593f37..84deecb 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -67,9 +67,8 @@ copyrightable); copying her stylesheets is not. `hugo.yaml` → `title`. - 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`**, which silently hid the trailing - "to be continued" card. It is now explicitly `count: 0` (unlimited). Never let a - default cap hide entries. +- The collection block defaults to **`count: 5`**. It is explicitly `count: 0` + (unlimited), so the synchronized Research list is never silently capped. ## Local toolchain — three version walls (all worked around in scratch) diff --git a/README.md b/README.md index 7eb3572..c184de2 100644 --- a/README.md +++ b/README.md @@ -31,15 +31,15 @@ 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`. -Lists end in a **visible** placeholder rather than a silent cap — the research -collection is explicitly set to `count: 0` so nothing is ever hidden behind a -default limit. +The research collection is explicitly set to `count: 0` so all four synchronized +research entries remain visible without a default cap. The **Publications** section renders even while it is empty ("In preparation"). It does not get deleted just because there is nothing in it yet. -Upstream truth for all of this lives in `PROFILE.md` (in the private `pw-meta` -repo), projected into `profile-readme/data/profile.json`. +Identity and skill data originate in `PROFILE.md` (in the private `pw-meta` repo), +projected into `profile-readme/data/profile.json`. Public bio, internship, and +research copy are synchronized with the 3D site in `tools/sync-profile.py`. ## The CV diff --git a/content/projects/more/featured.png b/content/projects/more/featured.png deleted file mode 100644 index bde0392..0000000 Binary files a/content/projects/more/featured.png and /dev/null differ diff --git a/content/projects/more/index.md b/content/projects/more/index.md deleted file mode 100644 index 7b8db65..0000000 --- a/content/projects/more/index.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "More work coming soon" -summary: More work is on the way — this slot exists so the room to grow is visible. -date: 2025-12-31 -tags: - - Research ---- - -More projects are in progress. diff --git a/content/projects/r1/index.md b/content/projects/r1/index.md index 0e3519f..a70a721 100644 --- a/content/projects/r1/index.md +++ b/content/projects/r1/index.md @@ -1,9 +1,11 @@ --- -title: "LLM for Incentive Design in Mobility Systems" -summary: "Can an LLM design the incentives that make shared mobility actually work?" +title: "Scalable Split Learning and Quantization for Vision–Language Models in Medicine" +summary: "Studying multi-server split learning, low-bit representation transfer, and privacy–utility trade-offs in medical visual question answering." date: 2026-01-01 tags: - Research --- -An LLM-guided workflow that generates and evaluates interpretable incentive policies for ride-hailing, transit, and shared vehicles — pairing learning-based methods with classical optimization. +**University of Michigan · 2026–present** + +Studying multi-server split learning, low-bit representation transfer, and privacy–utility trade-offs in medical visual question answering. diff --git a/content/projects/r2/index.md b/content/projects/r2/index.md index 0925a7a..2a40d20 100644 --- a/content/projects/r2/index.md +++ b/content/projects/r2/index.md @@ -1,9 +1,11 @@ --- -title: "EPCOT Foundation Model — TSS-to-Expression Data Pipeline" -summary: "Made a genomic foundation model 2–5× faster to train — and found a 50 kb bug that was quietly wrecking its interpretability." +title: "Foundation-Model Fine-Tuning for Regulatory Genomics" +summary: "Fine-tuning EPCOT on single-cell multi-omics data to predict gene expression from chromatin accessibility, with reproducible preprocessing and cell-specific evaluation." date: 2026-01-01 tags: - Research --- -Pseudobulk pipeline from raw snMultiome (1 bp sparse ATAC → 600 kb HDF5 windows; CP10K-normalized 19,264-gene RNA vectors across 7 cell types). Five bit-equivalent training optimizations for a 2–5× speedup at identical numerics. Reset-head fine-tuning for small-data generalization. Located and fixed a ~50 kb TSS-bin offset. +**University of Michigan · 2026–present** + +Fine-tuning EPCOT on single-cell multi-omics data to predict gene expression from chromatin accessibility, with reproducible preprocessing and cell-specific evaluation. diff --git a/content/projects/r3/index.md b/content/projects/r3/index.md index ec0ce4f..8618d01 100644 --- a/content/projects/r3/index.md +++ b/content/projects/r3/index.md @@ -1,9 +1,11 @@ --- -title: "AI-Guided Environmental Sensing & Adaptive Monitoring" -summary: "Where should you put the next sensor in Lake Michigan? Let uncertainty decide." +title: "LLM-Assisted Incentive Design for Mobility Systems" +summary: "Using structured LLM simulations, bandits, and budget constraints to study data-driven incentives for heterogeneous travelers." date: 2026-01-01 tags: - Research --- -Reproducible ingestion → reconstruction → uncertainty-quantification workflow for the sparse, seasonal Great Lakes, comparing random / grid / uncertainty-aware sensor-placement rules. +**University of Michigan · 2026–present** + +Using structured LLM simulations, bandits, and budget constraints to study data-driven incentives for heterogeneous travelers. diff --git a/content/projects/r4/index.md b/content/projects/r4/index.md index 8884f56..f664cc5 100644 --- a/content/projects/r4/index.md +++ b/content/projects/r4/index.md @@ -1,9 +1,11 @@ --- -title: "Applets for Data Analytics in Materials Science" -summary: "Turning materials-science analysis into something you can just... upload a CSV to." +title: "AI-Assisted Platform for Scientific Data Analytics" +summary: "Building a full-stack workflow for materials-science data preparation, interactive model fitting, and human-verified AI assistance." date: 2026-01-01 tags: - Research --- -JavaScript front end + Python back end serving the materials community: users upload datasets and analyze them with SOTA models and fitting methods, built as reusable FAIR-compliant modules. +**University of Michigan · 2026–present** + +Building a full-stack workflow for materials-science data preparation, interactive model fitting, and human-verified AI assistance. diff --git a/content/projects/r5/featured.png b/content/projects/r5/featured.png deleted file mode 100644 index 714e985..0000000 Binary files a/content/projects/r5/featured.png and /dev/null differ diff --git a/content/projects/r5/index.md b/content/projects/r5/index.md deleted file mode 100644 index dcd152d..0000000 --- a/content/projects/r5/index.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Functional Genomic Representation Learning for Microbial Communities" -summary: "A parameter-free way to turn a whole microbial community into one honest vector." -date: 2026-01-01 -tags: - - Research ---- - -Proteogenic k-mer tokenization yields interpretable, parameter-free genome encodings that plug into both classical statistics and pretrained sequence models (Evo, ESM, ProtT5). Abundance-weighted community embeddings, leakage-safe features, permutation tests and honest cross-validation. diff --git a/data/authors/me.yaml b/data/authors/me.yaml index bb1f10e..a66880a 100644 --- a/data/authors/me.yaml +++ b/data/authors/me.yaml @@ -8,9 +8,9 @@ name: given: Tianlang family: Chen alternate: "陈天朗" -role: "B.S.E. Candidate, Data Science" +role: "B.S.E. Candidate · Data Science" bio: | - I study Data Science at the University of Michigan, Ann Arbor. I came here through the UM-SJTU dual-degree program: the first half of my undergraduate degree was Mechanical Engineering at Shanghai Jiao Tong University's Joint Institute, the second half is Data Science at Michigan. It was less a change of heart than a change of tools. + I work across machine learning, scientific data, and full-stack tools for research. affiliations: - name: "University of Michigan, Ann Arbor" @@ -47,14 +47,12 @@ education: Dynamics & Vibrations. experience: - - role: WeCom Full-Stack Developer, Intern - org: Mars Asia — Global IT Service Center + - role: WeCom Full-Stack Development + org: Mars Asia · Global IT Service Center start: 2024-06-01 end: 2025-05-31 summary: | - Full-stack WeCom development in JavaScript, Node.js and Vue.js. API and - interface work, data migration, and cross-platform retrieval. Built the - automation that kept operations continuous through a system migration. + Contributed to internal WeCom tools with JavaScript, Node.js, and Vue.js, supporting APIs, interfaces, data migration, information retrieval, and workflow automation. skills: - name: "Languages" diff --git a/tools/sync-profile.py b/tools/sync-profile.py index e486f9e..95852b5 100755 --- a/tools/sync-profile.py +++ b/tools/sync-profile.py @@ -1,12 +1,12 @@ #!/usr/bin/env python3 -"""Regenerate this site's content from the single source of truth. +"""Regenerate this site's profile and synchronized public resume content. PROFILE.md (in the private pw-meta repo) is the authoritative "who I am". It is projected into profile-readme/data/profile.json, and this script projects *that* into the two places Hugo reads: data/authors/me.yaml the profile: bio, education, internship, skills, ... - content/projects// one folder per research project + content/projects// the four Research cards shared with the 3D site 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. @@ -14,8 +14,9 @@ tools/sync-profile.py regenerate tools/sync-profile.py --check exit non-zero if the checked-in files are stale -Cover images (content/projects/*/featured.png) are NOT touched — they are assets, -and regenerating content must not delete them. +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. """ import argparse @@ -26,6 +27,44 @@ HERE = pathlib.Path(__file__).resolve().parent.parent SRC = HERE.parent / "profile-readme" / "data" / "profile.json" PUBLIC_GITHUB_USERNAME = "jackiectl2" +PUBLIC_ROLE = "B.S.E. Candidate · Data Science" +PUBLIC_BIO = ( + "I work across machine learning, scientific data, and full-stack tools " + "for research." +) +PUBLIC_INTERNSHIP = { + "role": "WeCom Full-Stack Development", + "org": "Mars Asia · Global IT Service Center", + "start": "2024-06-01", + "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." + ), +} +PUBLIC_RESEARCH = [ + { + "id": "r1", + "title": "Scalable Split Learning and Quantization for Vision–Language Models in Medicine", + "summary": "Studying multi-server split learning, low-bit representation transfer, and privacy–utility trade-offs in medical visual question answering.", + }, + { + "id": "r2", + "title": "Foundation-Model Fine-Tuning for Regulatory Genomics", + "summary": "Fine-tuning EPCOT on single-cell multi-omics data to predict gene expression from chromatin accessibility, with reproducible preprocessing and cell-specific evaluation.", + }, + { + "id": "r3", + "title": "LLM-Assisted Incentive Design for Mobility Systems", + "summary": "Using structured LLM simulations, bandits, and budget constraints to study data-driven incentives for heterogeneous travelers.", + }, + { + "id": "r4", + "title": "AI-Assisted Platform for Scientific Data Analytics", + "summary": "Building a full-stack workflow for materials-science data preparation, interactive model fitting, and human-verified AI assistance.", + }, +] def q(s: str) -> str: @@ -57,9 +96,9 @@ def build_author(d: dict) -> str: given: Tianlang family: Chen alternate: {q(ident['name_zh'])} -role: {q(ident['role'])} +role: {q(PUBLIC_ROLE)} bio: | - {d['bio_long'][0]} + {PUBLIC_BIO} affiliations: - name: {q(ident['affiliation'])} @@ -96,14 +135,12 @@ def build_author(d: dict) -> str: Dynamics & Vibrations. experience: - - role: WeCom Full-Stack Developer, Intern - org: Mars Asia — Global IT Service Center - start: 2024-06-01 - end: 2025-05-31 + - role: {PUBLIC_INTERNSHIP['role']} + org: {PUBLIC_INTERNSHIP['org']} + start: {PUBLIC_INTERNSHIP['start']} + end: {PUBLIC_INTERNSHIP['end']} summary: | - Full-stack WeCom development in JavaScript, Node.js and Vue.js. API and - interface work, data migration, and cross-platform retrieval. Built the - automation that kept operations continuous through a system migration. + {PUBLIC_INTERNSHIP['summary']} skills: {skills} @@ -132,29 +169,20 @@ def build_author(d: dict) -> str: def project_pages(d: dict) -> dict: - """slug -> index.md. One per research entry, plus the visible placeholder.""" + """Return the four public research pages shared with the 3D website.""" pages = {} - for r in d["research"]: - pages[r["id"].lower()] = f"""--- + for r in PUBLIC_RESEARCH: + pages[r["id"]] = f"""--- title: {q(r['title'])} -summary: {q(r['hook'])} +summary: {q(r['summary'])} date: 2026-01-01 tags: - Research --- -{r['detail']} -""" - # The trailing card. Headroom the visitor can see, not a silent gap. - pages["more"] = f"""--- -title: {q(d['labels']['research_more'])} -summary: More work is on the way — this slot exists so the room to grow is visible. -date: 2025-12-31 -tags: - - Research ---- +**University of Michigan · 2026–present** -More projects are in progress. +{r['summary']} """ return pages