A simple, secure personal budgeting app with PIN protection. Track your income and expenses with a clean, modern interface.
- 🔒 PIN-protected access
- 💰 Track income and expenses
- 📊 Real-time balance calculations
- 🏷️ Categorize transactions
- 📅 Date range filtering
- 🔄 Sort by date or amount
- 📱 Responsive design
- 🌓 Light/Dark theme
- 📤 Export to CSV
- 🔍 Filter transactions by type
- 💱 Multi-currency support
- 🌐 PWA Support
DumbBudget supports the following currencies:
- USD (US Dollar) 🇺🇸
- EUR (Euro) 🇪🇺
- GBP (British Pound) 🇬🇧
- JPY (Japanese Yen) 🇯🇵
- AUD (Australian Dollar) 🇦🇺
- CAD (Canadian Dollar) 🇨🇦
- CHF (Swiss Franc) 🇨🇭
- CNY (Chinese Yuan) 🇨🇳
- HKD (Hong Kong Dollar) 🇭🇰
- NZD (New Zealand Dollar) 🇳🇿
- MXN (Mexican Peso) 🇲🇽
- RUB (Russian Ruble) 🇷🇺
- SGD (Singapore Dollar) 🇸🇬
- KRW (South Korean Won) 🇰🇷
- INR (Indian Rupee) 🇮🇳
- BRL (Brazilian Real) 🇧🇷
- ZAR (South African Rand) 🇿🇦
- TRY (Turkish Lira) 🇹🇷
- PLN (Polish Złoty) 🇵🇱
- SEK (Swedish Krona) 🇸🇪
- NOK (Norwegian Krone) 🇳🇴
- DKK (Danish Krone) 🇩🇰
- IDR (Indonesia Rupiah) 🇮🇩
Set your preferred currency using the CURRENCY
environment variable (defaults to USD if not set).
docker run -d \
-p 3000:3000 \
-v /path/to/your/data:/app/data \
-e DUMBBUDGET_PIN=12345 \
-e CURRENCY=USD \
-e BASE_URL=http://localhost:3000 \
-e SITE_TITLE='My Account' \
dumbwareio/dumbbudget:latest
services:
dumbbudget:
image: dumbwareio/dumbbudget:latest
container_name: dumbbudget
restart: unless-stopped
ports:
- ${DUMBBUDGET_PORT:-3000}:3000
volumes:
- ${DUMBBUDGET_DATA_PATH:-./data}:/app/data
environment:
- DUMBBUDGET_PIN=${DUMBBUDGET_PIN:-} # PIN to access the site
- BASE_URL=${DUMBBUDGET_BASE_URL:-http://localhost:3000} # URL to access the site
- CURRENCY=${DUMBBUDGET_CURRENCY:-USD} # Supported Currency Code: https://github.com/DumbWareio/DumbBudget?tab=readme-ov-file#supported-currencies
- SITE_TITLE=${DUMBBUDGET_SITE_TITLE:-DumbBudget} # Name to show on site
- INSTANCE_NAME=${DUMBBUDGET_INSTANCE_NAME:-} # Name of instance/account
# (OPTIONAL)
# Restrict origins - ex: https://subdomain.domain.tld,https://auth.proxy.tld,http://internalip:port' (default is '*')
# - ALLOWED_ORIGINS=${DUMBBUDGET_ALLOWED_ORIGINS:-http://localhost:3000}
# healthcheck:
# test: wget --spider -q http://127.0.0.1:3000
# start_period: 20s
# interval: 20s
# timeout: 5s
# retries: 3
Note: Replace
/path/to/your/data
with the actual path where you want to store your transaction data on the host machine.
Variable | Description | Required | Default | Example |
---|---|---|---|---|
DUMBBUDGET_PIN |
PIN code for accessing the application | Yes | - | 12345 |
PORT |
Port number for the server | No | 3000 |
8080 |
CURRENCY |
Currency code for transactions | No | USD |
EUR |
BASE_URL |
Base URL for the application | No | http://localhost:PORT |
https://budget.example.com |
SITE_TITLE |
Allows you to name each instance should you have multiple. | No | - | My Account |
- Clone the repository:
git clone https://github.com/DumbWareio/DumbBudget.git
cd DumbBudget
- Install dependencies:
npm install
- Create a
.env
file:
DUMBBUDGET_PIN=12345
PORT=3000
NODE_ENV=development
BASE_URL=http://localhost:3000
CURRENCY=USD
SITE_TITLE='DumbBudget'
INSTANCE_NAME='My Account'
ALLOWED_ORIGINS=* # Restrict origins - ex: https://subdomain.domain.tld,https://auth.proxy.tld,http://internalip:port' (default is '*')
- Start the development server:
npm run dev
- Open http://localhost:3000 in your browser
# Build the Docker image
docker build -t dumbwareio/dumbbudget:latest .
# Create a directory for persistent data
mkdir -p ~/dumbbudget-data
# Run the container
docker run -d \
-p 3000:3000 \
-v ~/dumbbudget-data:/app/data \
-e DUMBBUDGET_PIN=12345 \
-e BASE_URL=http://localhost:3000 \
-e SITE_TITLE='My Account' \
dumbwareio/dumbbudget:latest
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
DumbBudget includes several security features:
- PIN protection for access
- Rate limiting on PIN attempts
- Temporary lockout after failed attempts
- No sensitive data stored in browser storage
- Secure session handling
- Report bugs by opening an issue
- Request features through issues
- Join our community discussions
Made with ❤️ by DumbWare.io