abite 52f3be257f
feat: add multi-currency support via environment variables (#66)
- Add CURRENCY_CODE and CURRENCY_LOCALE environment variables in server.js
- Inject currency configuration into frontend via dynamic config.js endpoint
- Update formatCurrency() function to use global app config for dynamic currency formatting
- Support any ISO 4217 currency code with proper locale-specific formatting
- Add comprehensive currency configuration documentation (CURRENCY_CONFIG.md)
- Update README.md with currency environment variables and collapsible configuration guide
- Include Docker/Docker Compose configuration examples for currency settings
- Maintain backward compatibility with USD/en-US defaults

Supported currencies include USD, EUR, GBP, CAD, AUD, JPY, and any valid ISO 4217 code.
Currency formatting respects locale-specific conventions (e.g., €1.234,56 for de-DE).

add docs folder

Stringify currency object and update docs

Adding responsive card values to wrap large values
2025-06-09 00:53:40 -04:00
2025-06-03 12:31:25 -04:00
2025-05-25 22:20:26 -05:00
2025-04-27 12:16:44 -05:00
2025-04-27 12:16:44 -05:00
2025-05-11 11:41:18 -07:00
2025-04-29 12:38:41 -05:00
2025-04-27 12:16:44 -05:00
2025-06-03 12:31:25 -04:00
2025-05-29 10:20:14 -07:00

DumbAssets

A stupid simple asset tracker for keeping track of your physical assets, their components, and applicable warranties and routine maintenance.

Demo


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
  1. Go to http://localhost:3000
  2. Add assets, upload photos/receipts, and track warranties
  3. 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:-}
      CURRENCY_CODE: ${DUMBASSETS_CURRENCY_CODE:-USD}
      CURRENCY_LOCALE: ${DUMBASSETS_CURRENCY_LOCALE:-en-US}
      # ...other env vars

Then run:

docker compose up -d
  1. Go to http://localhost:3000
  2. 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
  • 🔔 Built in 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
CURRENCY_CODE ISO 4217 currency code for price formatting USD No
CURRENCY_LOCALE Locale for currency formatting en-US No

Tip

Apprise integration is built-in to DumbAssets, allowing you to simply add your Discord/ntfy/Telegram/etc link WITHOUT having to run Apprise as a separate service!

💰 Currency Configuration

DumbAssets supports multiple currencies via environment variables. The application uses the standard ISO 4217 currency codes and locale formatting.

Environment Variables

CURRENCY_CODE

  • Default: USD
  • Description: The ISO 4217 currency code for price formatting
  • Examples: USD, EUR, GBP, CAD, AUD, JPY

CURRENCY_LOCALE

  • Default: en-US
  • Description: The locale for currency formatting (affects number formatting, decimal separators, etc.)
  • Examples: en-US, en-GB, de-DE, fr-FR, ja-JP

Usage Examples

US Dollar (Default)

# No configuration needed - this is the default

Euro (Germany)

export CURRENCY_CODE=EUR
export CURRENCY_LOCALE=de-DE

British Pound

export CURRENCY_CODE=GBP
export CURRENCY_LOCALE=en-GB

Canadian Dollar

export CURRENCY_CODE=CAD
export CURRENCY_LOCALE=en-CA

Japanese Yen

export CURRENCY_CODE=JPY
export CURRENCY_LOCALE=ja-JP

Docker Configuration

Docker Compose

services:
  dumbassets:
    environment:
      - CURRENCY_CODE=EUR
      - CURRENCY_LOCALE=de-DE

Docker Run

docker run -e CURRENCY_CODE=EUR -e CURRENCY_LOCALE=de-DE dumbassets

Currency Format Examples

Different locales will format the same amount differently:

Locale Currency Amount: 1234.56 Formatted Output
en-US USD 1234.56 $1,234.56
de-DE EUR 1234.56 1.234,56 €
en-GB GBP 1234.56 £1,234.56
fr-FR EUR 1234.56 1 234,56 €
ja-JP JPY 1234.56 ¥1,235

Supported Currency Codes

Any valid ISO 4217 currency code is supported. Common examples include:

  • USD - US Dollar
  • EUR - Euro
  • GBP - British Pound
  • CAD - Canadian Dollar
  • AUD - Australian Dollar
  • JPY - Japanese Yen
  • CHF - Swiss Franc
  • CNY - Chinese Yuan
  • INR - Indian Rupee
  • BRL - Brazilian Real
  • MXN - Mexican Peso
  • SEK - Swedish Krona
  • NOK - Norwegian Krone
  • DKK - Danish Krone

For a complete list, refer to the ISO 4217 standard.

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

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes using Conventional Commits
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

See the Development Guide for local setup and guidelines.


Support the Project

Buy Me A Coffee

Made with ❤️ by DumbWare.io

Description
Languages
JavaScript 78%
CSS 11.6%
HTML 10.3%
Dockerfile 0.1%