Skip to content

samirrhashimov/blink

Repository files navigation

Blink - Your links, organized

X

A minimalist, web-based link storage and collaboration app built with React.js, TypeScript, and Firebase.

Features

  • Container Management - Create, edit, and delete link containers
  • Link Management - Add, edit, and delete links within containers
  • Light / Dark Mode - Native Dark Mode Support
  • Email Invitations - Send container invitations to users by email
  • Permission Management - View and edit permissions
  • Collaborator Management - Add, remove, and manage container collaborators
  • Notifications - Notification system for invitations and updates
  • Search Functionality - Search across containers, links, titles, descriptions, and URLs
  • Responsive Design - Mobile-first design that works on all devices
  • Copy to Clipboard - Quick copy functionality for links
  • Link Statistics - Real-time click tracking and visual history with interactive charts
  • Advanced Super Search - Powerful global search across all content with filters and relevancy
  • Public Containers - Mark containers as open to everyone with optional read-only view
  • Link Notes - Attach personal notes or descriptions directly to individual links
  • Link Reactions - Add and view emoji reactions on links to express feedback

Firefox Extension

Enhance your productivity with the Blink Firefox Extension! Save any webpage directly to your containers with a single click. No more jumping between tabs—stay organized right from your browser.

Download from Firefox Add-ons

Android

Take your links on the go with the official Blink Android App! Access your workspaces, manage your links, and share content directly from your phone.






Tech Stack

  • Frontend: React 18, TypeScript, Vite
  • Styling: Classic CSS , Tailwind CSS, PostCSS
  • Backend: Firebase (Authentication + Firestore)
  • Icons: Lucide React
  • Data Visualization: Recharts
  • Routing: React Router DOM
  • State Management: React Context API

Getting Started

Prerequisites

  • Node.js (v16 or higher)
  • npm or yarn
  • Firebase project

Installation

  1. Clone the repository:
git clone https://github.com/samirrhashimov/blink.git
  1. Install dependencies:
npm install
  1. Set up Firebase:

    • Create a new Firebase project at Firebase Console
    • Enable Authentication and Firestore
    • Copy your Firebase config and update src/firebase/config.ts
  2. Start the development server:

npm run dev
  1. Open http://localhost:5173 in your browser

Firebase Setup

  1. Create a Firebase project
  2. Enable Authentication (Email/Password)
  3. Enable Firestore Database
  4. Set up Firestore security rules:
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    
    match /users/{userId} {
      // Allow reading user display names for shared contexts
      allow read: if true;
      allow create: if request.auth != null;
      allow update, delete: if request.auth != null && request.auth.uid == userId;
    }
    
    match /vaults/{vaultId} {
      allow create: if request.auth != null && request.resource.data.ownerId == request.auth.uid;
      // Allow public containers to be seen without authentication
      allow read: if (resource.data.isPublic == true) || (request.auth != null && 
        (resource.data.ownerId == request.auth.uid || 
         request.auth.uid in resource.data.authorizedUsers));
      
      allow delete: if request.auth != null && resource.data.ownerId == request.auth.uid;
   
      allow update: if request.auth != null && 
        (resource.data.ownerId == request.auth.uid || 
         request.auth.uid in resource.data.authorizedUsers ||
         request.auth.uid in request.resource.data.authorizedUsers);
    }
    
    match /shareInvites/{inviteId} {
      allow read, write: if request.auth != null;
    }
    
    match /vaultPermissions/{permissionId} {
      allow read, write: if request.auth != null;
    }
    
    match /shareLinks/{linkId} {
      // Allow reading share links by token for public access
      allow read: if true;
      allow write: if request.auth != null;
    }
    
    match /notifications/{notificationId} {
      allow create: if request.auth != null;
      allow read, update, delete: if request.auth != null && resource.data.userId == request.auth.uid;
    }
  }
}

Available Scripts

  • npm run dev - Start development server
  • npm run build - Build for production
  • npm run preview - Preview production build
  • npm run lint - Run ESLint

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Submit a pull request

Security

If you discover a security vulnerability in the project, do not open a public issue.
Instead, submit a private report through the Security advisories section.


License

This project is licensed under the APGLv3 License. For more details, see the LICENSE file.


Support

For issues and questions, please open an issue on GitHub.

About

Blink is your personal container to store, organize, and share links with friends or teams.

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

Contributors