Rizzzler is a polished one-link showcase platform for creators, founders, and personal brands. Each user gets a custom public profile at /username with themes, visuals, audio, links, and gallery photos β all designed to feel more like a personal landing page than a plain link-in-bio.
sample: https://www.rizzzler.work.gd/puneet2010
Built with Express, EJS, MongoDB/Mongoose, and GridFS. Every uploaded image is stored in MongoDB rather than local disk.
- A public showcase page for every verified user.
- Custom bio, display name, socials, portfolio links, and gallery photos.
- Optional background audio with autoplay/loop controls.
- A pause toggle so a user can hide their showcase temporarily.
/exploreβ browse all public profiles with search and sorting./featured-creatorsβ curated featured creators./trending-developersβ weekly trending showcases ranked by views./about-developerβ project story and creator intro./privacy-policyand/termsβ public docs for the platform.
- 8 built-in themes:
- Moonlight
- Scary Sky
- Dark Nights
- Cute Foxy
- Diva
- Scifi
- Rocky
- Frostbyte
- Multiple avatar effects: neon, burn, discord pulse, hologram, and more.
- Multiple title effects: typewriter, glitch, shimmer, and static.
- Multiple showcase motion effects: aurora, constellation, plasma, hologram, and no-extra-motion.
- Easy theme/effect expansion through the shared registry.
- Email verified registration with 6-digit verification codes.
- Unverified login guard that resends the code automatically.
- Forgot/reset password flow.
- Legacy badge system for early verified users.
- Secure admin area at
/admin. - User management, analytics, security controls, and mail settings.
- Mail features:
- Newsletter emails to verified users.
- Milestone mails at view thresholds (50, 100, 500, 1000, 2000, and every +1000 after).
- AI-generated fun mail via Gemini.
- IP/device lockout after repeated incorrect admin password attempts.
- Unverified accounts older than 15 days are automatically removed with their uploaded assets.
- Visitor analytics are automatically pruned every 2 days to keep the database lean and self-sustaining.
Node.js Β· Express Β· EJS Β· MongoDB + Mongoose Β· GridFS Β· express-session Β· bcryptjs Β· Nodemailer Β· Multer Β· node-cron Β· UA parser / GeoIP helpers
app.js
config/ accountCleanup.js, aiMailScheduler.js, mailer.js, themes.js, visuals.js, storageRouter.js
controllers/ adminController.js, authController.js, dashboardController.js, exploreController.js, fileController.js, showcaseController.js
middlewares/ authMiddleware.js, adminMiddleware.js, rateLimiter.js, upload.js, visitorTracker.js
models/ User.js, Visitor.js, Settings.js, AdminAccess.js, SecurityEvent.js, IpRule.js
Routes/ adminRoutes.js, authRoutes.js, dashboardRoutes.js, fileRoutes.js, showcaseRoutes.js, apiRoutes.js
services/ geminiService.js
shared/ registry.js
views/ landing, auth, dashboard, admin, discover pages, privacy/terms/showcase templates
public/ css, audios, decor, images
npm installCopy .env.example to .env and fill in your values:
cp .env.example .envRequired values include:
MONGO_URIβ MongoDB connection string.SESSION_SECRETβ long random string.SMTP_HOST,SMTP_PORT,SMTP_USER,SMTP_PASSβ mail delivery for verification/reset mail.BASE_URLβ your local or production domain (e.g.https://www.rizzzler.work.gd).ADMIN_PASSWORDβ admin panel access.GEMINI_API_KEYβ optional for AI mail generation.
Drop .mp3, .wav, .ogg, or other supported audio files into public/audios/ and they will appear in the settings picker.
npm run dev
# or
npm startVisit http://localhost:3000.
- Create a CSS file in
public/css/themes/yourtheme.css. - Add the theme definition in
shared/registry.js. - Restart the app β the theme will appear in the dashboard and on the public showcase.
You can also add more avatar, title, and showcase motion effects by extending the same registry file.
- Passwords are hashed before storage.
- Verification and reset codes expire after 15 minutes and are single-use.
- Sessions are stored in MongoDB via
connect-mongo. - The
/forgot-passwordflow does not reveal whether an email exists. - Admin access can be blocked permanently after repeated incorrect attempts.
- Build command:
npm install - Start command:
npm start - Add the same environment variables from
.env.examplein your host dashboard. - Point
BASE_URLto your live domain so links and public pages resolve correctly.
Made for showing off. Claim your /username and make it yours. β¨