├── .github └── dependabot.yml ├── .gitignore ├── LICENSE ├── README.md ├── package-lock.json ├── package.json ├── public ├── _redirects ├── assets │ ├── Resume.pdf │ ├── favicon.ico │ ├── portrait.png │ ├── readme-icon.png │ ├── screenshot_1.png │ ├── screenshot_2.png │ ├── screenshot_3.png │ ├── screenshot_4.png │ └── screenshot_5.png ├── index.html ├── manifest.json └── robots.txt └── src ├── App.js ├── components ├── About.js ├── Education.js ├── Error404.js ├── Footer.js ├── Intro.js ├── Linkbar.js ├── Navbar.js ├── RepoStats.js ├── Resume.js ├── SideProjects.js └── WorkExperience.js ├── content.json ├── index.js ├── reportWebVitals.js ├── setupTests.js └── styles ├── bsstyles.css └── style.css /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | # Maintain dependencies for npm 9 | - package-ecosystem: "npm" 10 | directory: "/" 11 | schedule: 12 | interval: "daily" 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | .vscode 8 | 9 | # testing 10 | /coverage 11 | 12 | # production 13 | /build 14 | 15 | # misc 16 | .DS_Store 17 | .env.local 18 | .env.development.local 19 | .env.test.local 20 | .env.production.local 21 | 22 | npm-debug.log* 23 | yarn-debug.log* 24 | yarn-error.log* 25 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Kevin Huy Trinh 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | Fav Icon Png 4 | 5 |

6 |

7 | www.kevintrinh.dev - v2 8 |

9 |

10 | A modern solution for professionally showcasing skills, projects, and experience. Built with React.js. 11 |

