Personal portfolio website built with HTML, CSS, and JavaScript.
- HTML5
- CSS3
- JavaScript (Vanilla)
- Swiper.js
- i18next (EN / ES / FR translations)
- http-server (local development server)
- Vercel Web Analytics (tracking and insights)
.
├── index.html
├── assets/
│ ├── css/
│ │ ├── styles.css
│ │ └── swiper-bundle.min.css
│ ├── js/
│ │ ├── script.js
│ │ └── swiper-bundle.min.js
│ ├── images/
│ └── pdf/
├── package.json
└── .gitignore
This project targets Node.js 24.x (Vercel-compatible).
If you use nvm:
nvm usenpm installnpm startThen open:
http://localhost:3000
You can also run:
npm run devnpm start: serves the project on port3000npm run dev: alias fornpm start
The website supports:
- English (
en) - Spanish (
es) - French (
fr)
Implementation details:
- Translations are defined in
assets/js/script.jsin theresourcesobject. - Translatable elements use
data-i18nattributes inindex.html. - Language can be changed from the header selector.
- Selected language is stored in
localStorageunderselected-language.
- Add/update keys in
resources(en,es,fr) insideassets/js/script.js. - Add
data-i18n="your.key"inindex.htmlwhere needed. - Reload the page and switch languages from the selector to verify.
- Main styles are in
assets/css/styles.css. - The language selector style uses the
.language-selectclass. - Theme colors are controlled by CSS variables in
:root.
This portfolio includes Vercel Web Analytics for tracking visitors and page views.
The analytics scripts are included in the <head> section of index.html:
- A client-side script initializes the
window.vafunction - The main tracking script is loaded from
/_vercel/insights/script.js
Once deployed to Vercel:
- Visit your project in the Vercel Dashboard
- Click on the Analytics tab
- View visitor metrics, page views, and other insights
Note: Analytics data will only be collected when the site is deployed to Vercel. The tracking script (/_vercel/insights/script.js) is provided by Vercel's infrastructure.
node_modules/is ignored via.gitignore.- This is a static site and does not require a build step.