Loading repository dataβ¦
Loading repository dataβ¦
hovinhthanh7893 / repository
Responsive Portfolio Website using pure HTML, CSS, JavaScript and deployed with GitHub Pages. No framework and No external deployment platform needed. Integrated Three.js for 3D animated background. Give it a star π if you find it useful
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
https://hovinhthanh7893.github.io/portfolio
Updated February 2025
This is my portfolio website, created using pure HTML, CSS, JavaScript and deployed with GitHub Pages. No framework and No external deployment platform needed. Integrated Three.js for 3D animated background, responsive for different user's devices. Use EmailJS to send email directly from Javascript
/
βββ index.html
βββ index.js
βββ style.css
βββ icons/
β β βββ favicon/
β β β βββ favicon.ico
β β β βββ favicon-16x16.png
β β β βββ favicon-32x32.png
β β β βββ apple-touch-icon.png
β β β βββ android-chrome-192x192.png
β β β βββ android-chrome-512x512.png
βββ .gitignore
βββ README.md
βββ manifest.webmanifest
<script type="module" src="./index.js"></script>
<link rel="manifest" href="./manifest.webmanifest"/>
<link rel="stylesheet" type="text/css" href="./style.css"/>
name: Deploy to GitHub Pages
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./
publish_branch: gh-pages
<canvas class="webgl"></canvas>
import * as THREE from "https://cdn.skypack.dev/three@0.148.0"
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight);
camera.position.z = 5;
scene.add(camera);
const geometry = new THREE.SphereGeometry(1, 32, 16);
const material = new THREE.MeshBasicMaterial({ color: 0xffffff, wireframe: true });
const mesh = new THREE.Mesh( geometry, material );
scene.add(mesh);
const canvas = document.querySelector(".webgl");
const renderer = new THREE.WebGLRenderer({ canvas, antialias: true, alpha: true });
renderer.setSize(window.innerWidth, window.innerHeight);
const animate = () => {
window.requestAnimationFrame(animate);
mesh.rotation.y += 0.01;
renderer.render(scene, camera);
};
animate();
fetch('https://api.emailjs.com/api/v1.0/email/send', {
method: 'POST',
headers: {
'Content-type': 'application/json'
},
body: JSON.stringify({
user_id: <USER_ID>,
service_id: <SERVICE_ID>,
template_id: <TEMPLATE_ID>,
template_params: {
'name': <name-input>,
'email': <email-input>,
'subject': <subject-input>,
'message': <message-input>
}
})
})
.then((httpResponse) => {
if (httpResponse.ok) {
<your-success-handle-function>
} else {
<your-fail-handle-function>
}
})
.catch((error) => {
<your-error-handle-function>
})
More questions? Please send email to hovinhthanh7893@gmail.com or text me on LinkedIn