diff --git a/README.md b/README.md index 5d82041..9380c5a 100755 --- a/README.md +++ b/README.md @@ -1,86 +1,17 @@ -# Personal Portfolio Website +# Samuel Hernandez Balderas -A responsive personal portfolio website featuring interactive 3D graphics and a Canvas 2D background implementation to -showcase engineering projects, skills, and professional experience. +This is the repository for my personal portfolio website, where I present my +software engineering projects, experience, and background. -This repository automatically deploys to GitHub Pages via a shared CI workflow. +If you find this project interesting, feel free to leave a star on the +repository. -## Features +## Copyright and distribution -- **3D Graphics** - Interactive Three.js models (hero desktop PC, Earth) -- **Canvas Background** - Custom 2D dots-and-lines network rendering -- **Responsive Layout** - Mobile-first CSS optimizations -- **Project Showcase** - Componentized project cards with direct repository routing -- **Experience Accordion** - Expandable timeline components for professional experience -- **Tech Stack Display** - Visual architecture diagrams and skill representations -- **Contact Form** - Integrated EmailJS processing +Copyright (c) 2026 Samuel Hernandez Balderas. All rights reserved. -## Tech Stack - -### Frontend - -- **React 18.3** -- **Vite** -- **Tailwind CSS** -- **PostCSS** - -### 3D & Graphics - -- **Three.js** -- **@react-three/fiber** -- **@react-three/drei** - -### Animation & Interaction - -- **Framer Motion** -- **React Tilt** -- **React Vertical Timeline Component** - -## Getting Started - -### 1. Clone the Repository - -```bash -git clone -cd SamuelIVX.github.io -``` - -### 2. Install Dependencies - -```bash -npm install -``` - -### 3. Environment Setup - -Create a `.env` file in the root directory for EmailJS integration: - -```env -VITE_APP_EMAILJS_SERVICE_ID=your_service_id -VITE_APP_EMAILJS_TEMPLATE_ID=your_template_id -VITE_APP_EMAILJS_PUBLIC_KEY=your_public_key -``` - -### 4. Run Development Server - -```bash -npm run dev -``` - -Open [ in your browser. - -## Deployment - -This repository is configured with a GitHub Actions workflow template that automatically builds the Vite application and -deploys the `dist/` output to GitHub Pages on every push to `main`. - -The user's resume is hosted statically in the `public/resume.pdf` directory and served natively alongside the -application. - -## Approved portfolio revamp specifications - -The live application above remains the current implementation. The approved redesign is specified in [Portfolio revamp -spec set](docs/specs/active/portfolio-revamp/README.md), with seven ordered specifications, [implementation plan and -installed skill register](docs/specs/active/portfolio-revamp/IMPLEMENTATION-PLAN.md), and a [durable prototype -reference](docs/specs/reference/portfolio-revamp/README.md). Performance/security gates are planned, not achieved -production results. This spec-writing change does not deploy the redesign. +The original code and content written for this website are distributed under the +MIT License. Certain UI elements incorporate third-party open-source components, +including canvas background routines adapted from React Bits under the MIT + +Commons Clause License. For complete terms and third-party notices, refer to +[THIRD-PARTY-NOTICES.md](THIRD-PARTY-NOTICES.md). diff --git a/index.html b/index.html index 481c3c4..fd29cb9 100755 --- a/index.html +++ b/index.html @@ -2,7 +2,7 @@ - + @@ -23,7 +23,7 @@ - + diff --git a/public/assets/resume.pdf b/public/assets/resume.pdf new file mode 100644 index 0000000..ed8a427 Binary files /dev/null and b/public/assets/resume.pdf differ diff --git a/public/logo.jpg b/public/logo.jpg new file mode 100644 index 0000000..1fc50da Binary files /dev/null and b/public/logo.jpg differ diff --git a/public/logo.svg b/public/logo.svg deleted file mode 100755 index 6e02a4a..0000000 --- a/public/logo.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/public/projects/clarify.jpg b/public/projects/clarify.jpg new file mode 100644 index 0000000..f0492ca Binary files /dev/null and b/public/projects/clarify.jpg differ diff --git a/public/projects/foodsense.jpg b/public/projects/foodsense.jpg new file mode 100644 index 0000000..7f879aa Binary files /dev/null and b/public/projects/foodsense.jpg differ diff --git a/public/projects/interleave.jpg b/public/projects/interleave.jpg new file mode 100644 index 0000000..aeee1f4 Binary files /dev/null and b/public/projects/interleave.jpg differ diff --git a/public/projects/paycore.jpg b/public/projects/paycore.jpg new file mode 100644 index 0000000..72daf95 Binary files /dev/null and b/public/projects/paycore.jpg differ diff --git a/src/assets/close.svg b/src/assets/close.svg deleted file mode 100755 index 1cd8157..0000000 --- a/src/assets/close.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/src/assets/company/amazonwebservices.jpeg b/src/assets/company/amazonwebservices.jpeg deleted file mode 100644 index 88a6c2d..0000000 Binary files a/src/assets/company/amazonwebservices.jpeg and /dev/null differ diff --git a/src/assets/company/aot.jpeg b/src/assets/company/aot.jpeg deleted file mode 100755 index 6447067..0000000 Binary files a/src/assets/company/aot.jpeg and /dev/null differ diff --git a/src/assets/github.png b/src/assets/github.png deleted file mode 100755 index a735a32..0000000 Binary files a/src/assets/github.png and /dev/null differ diff --git a/src/assets/hero/herobg.png b/src/assets/hero/herobg.png deleted file mode 100755 index 9d0a41b..0000000 Binary files a/src/assets/hero/herobg.png and /dev/null differ diff --git a/src/assets/index.js b/src/assets/index.js deleted file mode 100755 index 0638441..0000000 --- a/src/assets/index.js +++ /dev/null @@ -1,89 +0,0 @@ -/** - * Asset barrel — UI icons, tech stack marks, company logos, and project - * screenshots imported as Vite URL modules and re-exported. - * - * Naming convention: React components are PascalCase; non-component - * re-exports (asset URLs, constants) are UPPER_CASE to signal they are - * opaque build-time values, not part of the component tree. - */ - -// UI / navigation -import LOGO from "./logo.png"; -import MENU from "./menu.svg"; -import CLOSE from "./close.svg"; -import GITHUB from "./github.png"; - -// Tech stack icons -import CSS from "./tech/css.png"; -import PYTHON from "./tech/python.svg"; -import GIT from "./tech/git.png"; -import HTML from "./tech/html.png"; -import JAVASCRIPT from "./tech/javascript.png"; -import NODEJS from "./tech/nodejs.png"; -import REACTJS from "./tech/reactjs.png"; -import TAILWIND from "./tech/tailwind.png"; -import TYPESCRIPT from "./tech/typescript.png"; -import THREEJS from "./tech/threejs.svg"; -import JAVA from "./tech/java.webp"; -import C from "./tech/c++.png"; -import AWS from "./tech/aws.jpeg"; -import MYSQL from "./tech/mysql.png"; -import NEXTJS from "./tech/nextjs.svg"; -import SUPABASE from "./tech/supabase.svg"; -import POSTGRESQL from "./tech/postgresql.svg"; -import VERCEL from "./tech/vercel.svg"; -import MAVEN from "./tech/maven.svg"; -import MOTION from "./tech/motion.svg"; - -// Company / employer icons -import AOT from "./company/aot.jpeg"; -import AMAZONWEBSERVICES from "./company/amazonwebservices.jpeg"; - -// Project screenshots -import HEROBG from "./hero/herobg.png"; -import PAYCORE from "./projects/paycore.png"; -import CLARIFY from "./projects/clarify.png"; -import ECOMMERCE from "./projects/ecommerce.png"; -import CARWASH from "./projects/carwash.png"; -import DELTABASE from "./projects/deltabase.png"; -import FOODSENSE from "./projects/foodsense.png"; - -export { - // UI / navigation - LOGO, - MENU, - CLOSE, - GITHUB, - // Tech - CSS, - PYTHON, - GIT, - HTML, - JAVASCRIPT, - NODEJS, - REACTJS, - TAILWIND, - TYPESCRIPT, - THREEJS, - JAVA, - C, - AWS, - MYSQL, - NEXTJS, - SUPABASE, - POSTGRESQL, - VERCEL, - MAVEN, - MOTION, - // Company - AOT, - AMAZONWEBSERVICES, - // Projects / hero - HEROBG, - PAYCORE, - CLARIFY, - ECOMMERCE, - CARWASH, - DELTABASE, - FOODSENSE, -}; diff --git a/src/assets/logo.png b/src/assets/logo.png deleted file mode 100755 index d0183e5..0000000 Binary files a/src/assets/logo.png and /dev/null differ diff --git a/src/assets/menu.svg b/src/assets/menu.svg deleted file mode 100755 index b1a9ed3..0000000 --- a/src/assets/menu.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/src/assets/projects/carwash.png b/src/assets/projects/carwash.png deleted file mode 100755 index cbf5cc0..0000000 Binary files a/src/assets/projects/carwash.png and /dev/null differ diff --git a/src/assets/projects/clarify.png b/src/assets/projects/clarify.png deleted file mode 100644 index 7da2232..0000000 Binary files a/src/assets/projects/clarify.png and /dev/null differ diff --git a/src/assets/projects/deltabase.png b/src/assets/projects/deltabase.png deleted file mode 100644 index d7a0582..0000000 Binary files a/src/assets/projects/deltabase.png and /dev/null differ diff --git a/src/assets/projects/ecommerce.png b/src/assets/projects/ecommerce.png deleted file mode 100755 index 65f85fb..0000000 Binary files a/src/assets/projects/ecommerce.png and /dev/null differ diff --git a/src/assets/projects/foodsense.png b/src/assets/projects/foodsense.png deleted file mode 100644 index 2a7b510..0000000 Binary files a/src/assets/projects/foodsense.png and /dev/null differ diff --git a/src/assets/projects/paycore.png b/src/assets/projects/paycore.png deleted file mode 100644 index c5fe172..0000000 Binary files a/src/assets/projects/paycore.png and /dev/null differ diff --git a/src/assets/tech/aws.jpeg b/src/assets/tech/aws.jpeg deleted file mode 100644 index 88a6c2d..0000000 Binary files a/src/assets/tech/aws.jpeg and /dev/null differ diff --git a/src/assets/tech/c++.png b/src/assets/tech/c++.png deleted file mode 100755 index f1ca74e..0000000 Binary files a/src/assets/tech/c++.png and /dev/null differ diff --git a/src/assets/tech/css.png b/src/assets/tech/css.png deleted file mode 100755 index 677d59c..0000000 Binary files a/src/assets/tech/css.png and /dev/null differ diff --git a/src/assets/tech/docker.png b/src/assets/tech/docker.png deleted file mode 100755 index c349344..0000000 Binary files a/src/assets/tech/docker.png and /dev/null differ diff --git a/src/assets/tech/figma.png b/src/assets/tech/figma.png deleted file mode 100755 index c9f3a61..0000000 Binary files a/src/assets/tech/figma.png and /dev/null differ diff --git a/src/assets/tech/git.png b/src/assets/tech/git.png deleted file mode 100755 index 493c150..0000000 Binary files a/src/assets/tech/git.png and /dev/null differ diff --git a/src/assets/tech/html.png b/src/assets/tech/html.png deleted file mode 100755 index 9a67c31..0000000 Binary files a/src/assets/tech/html.png and /dev/null differ diff --git a/src/assets/tech/java.webp b/src/assets/tech/java.webp deleted file mode 100755 index 7107e87..0000000 Binary files a/src/assets/tech/java.webp and /dev/null differ diff --git a/src/assets/tech/javascript.png b/src/assets/tech/javascript.png deleted file mode 100755 index e7448b5..0000000 Binary files a/src/assets/tech/javascript.png and /dev/null differ diff --git a/src/assets/tech/maven.svg b/src/assets/tech/maven.svg deleted file mode 100644 index 2bb99fd..0000000 --- a/src/assets/tech/maven.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/assets/tech/motion.svg b/src/assets/tech/motion.svg deleted file mode 100644 index 17a1975..0000000 --- a/src/assets/tech/motion.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/tech/mysql.png b/src/assets/tech/mysql.png deleted file mode 100755 index cb4a095..0000000 Binary files a/src/assets/tech/mysql.png and /dev/null differ diff --git a/src/assets/tech/nextjs.svg b/src/assets/tech/nextjs.svg deleted file mode 100644 index ac67238..0000000 --- a/src/assets/tech/nextjs.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/assets/tech/nodejs.png b/src/assets/tech/nodejs.png deleted file mode 100755 index b81a2ce..0000000 Binary files a/src/assets/tech/nodejs.png and /dev/null differ diff --git a/src/assets/tech/postgresql.svg b/src/assets/tech/postgresql.svg deleted file mode 100644 index 15d754d..0000000 --- a/src/assets/tech/postgresql.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/assets/tech/python.svg b/src/assets/tech/python.svg deleted file mode 100755 index e771ee2..0000000 --- a/src/assets/tech/python.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/src/assets/tech/reactjs.png b/src/assets/tech/reactjs.png deleted file mode 100755 index a49beb5..0000000 Binary files a/src/assets/tech/reactjs.png and /dev/null differ diff --git a/src/assets/tech/supabase.svg b/src/assets/tech/supabase.svg deleted file mode 100644 index 382c381..0000000 --- a/src/assets/tech/supabase.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/assets/tech/tailwind.png b/src/assets/tech/tailwind.png deleted file mode 100755 index ed3981f..0000000 Binary files a/src/assets/tech/tailwind.png and /dev/null differ diff --git a/src/assets/tech/threejs.svg b/src/assets/tech/threejs.svg deleted file mode 100755 index a26f95a..0000000 --- a/src/assets/tech/threejs.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/src/assets/tech/typescript.png b/src/assets/tech/typescript.png deleted file mode 100755 index 695b00c..0000000 Binary files a/src/assets/tech/typescript.png and /dev/null differ diff --git a/src/assets/tech/vercel.svg b/src/assets/tech/vercel.svg deleted file mode 100644 index 8896388..0000000 --- a/src/assets/tech/vercel.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/components/FormField.jsx b/src/components/FormField.jsx deleted file mode 100644 index 90bf975..0000000 --- a/src/components/FormField.jsx +++ /dev/null @@ -1,53 +0,0 @@ -/** - * Reusable form field with label, input/textarea, and consistent styling. - * @param {object} props - * @param {string} props.label - Label text - * @param {string} props.name - Input name attribute - * @param {string} props.type - Input type (text, email, etc.) - * @param {string} [props.placeholder] - Placeholder text - * @param {string} props.value - Controlled value - * @param {function} props.onChange - Change handler - * @param {number} [props.rows] - Rows for textarea - * @returns {JSX.Element} - */ -import PropTypes from "prop-types"; - -const FormField = ({ label, name, type = "text", placeholder, value, onChange, rows }) => { - const isTextarea = type === "textarea"; - const inputProps = { - type: isTextarea ? undefined : type, - name, - value, - onChange, - placeholder, - className: "bg-tertiary py-4 px-6 placeholder:text-secondary text-white rounded-lg outline-none border-none font-medium", - }; - - if (isTextarea) { - delete inputProps.type; - inputProps.rows = rows || 7; - } - - return ( -