# NOWEN ยท ๅผ„ๆ–‡ ยท Nebula Portal > A minimalist personal navigation hub combining bookmark management and system monitoring, featuring deep space aesthetics and glassmorphism design, supporting day/night dual modes with complete real-time hardware monitoring capabilities ![Version](https://img.shields.io/badge/version-0.2.2-blue) ![License](https://img.shields.io/badge/license-MIT-green) ![Node](https://img.shields.io/badge/node-%3E%3D20-brightgreen) ![React](https://img.shields.io/badge/React-18.3-61dafb) ![TypeScript](https://img.shields.io/badge/TypeScript-5.6-3178c6) ![Docker](https://img.shields.io/badge/Docker-Ready-2496ED) ![Docker Hub](https://img.shields.io/badge/Docker%20Hub-cropflre%2Fnowen-blue) ![ARM64](https://img.shields.io/badge/ARM64-Supported-orange) ## ๐ŸŒ Live Demo **๐Ÿ”— Access URL**: [http://118.145.185.221/](http://118.145.185.221/) > ๐ŸŽฏ **Demo Mode**: When accessed via the URL above, the login page auto-fills default credentials (admin / admin123). Just click login to explore the admin panel. Password change is disabled in demo mode. ## ๐Ÿ“– Documentation | Language | Document | | ----------- | ---------------------------------------- | | ๐Ÿ‡จ๐Ÿ‡ณ ็ฎ€ไฝ“ไธญๆ–‡ | [README.md](./README.md) | | ๐Ÿ‡ฌ๐Ÿ‡ง English | [README_EN.md](./README_EN.md) (Current) | --- ## ๐Ÿ“ธ Screenshots ### ๐Ÿ–ฅ๏ธ Desktop
Light Mode Dark Mode
Desktop Light Desktop Dark
Dock View Switcher
Dock View Switcher
### ๐Ÿ“ฑ Mobile
Light Light (Detail) Dark
Mobile Light Mobile Light Detail Mobile Dark
### ๐Ÿ› ๏ธ Admin Dashboard
Bookmark Management (Light) Bookmark Management (Dark)
Admin Light Admin Dark
Theme Palette (8 Dark + 8 Light)
Theme Palette
### ๐ŸŽ›๏ธ Feature Highlights | Feature | Description | | ------------------------ | ------------------------------------------------------------------------------------------ | | **Weather & Lunar** | Real-time weather 19ยฐC ยท Cloudy ยท 75% humidity ยท 5.5m/s wind ยท Lunar date ยท Solar terms | | **Sidebar Navigation** | Quick category navigation (Dev/Tools/Design/Reading/Media) ยท Smart highlighting | | **Category Editing** | Hover to show edit button โœ๏ธ ยท Edit directly without backend | | **Quick Add Category** | Create category while adding bookmark ยท 10 preset colors ยท Real-time refresh | | **AI Assistant** | AI smart tags ยท Batch AI classify ยท Batch AI metadata & icons ยท AI chat assistant ยท Multi-language output | | **System Monitoring** | Engine Room (CPU 57%/RAM 89%/Disk) ยท Hardware ID ยท Vital Signs (28ยฐC) ยท Network ยท Services ยท S/M/L size switching | | **Dock Status Bar** | SYSTEM ONLINE ยท CPU/MEM/Temp/Network speed ยท Freely draggable ยท Position memory | | **Mobile Floating Dock** | Freely draggable energy orb ยท Petal-style expand menu ยท Bottom status bar ยท Haptic feedback ยท Position persistence | | **Read Later** | Hero card display ยท 3D card effect ยท List view ยท Mark as read | | **Visit Analytics** | Click tracking ยท Top ranking ยท Trend charts ยท Recent visits ยท Data clearing | | **Link Health Check** | Batch check ยท Dead link detection ยท Timeout/redirect detection ยท Response time stats ยท Delete dead links | | **Network Switching** | Dual URLs per bookmark (Internal/External) ยท Auto network detection ยท Smart URL switching | | **Footer Filing Info** | Configure footer text in settings ยท HTML rendering support ยท Homepage bottom display | | **Wallpaper** | Custom background wallpaper ยท Upload/Drag/URL/Picsum/Bing ยท Adjustable blur and overlay ยท Beam effects layered | | **Data Management** | Import/Export JSON/HTML ยท Factory reset ยท Auto redirect to home after import ยท SunPanel data import compatible ยท Browser bookmark import (merge/overwrite) ยท Auto-fetch icons after import (โ‰ค50 bookmarks) | | **Cloud Backup** | WebDAV cloud backup (Nutstore/Synology/UGREEN/Alist) ยท Auto scheduled backup (daily/12h/weekly/hourly) ยท Local JSON download/restore ยท Raw DB file download/upload ยท Keep up to 30 backups | | **System Logs** | Operation logging ยท Filter by level/type ยท One-click clear logs | | **ARM64 Support** | Multi-arch Docker images ยท RK3588/RK3576/RK3566 SBCs ยท Apple Silicon ยท One-click build script | --- ## ๐Ÿ“‹ Table of Contents - [Screenshots](#-screenshots) - [Features](#-features) - [Theme System](#-theme-system) - [Tech Stack](#๏ธ-tech-stack) - [Project Structure](#-project-structure) - [Installation](#-installation) - [Windows Local](#option-1-windows-local-installation) - [Docker](#option-2-docker-installation) - [Synology NAS](#option-3-synology-nas) - [UGREEN NAS](#option-4-ugreen-nas) - [fnOS](#option-5-fnos) - [QNAP NAS](#option-6-qnap-nas) - [Extreme Space NAS](#option-7-extreme-space-nas) - [ARM64 SBC](#option-8-arm64-sbc-rk3588rk3576rk3566) - [API Reference](#-api-reference) - [Keyboard Shortcuts](#๏ธ-keyboard-shortcuts) - [FAQ](#-faq) - [Changelog](#-changelog) - [License](#-license) --- ## โœจ Features ### ๐Ÿ  Homepage Display - **Dynamic Clock**: Real-time display (accurate to seconds), smart greetings (Good morning/afternoon/evening) - **Weather Display** (NEW): Real-time weather info, temperature, weather icons (via Open-Meteo API) - **Lunar Calendar** (NEW): Lunar date, solar terms, traditional festivals - **Quote Display**: Random quote rotation, supports system default and custom quotes - **Aurora Background**: Immersive deep space visual effects - **Meteor Effects**: Random meteor animations for sci-fi atmosphere - **System Monitor Dashboard**: Real-time display of CPU, memory, disk, network, processes - **Lite Mode**: Disable animations and effects, significantly reduce CPU/GPU usage - **Wallpaper Background** (NEW): Custom page background image, supports upload/drag/URL/Picsum/Bing, adjustable blur and overlay ### ๐Ÿ’ป System Monitoring (NEW) - **Engine Room (System Monitor Card)**: CPU usage, memory, disk space, uptime - **Hardware Identity Card**: CPU model, motherboard info, firmware version, RAM, storage, GPU, OS - **Vital Signs Card**: CPU/Memory gauges, temperature monitoring, LIVE status - **Network Telemetry Card**: Download/Upload speed, traffic charts, IP address, connection status - **Service Hive (Process Matrix Card)**: Docker container status, runtime timer, service health - **Dock Mini Monitor**: Desktop bottom SYSTEM ONLINE status bar with CPU/MEM/Temp/Speed - **Ticker Status Bar**: Mobile bottom scrolling status bar, integrated into draggable energy orb bottom bar - **Monitor Tri-Mode**: Mini capsule / Ticker bar / Full dashboard seamless switching, view selection persisted - **Widget Visibility Control**: Backend control for each monitor component - **Widget Size Preset S/M/L** (NEW): One-click switch all monitor widget display sizes - S (Mini Summary): All widgets force-collapsed, showing only title bar + key metrics - M (Default): Users can individually collapse/expand each widget - L (Expanded): All widgets force-expanded, showing full content - **Menu Visibility Control** (NEW): Control language/theme toggle buttons visibility ### ๐Ÿ” Spotlight Search - **Hotkey Activation**: `โŒ˜/Ctrl + K` global trigger - **Multi-Search Engines**: Google, Bing, Baidu, DuckDuckGo one-click switch - **Bookmark Search**: Quick search saved bookmarks - **Quick Add**: Add new bookmarks directly in search box ### ๐Ÿ“š Bookmark Management - **Smart Metadata Fetching**: Auto-fetch title, description, favicon, OG image - **Category Management**: Custom category names, icons, and colors - **Frontend Category Editing** (NEW): Edit/create/delete categories directly on homepage - **Quick Add Category** (NEW): Create new categories while adding bookmarks, inline form with 10 preset colors - **Quick Navigation Sidebar** (NEW): Auto-display category nav, quick positioning, smart highlighting - **Pin Feature**: Pin frequently used bookmarks (Bento Grid asymmetric layout) - **Read Later**: Hero card display for pending reads, read mark support, 3D card effect - **Drag & Drop Sorting**: Smooth drag experience with @dnd-kit - **Context Menu**: Quick operations when logged in (edit/delete/pin) - **Custom Icons**: Three icon modes (preset icons, custom upload, URL remote image) - **Virtual Scroll**: Auto-enabled on homepage when 50+ bookmarks, optimized rendering performance - **Link Health Check** (NEW): Batch check all bookmark links accessibility, dead link detection and cleanup - **Internal/External URL Switching** (NEW): Configure dual URLs per bookmark, auto-detect network environment for smart URL switching ### ๐Ÿค– AI Features (Enhanced v0.2.x) - **AI Smart Tags**: Automatically generate matching tags when adding bookmarks via AI analysis - Auto-triggers after URL analysis (no manual click needed) - Auto-fills tags + category + optimized description - AI settings panel and tag management panel - Auto-trigger toggle (can be disabled in AI settings) - Customizable timeout (60-120s recommended for local models) - **Multiple AI Providers**: Support for OpenAI, Gemini, DeepSeek, Qwen, Doubao, and custom APIs - Smart title optimization (removes SEO suffixes, preserves brand names) - Intelligent description generation (concise and professional for bookmarks) - Auto-recommends 3-5 accurate tags - Multi-language output (follows system language automatically)- **Batch AI Smart Classify**: Batch assign categories to selected bookmarks via AI - Auto-create new categories if no match exists - Concurrent processing (2 workers), async with real-time progress - **Batch AI Metadata & Icons**: Batch optimize bookmark title, description, tags and icons via AI - AI-recommended Iconify icons (simple-icons brand icons preferred) - Multi-language output: metadata follows current UI language (Chinese/English) - One-click enrich: title + description + tags + icon in a single operation - **AI Chat Assistant**: Smart bookmark assistant for search and discovery - Semantic search across bookmark library - Context-aware responses with clickable bookmark cards - **AI Quote Generation** (NEW): Batch generate themed quotes via AI - Customizable generation count and theme keywords - Select from results and add to quote library in one click ### โš™๏ธ Admin Panel | Module | Features | | ------------------- | ------------------------------------------------------------------------------------------------- | | **Bookmarks** | CRUD, batch operations, category filter, multi-keyword search, numeric pagination, quick category change, batch AI tags/classify/enrich | | **Categories** | Custom names, icon picker, color picker, drag sorting | | **Icons** | Upload custom icons, preview, delete management | | **Quotes** | Custom quotes, system default toggle, AI quote generation | | **AI Settings** | AI provider config (OpenAI/Gemini/DeepSeek/Qwen/Doubao/Custom), API key, model, timeout config, auto-trigger toggle, connection test | | **Site Settings** | Custom site name and icon, lite mode toggle, weather/lunar toggle, menu visibility, footer filing info | | **Theme Settings** | 8 preset themes, light/dark mode, auto switch, day/night animation, circle expand animation | | **Widget Settings** | Control each monitor component visibility, Beam border toggle, Widget Size Preset S/M/L | | **Wallpaper Settings** | Custom background wallpaper, image source selection (Upload/URL/Picsum/Bing), blur and overlay control | | **Security** | Password change with strength indicator, first login force change, login state verification, admin username change | | **Data Management** | JSON/HTML import/export backup, factory reset, auto redirect to home after import, nested object support, SunPanel data compatible import, browser bookmark import (merge/overwrite modes), auto-fetch bookmark icons after import (โ‰ค50) | | **Cloud Backup** | WebDAV cloud backup (Nutstore/Synology/UGREEN/Alist), auto scheduled backup (node-cron), local JSON download/restore, raw .db database file download/upload, keep up to 30 backups | | **System Logs** | API request logging, operation logs, filter by level/type, one-click clear logs | | **Tag Management** | Bookmark tag statistics, tag rename, tag delete | | **Analytics** | Bookmark click tracking, top bookmarks ranking, visit trends, recent visits, data clearing | | **Health Check** | Batch check bookmark link accessibility, 4 status types (OK/Error/Timeout/Redirect), delete dead links | ### ๐ŸŽจ Visual Design - **Glassmorphism**: `backdrop-blur` + transparent borders - **Border Beam**: Animated light border effect (backend toggle) - **3D Cards**: Mouse-tracking 3D perspective effect - **Spotlight Effect**: Card hover light effect - **Toast Notifications**: Physics bounce animation - **Theme Transition**: Circle expand animation - **Day/Night Mode**: Fully adapted dual theme system - **Mobile Adaptation**: Responsive design, freely draggable energy orb dock, petal-style expand menu, bottom status bar, single-column Bento layout - **Desktop Optimization**: Floating dock nav (freely draggable + position memory), mini monitor widget, magnetic magnification effect, sidebar - **Lite Mode**: Disable all animations, significantly reduce resource usage --- ## ๐ŸŽจ Theme System Supports **8 carefully designed theme colors**, each with 20+ CSS variables: ### Dark Themes | Theme | Description | | ------------- | ------------------------------------ | | ๐ŸŒŒ **Nebula** | Default theme, purple-cyan gradient | | ๐Ÿ”ฎ **Aurora** | Aurora colors, mysterious and dreamy | | ๐ŸŒŠ **Ocean** | Deep blue tones, calm and profound | | ๐ŸŒฒ **Forest** | Dark green tones, natural and stable | ### Light Themes | Theme | Description | | --------------- | ---------------------------------------- | | โ˜€๏ธ **Daylight** | Bright and fresh, professional and clean | | ๐ŸŒ… **Sunrise** | Warm orange tones, warm and vibrant | | ๐ŸŒธ **Sakura** | Pink series, romantic and elegant | | ๐Ÿƒ **Mint** | Mint green, fresh and natural | ### Smart Switching - **Manual**: Backend settings page selection - **Follow System**: Auto-adapt to system dark mode preference - **Auto Mode**: Time-based switch (6:00-18:00 light, otherwise dark) - **Visibility Control**: Backend control for theme toggle button visibility --- ## ๐Ÿ› ๏ธ Tech Stack ### Frontend | Tech | Version | Purpose | | --------------------------- | ------- | ------------------------------- | | **React** | 18.3.1 | UI Framework | | **TypeScript** | 5.6.2 | Type Safety | | **Vite** | 6.0.3 | Build Tool | | **Tailwind CSS** | 3.4.16 | Atomic CSS | | **Framer Motion** | 11.15 | Animations | | **@dnd-kit** | 6.3 | Drag & Drop | | **@tanstack/react-virtual** | 3.13 | Virtual Scroll | | **Lucide Icons** | 0.468 | Icon Library | | **@iconify/react** | 6.0.2 | Iconify Icon Support | | **Zod** | 4.3 | Data Validation | | **SWR** | 2.4 | Data Fetching & Caching | | **i18next** | 25.8.3 | Internationalization (CN/EN/JP/KR) | | **lunar-javascript** | 1.7 | Lunar Calendar Calculation | | **react-spring** | 10.0.3 | Physics Animation Engine | ### Backend | Tech | Version | Purpose | | --------------------- | ------- | ----------------------- | | **Express** | 4.21.2 | Web Framework | | **sql.js** | 1.11.0 | SQLite (WebAssembly) | | **systeminformation** | 5.23.5 | System Hardware Info | | **Cheerio** | 1.0.0 | HTML Parsing (Metadata) | | **bcryptjs** | 3.0.3 | Password Encryption | | **webdav** | 5.8.0 | WebDAV Cloud Backup | | **node-cron** | 3.0.3 | Scheduled Auto Backup | | **Zod** | 4.3.6 | Data Validation | | **tsx** | 4.19.2 | TypeScript Runtime | ### Deployment | Tech | Purpose | | ------------------ | ------------------------------- | | **Docker** | Containerization (amd64+arm64) | | **Docker Compose** | Orchestration | | **GitHub Actions** | CI/CD Auto Build | | **Nginx** | Reverse Proxy | --- ## ๐Ÿ“ฆ Project Structure ``` NOWEN/ โ”œโ”€โ”€ src/ # Frontend Source โ”‚ โ”œโ”€โ”€ components/ โ”‚ โ”‚ โ”œโ”€โ”€ ui/ # UI Components โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ 3d-card.tsx # 3D Card Effect โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ aurora-background.tsx # Aurora Background โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ bento-grid.tsx # Bento Grid Layout โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ floating-dock.tsx # Floating Dock Nav (Desktop, freely draggable + position memory) โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ mobile-floating-dock.tsx # Mobile Floating Dock (draggable orb + petal menu + bottom bar) โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ spotlight-card.tsx # Spotlight Card โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ spotlight-search.tsx # Spotlight Search Panel โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ effects.tsx # Meteor/Starlight Effects โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ advanced-effects.tsx # Border Beam etc. โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ typewriter.tsx # Typewriter Effect โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ scroll-to-top.tsx # Scroll to Top Button โ”‚ โ”‚ โ”œโ”€โ”€ admin/ # Admin Components โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ AdminSidebar.tsx # Admin Sidebar Nav โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ SiteSettingsCard.tsx # Site Settings โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ ThemeCard.tsx # Theme Picker โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ WidgetSettingsCard.tsx # Widget Settings โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ WallpaperSettingsCard.tsx # Wallpaper Settings โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ SecurityCard.tsx # Security Settings โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ DataManagementCard.tsx # Data Management โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ BackupCard.tsx # Cloud Backup & Data Management โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ DocsCard.tsx # Documentation Card โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ SettingsPanel.tsx # Settings Panel โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ QuotesCard.tsx # Quote Management โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ AnalyticsCard.tsx # Visit Analytics โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ HealthCheckCard.tsx # Link Health Check โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ TagsManageCard.tsx # Tag Management โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ LogsCard.tsx # System Logs โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ AiSettingsCard.tsx # AI Settings โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ Toast.tsx # Notifications โ”‚ โ”‚ โ”œโ”€โ”€ monitor/ # System Monitor Components โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ SystemMonitor.tsx # Unified Monitor Interface โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ MonitorDashboard.tsx # Full Dashboard (light mode transparent) โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ MiniMonitor.tsx # Mini Monitor Widget (capsule design) โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ TickerMonitor.tsx # Scrolling Status Bar (mobile bottom bar) โ”‚ โ”‚ โ”œโ”€โ”€ SystemMonitorCard.tsx # System Monitor Card โ”‚ โ”‚ โ”œโ”€โ”€ HardwareIdentityCard.tsx # Hardware Identity Card โ”‚ โ”‚ โ”œโ”€โ”€ VitalSignsCard.tsx # Vital Signs Card โ”‚ โ”‚ โ”œโ”€โ”€ NetworkTelemetryCard.tsx # Network Telemetry Card โ”‚ โ”‚ โ”œโ”€โ”€ ProcessMatrixCard.tsx # Process Matrix Card โ”‚ โ”‚ โ”œโ”€โ”€ AddBookmarkModal.tsx # Add Bookmark Modal โ”‚ โ”‚ โ”œโ”€โ”€ CategoryEditModal.tsx # Category Edit Modal โ”‚ โ”‚ โ”œโ”€โ”€ AdminLogin.tsx # Login Page โ”‚ โ”‚ โ”œโ”€โ”€ ForcePasswordChange.tsx # Force Password Change โ”‚ โ”‚ โ”œโ”€โ”€ BentoCard.tsx # Bento Bookmark Card โ”‚ โ”‚ โ”œโ”€โ”€ BookmarkCard.tsx # Bookmark Card โ”‚ โ”‚ โ”œโ”€โ”€ IconManager.tsx # Icon Manager โ”‚ โ”‚ โ”œโ”€โ”€ ContextMenu.tsx # Context Menu โ”‚ โ”‚ โ”œโ”€โ”€ VirtualBookmarkList.tsx # Virtual Scroll List โ”‚ โ”‚ โ”œโ”€โ”€ ErrorBoundary.tsx # Error Boundary โ”‚ โ”‚ โ””โ”€โ”€ CommandPalette.tsx # Command Palette โ”‚ โ”œโ”€โ”€ hooks/ # Custom Hooks โ”‚ โ”‚ โ”œโ”€โ”€ useBookmarkStore.ts # Bookmark State Management โ”‚ โ”‚ โ”œโ”€โ”€ useHashRouter.ts # Lightweight Hash Router โ”‚ โ”‚ โ”œโ”€โ”€ useAuth.ts # Authentication & Page Navigation โ”‚ โ”‚ โ”œโ”€โ”€ useTheme.tsx # Theme System (8 themes) โ”‚ โ”‚ โ”œโ”€โ”€ useTime.ts # Time, Greeting, Lunar โ”‚ โ”‚ โ”œโ”€โ”€ useWeather.ts # Weather Info โ”‚ โ”‚ โ””โ”€โ”€ useNetworkEnv.ts # Network Environment Detection โ”‚ โ”œโ”€โ”€ contexts/ โ”‚ โ”‚ โ””โ”€โ”€ AdminContext.tsx # Admin Context โ”‚ โ”œโ”€โ”€ lib/ # Utility Library โ”‚ โ”‚ โ”œโ”€โ”€ api.ts # API Wrapper โ”‚ โ”‚ โ”œโ”€โ”€ icons.ts # Icon Mapping โ”‚ โ”‚ โ”œโ”€โ”€ env.ts # Environment Variables โ”‚ โ”‚ โ”œโ”€โ”€ error-handling.ts # Error Handling โ”‚ โ”‚ โ”œโ”€โ”€ bookmarkParser.ts # Bookmark File Parser โ”‚ โ”‚ โ”œโ”€โ”€ i18n.ts # Internationalization โ”‚ โ”‚ โ”œโ”€โ”€ animation.ts # Animation Utilities โ”‚ โ”‚ โ””โ”€โ”€ utils.ts # Utility Functions โ”‚ โ”œโ”€โ”€ pages/ โ”‚ โ”‚ โ””โ”€โ”€ Admin.tsx # Admin Page โ”‚ โ”œโ”€โ”€ types/ โ”‚ โ”‚ โ””โ”€โ”€ bookmark.ts # Type Definitions โ”‚ โ”œโ”€โ”€ data/ โ”‚ โ”‚ โ””โ”€โ”€ quotes.ts # Quotes Data โ”‚ โ”œโ”€โ”€ __tests__/ # Unit Tests โ”‚ โ”œโ”€โ”€ App.tsx # Main App โ”‚ โ””โ”€โ”€ index.css # Global Styles & CSS Variables โ”œโ”€โ”€ server/ # Backend Source โ”‚ โ”œโ”€โ”€ src/ โ”‚ โ”‚ โ”œโ”€โ”€ routes/ # Route Modules โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ bookmarks.ts # Bookmark Routes โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ categories.ts # Category Routes โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ quotes.ts # Quote Routes โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ admin.ts # Admin Routes โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ settings.ts # Settings Routes โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ system.ts # System Monitor Routes โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ visits.ts # Visit Analytics Routes โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ health-check.ts # Link Health Check Routes โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ ai.ts # AI Routes โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ logs.ts # System Logs Routes โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ backup.ts # Cloud Backup Routes โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ data.ts # Data Import/Export Routes โ”‚ โ”‚ โ”œโ”€โ”€ services/ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ metadata.ts # URL Metadata Fetching โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ ai.ts # AI Service โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ backup.ts # WebDAV Backup Service โ”‚ โ”‚ โ”œโ”€โ”€ middleware/ # Middleware โ”‚ โ”‚ โ”œโ”€โ”€ utils/ # Utilities โ”‚ โ”‚ โ”œโ”€โ”€ index.ts # Server Entry โ”‚ โ”‚ โ”œโ”€โ”€ db.ts # Database Operations โ”‚ โ”‚ โ””โ”€โ”€ schemas.ts # Request Validation โ”‚ โ””โ”€โ”€ data/ โ”‚ โ””โ”€โ”€ zen-garden.db # SQLite Database โ”œโ”€โ”€ .github/ โ”‚ โ””โ”€โ”€ workflows/ โ”‚ โ””โ”€โ”€ docker-publish.yml # GitHub Actions Auto Build โ”œโ”€โ”€ Dockerfile # Docker Config (Multi-arch) โ”œโ”€โ”€ docker-compose.yml # Docker Compose โ”œโ”€โ”€ build-multiarch.sh # Multi-arch Build Script (amd64 + arm64) โ”œโ”€โ”€ nginx.conf # Nginx Config โ”œโ”€โ”€ vite.config.ts # Vite Config โ”œโ”€โ”€ tailwind.config.js # Tailwind Config โ”œโ”€โ”€ vitest.config.ts # Vitest Test Config โ””โ”€โ”€ package.json # Dependencies ``` --- ## ๐Ÿš€ Installation ### Default Admin Credentials | Username | Password | | -------- | -------- | | admin | admin123 | > โš ๏ธ **Security Note**: Please change the default password immediately after first login! --- ### Option 1: Windows Local Installation #### Prerequisites - **Node.js 20+**: [Download](https://nodejs.org/) - **Git**: [Download](https://git-scm.com/) #### Installation Steps **Step 1: Install Node.js** 1. Visit https://nodejs.org/ 2. Download **LTS version** (20.x or higher recommended) 3. Install and verify: ```bash node -v npm -v ``` **Step 2: Clone Project** ```bash cd D:\Projects git clone https://github.com/cropflre/NOWEN.git cd NOWEN ``` **Step 3: Install Dependencies** ```bash # Frontend dependencies npm install # Backend dependencies cd server npm install cd .. ``` **Step 4: Start Services** Open **two** terminal windows: **Window 1 - Backend:** ```bash cd D:\Projects\NOWEN\server npm run dev ``` **Window 2 - Frontend:** ```bash cd D:\Projects\NOWEN npm run dev ``` **Step 5: Access Application** Open browser: http://localhost:5173 --- ### Option 2: Docker Installation #### Using Docker Hub Image (Recommended) ```bash # Pull image docker pull cropflre/nowen:latest # Create docker-compose.yml cat > docker-compose.yml << 'EOF' services: nowen: image: cropflre/nowen:latest container_name: nowen restart: unless-stopped stop_grace_period: 15s # Grace period for data save on shutdown ports: - "3000:3000" # Web UI port, can change to "8080:3000" etc. volumes: # Data persistence (REQUIRED!) - Named Volume, auto-reused after update - nowen-data:/app/server/data # Backup layer - extra protection, auto-syncs every 5 minutes - nowen-backup:/app/.data-backup # System monitoring mounts (optional, remove if not needed) - /:/host:ro # Host filesystem (read-only) for disk info - /proc:/host/proc:ro # Process info for CPU/Memory/Processes - /sys:/host/sys:ro # System info for temperature/hardware - /var/run/docker.sock:/var/run/docker.sock # Docker container monitoring environment: - NODE_ENV=production - SI_FILESYSTEM_DISK_PREFIX=/host - PROC_PATH=/host/proc - SYS_PATH=/host/sys - FS_PATH=/host privileged: true # Required for temperature and SMART disk info volumes: nowen-data: name: nowen-data nowen-backup: name: nowen-backup EOF ``` **Configuration Notes:** | Option | Required | Description | |--------|----------|-------------| | `volumes: nowen-data` | โœ… Required | Main data volume storing SQLite database | | `volumes: nowen-backup` | โšก Recommended | Backup layer for data protection, auto-syncs every 5 min | | System monitoring mounts | ๐Ÿ–ฅ๏ธ Optional | Configure if hardware monitoring is needed | | `privileged: true` | ๐ŸŒก๏ธ Optional | Enable for CPU temperature monitoring | | `stop_grace_period` | ๐Ÿ“ Recommended | Ensures graceful data save on container stop | # Start service docker-compose up -d # View logs docker-compose logs -f ``` **Access:** http://localhost:3000 --- **Method B: Build Locally** ```bash # 1. Clone project git clone https://github.com/cropflre/NOWEN.git cd NOWEN # 2. Build and start docker-compose up -d --build # 3. View logs docker-compose logs -f ``` **Method C: Docker Run Command** ```bash # Run container directly docker run -d \ --name nowen \ --restart unless-stopped \ -p 3000:3000 \ -v $(pwd)/nowen-data:/app/server/data \ -v /:/host:ro \ -v /proc:/host/proc:ro \ -v /sys:/host/sys:ro \ -v /var/run/docker.sock:/var/run/docker.sock \ -e NODE_ENV=production \ -e SI_FILESYSTEM_DISK_PREFIX=/host \ -e PROC_PATH=/host/proc \ -e SYS_PATH=/host/sys \ -e FS_PATH=/host \ --privileged \ cropflre/nowen:latest ``` **Common Commands** ```bash # Stop service docker-compose down # Restart service docker-compose restart # View logs docker-compose logs -f # Update to latest version docker-compose pull docker-compose up -d # Check container status docker ps ``` **System Monitoring Notes** To enable full system monitoring, you need: 1. Mount host filesystem (read-only) 2. Mount `/proc` and `/sys` directories 3. Mount Docker socket (for container monitoring) 4. Use `privileged` mode (for temperature and hardware info) If system monitoring is not needed, remove the related mounts and environment variables, keeping only the data directory mount. --- ### Option 3: Synology NAS 1. Install **Container Manager** from Package Center 2. Create `/docker/nowen` directory 3. Clone or upload project files 4. In Container Manager: Projects โ†’ Add โ†’ Select `docker-compose.yml` 5. Access: `http://NAS_IP:3000` > โš ๏ธ **Update Reminder**: Always backup your data before updating images through Synology Container Manager! --- ### Option 4: UGREEN NAS 1. Enable Docker in App Center 2. Create `/docker/nowen` directory 3. Upload project files via File Manager 4. In Docker app: Compose โ†’ Add โ†’ Select project path 5. Access: `http://NAS_IP:3000` > **Important**: When configuring Docker, manually specify the data volume path (e.g., `/docker/nowen/data:/app/server/data`). Do NOT rely on "auto configure storage" โ€” it may not reuse old volumes during container updates, causing data loss. > โš ๏ธ **Update Reminder**: Always backup your data before updating images through UGREEN Docker GUI! The "Version Check & Update" feature deletes the old container and creates a new one, which may cause data loss if using "auto configure storage". --- ### Option 5: fnOS ```bash ssh root@NAS_IP cd /vol1/1000/docker git clone https://github.com/cropflre/NOWEN.git nowen cd nowen docker-compose up -d --build ``` Access: `http://NAS_IP:3000` --- ### Option 6: QNAP NAS 1. Install **Container Station** from App Center 2. Create `/Container/nowen` directory 3. Upload project files 4. In Container Station: Applications โ†’ Create โ†’ Docker Compose 5. Access: `http://NAS_IP:3000` > โš ๏ธ **Update Reminder**: Always backup your data before updating images through QNAP Container Station! --- ### Option 7: Extreme Space NAS ```bash ssh root@NAS_IP cd /Volume1/docker git clone https://github.com/cropflre/NOWEN.git nowen cd nowen docker-compose up -d --build ``` Access: `http://NAS_IP:3000` > โš ๏ธ **Update Reminder**: Always backup your data before updating images through Extreme Space Docker GUI! --- ### Option 8: ARM64 SBC (RK3588/RK3576/RK3566) > For Rockchip RK3588, RK3576, RK3566 and other ARM64 single-board computers, as well as Apple Silicon (M1/M2/M3) devices #### Prerequisites - ARM64 architecture device (`aarch64`) running Linux (Ubuntu/Debian/Armbian, etc.) - Docker and Docker Compose installed ```bash # Verify architecture uname -m # Should output: aarch64 # Install Docker (if not already installed) curl -fsSL https://get.docker.com | sh sudo usermod -aG docker $USER ``` #### Installation Steps **Method A: Using Docker Hub Image (Recommended)** ```bash # Pull image (Docker will automatically pull the arm64 version) docker pull cropflre/nowen:latest # Create project directory mkdir -p ~/nowen && cd ~/nowen # Create docker-compose.yml cat > docker-compose.yml << 'EOF' services: nowen: image: cropflre/nowen:latest container_name: nowen restart: unless-stopped ports: - "3000:3000" volumes: - ./nowen-data:/app/server/data # System monitoring mounts (optional, recommended for ARM device monitoring) - /:/host:ro - /proc:/host/proc:ro - /sys:/host/sys:ro - /var/run/docker.sock:/var/run/docker.sock environment: - NODE_ENV=production - SI_FILESYSTEM_DISK_PREFIX=/host - PROC_PATH=/host/proc - SYS_PATH=/host/sys - FS_PATH=/host privileged: true EOF # Start docker compose up -d # View logs docker compose logs -f ``` **Method B: Build Locally on ARM64 Device** ```bash # Clone project git clone https://github.com/cropflre/NOWEN.git cd NOWEN # Build and start (Docker will automatically build for current arm64 architecture) docker compose up -d --build # Verify architecture in logs docker compose logs | grep "Architecture" # Should output: Architecture: aarch64 ``` **Method C: Cross-Platform Build (Build ARM64 Image on x86 PC)** If you want to build ARM64 images on an x86 computer and transfer to ARM devices: ```bash # Clone project git clone https://github.com/cropflre/NOWEN.git cd NOWEN # Use multi-arch build script chmod +x build-multiarch.sh # Build and push to Docker Hub (requires docker login first) ./build-multiarch.sh --tag yourrepo/nowen # Or build for current architecture only and load locally ./build-multiarch.sh --load ``` **Access:** `http://DEVICE_IP:3000` #### ARM64 Performance Tips | Device | Recommendation | | --- | --- | | **RK3588** (8-core/8GB+) | Full features, all monitoring components enabled | | **RK3576** (8-core/4GB+) | Enable Lite Mode, disable meteor effects | | **RK3566** (4-core/2GB+) | Enable Lite Mode, disable some monitoring cards | > ๐Ÿ’ก **Tip**: Enable "Lite Mode" in Admin โ†’ Site Settings to significantly reduce CPU/GPU usage, ideal for ARM devices. #### ARM64 FAQ **Q: `docker pull` shows `no matching manifest for linux/arm64`?** A: The ARM64 image version may not be published yet. Use Method B to build locally on the device. **Q: `npm install` is very slow during build?** A: ARM64 native module compilation is slower than x86. RK3588 takes about 3-5 minutes, RK3566 about 8-15 minutes. Use a China npm mirror for acceleration: ```bash # Add before npm install in Dockerfile RUN npm config set registry https://registry.npmmirror.com ``` **Q: System monitoring can't read CPU temperature?** A: Ensure `privileged: true` is set and `/sys` is mounted. Temperature node paths vary between SBCs, but `systeminformation` auto-adapts for most ARM SoCs. --- ## ๐Ÿ”ง Docker Deployment Configuration ### Port Mapping | Port | Purpose | | ---- | ------------------------------------ | | 3000 | Web UI (Nginx reverse proxies both frontend and API) | | 3001 | Backend API (internal port, no need to expose) | > NOWEN uses Nginx to serve both the frontend and API on port 3000. **You only need to map port 3000**. ### Data Persistence Database file is located at `/app/server/data/zen-garden.db` inside the container. **Warning**: You MUST map this directory to a fixed host path, otherwise data will be lost when the container is recreated/updated! ```yaml volumes: # Recommended: use host bind mount (data survives container updates) - ./nowen-data:/app/server/data # Or NAS users specify an absolute path # - /volume1/docker/nowen/data:/app/server/data ``` > **NAS Users Note**: UGREEN/fnOS and other NAS Docker UIs with "auto configure storage" may not reuse old data volumes when updating containers. Always manually specify a host path. NOWEN has built-in triple data protection: auto-backup on startup, process exit save, and 30-second periodic flush. > โš ๏ธ **NAS Docker Update Warning**: When updating images through NAS built-in Docker GUI tools (UGREEN, Synology, QNAP, fnOS, Extreme Space, etc.), **always backup your data first!** These tools may delete the old container and recreate it, causing data loss if the volume is not properly bind-mounted to a fixed host path. Export a backup from NOWEN's Admin Panel or copy the `zen-garden.db` file before updating. ### System Monitoring Configuration To enable full hardware monitoring, use the following mounts and configuration: ```yaml volumes: # Mount host root filesystem (read-only) for filesystem info - /:/host:ro # Mount proc filesystem for CPU, memory, process info - /proc:/host/proc:ro # Mount sys filesystem for temperature, hardware info - /sys:/host/sys:ro # Mount Docker socket for container monitoring - /var/run/docker.sock:/var/run/docker.sock environment: # Tell systeminformation to read filesystem from /host - SI_FILESYSTEM_DISK_PREFIX=/host - PROC_PATH=/host/proc - SYS_PATH=/host/sys - FS_PATH=/host # Privileged mode: allows reading CPU temperature, SMART disk info privileged: true ``` **Notes**: - Remove these configurations if system monitoring is not needed - Windows and macOS Docker Desktop runs in a VM and can only read VM info - Deploy on a Linux host for the best experience ### Environment Variables | Variable | Default | Description | | ------------------------- | ---------- | ------------------------ | | NODE_ENV | production | Runtime environment | | PORT | 3001 | Backend port (usually no need to change) | | SI_FILESYSTEM_DISK_PREFIX | /host | Filesystem path prefix | | PROC_PATH | /host/proc | proc filesystem path | | SYS_PATH | /host/sys | sys filesystem path | | FS_PATH | /host | Filesystem root path | --- ## ๐Ÿ“ก API Reference ### Bookmarks API | Method | Path | Auth | Description | | ------ | -------------------------- | ---- | ----------------------- | | GET | `/api/bookmarks` | โŒ | Get all bookmarks | | GET | `/api/bookmarks/paginated` | โŒ | Get paginated bookmarks | | POST | `/api/bookmarks` | โœ… | Create bookmark | | PATCH | `/api/bookmarks/:id` | โœ… | Update bookmark | | DELETE | `/api/bookmarks/:id` | โœ… | Delete bookmark | | PATCH | `/api/bookmarks/reorder` | โœ… | Reorder bookmarks | | GET | `/api/bookmarks/tags` | โŒ | Get all tags | | GET | `/api/bookmarks/tags/stats` | โŒ | Get tag usage stats | | PATCH | `/api/bookmarks/tags/rename` | โœ… | Rename tag | | DELETE | `/api/bookmarks/tags/:name` | โœ… | Delete tag | ### Categories API | Method | Path | Auth | Description | | ------ | ------------------------ | ---- | ------------------ | | GET | `/api/categories` | โŒ | Get all categories | | POST | `/api/categories` | โœ… | Create category | | PATCH | `/api/categories/:id` | โœ… | Update category | | DELETE | `/api/categories/:id` | โœ… | Delete category | | PATCH | `/api/categories/reorder`| โœ… | Reorder categories | ### Admin API | Method | Path | Auth | Description | | ------ | ---------------------------- | ---- | ------------------- | | POST | `/api/admin/login` | โŒ | Login (returns JWT) | | POST | `/api/admin/logout` | โœ… | Logout | | GET | `/api/admin/verify` | โœ… | Verify token | | POST | `/api/admin/change-password` | โœ… | Change password | | POST | `/api/admin/change-username` | โœ… | Change username | ### Visit Analytics API | Method | Path | Auth | Description | | ------ | -------------------- | ---- | ------------------------ | | POST | `/api/visits/track` | โŒ | Track bookmark visit | | GET | `/api/visits/stats` | โœ… | Get visit stats overview | | GET | `/api/visits/top` | โœ… | Get top bookmarks | | GET | `/api/visits/trend` | โœ… | Get visit trend by day | | GET | `/api/visits/recent` | โœ… | Get recent visits | | DELETE | `/api/visits/clear` | โœ… | Clear all visit data | ### Health Check API | Method | Path | Auth | Description | | ------ | -------------------- | ---- | ------------------------------------ | | POST | `/api/health-check` | โœ… | Batch check bookmark link health | | POST | `/api/health-check/single` | โœ… | Single link health check | ### AI API | Method | Path | Auth | Description | | ------ | ----------------------------- | ---- | ---------------------------------- | | GET | `/api/ai/status` | โŒ | Get AI configuration status | | POST | `/api/ai/categorize` | โŒ | AI smart categorize single bookmark | | POST | `/api/ai/chat` | โŒ | AI chat assistant | | POST | `/api/ai/batch-tags` | โœ… | Batch AI smart tags | | GET | `/api/ai/batch-tags-status` | โœ… | Query batch tags progress | | POST | `/api/ai/batch-classify` | โœ… | Batch AI smart classify | | GET | `/api/ai/batch-classify-status` | โœ… | Query batch classify progress | | POST | `/api/ai/batch-enrich` | โœ… | Batch AI metadata & icons | | GET | `/api/ai/batch-enrich-status` | โœ… | Query batch enrich progress | | GET | `/api/ai/config` | โœ… | Get AI config (API key masked) | | PUT | `/api/ai/config` | โœ… | Save AI config | | POST | `/api/ai/test` | โœ… | Test AI connection | | POST | `/api/ai/generate-quotes` | โœ… | AI generate quotes | ### Other APIs | Method | Path | Auth | Description | | ------ | -------------------- | ---- | ------------------- | | POST | `/api/metadata` | โŒ | Fetch URL metadata | | GET | `/api/settings` | โŒ | Get site settings | | PATCH | `/api/settings` | โœ… | Update settings | | GET | `/api/system/info` | โŒ | Get system info | | GET | `/api/system/stats` | โŒ | Get real-time stats | | GET | `/api/system/network`| โŒ | Get network info | | GET | `/api/system/processes` | โŒ | Get process list | | GET | `/api/export` | โœ… | Export data (JSON) | | POST | `/api/import` | โœ… | Import data (JSON) | | GET | `/api/import/enrich-status` | โœ… | Query icon fetch progress after import | | POST | `/api/factory-reset` | โœ… | Factory reset | ### Backup API | Method | Path | Auth | Description | | ------ | ----------------------------- | ---- | ---------------------------------------- | | GET | `/api/backup/config` | โœ… | Get WebDAV config (password masked) | | POST | `/api/backup/config` | โœ… | Save WebDAV config | | POST | `/api/backup/test` | โœ… | Test WebDAV connection | | POST | `/api/backup/now` | โœ… | Execute WebDAV backup immediately | | GET | `/api/backup/list` | โœ… | List remote backup files | | POST | `/api/backup/restore` | โœ… | Restore data from remote backup | | DELETE | `/api/backup/file/:filename` | โœ… | Delete remote backup file | | GET | `/api/backup/status` | โœ… | Get auto backup status | | GET | `/api/backup/local/download` | โœ… | Download local JSON backup | | GET | `/api/backup/local/download-db` | โœ… | Download raw .db database file | | POST | `/api/backup/local/upload-db` | โœ… | Upload .db file restore (with validation and rollback) | ### Logs API | Method | Path | Auth | Description | | ------ | ------------- | ---- | ------------------------ | | GET | `/api/logs` | โœ… | Get system logs (paged) | | DELETE | `/api/logs` | โœ… | Clear all logs | --- ## โŒจ๏ธ Keyboard Shortcuts | Shortcut | Function | | ------------ | ----------------------- | | `โŒ˜/Ctrl + K` | Open Spotlight search | | `โŒ˜/Ctrl + N` | Quick add bookmark | | `Esc` | Close current modal | | `โ†‘/โ†“` | Navigate search results | | `Enter` | Confirm selection | --- ## โ“ FAQ ### ๐Ÿ”ง Installation & Deployment **Q: What are the hardware requirements?** A: NOWEN has low hardware requirements. Recommended configurations: | Device Type | Recommended Config | Description | |--------------|-------------------|-------------| | x86 Server | 2 cores/4GB+ | Full features, all effects and monitoring supported | | ARM64 (RK3588) | 8 cores/8GB+ | Full features, sufficient SBC performance | | ARM64 (RK3576) | 8 cores/4GB+ | Lite mode recommended, disable complex animations | | ARM64 (RK3566) | 4 cores/2GB+ | Lite mode required, can disable some monitor cards | | Raspberry Pi 4B | 4 cores/4GB+ | Runs smoothly in lite mode | > ๐Ÿ’ก **Performance Tip**: Admin โ†’ Site Settings โ†’ Lite Mode can reduce CPU/GPU usage by 60%+ **Q: Docker build fails?** A: Use pre-built image from Docker Hub: ```bash docker pull cropflre/nowen:latest ``` **Q: Cannot access after container starts?** A: Check if ports are occupied: ```bash lsof -i :3000 ``` **Q: Data lost after update?** A: Ensure you have configured the data volume mount correctly. The database is in `/app/server/data`. Use a bind mount like `./nowen-data:/app/server/data`. NAS Docker UI "auto configure storage" may not reuse old volumes during container updates โ€” always manually specify the host path. ### System Monitoring Issues **Q: No hardware monitoring data?** A: Ensure correct mounts in docker-compose.yml: ```yaml volumes: - /:/host:ro - /proc:/host/proc:ro - /sys:/host/sys:ro - /var/run/docker.sock:/var/run/docker.sock privileged: true ``` **Q: Can Windows/macOS Docker see real hardware info?** A: No. Docker Desktop runs in a VM and can only read VM info. Deploy on Linux host for best experience. ### Usage Issues **Q: Forgot admin password?** A: Use factory reset or delete database file to reinitialize. **Q: Bookmark icons not showing?** A: Some sites have hotlink protection. Upload custom icons instead. **Q: How to backup data?** A: 1. Admin โ†’ Data Management โ†’ Export JSON backup or download .db database file 2. Configure WebDAV cloud backup for automatic scheduled backups (supports Nutstore/Synology/UGREEN/Alist) 3. Or directly copy the `zen-garden.db` file from the mounted data directory on host **Q: Data lost after container update?** A: Make sure you manually specified the data volume mount path when creating the container, e.g., `-v /your/path:/app/server/data`. UGREEN and other NAS "auto configure storage" may not reuse old volumes during updates โ€” always use a fixed host path. > โš ๏ธ **NAS Docker Update Warning**: When updating images through NAS built-in Docker GUI tools (UGREEN Docker, Synology Container Manager, QNAP Container Station, fnOS Docker, Extreme Space Docker, etc.), **always backup your data first!** These tools may delete the old container and create a new one during the update process, which can result in data loss if volumes are not properly mounted to a fixed host path. Before updating: > 1. Export a JSON backup via NOWEN's Admin Panel โ†’ Data Management > 2. Or trigger a manual WebDAV cloud backup > 3. Or directly copy the `zen-garden.db` file from your host data directory **Q: How to update to latest version?** A: > โš ๏ธ **Backup your data before updating!** Especially if you're using NAS built-in Docker GUI tools, the update process may cause data loss. ```bash # 1. Backup data first (important!) cp -r ./nowen-data ./nowen-data-backup-$(date +%Y%m%d) # 2. Pull latest image docker-compose pull # 3. Restart container docker-compose up -d ``` --- ## ๐Ÿ“ Changelog ### v0.2.2 (2026-03-09) #### โœจ New Features - **Monitor Widget Size Preset S/M/L**: One-click switch all monitor widget display sizes - S (Mini Summary): All widgets force-collapsed, showing only title bar + key metrics summary, BentoGrid rowSpan=1 - M (Default): No override, users can individually collapse/expand each widget, BentoGrid rowSpan=2 - L (Expanded): All widgets force-expanded with full content, BentoGrid rowSpan=2 - Toggle buttons located at the right side of widget area title bar, using Minimize2/Square/Maximize2 icons - Settings persisted to database via API, preserved across page refreshes - **AI Auto-Trigger Toggle**: New "Auto AI Categorize" switch in AI settings - Controls whether AI smart categorization and tag generation auto-triggers when adding bookmarks - Enabled by default (backward compatible), can be disabled in settings - **AI Timeout Configuration**: New timeout parameter in AI settings panel - Supports 10-300 seconds custom setting - Local models (e.g., Ollama) recommend 60-120s, cloud APIs default 30s - **Multi-Keyword Search**: Bookmark management search supports multi-keyword AND search - Keywords split by spaces, each keyword must match - Searches across title, URL, description, and tags - **Batch Task Progress Recovery**: Auto-resume running AI batch task progress after page refresh - New `GET /api/ai/batch-status` endpoint for unified batch status query - Frontend auto-detects and resumes polling on load - **Unified Tags Utility Module**: Extracted `tags.ts` utility for unified tag parsing and serialization - Compatible with both legacy JSON array format and comma-separated format - Merge tags with deduplication (`mergeTags`) #### ๐Ÿ”’ Security Enhancements - **AI API Auth Protection**: `/api/ai/categorize` and `/api/ai/chat` changed from public to authenticated - Prevents unauthorized users from abusing AI API quota - Prevents unauthenticated users from exposing bookmark data via AI chat #### ๐Ÿ› Bug Fixes - Fixed admin login state loss on page refresh (`isLoggedIn` now synchronously initialized from localStorage to avoid race condition redirect) - Fixed public API 401 responses incorrectly clearing existing auth token (now only clears on `requireAuth` requests) - Fixed bookmark deletion not cascading to associated visit records ### v0.2.1 (2026-03-03) #### โœจ New Features - **WebDAV Cloud Backup**: Cloud data backup & restore via WebDAV protocol - Supports Nutstore, Synology, UGREEN, Alist and other WebDAV services - Configurable automatic scheduled backups (via node-cron) - One-click backup, remote backup list, remote restore, remote delete - Download local JSON backup or raw .db database file - Upload .db file restore (with validation and rollback) - **Data Management Merge**: Consolidated data management into the backup page for unified entry - **NAS Update Backup Warning**: Added NAS Docker update warning banner in data management page - **Data Persistence Enhancement**: Triple data protection mechanism - Auto-backup database on startup (keeps last 5), auto-restore from backup if DB missing - Auto-save on process exit (SIGINT/SIGTERM/uncaughtException) - Dirty data auto-flush every 30 seconds - **Documentation Card**: New DocsCard in admin panel with embedded project documentation - **AI Quote Generation**: Generate themed quotes via AI in quote management - Customizable generation count and theme keywords - Select from results and add to quote library in one click - New `POST /api/ai/generate-quotes` API endpoint - **Hash Router**: Lightweight hash-based routing for admin panel - Zero-dependency routing based on `window.location.hash` - Supports browser forward/back navigation and direct URL entry - Route mapping: `#/admin` โ†’ bookmarks, `#/admin/{tab}` โ†’ specific admin tab - New `useHashRouter.ts` hook with unified `AdminTabType` type definition #### ๐Ÿ› Bug Fixes - Fixed data loss after Docker container update (docker-compose switched to bind mount) - Fixed missing `webdav` and `node-cron` dependencies in Docker container causing startup failure - Fixed reverse proxy Nginx example configuration (no need to separately proxy `/api` to port 3001) ### v0.2.0 (2026-02-26) #### โœจ New Features - **ARM64 Multi-Architecture Support**: Docker images now support both linux/amd64 and linux/arm64 - Compatible with Rockchip RK3588, RK3576, RK3566 ARM64 SBCs - Supports Apple Silicon (M1/M2/M3) devices - Dockerfile auto-installs ARM64 native module build toolchain (python3/make/g++), auto-cleaned after build - New `build-multiarch.sh` multi-arch one-click build script - Prints CPU architecture on startup for environment verification - **AI Smart Tags**: Automatically generate matching tags when adding bookmarks via AI - Auto-triggers AI magic after URL analysis completes (no manual click needed) - Auto-fills tags + category + optimized description - New AI settings panel and tag management panel - **Batch AI Smart Classify**: Batch assign categories to selected bookmarks via AI - Auto-create new categories if no existing match - Also updates tags and descriptions alongside classification - Async processing with concurrent workers (2), real-time progress polling - **Batch AI Metadata & Icons**: One-click batch optimize bookmark metadata via AI - Optimizes title (removes SEO suffixes, preserves brand name) - Generates concise description, recommends 3-5 tags - Recommends Iconify icons (simple-icons brand icons preferred, mdi, lucide) - Multi-language output: follows current UI language (Chinese/English) - **AI Chat Assistant**: Smart bookmark assistant for search and discovery - Semantic search across all bookmarks - Context-aware responses with referenced bookmark cards - **Bookmark Tag Display**: Colorful tag pills displayed on bookmark cards - 8 soft color variations based on tag name hash (blue/green/amber/red/violet/pink/cyan/lime) - Tags shown on both category and pinned bookmark cards - Shows up to 3 tags with +N overflow indicator #### ๐Ÿ”’ Security Enhancements - **Bookmark/Category API Authentication**: All write operations (POST/PATCH/DELETE) now require login - 10 backend routes protected with authMiddleware (6 bookmark + 4 category) - 10 frontend API functions added requireAuth, GET endpoints remain public - **Frontend Permission Control**: Unauthenticated users can only browse, all write entry points hidden - Hide Dock "Add Bookmark" and "AI Assistant" buttons - Hide category title edit button (pencil icon) - Hide empty state "Add First Bookmark" button - Disable Ctrl+N (add bookmark) and Ctrl+J (AI assistant) shortcuts - Disable bookmark drag-and-drop sorting for unauthenticated users #### ๐Ÿ› Bug Fixes - Fixed AI smart tags storage format inconsistency causing display as `#["Google"]` - Fixed import backup tags field type validation failure (compatible with both string and array formats) - Fixed HTML export then import putting all bookmarks under site name category (skip PERSONAL_TOOLBAR_FOLDER level) - Fixed page not refreshing after successfully adding a bookmark (auto-call refreshData after save) - Fixed DndContext sensors array size change causing React warning ### v0.1.9 (2026-02-25) #### โœจ New Features - **Mobile Energy Orb Free Dragging**: Mobile floating navigation orb supports free dragging to any screen position - Native drag via Pointer Events with 6px threshold to distinguish drag from click - Position persisted via localStorage, auto-restored on next visit - Blue glow + micro-scale visual feedback during drag - Tap to expand petal-style menu with haptic vibration feedback (`navigator.vibrate`) - **Mobile Bottom Status Bar**: New fixed bottom status bar with integrated system monitoring Ticker - Real-time system status (CPU/Memory/Network speed) via `leftSlot` slot - Glassmorphism blur background, iOS safe area support (`safe-area-inset-bottom`) - Energy orb and bottom bar are fully independent - **Desktop Dock Free Dragging**: Desktop floating Dock supports dragging to any position - Position persisted via localStorage (key: `desktop-dock-pos`), defaults to bottom center - Glowing border feedback during drag, cursor changes to `grabbing` - macOS-style magnetic magnification effect (fisheye zoom) - **Mobile Bento Single Column**: Mobile bookmark grid changed from two columns to single column for better readability - **Monitor Tri-Mode Switching**: Mini capsule / Ticker bar / Full dashboard seamless switching - View mode persisted via localStorage - Smooth scale + fade + slide transition animations between modes - **Widget Size Preset S/M/L**: Mini summary / Default / Expanded one-click switching, settings auto-persisted - **Dashboard Light Mode Transparency**: Monitor dashboard background fully transparent in light mode, blending with page - DataBlock sub-card backgrounds synchronized to transparent, border opacity reduced to 30% #### ๐Ÿ› Bug Fixes - Fixed mobile energy orb tap not expanding menu (removed `preventDefault` interference) - Fixed mobile mini mode status bar not centered - Optimized progress bar animation performance, switched from Framer Motion to native CSS Transition --- ### v0.1.8 (2026-02-24) #### โœจ New Features - **SunPanel Data Import Compatibility**: Support direct import of SunPanel exported JSON configuration files - Auto-detect SunPanel format (`appName: "Sun-Panel-Config"`) - SunPanel categories โ†’ NOWEN categories with auto-assigned colors - Bookmark field mapping: `title`/`url`/`lanUrl`(โ†’`internalUrl`)/`description`/`icon.src`(โ†’`iconUrl`) - SunPanel-specific confirmation dialog showing version and export time - Full i18n support (Chinese/English) - **Auto-Fetch Bookmark Icons After Import**: Automatically detect bookmarks missing favicons during import - Async batch metadata fetching (favicon/ogImage) after import, non-blocking - Concurrency limited to 3 requests to avoid overloading target sites - Frontend polls fetch progress in real-time, auto-refreshes on completion - Toast notifications for fetch progress and results - Skips icon fetching when importing more than 50 bookmarks to avoid excessive requests - **Admin Username Change**: Security settings now support changing admin account username - **Category Collapse Threshold**: Categories with 100+ bookmarks show first 8 with "Show More" button - **Admin Numeric Pagination**: Bookmark management page switched from scroll pagination to numeric pagination (20 per page) #### ๐Ÿ› Bug Fixes - Fixed `internalUrl` field not being written to database during import - Fixed import schema incompatible with number type `createdAt`/`updatedAt` - Fixed `validateBody` crash due to missing defensive check on `result.error.errors.map()` - Fixed dark mode theme switch not syncing without page refresh (unified ThemeContext) - Improved Engine Room / Vital Signs card text clarity and dark mode adaptation --- ### v0.1.7 (2026-02-11) #### โœจ New Features - **Wallpaper Background**: Custom page background image - 5 image sources: local upload/drag, URL, Picsum random, Lorem Picsum, Bing daily wallpaper - Blur slider (0-20px) via CSS `filter: blur()` - Overlay slider (0-100%) semi-transparent black layer - Live preview with blur + overlay effects - Wallpaper layer rendered independently, aurora/beam effects visible on top - New wallpaper settings tab in admin panel (violet gradient icon) - Disabled by default, no impact on existing deployments - Full i18n support (Chinese/English) #### ๐Ÿ› Bug Fixes - Fixed background beam effects disappearing when scrolling to page bottom (background layers switched to `fixed` positioning) - Restored beam collision explosion particle effects (using `useAnimationFrame` for precise collision detection) - Replaced discontinued `source.unsplash.com` with working Picsum/Bing image sources --- ### v0.1.6 (2026-02-11) #### โœจ New Features - **Footer Filing Information Display**: New footer text configuration in site settings - Text input in site settings for ICP filing info - HTML rendering support (e.g., ICP number with links) - Auto-display at homepage bottom, hidden when empty - Full i18n support (Chinese/English) - **Internal/External URL Auto-Switching**: Dual URL support for bookmarks - New internal URL field for bookmarks with collapsible input - Auto-detect network environment (internal/external) - Hostname-based detection: private IP ranges (10.x / 172.16-31.x / 192.168.x) and internal domain suffixes (.local / .lan / .internal / .corp / .home) - All bookmark-opening entry points adapted for dual URL logic (15 components, 18+ window.open calls) - Auto-expand internal URL input when editing bookmarks with existing internal URLs - Full i18n support (Chinese/English) --- ### v0.1.5 (2026-02-11) #### โœจ New Features - **Link Health Check (Dead Link Detection)**: Complete bookmark link accessibility check - Batch check all bookmark links (concurrency 5, 10s timeout) - 4 status types: OK / Error / Timeout / Redirect - Smart request strategy: HEAD first, fallback to GET for 405/403 - Summary card: total, counts per status, average response time - Filter by status type - Response time color indicators (green <1s / yellow <3s / red >3s) - HTTP status code color labels (2xx/3xx/4xx/5xx) - One-click delete dead links (error and timeout bookmarks, with confirmation) - Full i18n support (Chinese/English) --- ### v0.1.4 (2026-02-10) #### โœจ New Features - **Visit Analytics**: Complete bookmark visit data analysis - Automatic bookmark click tracking - Total visits, today's visits, active bookmarks statistics - Top bookmarks ranking (filter by day/week/month/all) - 7-day visit trend chart - Recent visits history - One-click clear all visit data #### ๐Ÿ› Bug Fixes - Fixed sql.js parameter binding issue, using queryAll/queryOne/run utility functions - Optimized light mode styling for analytics card --- ### v0.1.3 (2026-02-10) #### โœจ New Features - **Quick Add Category in Bookmark Modal**: Create new categories directly while adding/editing bookmarks - Inline category creation form, no navigation needed - 10 preset color picker - Auto-select newly created category - Real-time category list refresh #### ๐Ÿ› Bug Fixes - Fixed bookmark management page showing blank after successful backup import - Auto redirect to homepage after successful import - Fixed login state not cleared after factory reset - Fixed database being reset after Docker update (using absolute path) - Fixed light mode create category button style issue --- ### v0.1.2 (2026-02-05) #### โœจ New Features - **Menu Visibility Control**: Backend site settings now include menu show/hide toggles - Language toggle button visibility - Theme toggle button visibility - Supports both desktop Dock and mobile floating dock --- ### v0.1.1 (2026-02-04) #### โœจ New Features - **Frontend Category Editing**: Edit/create/delete categories directly on homepage - **Quick Navigation Sidebar**: Auto-display category nav with smart highlighting - **Weather Display**: Real-time weather via Open-Meteo API - **Lunar Calendar**: Lunar date, solar terms, traditional festivals - **Lite Mode**: Performance-first experience, disable all animations - **Quick Theme Switch**: Day/Night mode toggle in Dock menu #### ๐Ÿ”’ Security Enhancements - Admin page secondary login verification - Force password change page login state check - Bookmark/category write API endpoints require authentication - Hide add bookmark, edit category, and AI assistant entry points when not logged in #### ๐Ÿ› Bug Fixes - Fixed sidebar collapse button cutoff - Fixed Zod v4 import bookmark schema compatibility - Fixed nested object settings storage during import - Fixed CPU/GPU overheating issues (Lite Mode) --- ### v0.1.0 (2026-02-03) #### ๐ŸŽ‰ Initial Release **Core Features** - โœจ Bookmark management (CRUD, drag sort, virtual scroll) - โœจ Category management (custom names, icons, colors) - โœจ Icon management (custom icon upload) - โœจ Quote management (custom + system default toggle) - โœจ Spotlight search (multi-engine, bookmark search) - โœจ Read later (Hero card, read mark) - โœจ Pin feature (Bento Grid layout) - โœจ Context menu (quick operations) **System Monitoring** - โœจ Real-time hardware monitoring (CPU, RAM, Disk, Network, Processes) - โœจ 5 monitor cards (System, Hardware ID, Vital Signs, Network, Process Matrix) - โœจ Dock mini monitor (Desktop, freely draggable + position memory) - โœจ Ticker scroll bar (Mobile, integrated into energy orb bottom bar) - โœจ Monitor tri-mode switching (mini capsule / ticker / full dashboard) - โœจ Widget visibility control **Theme System** - โœจ 8 preset themes (4 dark + 4 light) - โœจ Circle expand transition animation - โœจ Auto mode (follow system or time-based) - โœจ 20+ CSS variables **Admin Panel** - โœจ Complete admin system - โœจ Site settings (custom name and icon) - โœจ Theme settings (8 themes) - โœจ Widget settings (visibility, Beam toggle) - โœจ Security (password change with strength indicator) - โœจ Data management (import/export, factory reset) **Visual Design** - โœจ Day/Night dual mode - โœจ Glassmorphism design - โœจ Border Beam effect - โœจ 3D card mouse tracking - โœจ Spotlight effect - โœจ Meteor and Aurora effects - โœจ Physics bounce Toast **Deployment** - โœจ Docker containerization (amd64 + arm64 multi-arch) - โœจ GitHub Actions CI/CD - โœจ Docker Hub official image - โœจ Multi-NAS platform support - โœจ ARM64 SBC support (RK3588/RK3576/RK3566) --- ## ๐ŸŽฏ Roadmap #### ๐Ÿ”œ Short-term - [ ] Multi-user support & permission management (role-based access, independent bookmark libraries, shared categories) - [ ] Browser extensions (Chrome/Firefox/Edge, one-click save current page, quick bookmark search) - [ ] Bookmark sharing (shareable links, public category pages, QR code sharing) - [ ] PWA offline support (offline bookmark access, Service Worker caching, install to homescreen) #### ๐Ÿ“‹ Mid-term - [ ] WebDAV cross-device sync (cross-device bookmark sync, auto conflict merge) - [ ] Mobile App (React Native / Flutter, push notifications, home screen widgets) - [ ] Bookmark folders & nested groups (multi-level folders, breadcrumb navigation, tree-view drag & drop) - [ ] RSS / site update monitoring (subscribe to bookmarked site RSS, new content push, unread count badges) - [ ] AI smart recommendations (suggest similar bookmarks based on browsing habits, discover new sites, smart dedup) #### ๐Ÿ”ฎ Long-term - [ ] More theme colors (community theme store, custom CSS variable editor) - [ ] System monitoring alerts (CPU/memory/temperature threshold alerts, Email/Webhook/Telegram notifications) - [ ] Custom monitoring metrics (custom API probes, port detection, SSL certificate expiry reminders) - [ ] Team collaboration workspace (shared bookmark libraries, comments & annotations, operation audit logs) - [ ] Plugin system (third-party plugin marketplace, custom component mounting, API Hook extensions) - [ ] Multi-language expansion (Japanese/Korean/French community translations, i18n contribution guide) #### โœ… Implemented - [x] ~~Access statistics~~ โœ… v0.1.4 Implemented - [x] ~~Link health check~~ โœ… v0.1.5 Implemented - [x] ~~Custom wallpaper background~~ โœ… v0.1.7 Implemented - [x] ~~Bookmark tag system~~ โœ… v0.2.0 Implemented (AI smart tags + colorful tag pills) - [x] ~~AI smart classify & metadata~~ โœ… v0.2.0 Implemented (batch AI classify/metadata/icons) - [x] ~~AI chat assistant~~ โœ… v0.2.0 Implemented (semantic search + bookmark cards) - [x] ~~WebDAV cloud backup~~ โœ… v0.2.1 Implemented (WebDAV cloud + local backup + scheduled auto backup) --- ## ๐Ÿš€ Quick Start ```bash # Using Docker Hub image (Recommended) docker pull cropflre/nowen:latest docker run -d -p 3000:3000 -v ./nowen-data:/app/server/data --name nowen cropflre/nowen:latest # Access # http://localhost:3000 # Default admin credentials # Username: admin # Password: admin123 ``` --- ## ๐Ÿ“„ License MIT License --- ## ๐Ÿค Contributing Contributions are welcome! Please feel free to submit Issues and Pull Requests. 1. Fork the repository 2. Create feature branch (`git checkout -b feature/AmazingFeature`) 3. Commit changes (`git commit -m 'Add some AmazingFeature'`) 4. Push to branch (`git push origin feature/AmazingFeature`) 5. Open a Pull Request --- ## โ˜• Sponsor If this project saved you time, you're welcome to buy the author a coffee / a keyboard / a bug fix ๐Ÿ™Œ

WeChat Sponsor QR Code

--- ## ๐Ÿ™ Acknowledgments - [React](https://react.dev/) - [Tailwind CSS](https://tailwindcss.com/) - [Framer Motion](https://www.framer.com/motion/) - [Lucide Icons](https://lucide.dev/) - [sql.js](https://sql.js.org/) - [systeminformation](https://github.com/sebhildebrandt/systeminformation) - [dnd-kit](https://dndkit.com/) --- ## ๐ŸŒŸ Star History If this project helps you, please give it a โญ Star! ---

Made with โค๏ธ by cropflre