{"id":26704997,"url":"https://github.com/surajb1515/dub.sj","last_synced_at":"2026-05-17T15:09:51.464Z","repository":{"id":271749834,"uuid":"914431828","full_name":"surajb1515/dub.sj","owner":"surajb1515","description":"Dubsj is the open-source application for managing your favorite links.","archived":false,"fork":false,"pushed_at":"2025-11-18T06:44:50.000Z","size":1258,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-18T08:25:43.454Z","etag":null,"topics":["convex","database","full-stack","nextjs","nextjs15-typescript","reactjs","typescript","url-shortener","vercel-deployment"],"latest_commit_sha":null,"homepage":"https://dubsj.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/surajb1515.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-01-09T15:30:22.000Z","updated_at":"2025-11-18T06:44:53.000Z","dependencies_parsed_at":null,"dependency_job_id":"88c00a7e-9440-4d65-8edf-b63a32270ca9","html_url":"https://github.com/surajb1515/dub.sj","commit_stats":null,"previous_names":["surajb1515/dub.sj"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/surajb1515/dub.sj","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/surajb1515%2Fdub.sj","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/surajb1515%2Fdub.sj/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/surajb1515%2Fdub.sj/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/surajb1515%2Fdub.sj/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/surajb1515","download_url":"https://codeload.github.com/surajb1515/dub.sj/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/surajb1515%2Fdub.sj/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33143276,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-17T09:28:26.183Z","status":"ssl_error","status_checked_at":"2026-05-17T09:27:52.702Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["convex","database","full-stack","nextjs","nextjs15-typescript","reactjs","typescript","url-shortener","vercel-deployment"],"created_at":"2025-03-27T05:33:04.112Z","updated_at":"2026-05-17T15:09:51.459Z","avatar_url":"https://github.com/surajb1515.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n![alt text](public/home-logout-1.png)\n![alt text](public/home-logout-2.png)\n![alt text](public/home-logout-3.png)\n![alt text](public/home-logout-4.png)\n![alt text](public/signin.png)\n![alt text](public/home-page.png)\n\n# 🔗 Dubsj\n\n\u003e An open-source application for managing your favorite links\n\n[![Next.js](https://img.shields.io/badge/Next.js-14+-black?style=flat-square\u0026logo=next.js)](https://nextjs.org/)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-blue?style=flat-square\u0026logo=typescript)](https://www.typescriptlang.org/)\n[![Tailwind CSS](https://img.shields.io/badge/Tailwind_CSS-3.0+-38B2AC?style=flat-square\u0026logo=tailwind-css)](https://tailwindcss.com/)\n[![License](https://img.shields.io/badge/license-MIT-green?style=flat-square)](LICENSE)\n\n## 📋 Table of Contents\n\n- [Overview](#overview)\n- [Features](#features)\n- [Tech Stack](#tech-stack)\n- [Getting Started](#getting-started)\n  - [Prerequisites](#prerequisites)\n  - [Installation](#installation)\n  - [Development](#development)\n- [Project Structure](#project-structure)\n- [Usage](#usage)\n- [Configuration](#configuration)\n- [Deployment](#deployment)\n- [Contributing](#contributing)\n- [License](#license)\n- [Contact](#contact)\n\n## 🌟 Overview\n\nDubsj is a modern, open-source link management application built with Next.js 14+. It provides a clean and intuitive interface for organizing, categorizing, and accessing your favorite links all in one place. Whether you're a developer, researcher, or content creator, Dubsj helps you keep your important URLs organized and easily accessible.\n\n## ✨ Features\n\n- 🔐 **Secure Link Management** - Store and organize your favorite links securely\n- 📁 **Categories \u0026 Tags** - Organize links with custom categories and tags\n- 🔍 **Advanced Search** - Quickly find any link with powerful search functionality\n- ⚡ **Real-time Sync** - Powered by Convex for instant data synchronization across devices\n- 📱 **Responsive Design** - Works seamlessly across desktop, tablet, and mobile devices\n- 🎨 **Modern UI** - Beautiful interface built with shadcn/ui components\n- 📝 **MDX Blog Support** - Built-in blog functionality using MDX\n- ⚡ **Fast Performance** - Optimized with Next.js App Router and Server Components\n- 🌙 **Dark Mode** - Built-in dark mode support for comfortable viewing\n- 🔄 **Import/Export** - Easily backup and restore your link collection\n- 🎯 **User-Friendly** - Intuitive interface designed for simplicity and efficiency\n\n## 🛠 Tech Stack\n\n### Core Technologies\n\n- **[Next.js 14+](https://nextjs.org/)** - React framework with App Router\n- **[TypeScript](https://www.typescriptlang.org/)** - Type-safe JavaScript\n- **[React 18+](https://react.dev/)** - UI library\n- **[Tailwind CSS](https://tailwindcss.com/)** - Utility-first CSS framework\n\n### UI Components \u0026 Styling\n\n- **[shadcn/ui](https://ui.shadcn.com/)** - Beautifully designed components\n- **[Radix UI](https://www.radix-ui.com/)** - Unstyled, accessible component primitives\n- **[Lucide Icons](https://lucide.dev/)** - Beautiful \u0026 consistent icon toolkit\n\n### Content \u0026 Data\n\n- **[MDX](https://mdxjs.com/)** - Markdown for the component era\n- **[next-mdx-remote](https://github.com/hashicorp/next-mdx-remote)** - MDX rendering for Next.js\n\n### Backend \u0026 Database\n\n- **[Convex](https://www.convex.dev/)** - Real-time database as a service with built-in backend functionality\n  - Real-time data synchronization\n  - Serverless backend\n  - TypeScript-first database\n  - Built-in authentication support\n\n### Additional Tools\n\n- **ESLint** - Code linting\n- **Prettier** - Code formatting\n- **TypeScript** - Static type checking\n\n## 🚀 Getting Started\n\n### Prerequisites\n\nBefore you begin, ensure you have the following installed:\n\n- **Node.js** (version 18.x or higher)\n- **npm** / **yarn** / **pnpm** / **bun** (package manager)\n- **Git** (for cloning the repository)\n\n### Installation\n\n1. **Clone the repository**\n\n```bash\ngit clone https://github.com/surajb1515/dub.sj.git\ncd dub.sj\n```\n\n2. **Install dependencies**\n\nUsing npm:\n```bash\nnpm install\n```\n\nUsing yarn:\n```bash\nyarn install\n```\n\nUsing pnpm:\n```bash\npnpm install\n```\n\nUsing bun:\n```bash\nbun install\n```\n\n3. **Set up environment variables**\n\nCreate a `.env.local` file in the root directory:\n\n```env\n# App Configuration\nNEXT_PUBLIC_APP_URL=http://localhost:3000\n\n# Convex Configuration\nCONVEX_DEPLOYMENT=your_convex_deployment_url\nNEXT_PUBLIC_CONVEX_URL=your_public_convex_url\n\n# Add other required environment variables\n```\n\n4. **Set up Convex**\n\n```bash\n# Install Convex CLI globally\nnpm install -g convex\n\n# Initialize Convex in your project\nnpx convex dev\n\n# This will:\n# - Create a convex/ directory\n# - Set up your Convex deployment\n# - Start the Convex dev server\n```\n\n### Development\n\nRun the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n# or\nbun dev\n```\n\n**Important:** Make sure Convex dev server is also running:\n\n```bash\nnpx convex dev\n```\n\nThis will start both your Next.js application and Convex backend in development mode with real-time synchronization.\n\nOpen [http://localhost:3000](http://localhost:3000) in your browser to see the application.\n\n## 📁 Project Structure\n\n```\ndub.sj/\n├── app/                    # Next.js App Router\n│   ├── (auth)/            # Authentication routes\n│   ├── (dashboard)/       # Dashboard routes\n│   ├── api/               # API routes\n│   ├── blog/              # Blog pages (MDX)\n│   ├── layout.tsx         # Root layout\n│   └── page.tsx           # Home page\n├── components/            # React components\n│   ├── ui/               # shadcn/ui components\n│   ├── layout/           # Layout components\n│   └── shared/           # Shared components\n├── convex/               # Convex backend\n│   ├── schema.ts        # Database schema\n│   ├── links.ts         # Link-related functions\n│   ├── auth.ts          # Authentication functions\n│   └── _generated/      # Auto-generated types\n├── content/              # MDX content files\n│   └── blog/            # Blog posts\n├── lib/                  # Utility functions\n│   ├── utils.ts         # Helper functions\n│   └── hooks/           # Custom React hooks\n├── public/              # Static assets\n│   ├── images/         # Image files\n│   └── icons/          # Icon files\n├── styles/             # Global styles\n│   └── globals.css     # Global CSS\n├── types/              # TypeScript type definitions\n├── .env.local          # Environment variables (local)\n├── .env.example        # Example environment variables\n├── convex.json         # Convex configuration\n├── next.config.js      # Next.js configuration\n├── tailwind.config.ts  # Tailwind CSS configuration\n├── tsconfig.json       # TypeScript configuration\n└── package.json        # Project dependencies\n```\n\n## 📖 Usage\n\n### Adding Links\n\n1. Navigate to the dashboard\n2. Click on \"Add Link\" button\n3. Fill in the link details (URL, title, description, category)\n4. Click \"Save\" to add the link to your collection\n\n### Organizing Links\n\n- **Categories**: Create custom categories to group related links\n- **Tags**: Add tags to links for more granular organization\n- **Search**: Use the search bar to quickly find specific links\n- **Filters**: Apply filters to view links by category or tag\n\n### Creating Blog Posts\n\nBlog posts are written in MDX format and stored in the `content/blog/` directory:\n\n1. Create a new `.mdx` file in `content/blog/`\n2. Add frontmatter metadata:\n\n```mdx\n---\ntitle: \"Your Blog Post Title\"\ndescription: \"A brief description\"\ndate: \"2025-01-15\"\nauthor: \"Your Name\"\ntags: [\"tag1\", \"tag2\"]\n---\n\nYour blog content here...\n```\n\n3. The post will automatically appear in the blog section\n\n## ⚙️ Configuration\n\n### Convex Database\n\nDefine your database schema in `convex/schema.ts`:\n\n```typescript\nimport { defineSchema, defineTable } from \"convex/server\";\nimport { v } from \"convex/values\";\n\nexport default defineSchema({\n  links: defineTable({\n    url: v.string(),\n    title: v.string(),\n    description: v.optional(v.string()),\n    category: v.string(),\n    tags: v.array(v.string()),\n    userId: v.string(),\n    createdAt: v.number(),\n  }).index(\"by_user\", [\"userId\"]),\n  \n  categories: defineTable({\n    name: v.string(),\n    userId: v.string(),\n  }).index(\"by_user\", [\"userId\"]),\n});\n```\n\nCreate Convex functions in `convex/links.ts`:\n\n```typescript\nimport { query, mutation } from \"./_generated/server\";\nimport { v } from \"convex/values\";\n\nexport const getLinks = query({\n  args: {},\n  handler: async (ctx) =\u003e {\n    return await ctx.db.query(\"links\").collect();\n  },\n});\n\nexport const addLink = mutation({\n  args: {\n    url: v.string(),\n    title: v.string(),\n    description: v.optional(v.string()),\n    category: v.string(),\n    tags: v.array(v.string()),\n  },\n  handler: async (ctx, args) =\u003e {\n    const linkId = await ctx.db.insert(\"links\", {\n      ...args,\n      userId: \"current-user-id\", // Replace with actual auth\n      createdAt: Date.now(),\n    });\n    return linkId;\n  },\n});\n```\n\n### Tailwind CSS\n\nCustomize your theme in `tailwind.config.ts`:\n\n```typescript\nexport default {\n  theme: {\n    extend: {\n      colors: {\n        // Add custom colors\n      },\n      // Add other customizations\n    },\n  },\n  plugins: [],\n}\n```\n\n### Next.js\n\nConfigure Next.js settings in `next.config.js`:\n\n```javascript\n/** @type {import('next').NextConfig} */\nconst nextConfig = {\n  // Add your configurations here\n}\n\nmodule.exports = nextConfig\n```\n\n## 🚢 Deployment\n\n### Vercel (Recommended)\n\nThe easiest way to deploy your Next.js app with Convex is using [Vercel](https://vercel.com):\n\n1. **Deploy Convex Backend**\n   ```bash\n   npx convex deploy\n   ```\n   This will give you a production Convex deployment URL.\n\n2. **Push your code to GitHub**\n\n3. **Import your repository in Vercel**\n\n4. **Configure environment variables in Vercel:**\n   ```\n   CONVEX_DEPLOYMENT=your_production_convex_deployment\n   NEXT_PUBLIC_CONVEX_URL=your_production_convex_url\n   ```\n\n5. **Deploy your application**\n\n[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/surajb1515/dub.sj)\n\n### Other Platforms\n\nYou can also deploy to:\n\n- **Netlify**\n- **Railway**\n- **AWS Amplify**\n- **Digital Ocean**\n- **Self-hosted** using Docker\n\n### Build for Production\n\n```bash\nnpm run build\nnpm run start\n```\n\n## 🤝 Contributing\n\nContributions are welcome! Here's how you can help:\n\n1. **Fork the repository**\n2. **Create a feature branch**\n   ```bash\n   git checkout -b feature/amazing-feature\n   ```\n3. **Commit your changes**\n   ```bash\n   git commit -m 'Add some amazing feature'\n   ```\n4. **Push to the branch**\n   ```bash\n   git push origin feature/amazing-feature\n   ```\n5. **Open a Pull Request**\n\n### Development Guidelines\n\n- Follow the existing code style\n- Write meaningful commit messages\n- Add tests for new features\n- Update documentation as needed\n- Ensure all tests pass before submitting PR\n\n## 📝 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 👤 Contact\n\n**Suraj** - [@surajb1515](https://github.com/surajb1515)\n\nProject Link: [https://github.com/surajb1515/dub.sj](https://github.com/surajb1515/dub.sj)\n\n## 🙏 Acknowledgments\n\n- [Next.js](https://nextjs.org/) - The React Framework\n- [Convex](https://www.convex.dev/) - Real-time backend as a service\n- [shadcn/ui](https://ui.shadcn.com/) - Beautiful UI components\n- [Tailwind CSS](https://tailwindcss.com/) - Utility-first CSS\n- [Vercel](https://vercel.com/) - Deployment platform\n- All contributors who help improve this project\n\n## 📊 Project Stats\n\n![GitHub stars](https://img.shields.io/github/stars/surajb1515/dub.sj?style=social)\n![GitHub forks](https://img.shields.io/github/forks/surajb1515/dub.sj?style=social)\n![GitHub issues](https://img.shields.io/github/issues/surajb1515/dub.sj)\n![GitHub pull requests](https://img.shields.io/github/issues-pr/surajb1515/dub.sj)\n\n---\n\n\u003cdiv align=\"center\"\u003e\n  Made with ❤️ by \u003ca href=\"https://github.com/surajb1515\"\u003eSuraj\u003c/a\u003e\n\u003c/div\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsurajb1515%2Fdub.sj","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsurajb1515%2Fdub.sj","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsurajb1515%2Fdub.sj/lists"}