Thanks to visit codestin.com
Credit goes to github.com

Skip to content

🌸 Personal K‑pop web gallery & portfolio – built as a fan project to showcase photocards, concerts, and favorite albums. Includes admin tools, dynamic filters, and media embeds.

License

Notifications You must be signed in to change notification settings

notelyoo/Miyeon

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

16 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🌸 miyeon.fr – Personal K‑pop Web Gallery & Portfolio

miyeon.fr is a fan-made, responsive, and aesthetic web project showcasing a photocard collection, favorite K‑pop albums, concerts, and travels β€” all wrapped into a custom portfolio.
It features a dynamic admin interface with upload modals, real-time filtering, and media embeds. Built with vanilla HTML, CSS, JS, and powered by Node.js + Express, this project runs entirely server-side with session-based auth and local storage.


✨ Features

  • πŸŒ™ Dark Mode Toggle – Users can switch between light/dark themes (stored in localStorage)
  • πŸ“Έ Photocard Collection Viewer – Gallery view with real-time search, filtering, and sorting
  • 🎡 Music & Video Embeds – Add your favorite YouTube videos and Spotify albums
  • 🧳 About Section – Timeline of past concerts, travels, and personal highlights
  • πŸ‘‘ Admin Interface – Upload, edit, and delete cards directly from the UI
  • πŸ“± Fully Responsive – Optimized layout for desktop, tablet, and mobile, including dark-mode-aware sidebar
  • πŸ” Session-Based Authentication – Secure login with admin-only routes
  • πŸ—ƒοΈ Local SQLite Database – Stores collection data on disk
  • 🧼 Input Sanitization & CSRF Protection – Secured backend handling user data

🧰 Tech Stack

Frontend

  • HTML5, CSS3 (modular: base, layout, components, responsive)
  • Vanilla JavaScript (DOM manipulation, modals, filters)
  • Custom animations, overlays, and modals

Backend

  • Node.js + Express
  • Multer for file uploads
  • SQLite3 (via database.db)
  • express-session, helmet, csurf, express-rate-limit for security

πŸ“ Project Structure

miyeon/
β”œβ”€β”€ public/
β”‚   β”œβ”€β”€ about.html               β†’ About page with concerts, travels, and social links
β”‚   β”œβ”€β”€ collection.html          β†’ Photocard gallery with filters and admin actions
β”‚   β”œβ”€β”€ home.html                β†’ Homepage with intro, video and album embeds
β”‚   β”œβ”€β”€ login.html               β†’ Admin login form for access to protected features
β”‚   β”œβ”€β”€ legal.html               β†’ Legal notice, privacy and terms (AGPL‑3.0)
β”‚   β”œβ”€β”€ favicon.ico              β†’ Website favicon
β”‚   β”œβ”€β”€ css/                     β†’ Modular CSS stylesheets
β”‚   β”‚   β”œβ”€β”€ about.css            β†’ Specific styles for the About page (profile, podium)
β”‚   β”‚   β”œβ”€β”€ base.css             β†’ Global design tokens, dark mode variables, resets
β”‚   β”‚   β”œβ”€β”€ collection.css       β†’ Gallery, modals, filter/sidebar styles (supports dark mode)
β”‚   β”‚   β”œβ”€β”€ components.css       β†’ Shared reusable UI blocks (cards, buttons, events)
β”‚   β”‚   β”œβ”€β”€ home.css             β†’ Layout and embeds (YouTube, Spotify)
β”‚   β”‚   β”œβ”€β”€ layout.css           β†’ Navbar, sticky footer, dark mode layout
β”‚   β”‚   β”œβ”€β”€ login.css            β†’ Custom design for the login form and inputs
β”‚   β”‚   └── responsive.css       β†’ Responsive layout + dark mode sidebar styling
β”‚   β”œβ”€β”€ images/                  β†’ All static images (profile, banners, photocard assets)
β”‚   β”œβ”€β”€ js/                      β†’ Frontend JavaScript logic and UI interactivity
β”‚   β”‚   β”œβ”€β”€ modules/             β†’ Modularized gallery scripts
β”‚   β”‚   β”‚   β”œβ”€β”€ admin.js         β†’ Admin login status, CSRF tokens, session management
β”‚   β”‚   β”‚   β”œβ”€β”€ counter.js       β†’ Real-time photocard counter update
β”‚   β”‚   β”‚   β”œβ”€β”€ darkMode.js      β†’ Handles theme toggle and persistence (light/dark mode)
β”‚   β”‚   β”‚   β”œβ”€β”€ filters.js       β†’ Filter logic (group, idol, preorder, note, etc.)
β”‚   β”‚   β”‚   β”œβ”€β”€ gallery.js       β†’ Full gallery rendering and delete logic
β”‚   β”‚   β”‚   β”œβ”€β”€ modal.js         β†’ All modals (upload, edit, image) and toasts
β”‚   β”‚   β”‚   β”œβ”€β”€ sidebar.js       β†’ Group/idol sidebar with filter interactions
β”‚   β”‚   β”‚   └── upload.js        β†’ Upload modal behavior and live gallery insert
β”‚   β”‚   β”œβ”€β”€ login.js             β†’ Handles login form and localStorage admin flag
β”‚   β”‚   β”œβ”€β”€ main.js              β†’ Global UI logic across all pages
β”‚   β”‚   β”œβ”€β”€ search.js            β†’ Text-based search and highlight system
β”‚   β”‚   β”œβ”€β”€ uploadCollection.js  β†’ Collection logic: fetch, update, filter, modals
β”‚   β”‚   └── uploadHome.js        β†’ Embed modal handling for YouTube and Spotify (home)
β”‚   └── uploads/                 β†’ Folder where uploaded photocard images are stored
β”œβ”€β”€ database.db                  β†’ SQLite database file that stores all collection data
β”œβ”€β”€ server.js                    β†’ Express backend with routes, middleware, sessions
β”œβ”€β”€ .env                         β†’ Environment variables (secret keys, admin credentials)
β”œβ”€β”€ package-lock.json            β†’ Dependency lock file for consistent installs
└── README.md                    β†’ Full project documentation (you are here!)

πŸ“ All .html files are stored directly under /public/ and rendered as static views.


πŸš€ Getting Started

1️⃣ Clone the repository

git clone https://github.com/notelyoo/miyeon.fr.git
cd miyeon.fr

2️⃣ Install dependencies

npm install

3️⃣ Create a .env file

SESSION_SECRET=your_session_secret_here
ADMIN_USERNAME=your_admin_username
ADMIN_PASSWORD=your_bcrypt_hashed_password

4️⃣ Launch the server

node server.js

The website will run at: http://localhost:3000


πŸ›‘οΈ Security Notes

  • πŸ” Admin credentials are stored in environment variables and hashed with bcrypt
  • 🧼 All input fields are sanitized before being stored
  • πŸ”’ CSRF tokens protect critical routes (upload, edit, delete)
  • πŸ“Š Rate limiting is applied to login attempts

πŸ“œ License

This project is licensed under the GNU Affero General Public License v3.0 (AGPLv3).
You are free to use, share, and modify the code under the same license terms.
See the full LICENSE file for more details.


πŸ“¬ Contact

About

🌸 Personal K‑pop web gallery & portfolio – built as a fan project to showcase photocards, concerts, and favorite albums. Includes admin tools, dynamic filters, and media embeds.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published