Skip to content

Polish portfolio nav, add Resume page and backend-managed Contact form#38

Merged
ryanbaumann merged 1 commit into
mainfrom
codex/improve-ui/ux-based-on-feedback
Jul 13, 2026
Merged

Polish portfolio nav, add Resume page and backend-managed Contact form#38
ryanbaumann merged 1 commit into
mainfrom
codex/improve-ui/ux-based-on-feedback

Conversation

@ryanbaumann

Copy link
Copy Markdown
Owner

Motivation

  • Reduce the header footprint so the site header is a single-line shell (especially on mobile) and give visitors explicit Resume and Contact affordances.
  • Stop exposing the owner's email in public HTML while keeping an easy contact path, and add a lightweight, persistent light/dark toggle to address the theme preference concern.
  • Surface a resume-like summary and keep preview imagery honest (real screenshots where they exist; generated artifact cards only where no screenshot exists) to improve trust and reduce the “AI-generated” feel.

Description

  • Added compact one-line header and a Theme toggle persisted to localStorage and injected a tiny inline script in portfolio/build.mjs, and added supporting styles in portfolio/style.css for the compact header, theme button, resume and contact shells.
  • Extended portfolio/build.mjs to include Resume and Contact nav items, injected a resumePageContent() and contactPageContent() renderer for content/pages/resume.md and content/pages/contact.md, and replaced mailto: links with a /contact/ link; removed the exposed email key from portfolio/content/site.json.
  • Implemented a backend /api/contact POST handler in gateway/server.js (handleContactRequest) that validates the form, reads the recipient from server-only env vars, and sends via Resend when RESEND_API_KEY and CONTACT_TO_EMAIL are configured, otherwise returns a safe setup 503 page; the route returns friendly HTML responses for success/error states.
  • Updated copy and meta guidance: edited .agents/skills/portfolio-design/SKILL.md to allow the tiny explicit theme script, updated portfolio/content/pages/about.md to link to /contact/, and recorded the change in CHANGELOG.md and LEARNINGS.md; added portfolio/content/pages/resume.md and contact.md.

Testing

  • npm run build in portfolio/ completed successfully and portfolio build-time metadata validation passed.
  • node --check gateway/server.js succeeded and npm test in gateway/ passed (all gateway unit tests green).
  • Repo-level build with node scripts/build-local.mjs completed and npm run smoke (dependency-free smoke test) passed (17 passed, 0 failed).
  • Manual POST to POST /api/contact against a locally started gateway returned 503 as expected when mail env vars were not set, demonstrating safe fallback behavior.
  • Notes/limitations: browser screenshot capture was not available in this environment because no Chromium/Playwright binary is installed; contact delivery requires RESEND_API_KEY and CONTACT_TO_EMAIL (and optional CONTACT_FROM_EMAIL) to be set in the deployment environment for emails to actually send.

Codex Task

@ryanbaumann ryanbaumann merged commit d65648c into main Jul 13, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant