Skip to content

chore: rewrite hero/about copy, add favicon and polish portfolio#6

Merged
anhvuFE merged 1 commit into
mainfrom
chore/copy-favicon-and-polish
May 9, 2026
Merged

chore: rewrite hero/about copy, add favicon and polish portfolio#6
anhvuFE merged 1 commit into
mainfrom
chore/copy-favicon-and-polish

Conversation

@anhvuFE
Copy link
Copy Markdown
Owner

@anhvuFE anhvuFE commented May 9, 2026

Summary

  • Replace generic "passionate about clean code / Agile environments" hero and About copy with concrete one-liners
  • Generate a favicon set (32/64/180/192/512 PNG + apple-touch-icon) from the avatar; drop unused boxicons + unicons CDN links
  • Move EmailJS keys to REACT_APP_* env vars; commit .env.example, gitignore .env
  • Fix small audit findings (year hardcoding, missing aria-labels, missing subject field, stale browserslist)
  • Rewrite README and remove the deploy.txt scratchpad

Copy changes

Where Before After
Home description "Full Stack Developer with 3+ years of experience... Passionate about clean code, intuitive design, and delivering high-quality products in Agile environments." "I build fast, accessible web apps with React, TypeScript and Node. Currently shipping at neliSoftwares — open to freelance and full-time roles."
Typewriter roles ..."React & TypeScript Expert" ..."Frontend-leaning Engineer", "React & TypeScript"
About paragraph 1 "I am a Developer with over two years of experience..." "Three years in, four companies, mostly shipping React and TypeScript..."
About paragraph 2 "I am comfortable working with RESTful APIs, state management, and building clean, scalable interfaces..." "I care about the boring details that make products feel good — small bundles, fast loads, accessible interactions..."
Contact subtitle "Have a project in mind or just want to say hello?" "Hiring, freelance, or just curious about something I built — drop a message."
Years experience 3+ 4+ (Home stats, About achievement, Info card, bento About preview)

Head and PWA

  • public/index.html: set title (Vũ Xuân Anh — Full Stack Developer), theme-color, meta description, favicon links and apple-touch-icon
  • public/manifest.json (new): name, icons, standalone display, theme/background colors
  • public/robots.txt, public/sitemap.xml (new)
  • Removed unused boxicons and unicons CDN <link>s (render-blocking, no usage)

Environment / config

  • Contact form now reads REACT_APP_EMAILJS_SERVICE_ID, REACT_APP_EMAILJS_TEMPLATE_ID, REACT_APP_EMAILJS_PUBLIC_KEY from env, with a friendly error if missing
  • .env.example checked in; .env added to .gitignore
  • Subject field is now passed to EmailJS template params (was being collected but dropped)
  • caniuse-lite updated via update-browserslist-db

Other

  • Footer.tsx: currentYear now uses new Date().getFullYear()
  • Certificate.tsx and Services.tsx: aria-label added to modal close IconButtons
  • README.md rewritten: stack, layout, local dev, env vars, build/deploy, image pipeline, structure
  • deploy.txt removed
  • scripts/generate-favicon.js (new): regenerates the favicon set from src/assets/avatar.jpg

Test plan

  • npm run dev — favicon shows the avatar in the browser tab
  • Hero shows the new copy; typewriter cycles through the new roles
  • About 'My Journey' shows the rewritten paragraphs
  • All counters show "4+ Years"
  • Open contact form, submit empty -> per-field errors; submit a valid form -> success snackbar; subject field arrives in the EmailJS test
  • Mobile install prompt picks up manifest.json (DevTools > Application > Manifest)
  • npm run build succeeds

Copy:
- rewrite hero description to a concrete one-liner
- replace generic "passionate about clean code" text in About
- soften typewriter roles (drop "Expert")
- update years experience: 3+ -> 4+
- new contact subtitle

Favicon and head:
- generate 32, 64, 192, 512 PNGs and 180 apple-touch-icon from avatar
- add manifest.json, robots.txt, sitemap.xml
- set page title, theme-color and meta description
- drop unused boxicons and unicons CDN <link>s

Audit fixes:
- footer copyright year now uses Date.getFullYear()
- move EmailJS service/template/public key to REACT_APP_* env vars
  with .env.example checked in and .env gitignored
- pass missing subject field to EmailJS template params
- add aria-label to certificate and service modal close buttons
- bump caniuse-lite via update-browserslist-db
- rewrite README with stack, env setup, build/deploy and image pipeline
- remove deploy.txt scratchpad

scripts/generate-favicon.js regenerates the favicon set from
src/assets/avatar.jpg.
@anhvuFE anhvuFE merged commit dbdef57 into main May 9, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant