Blinks is a Nuxt 3 app to save, organize, and share social media links.
Users can register/login, preview link metadata, group links into collections, and share links/collections with other users.
- Nuxt 3 + Vue 3
- Tailwind CSS 4 + DaisyUI
- MongoDB + Mongoose
nuxt-auth-utilssessions + JWT cookie- Puppeteer for metadata scraping fallback
- User registration and login
- Save links with preview metadata (title, description, thumbnail)
- URL allowlist validation for social platforms
- Collections (create, add/remove links, delete)
- Sharing links and collections with other users
- "Shared with me" view
facebook.com(fb.com,fb.me)linkedin.com(lnkd.in)reddit.com(redd.it)youtube.com(youtu.be)instagram.com(instagr.am)tiktok.com(vm.tiktok.com)
Only https:// URLs are accepted.
- Node.js 20+ recommended
- MongoDB running locally or remotely
- A Chrome/Chromium binary available for Puppeteer fallback scraping
Create a .env file in the project root:
JWT_SECRET=change-this-secret
MONGODB_URI=mongodb://localhost:27017/social-links
# Optional (used for YouTube links)
YOUTUBE_API_KEY=
# Optional (for custom Chrome path)
PUPPETEER_EXECUTABLE_PATH=/usr/bin/google-chromeInstall dependencies:
npm installRun dev server:
npm run devApp runs at http://localhost:3000.
npm run dev- start development servernpm run build- build for productionnpm run start- run built appnpm run preview- preview production build locallynpm run generate- generate static output (Nuxt)
A Dockerfile is included and:
- uses
node:20-slim - installs
google-chrome-stable - sets
PUPPETEER_EXECUTABLE_PATH=/usr/bin/google-chrome - builds the app and starts with
npm start
Build and run:
docker build -t blinks .
docker run --rm -p 3000:3000 --env-file .env blinksAuth:
POST /api/registerPOST /api/login
Links:
GET /api/linksPOST /api/links/previewPOST /api/links/checkPOST /api/links/createDELETE /api/links/:id
Collections:
GET /api/collectionsPOST /api/collections/createPOST /api/collections/addToCollectionPOST /api/collections/removeLinkDELETE /api/collections/:id
Sharing:
POST /api/shared/linkPOST /api/shared/collectionGET /api/sharedDELETE /api/shared/:id
Users:
GET /api/users