A full-stack bookmark manager built with Next.js, designed to save, organize, and find your bookmarks.
Live: linkmark.tech
- Bookmark Management — Save bookmarks with auto-fetched metadata (titles, descriptions, favicons, preview images). Add notes and tags for flexible organization.
- Groups — Organize bookmarks into shareable groups with drag-and-drop ordering via
@dnd-kit. - Tags — Apply tags to bookmarks for quick filtering. Orphaned tags (0 bookmarks) are automatically cleaned up.
- Bulk Actions — Select multiple bookmarks to tag, add to a group, or delete in one action.
- Search — Full-text search across bookmark titles, URLs, descriptions, and notes.
- Statistics — View your bookmark activity over time, top tags, and recent bookmarks.
- Import/Export — Import bookmarks from JSON, CSV, or HTML files. Export as JSON or CSV.
- Chrome Extension — Save bookmarks from any page with a single click using an API key.
- Broken Link Checker — AWS Lambda function that periodically checks all your bookmarks for broken URLs.
- Authentication — GitHub OAuth via NextAuth.js (Auth.js).
- Keyboard Shortcuts —
Cmd+Nto add a bookmark,?to view all shortcuts.
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router) |
| Language | TypeScript |
| Database | PostgreSQL, Prisma ORM |
| Auth | NextAuth (Auth.js) |
| Styling | Tailwind CSS v4 |
| Cloud | AWS S3, AWS Lambda |
| UI | React 19, dnd-kit |
src/
├── app/ # Next.js App Router pages and API routes
├── components/ # React components (BookmarkCard, Sidebar, etc.)
├── hooks/ # Custom React hooks
├── lib/ # Utilities (auth, prisma, S3, metadata fetching)
└── types/ # TypeScript type definitions
extension/ # Chrome extension (Manifest V3)
lambda/
├── index.mjs # Broken link checker
└── metadata-fetcher/ # Async metadata fetcher
prisma/ # Database schema and migrations
- Node.js v20+
- PostgreSQL database
- AWS account (for S3 and Lambda)
-
Install dependencies:
npm install
-
Configure environment: Copy
.env.exampleto.envand fill inDATABASE_URL, NextAuth secrets, and AWS credentials. -
Run database migrations:
npx prisma migrate dev
-
Start the dev server:
npm run dev
-
Open http://localhost:3000.
- Go to
chrome://extensions/and enable Developer mode. - Click "Load unpacked" and select the
extension/directory. - Generate an API key in Settings and configure the extension.
cd lambda && npm install- Zip contents and upload to AWS Lambda (Node.js 20.x).
- Set
DATABASE_URLenvironment variable. - Schedule via EventBridge (e.g., daily).