Use this for larger features, refactors, or bug fixes before making broad changes.
- What should change, for whom, and why?
- Relevant product or technical background.
- Current behavior and where it lives.
- Existing commands, scripts, or deployment constraints that matter.
- Static export / hosting constraints.
- Scope limits.
- Performance, accessibility, SEO, or content constraints.
- Files or systems that should not be changed.
- Facts inferred from the repo.
- Any item that is uncertain should be marked
verify.
- Inspect the current implementation and affected files.
- Make the smallest structural changes needed.
- Update UI/content/logic.
- Validate with the repo’s real commands.
- Summarize outcome, risks, and follow-ups.
- List expected source files.
- List any config, asset, or deployment files only if truly needed.
npm run lintnpm run build- Manual checks:
- Accessibility or responsive checks:
- What could regress?
- What static-export, routing, or deployment behavior could break?
- Unknown requirements.
- Content or copy decisions that need confirmation.
- Any command or workflow ambiguity.
- Behavior matches the goal.
- Scope stays within the stated constraints.
- Validation passes.
- Any
verifyitems are either resolved or clearly called out.
- Move hard-coded portfolio copy and list data into a small shared data module so future content edits do not require touching component markup.
- The homepage is assembled in
app/page.tsxfrom section components incomponents. - Several components currently embed content arrays directly, including projects, timeline entries, and writing placeholders.
- The site is static-exported, so a local data module is sufficient; no CMS or server dependency is needed.
- Preserve the existing layout and visual design.
- Keep static-export compatibility.
- Avoid introducing a heavier content system unless explicitly requested.
- Content remains authored in-repo rather than fetched remotely.
- A simple TypeScript module under the source tree is enough.
- Dedicated content collection tooling is unnecessary for the current scope.
- Identify all hard-coded content arrays and strings that should move first.
- Create a typed data module for shared homepage content.
- Update components to read from that module without changing rendered structure.
- Run
npm run lintandnpm run build. - Document any remaining hard-coded copy left intentionally in place.
components/Hero.tsxcomponents/Projects.tsxcomponents/Timeline.tsxcomponents/WritingTeaser.tsx- New data file location: verify
npm run lintnpm run build- Manual checks:
- Confirm the homepage content renders identically after the refactor.
- Confirm resume, contact, and anchor links still work.
- Accessibility or responsive checks:
- Confirm no new client-only code is introduced unnecessarily.
- Unintended copy changes during extraction.
- Over-abstracting a small static site and making content updates harder instead of easier.
- Should the data live in
components, a newdatafolder, or another location? verify - Should metadata in
app/layout.tsxalso move into the shared content module?
- Components consume typed shared content data.
- Rendered output remains materially unchanged.
npm run lintandnpm run buildpass.- Any deferred content cleanup is explicitly noted.