A modern, dark-themed bookmark manager with visual canvas organization. Built with PHP, MySQL, GoJS, and vanilla JavaScript. Features a sleek homepage, user authentication, and browser extensions for Chrome and Firefox.
- β Modern Homepage - Raycast-inspired dark theme landing page with animated backgrounds
- β User Authentication - Secure signup/login with dark-themed UI and session management
- β Visual Canvas Mode - GoJS-powered interactive canvas for spatial bookmark organization
- β Bookmark Management - Full CRUD operations with media preview support
- β Collections/Categories - Nested collection support with hierarchical organization
- β Tags System - Tag-based bookmark organization
- β Search & Filter - Advanced search functionality across bookmarks
- β Media Previews - View images, videos (YouTube), and text content inline
- β Multiple Bookmark Types - Link, text, image, audio, and video bookmarks
- β Drag & Drop - Freely position bookmarks anywhere on an infinite canvas
- β Visual Connections - Draw arrows between related bookmarks
- β Auto-Save - Canvas layout automatically persists to database
- β Media Icons - Visual indicators (π₯πΌοΈππ΅) for different bookmark types
- β Click to Preview - Open media modals directly from canvas nodes
- β Chrome Extension - Quick bookmark saving via context menu
- β Firefox Extension - Full Firefox support with WebExtensions API
- β Extension Features - Login, view bookmarks, delete, and save from any webpage
- β Dark Theme - Consistent dark color scheme across all pages (#0a0a0a background)
- β Animated UI - Floating shapes, gradient text, smooth transitions
- β Responsive Design - Works seamlessly on desktop and mobile
- β Logo Branding - Custom logo.png integrated throughout
- β CORS Protection - Whitelist-based origin control
- β CSRF Protection - Token-based request validation
- β SQL Injection Prevention - Prepared statements throughout
- β Security Headers - CSP, X-Frame-Options, XSS protection
- β Input Validation - Comprehensive sanitization and validation
- β User Isolation - Strict database-level user data separation
- PHP 7.4 or higher
- MySQL 5.7 or higher / MariaDB 10.2+
- Apache or PHP built-in server
- Chrome or Firefox browser (for extensions)
- Open phpMyAdmin or your MySQL client
- Create a new database named
bookmark_db - Import the database schema:
Or use phpMyAdmin's Import feature with
mysql -u your_username -p bookmark_db < database.sqldatabase.sql
Edit config.php with your database credentials:
define('DB_HOST', 'localhost');
define('DB_NAME', 'bookmark_db');
define('DB_USER', 'your_username');
define('DB_PASS', 'your_password');Environment Variables (Optional): The application supports environment variables for enhanced security:
DB_HOST,DB_NAME,DB_USER,DB_PASS
-
Copy project to web server directory:
- XAMPP:
C:\xampp\htdocs\Personal_Web_Tech_Project\ - WAMP:
C:\wamp64\www\Personal_Web_Tech_Project\ - MAMP:
/Applications/MAMP/htdocs/Personal_Web_Tech_Project/
- XAMPP:
-
Start Apache and MySQL services
-
Access at:
http://localhost/Personal_Web_Tech_Project/(redirects to home.html)
cd c:\xampp\htdocs\Personal_Web_Tech_Project
php -S localhost:8000Access at: http://localhost:8000 (redirects to home.html)
- Open Chrome β
chrome://extensions/ - Enable "Developer mode"
- Click "Load unpacked"
- Select the
WebExtention/folder - Configure API URL in
popup.jsif needed
- Open Firefox β
about:debugging#/runtime/this-firefox - Click "Load Temporary Add-on"
- Select
manifest.jsonfromWebExtensionFirefox/folder - Configure API URL in
popup.jsif needed
- Navigate to the homepage at
http://localhost/Personal_Web_Tech_Project/orhome.html - Click "Sign Up" to create an account (password requirements: 8+ chars, must include special character)
- Log in with your credentials
- Click "Go to Dashboard" to start managing bookmarks
- Use the grid view for traditional bookmark browsing
- Click the canvas button (in collection view) for visual organization mode
- Drag bookmarks around the canvas and draw connections between them!
Personal_Web_Tech_Project/
βββ api/
β βββ auth.php # Authentication endpoints (signup, login, logout)
β βββ bookmarks.php # Bookmark CRUD
β βββ collections.php # Collection management
β βββ canvas.php # Canvas positions and connections
βββ WebExtention/ # Chrome extension
β βββ background.js # Background service worker
β βββ content.js # Content script
β βββ popup.html # Extension popup UI
β βββ popup.js # Popup logic
β βββ manifest.json # Chrome extension manifest
β βββ README.md # Extension documentation
βββ WebExtensionFirefox/ # Firefox extension
β βββ background.js # Firefox background script
β βββ content.js # Content script
β βββ popup.html # Extension popup UI
β βββ popup.js # Popup logic
β βββ manifest.json # Firefox extension manifest
βββ home.html # Landing page (dark theme, animated)
βββ index.html # Redirects to home.html
βββ index.php # Main dashboard (requires login)
βββ login.html # Login page (dark theme)
βββ signup.html # Signup page (dark theme)
βββ app.js # Main application JavaScript
βββ auth.js # Authentication JavaScript
βββ canvas.js # GoJS canvas logic
βββ cookies.js # Cookie consent handling
βββ style.css # Main application styles (dark theme)
βββ auth.css # Authentication page styles (dark theme)
βββ cookies.css # Cookie banner styles
βββ logo.png # Application logo
βββ config.php # Database config + security functions
βββ database.sql # Database schema (includes canvas tables)
βββ setup_database.php # Database setup helper
βββ README.md # This file
βββ QUICK_START.md # Implementation reference
βββ CONFIGURATION.md # Configuration guide
βββ COMPREHENSIVE_DOCUMENTATION.md # Detailed documentation
POST /api/auth.php?action=signup- Create new user accountPOST /api/auth.php?action=login- User loginPOST /api/auth.php?action=logout- User logoutGET /api/auth.php?action=check- Check authentication statusGET /api/auth.php?action=user- Get current user info
GET /api/bookmarks.php- Get all bookmarks for authenticated userGET /api/bookmarks.php?id={id}- Get specific bookmarkPOST /api/bookmarks.php- Create new bookmark (JSON only; media URLs only)PUT /api/bookmarks.php?id={id}- Update bookmarkDELETE /api/bookmarks.php?id={id}- Delete bookmark
GET /api/collections.php- Get all collections for authenticated userGET /api/collections.php?id={id}- Get specific collectionPOST /api/collections.php- Create new collectionPUT /api/collections.php?id={id}- Update collectionDELETE /api/collections.php?id={id}- Delete collection
GET /api/canvas.php?collectionId={id}- Get canvas positions and connections for a collectionPOST /api/canvas.php- Save canvas layout (positions and connections)
- CORS: Whitelist-based origin validation
- CSRF: Token-based protection for state-changing operations
- SQL Injection: All queries use prepared statements
- Input Validation: Comprehensive sanitization of all user inputs
- Content Security Policy (CSP)
- X-Frame-Options
- X-Content-Type-Options
- X-XSS-Protection
- Session-based authentication for web app
- Header-based authentication for browser extensions
- Password hashing with PHP's
password_hash() - Password requirements: 8+ characters, must include special character
- Database-level user_id enforcement
- No cross-user data access possible
- Homepage: Start at the modern dark-themed landing page (
home.html) - Sign Up: Create an account with username, email, and password
- Login: Access your dashboard
- Dashboard: View bookmarks in grid or list mode
- Create Bookmarks: Click "Add Bookmark" button to save links, text, images, or videos
- Collections: Organize bookmarks into nested folders
- Canvas Mode: Switch to visual canvas view within any collection
- Drag bookmarks to position them freely
- Draw connections between related bookmarks
- Click bookmark nodes to preview content
- Layout auto-saves as you work
- Search: Use the search bar to filter bookmarks
- Tags: Add tags for additional organization
- Logout: Safely logout and return to homepage
- Access: Click canvas button when viewing a collection
- Drag & Drop: Click and drag bookmark nodes to reposition
- Connections: Use the link tool to draw arrows between bookmarks
- Media Icons: Visual indicators show bookmark type (π₯ video, πΌοΈ image, π text, π΅ audio, π link)
- Quick Preview: Click any node to open media preview modal
- Zoom & Pan: Use toolbar controls or mouse wheel
- Auto-Save: Canvas layout persists automatically
- Login: Click extension icon and enter credentials
- View Bookmarks: Browse all bookmarks in the popup
- Quick Save: Right-click on any page element β "Save to Bookmarks"
- Context Menu Options:
- Save page as bookmark
- Save selected text
- Save image
- Save audio/video
- Delete: Click delete button on any bookmark in popup
- Dark Theme: Consistent #0a0a0a background across all pages
- Animated Homepage: Floating shapes, gradient text, smooth transitions
- Responsive Design: Works seamlessly on desktop and mobile
- Custom Logo: logo.png integrated throughout the interface
- Modern Cards: Elevated surfaces with hover effects
- Canvas Visualization: GoJS-powered infinite canvas
- Media Previews: Inline viewing of images, videos, and text
- Real-time Search: Instant filtering as you type
- Modal Dialogs: Clean forms for bookmarks and collections
- Cookie Consent: GDPR-compliant cookie banner
- Loading States: Visual feedback during operations
- README.md (this file) - Setup and overview
- QUICK_START.md - Quick implementation reference and requirements checklist
- CONFIGURATION.md - Detailed configuration guide
- COMPREHENSIVE_DOCUMENTATION.md - Complete technical documentation
- WebExtention/README.md - Browser extension setup guide
The application uses 6 main tables:
users- User accountscollections- Bookmark collections/foldersbookmarks- Bookmark entriestags- Bookmark tagsbookmark_canvas_positions- Canvas node positionsbookmark_canvas_connections- Canvas node connections
See database.sql for complete schema.
Backend:
- PHP 7.4+
- MySQL 5.7+
- RESTful API with JSON responses
Frontend:
- Vanilla JavaScript (ES6+)
- GoJS 3.0.2 for canvas visualization
- CSS3 with custom properties (dark theme)
- PreviewBox for link previews
- No major frameworks required
Browser Extensions:
- WebExtensions API
- Chrome Manifest V3
- Firefox WebExtensions
- Verify MySQL is running
- Check credentials in
config.php - Ensure database
bookmark_dbexists
- Check API URL in
popup.jsandbackground.js - Verify server is accessible
- Check browser console for errors
- Ensure CORS headers are set correctly
- Clear browser cookies
- Check PHP session configuration
- Verify
session_start()is called
This is a personal web technology project for educational purposes.
Created as part of a web technology course project.
Note: For detailed implementation notes and security requirements, see QUICK_START.md