12 | 13 |
14 | Website status 15 | Maintained status 16 | Release badge 17 |
18 | 19 | 20 | Screen Shot from 10-03-2023 of landing page. 21 | 22 | 23 |
24 | VIEW MORE PHOTOS HERE 25 | 26 | Screen Shot from 10-03-2023 of landing page. 27 | Screen Shot 28 | Screen Shot 29 | Screen Shot 30 | Screen Shot 31 | 32 |
33 | 34 | ## 🌐 What is Reactfolio? 35 | 36 | Reactfolio is a modern, revamped, and responsive portfolio website built using ReactJS, featuring a fresh UI, and designed specifically for STEM and computer science students, as well as aspiring software engineers and students. This project combines enhanced functionality, significant UI improvements, GitHub API integration, and comprehensive bug fixes to deliver a superior user experience. Fully open-source, Reactfolio encourages community contributions and collaboration. Its intuitive design ensures easy customization, making it convenient for users to personalize their portfolios seamlessly. With Reactfolio, you can showcase your skills, projects, and academic experiences in a streamlined, visually appealing manner. 37 | 38 | ## 📌 Important Information 39 | 40 | This project recycles components from my old [Portfolio-V1](https://github.com/KevinTrinh1227/Trinh), while also adopting a new UI and theme inspired by this [DEMO](https://steam-portfolio-demo.vercel.app/). Project native version: Node v16.20.2, built on Linux OS (Ubuntu 22.04 LTS). 41 | 42 | This project is a revamped version of my [Portfolio-V1](https://kevintrinh-v1.netlify.app). It comes with numerous updates including functionality, API integration, Significant UI changes, bug fixes, and much more! This project is fully open source and I encourage anyone interested, to contribute to the project as well. This iteration continues the simplistic approach to the same "one page one scroll" design philosophy as V1. 43 | 44 | For easy use, I linked every element that makes up the app to `content.json` to eliminate having to open each component file to change content data, so you can edit everything seamlessly from one file. Refer to the corresponding JS file for more information on how to manipulate a specific section within the JSON. 45 | 46 | ## 🛠 Installation & setup - [Click here for tutorial video](https://youtu.be/CxXi6HXS5Os?si=ctYsLMjpYPKekVmu) 47 | 48 | 1. Clone repository OR download the [latest release](https://github.com/KevinTrinh1227/Reactfolio/releases) 49 | 50 | ```sh 51 | git clone https://github.com/KevinTrinh1227/Reactfolio 52 | ``` 53 | 54 | ```sh 55 | cd Reactfolio 56 | ``` 57 | 58 | 2. OPTIONAL: Use the correct Node version using [NVM](https://github.com/nvm-sh/nvm) (Node v16.20.2) 59 | 60 | ```sh 61 | nvm install 16 62 | ``` 63 | 64 | ```sh 65 | nvm alias default 16 66 | ``` 67 | 68 | 3. Install the dependencies using npm or yarn 69 | 70 | ```sh 71 | npm install 72 | ``` 73 | 74 | ```sh 75 | yarn install 76 | ``` 77 | 78 | 4. Start the development server using npm or yarn 79 | 80 | ```sh 81 | npm start 82 | ``` 83 | 84 | ```sh 85 | yarn run start 86 | ``` 87 | 88 | ## 🚀 Build and run for production 89 | 90 | 1. Generate a complete static production build 91 | 92 | ```sh 93 | npm run build 94 | ``` 95 | 96 | ## 🎨 CSS hex color palette 97 | 98 | | Color | Hex Code | Usage Info | CSS Usage | 99 | | ------------- | -------------------------------------------------------------------- | --------------------------------------- | ---------------------- | 100 | | Dark Navy | ![[#0b182c]](https://singlecolorimage.com/get/0b182c/15x15) `#0b182c` | Main background color | `var(--dark-navy)` | 101 | | Navy | ![[#12223d]](https://singlecolorimage.com/get/12223d/15x15) `#12223d` | Secondary background color | `var(--navy)` | 102 | | Light Navy | ![[#233450]](https://singlecolorimage.com/get/233450/15x15) `#233450` | Data tool tip color & text highlighting | `var(--light-navy)` | 103 | | Light Lime | ![[#64ff93]](https://singlecolorimage.com/get/64ff93/15x15) `#64ff93` | Main accent color | `var(--light-lime)` | 104 | | White | ![[#e9f1fc]](https://singlecolorimage.com/get/e9f1fc/15x15) `#e9f1fc` | Main text color | `var(--white)` | 105 | | Bone White | ![[#d4ddf8]](https://singlecolorimage.com/get/d4ddf8/15x15) `#d4ddf8` | Secondary text color | `var(--bone-white)` | 106 | | Smoke | ![[#8992ac]](https://singlecolorimage.com/get/8992ac/15x15) `#8992ac` | Tertiary text color | `var(--smoke)` | 107 | | Light Smoke | ![[#acb5cf]](https://singlecolorimage.com/get/acb5cf/15x15) `#acb5cf` | Section subtitles text | `var(--light-smoke)` | 108 | | Lighter Smoke | ![[#d0d8f3]](https://singlecolorimage.com/get/d0d8f3/15x15) `#d0d8f3` | Section Title text | `var(--lighter-smoke)` | 109 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "KevinTrinh1227", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "@emotion/react": "^11.14.0", 7 | "@fortawesome/fontawesome-svg-core": "^6.7.2", 8 | "@fortawesome/free-solid-svg-icons": "^6.7.2", 9 | "@fortawesome/react-fontawesome": "^0.2.2", 10 | "@react-pdf/renderer": "^4.2.4", 11 | "@testing-library/jest-dom": "^6.6.3", 12 | "@testing-library/react": "^16.3.0", 13 | "@testing-library/user-event": "^14.6.1", 14 | "react": "^18.2.0", 15 | "react-awesome-reveal": "^4.3.1", 16 | "react-dom": "^18.2.0", 17 | "react-icons": "^5.5.0", 18 | "react-markdown": "^9.0.3", 19 | "react-router-dom": "^7.4.1", 20 | "react-scripts": "^5.0.1" 21 | }, 22 | "scripts": { 23 | "start": "react-scripts start", 24 | "build": "react-scripts build", 25 | "test": "react-scripts test", 26 | "eject": "react-scripts eject" 27 | }, 28 | "eslintConfig": { 29 | "extends": [ 30 | "react-app", 31 | "react-app/jest" 32 | ] 33 | }, 34 | "browserslist": { 35 | "production": [ 36 | ">0.2%", 37 | "not dead", 38 | "not op_mini all" 39 | ], 40 | "development": [ 41 | "last 1 chrome version", 42 | "last 1 firefox version", 43 | "last 1 safari version" 44 | ] 45 | }, 46 | "devDependencies": { 47 | "@babel/plugin-proposal-private-property-in-object": "^7.21.11", 48 | "web-vitals": "^4.2.4" 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /public/_redirects: -------------------------------------------------------------------------------- 1 | /* /index.html 200 2 | -------------------------------------------------------------------------------- /public/assets/Resume.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KevinTrinh1227/Reactfolio/c1cd5e9dbfbafec3f61b78d463b7423250eb23df/public/assets/Resume.pdf -------------------------------------------------------------------------------- /public/assets/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KevinTrinh1227/Reactfolio/c1cd5e9dbfbafec3f61b78d463b7423250eb23df/public/assets/favicon.ico -------------------------------------------------------------------------------- /public/assets/portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KevinTrinh1227/Reactfolio/c1cd5e9dbfbafec3f61b78d463b7423250eb23df/public/assets/portrait.png -------------------------------------------------------------------------------- /public/assets/readme-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KevinTrinh1227/Reactfolio/c1cd5e9dbfbafec3f61b78d463b7423250eb23df/public/assets/readme-icon.png -------------------------------------------------------------------------------- /public/assets/screenshot_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KevinTrinh1227/Reactfolio/c1cd5e9dbfbafec3f61b78d463b7423250eb23df/public/assets/screenshot_1.png -------------------------------------------------------------------------------- /public/assets/screenshot_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KevinTrinh1227/Reactfolio/c1cd5e9dbfbafec3f61b78d463b7423250eb23df/public/assets/screenshot_2.png -------------------------------------------------------------------------------- /public/assets/screenshot_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KevinTrinh1227/Reactfolio/c1cd5e9dbfbafec3f61b78d463b7423250eb23df/public/assets/screenshot_3.png -------------------------------------------------------------------------------- /public/assets/screenshot_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KevinTrinh1227/Reactfolio/c1cd5e9dbfbafec3f61b78d463b7423250eb23df/public/assets/screenshot_4.png -------------------------------------------------------------------------------- /public/assets/screenshot_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KevinTrinh1227/Reactfolio/c1cd5e9dbfbafec3f61b78d463b7423250eb23df/public/assets/screenshot_5.png -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | kevintrinh.dev 5 | 6 | 10 | 14 | 15 | 16 | 17 | 21 | 25 | 26 | 27 | 28 | 29 | 33 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 47 | 48 | 49 | React App 50 | 51 | 52 | 53 | 54 |
55 | 56 | 57 | -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /src/App.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import RepoStats from "./components/RepoStats"; 3 | import Navbar from "./components/Navbar"; 4 | import Linkbar from "./components/Linkbar"; 5 | import Intro from "./components/Intro"; 6 | import About from "./components/About"; 7 | import Education from "./components/Education"; 8 | import WorkExperience from "./components/WorkExperience"; 9 | import SideProjects from "./components/SideProjects"; 10 | import Footer from "./components/Footer"; 11 | import ResumePage from "./components/Resume"; 12 | import Error404 from "./components/Error404"; 13 | 14 | import { BrowserRouter as Router, Route, Routes } from "react-router-dom"; 15 | 16 | import "./styles/style.css"; 17 | import content from "./content.json"; 18 | 19 | // Note that the section.enable_section has to equal true in 20 | // order for that specific component to load in the app.js 21 | 22 | function App() { 23 | const { intro_screen, about_me, academics, experience, projects } = content; 24 | 25 | return ( 26 | 27 | 28 | 32 | 33 | 34 | 35 | {intro_screen.section.enable_section && } 36 | {about_me.section.enable_section && } 37 | {academics.section.enable_section && } 38 | {experience.section.enable_section && } 39 | {projects.section.enable_section && } 40 |