A responsive personal portfolio built with plain HTML, CSS, and JavaScript. It has no framework, build step, package manager, or backend.
- Open this folder in Visual Studio Code.
- Open
index.html. - Either open the file directly in a browser or install the Live Server VS Code extension.
- With Live Server installed, right-click
index.htmland choose Open with Live Server.
All asset paths are relative, so the site works locally and on GitHub Pages.
Search index.html for the existing name, email, GitHub URL, title, and location. Update every relevant occurrence, including the page description, contact section, footer, and mailto: address in script.js.
Place image files in images/ using these names:
smart-tuner-schematic.jpgvocabforge-screenshot.jpgpyo-performance.jpgcello-performance.jpgstrings-for-change-logo.pngstrings-for-change-performance.jpglibrary-3d-printing.jpgchina-eastern-sfo-internship.jpg
Keep the same filenames to replace an image without editing HTML. If a file is absent, JavaScript hides the broken image and displays a styled fallback. For good performance, resize photographs to roughly 1600–2000 pixels on their longest side and compress them before publishing.
Project cards are in the #projects section of index.html. Each View Details button points to a <template> near the end of the file:
tuner-detailsvocabforge-details
Edit the card for the short public summary and its matching template for the longer modal content. Keep the button’s data-modal-open value matched to the template id.
Metrics use a <dl class="metrics"> structure:
<div>
<dt>48 / 48</dt>
<dd>Tests passing</dd>
</div>Change the value inside <dt> and its label inside <dd>. Do not publish projected results as completed results.
The tuner repository is currently represented by a non-clickable Private Repository label.
If the repository becomes public:
- Replace that label in
index.htmlwith an<a>using the repository URL. - Use the
button button-secondaryclasses. - Set
target="_blank"andrel="noopener noreferrer". - Update the project text only if the underlying facts have changed.
Update both the VocabForge project card and the vocabforge-details template only after a feature is working and ready to describe publicly. Keep the current card limited to vocabulary flashcards and customizable vocabulary mock tests until then.
The hero uses images/hero_image.jpeg. To replace it, overwrite that file with another optimized image using the same filename, or update the path and intrinsic width and height values in index.html. Keep the descriptive alt text accurate. The existing data-fallback-image behavior prevents a broken-image icon if the file is unavailable.
The public site intentionally has no résumé link. If one is needed later:
- Place the approved PDF in
documents/. - Add a clearly labeled link in the contact section or navigation.
- Use a relative path such as
documents/resume.pdf. - Review the document for private information before deployment.
- Create or choose a GitHub repository.
- Commit
index.html,style.css,script.js,README.md, and the required asset folders. - Push the files to the repository’s default branch.
- On GitHub, open Settings → Pages.
- Under Build and deployment, choose Deploy from a branch.
- Select the default branch and the
/ (root)folder, then save. - Wait for GitHub to publish the URL shown in the Pages settings.
Because the site has no build step and uses relative paths, no additional configuration is required.
- Purchase or use a domain you control.
- In the repository’s Settings → Pages, enter the domain under Custom domain.
- Add the DNS records GitHub specifies through the domain registrar.
- Add a
CNAMEfile containing the domain to the repository root if GitHub does not create it automatically. - After DNS validation completes, enable Enforce HTTPS.
DNS changes can take time to propagate. Follow the current GitHub Pages documentation and your registrar’s instructions when configuring records.