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.
- π 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
- HTML5, CSS3 (modular: base, layout, components, responsive)
- Vanilla JavaScript (DOM manipulation, modals, filters)
- Custom animations, overlays, and modals
- Node.js + Express
- Multer for file uploads
- SQLite3 (via
database.db) express-session,helmet,csurf,express-rate-limitfor security
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
.htmlfiles are stored directly under/public/and rendered as static views.
git clone https://github.com/notelyoo/miyeon.fr.git
cd miyeon.frnpm installSESSION_SECRET=your_session_secret_here
ADMIN_USERNAME=your_admin_username
ADMIN_PASSWORD=your_bcrypt_hashed_passwordnode server.jsThe website will run at: http://localhost:3000
- π 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
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.
- π Website: https://miyeon.fr
- π¦ Twitter: @NotElyoo
- π± GitHub: @NotElyoo
- π§ Email: [email protected]