// README.md
This repository contains the source code for Kliment Ho's personal portfolio website.
The website is designed with a modern, sleek aesthetic, showcasing projects, professional experience, and skills. It dynamically fetches and displays GitHub repositories and features a prominent rotating banner for curated projects. A key personal touch is the 3D "Memories & Moments" photo gallery.
- Status: Completed.
- Details: Initial setup with dynamic project display from
projects.js, resume page, project detail page, and Steam-like styling.
- Objective: Implement a new sleek design, a large rotating banner for curated projects, a sidebar rotator for recent GitHub activity, a grid for all GitHub repos, and an automated 3D photo gallery.
- Status: Completed.
- Objective: Refine the photo gallery into a polaroid style with a glossy laminated finish. The cards are now fully responsive to each photo's dimensions, draggable with momentum, and feature a more compact grid layout.
- Status: Completed.
A new section has been added to display personal photos in an interactive 3D gallery. Each photo is presented on a laminated polaroid-style card that can be flipped over to reveal details. The cards feature advanced physics-based interactions.
Features:
- Perfect Polaroid Ratios: Cards automatically resize to create a perfect polaroid frame around each photo, regardless of its original dimensions, with zero cropping.
- Click & Drag to Spin: Grab a card and "throw" it to make it spin with realistic momentum.
- Click to Flip: A simple, quick click will flip the card over to see the details on the back.
- Subtle Hover & Lamination: When idle, cards have a gentle 3D hover effect. A glossy sheen is applied to each card face to simulate a laminated finish.
Requirement: You must have Node.js installed.
Step 1: Install Dependencies
- If this is your first time running the script, open your terminal in the project's root directory and run:
npm install image-size
Step 2: Add Your Image Files
- Place your
.jpgor.pngimages directly inside thedata/pictures/folder.
Step 3: Generate the Picture List
- This is the only command you need to run after changing your images.
- In your terminal, run:
node utils/generate_picture_list.js
- This script automatically finds all images in
data/pictures/, reads their dimensions, sorts them by date, and generates adata/picture-manifest.jsonfile.
Step 4: Add Descriptions (Optional)
-
To add a personal story, date, or location to a photo, open the
data/memories.jsonfile. If it doesn't exist, you can create it. -
Add a new entry where the key is the exact filename of the picture.
-
Example
data/memories.jsonstructure:{ "tokyo_trip_2021.jpg": { "description": "Exploring the vibrant streets of Shibuya Crossing. The energy was electric!", "date": "October 2021", "location": "Tokyo, Japan" }, "iceland_aurora_2023.jpeg": { "description": "Witnessing the magic of the Northern Lights. No photo can do it justice.", "date": "February 2023", "location": "Vik, Iceland" } } -
If you don't add an entry for a picture, it will still appear in the gallery with default placeholder text on the back.
Step 5: View Your Changes
- Save any changes and refresh
index.htmlin the browser to see the updated gallery.
This README will be updated as development progresses.