CogniLink is a powerful client-side bookmark and knowledge management system that runs entirely in the browser and uses IndexedDB for data storage.
This project is implemented as part of the course requirements. The repository contains source code and materials related to the CogniLink project.
This repository is intended for educational purposes only.
This project is not intended as a research prototype or a production system.
- π Intelligent Bookmark Management - Add, edit, delete, and organize bookmarks
- π Full-Text Search - High-performance full-text search via a custom inverted index
- π·οΈ Tag System - Categorize and organize bookmarks with tags
- π Category Management - Create and manage bookmark categories
- β Favorites - Mark and filter favorite bookmarks
- π¦ Archiving - Archive bookmarks that are no longer needed
- πΎ Client-Side Storage - All data is stored in the browser via IndexedDB
- π¨ Modern UI - A clean, responsive user interface
- React 18+ - UI framework
- TypeScript - Type safety and maintainability
- IndexedDB - Client-side persistent storage
- Vite - Build tool and development server
- Custom Search Index - Inverted indexβbased full-text search implementation
CogniLink/
βββ src/
β βββ components/ # React components
β β βββ bookmarks/ # Bookmark-related components
β β βββ categories/ # Category-related components
β β βββ tags/ # Tag-related components
β β βββ search/ # Search-related components
β β βββ filters/ # Filtering components
β β βββ layout/ # Layout components
β β βββ ui/ # Shared UI primitives/components
β βββ contexts/ # React Context
β βββ db/ # IndexedDB management layer
β βββ services/ # Business logic services
β βββ types/ # TypeScript type definitions
β βββ utils/ # Utility functions
β βββ App.tsx # Main application component
β βββ main.tsx # Application entry point
βββ package.json
βββ tsconfig.json
βββ vite.config.ts
npm installnpm run devThe application will start at http://localhost:5173
npm run buildnpm run preview- Database schema design
- Asynchronous transaction handling
- Data migration support
- Data import/export
- Inverted index implementation
- Chinese/English tokenization
- TF-IDF scoring
- Multi-field search
- 25+ functional components25+
- State management via Context API
- Custom Hooks
- Responsive design
interface Bookmark {
id: string;
title: string;
url: string;
description?: string;
notes?: string;
categoryId?: string;
tags: string[];
createdAt: number;
updatedAt: number;
favorite: boolean;
archived: boolean;
}interface Category {
id: string;
name: string;
description?: string;
color?: string;
icon?: string;
parentId?: string;
createdAt: number;
updatedAt: number;
}interface Tag {
id: string;
name: string;
color?: string;
createdAt: number;
usageCount: number;
}- Click the βAdd Bookmarkβ button in the top-right corner
- Fill in the bookmark details (Title and URL are required)
- Optional: add description, notes, category, and tags
- Click βAddβ to save
- Enter keywords in the top search bar
- The system searches across title, description, notes, URL, and tags automatically
- Results are ranked by relevance
- Click the "Categories" tab in the sidebar
- Click "Add Category" to create a new category
- Click a category name to filter bookmarks under that category
- Enter tags when adding/editing a bookmark
- Click "Tags" in the sidebar to view all tags
- Click a tag to filter bookmarks that contain it
- Click the star icon on a bookmark card to favorite it
- Archive a bookmark from the bookmark details page
- Use the filter panel to quickly view favorited or archived bookmarks
- Chrome/Edge (latest)
- Firefox (latest)
- Safari (latest)
MIT License
Xihao Yang