Skip to content

Latest commit

 

History

375 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pablo Pineda's portfolio

The source for pablo.steralynx.com, a personal portfolio available in English and Spanish.

Portfolio preview

Built with Next.js, React, TypeScript, and CSS Modules. The site combines a localized portfolio with crawlable HTML résumés, project galleries, a skills overview, a contact form, and a small set of interactions that make browsing it feel less static.

  • Locale content comes from separate English and Spanish dictionaries, with localized metadata, HTML résumés, and PDF CV downloads for each route.
  • Search discovery includes canonical and alternate-language URLs, JSON-LD profile data, a sitemap, crawler rules, and an AI-readable llms.txt summary.
  • The project viewer is an accessible dialog: it supports Escape to close, arrow keys to move through images, and pan and zoom controls for a closer look.
  • Theme preference is stored locally, and navigation follows the section currently in view.
  • The contact endpoint validates and sanitizes form data on the server before sending email through SMTP.
  • Playwright covers the two locale routes, switching languages, theme persistence, and closing the image viewer.

Stack

Next.js App Router · React 19 · TypeScript · next-intl · Zustand · react-zoom-pan-pinch · Sharp · Vercel Analytics · Playwright

Requirements

  • Node.js 24.18.0 (see .node-version)
  • pnpm 11.17.0 (see package.json)
  • Ghostscript (gs) for local ATS-style PDF extraction checks

Contact form

Email delivery is optional during local development. To enable it, provide these server-side variables:

SMTP_HOST=
SMTP_PORT=587
SMTP_SECURE=false
SMTP_USER=
SMTP_PASSWORD=
SMTP_FROM=
MY_EMAIL=

If they are not present, the email endpoint returns 503 without affecting the rest of the site.

Site URL

Canonical URLs, sitemap entries, structured data, the PDF résumé, and email signatures use the server-side SITE_URL variable. It defaults to the production domain and can be overridden for another deployment:

SITE_URL=https://pablo.steralynx.com

Search Console

Google Search Console verification is optional. For an HTML-tag verification, set the server-side token in the deployment environment and rebuild:

GOOGLE_SITE_VERIFICATION=

The verification metadata is omitted when the variable is not present.

Useful commands

pnpm dev                # Start development and watch locale sources
pnpm check              # Type-check, lint, format, and run project audits
pnpm build              # Create a production build
pnpm test:cv-ats        # Validate both generated CVs for ATS-readable output
pnpm test:e2e           # Run browser tests after building

Editing content

Locale copy lives in i18n/locales/en/dictionary.json and i18n/locales/es/dictionary.json. next-intl loads these message files directly.

License

MIT

About

My personal portfolio

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Used by

Contributors

Languages