A personal portfolio site built with React and Vite, with English/Spanish language toggle. It shows an About page, a Resume/CV page, and a list of projects with links to their live demos and source code.
Live: https://thenullpointerz.web.app
- React 19 + Vite
- React Router v7 for client-side routing
- Redux Toolkit + React Redux for the EN/ES language state
- MUI icons for the GitHub/LinkedIn/mail icons
- Firebase Hosting for deployment
npm install
cp .env.example .env.local # then fill in your own info, see "Personalizing" below
npm run devOpen http://localhost:5173.
| Command | What it does |
|---|---|
npm run dev |
Starts the Vite dev server with hot reload |
npm run build |
Builds the production bundle into dist/ |
npm run preview |
Serves the production build locally, for a final check before deploying |
This repo is set up so it can be cloned and reused without carrying over the original author's personal info. The following are not committed to the repository and need to be added locally:
1. Text content — via environment variables
Copy .env.example to .env.local (already gitignored) and fill in your own values:
cp .env.example .env.local| Variable | Used for |
|---|---|
VITE_APP_TITLE |
Browser tab title |
VITE_EMAIL |
Contact email shown on the Resume page |
VITE_GITHUB_URL |
GitHub icon link on the About page |
VITE_LINKEDIN_URL |
LinkedIn icon link on the About page |
VITE_ABOUT_GREETING_EN / VITE_ABOUT_GREETING_ESP |
The greeting line at the top of the About page, in each language |
VITE_ABOUT_DESCRIPTION_EN / VITE_ABOUT_DESCRIPTION_ESP |
The About page bio text, in each language |
If a variable is left unset, the site falls back to a generic placeholder instead of failing to build.
2. Personal files — via the public/ folder
These paths are gitignored, so add your own files there before building:
| File | Used for |
|---|---|
public/me.jpg |
Profile photo shown on the About page |
public/resume.pdf |
The file downloaded from the "Download" button on the Resume page |
public/favicon.ico |
The browser tab icon |
If any of these are missing, the site still builds and runs fine - you'll just see a broken image/icon or a 404 on download until you add your own.
3. Resume and project content
The rest of the Resume page content (work history, education, skills) lives in src/Data/EN/ResumeEN.js and src/Data/ESP/ResumeESP.js. The Projects page content lives in src/Data/EN/ProjectsEN.js and src/Data/ESP/ProjectsSPA.js, including the screenshots imported from src/images/. Edit those directly with your own experience and projects.
Deployed to Firebase Hosting:
npm run build
npx firebase deployfirebase.json and .firebaserc point at the oscar-scrooge/thenullpointerz Firebase project; update .firebaserc if you're deploying to your own project.