mirror of
https://github.com/DumbWareio/DumbAssets.git
synced 2026-01-09 06:10:52 +08:00
Changes Made
Updated HTML Template (public/index.html):
Added a new form group with a link field (subAssetLink) to the sub-asset modal
Positioned it between the purchase price and warranty scope fields for logical flow
Updated Modal Manager (public/managers/modalManager.js):
populateSubAssetForm method: Added 'subAssetLink': subAsset.link || '' to populate the link field when editing a sub-asset
collectSubAssetFormData method: Added link: document.getElementById('subAssetLink')?.value || '' to collect the link value when saving
Existing Infrastructure Already Supports Links:
The generateAssetInfoHTML function in src/services/render/assetRenderer.js already handles the link display properly
It checks for asset.link and renders it as a clickable link with target="_blank"
This function is used for both assets and sub-assets, so sub-asset links will be displayed automatically
DumbAssets
A stupid simple asset tracker for keeping track of your physical assets, their components, and applicable warranties and routine maintenance.
Table of Contents
Quick Start
Prerequisites
- Docker (recommended)
- Node.js >=14.0.0 (for local development)
Option 1: Docker (For Dummies)
docker run -p 3000:3000 -v ./data:/app/data dumbwareio/dumbassets:latest
- Go to http://localhost:3000
- Add assets, upload photos/receipts, and track warranties
- Celebrate how dumb easy this was
Option 2: Docker Compose (For Dummies who like customizing)
Create a docker-compose.yml file:
services:
dumbassets:
container_name: dumbassets
image: dumbwareio/dumbassets:latest
restart: unless-stopped
ports:
- ${DUMBASSETS_PORT:-3000}:3000
volumes:
- ${DUMBASSETS_DATA_PATH:-./data}:/app/data
environment:
NODE_ENV: ${DUMBASSETS_NODE_ENV:-production}
DEBUG: ${DUMBASSETS_DEBUG:-true}
SITE_TITLE: ${DUMBASSETS_SITE_TITLE:-DumbAssets}
BASE_URL: ${DUMBASSETS_BASE_URL:-http://localhost:3000}
DUMBASSETS_PIN: ${DUMBASSETS_PIN:-1234}
ALLOWED_ORIGINS: ${DUMBASSETS_ALLOWED_ORIGINS:-*}
APPRISE_URL: ${DUMBASSETS_APPRISE_URL:-}
# ...other env vars
Then run:
docker compose up -d
- Go to http://localhost:3000
- Add and manage your assets
Option 3: Running Locally (For Developers)
git clone https://github.com/yourusername/DumbAssets.git
cd DumbAssets
npm install
npm start
Open your browser to http://localhost:3000
Features
- 🚀 Track assets with detailed info (model, serial, warranty, etc.)
- 🧩 Add components and sub-components
- 🖼️ Upload and store photos and receipts
- 🔍 Search by name, model, serial, or description
- 🏷️ Hierarchical organization of components
- 📅 Warranty expiration notifications (configurable)
- 🔧 Maintenance event notifications
- 🏷️ Flexible tagging system for better organization
- 🔔 Apprise notification integration
- 🌗 Light/Dark mode with theme persistence
- 🛡️ PIN authentication with brute force protection
- 📦 Docker support for easy deployment
- 🔗 Direct Asset Linking: Notifications include links to the specific asset
Configuration
Environment Variables
| Variable | Description | Default | Required |
|---|---|---|---|
| PORT | Server port | 3000 | No |
| DUMBASSETS_PIN | PIN protection (4+ digits) | None | No |
| APPRISE_URL | Apprise URL for notifications | None | No |
| TZ | Container timezone | America/Chicago | No |
| BASE_URL | Base URL for the application | http://localhost | No |
| SITE_TITLE | Site title shown in browser tab and header | DumbAssets | No |
| ALLOWED_ORIGINS | Origins allowed to visit your instance | '*' | No |
| DEMO_MODE | Enables read-only mode | false | No |
Data Storage
All data is stored in JSON files in the /data directory:
/data/Assets.json- All asset data/data/SubAssets.json- All component data/data/Images- Uploaded photos/data/Receipts- Uploaded receipts/data/config.json- Notification and app config
Security
- Variable-length PIN support (4+ digits)
- Constant-time PIN comparison
- Brute force protection (lockout after too many attempts)
- Secure session cookies
- No client-side PIN storage
- Rate limiting
Technical Details
Stack
- Backend: Node.js (>=14.0.0) with Express
- Frontend: Vanilla JavaScript (ES6+)
- Container: Docker with Alpine base
- Notifications: Apprise integration (via Python)
- Uploads: Multer for file handling
- Scheduling: node-cron for warranty & Maintenance notifications
Dependencies
- express: Web framework for Node.js
- multer: File upload handling and multipart/form-data parsing
- apprise: Notification system integration for alerts
- cors: Cross-origin resource sharing middleware
- dotenv: Environment variable configuration management
- express-rate-limit: Rate limiting middleware for API protection
- express-session: Session management and authentication
- cookie-parser: Cookie parsing middleware
- node-cron: Task scheduling for notifications
- uuid: Unique ID generation for assets
- sharp: Image processing and optimization
- compression: Response compression middleware
- helmet: Security headers middleware
- fs-extra: Enhanced filesystem operations
- path: Path manipulation utilities
Contributing
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes using Conventional Commits
- Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
See the Development Guide for local setup and guidelines.
Made with ❤️ by DumbWare.io
Languages
JavaScript
78%
CSS
11.6%
HTML
10.3%
Dockerfile
0.1%