No description
  • TypeScript 99.5%
  • CSS 0.3%
  • HTML 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-08-28 22:43:00 +00:00
client chore(release): v1.0.0 - Nahalo Vault Initial Release 2026-08-28 13:05:13 -07:00
server fix(auth): support custom domains and dynamic origins behind reverse proxies 2026-08-28 13:53:39 -07:00
.dockerignore chore(release): v1.0.0 - Nahalo Vault Initial Release 2026-08-28 13:05:13 -07:00
.env.example Add production Docker compose with multi-stage Nginx frontend and Node runtime 2026-08-28 12:47:25 -07:00
.gitignore chore: ignore .vscode, TODO.md, and dev compose configurations 2026-08-28 13:11:26 -07:00
docker-compose.prod.yml Align PostgreSQL default password in production docker compose to prevent authentication mismatch 2026-08-28 12:56:42 -07:00
docker-compose.yml Align PostgreSQL default password in production docker compose to prevent authentication mismatch 2026-08-28 12:56:42 -07:00
LICENSE chore(release): v1.0.0 - Nahalo Vault Initial Release 2026-08-28 13:05:13 -07:00
package-lock.json feat(alerts): add Price Alerts Watcher with SMTP, eBay Browse API integration, and exact printing resolution 2026-08-28 12:13:21 -07:00
package.json chore(release): v1.0.0 - Nahalo Vault Initial Release 2026-08-28 13:05:13 -07:00
README.md Update README.md 2026-08-28 22:43:00 +00:00

Nahalo Vault 🛡️

A self-hosted Magic: The Gathering card collection manager, visual tactical deck builder, Scryfall explorer, and TradePost Hub built for collectors, players, and local trade groups.

Nahalo Vault Banner


Features

📦 Collection & Binder Vault

  • Grid, Binder, & Table Views: High-res imagery, foil badges, finish indicators, and quantity badges.
  • Binder Organization & Set Completion Matrix: Assign custom binders with target MTG Set and Bonus Sheet tracking (e.g. BLB, SPG).
  • Multi-Format CSV & Text Importer: One-click import for ManaBox CSV, Moxfield, DelverLens, MTG Arena, and Plain Text.
  • Portfolio Financials: Real-time market valuation in USD ($) and EUR (€) using Scryfall market pricing.
  • Condition & Printing Management: Easily switch card printings, art variants, foils, and language editions.

⚔️ Visual Deck Builder

  • Format Support: Commander / EDH, Standard, Modern, Pioneer, Legacy, Vintage, and Pauper.
  • Analytics & Mana Visualizer: Live Mana Curve, Color Identity breakdown, card type distribution, and Commander-specific financial totals.
  • Playtesting Simulator: 7-Card opening hand and mulligan testing suite.
  • Precon Library: Instant pre-constructed deck loader backed by PostgreSQL JSONB storage.
  • Multi-Format Deck Export: 1-click export and file download for MTG Arena, MTGO (.dec), Plain Text, and CSV.

🤝 TradePost & Public Sharing

  • Want / Have Exchange Matrix: Track trade-in and want lists with live market values.
  • Public Shareable Showcase Links: Generate isolated, cryptographically unguessable public URLs (/share/:type/:token) for wishlists, tradelists, binders, or constructed decks.
  • Security Isolation: Public visitors access sanitized read-only views with zero internal credential or database visibility.

🔔 Price Alerts & Market Watcher

  • Multi-Marketplace Alerts: Monitor price dips across TCGPlayer, Cardmarket, ManaPool, CardKingdom, and eBay.
  • Automated Scanning & SMTP: Background price checking with instant email notifications when targets hit.

🛡️ Security, Audit Trail & Control Panel

  • Master Password Security: BCrypt password hashing, session versioning, and auto-generated persisted JWT secrets.
  • Comprehensive Audit Trail: Real-time logging of authentication events, collection mutations, binder changes, deck updates, and public link access.
  • Scryfall Bulk Data & Offline Image Cache: Download sets for offline high-res image serving with disk telemetry and cache purge tools.
  • Automated Scheduled Backups: Recurring database backup snapshots stored to disk or manual browser export.

🚀 Quick Start (Production Docker)

The easiest way to run Nahalo Vault in production is using Docker Compose:

1. Clone & Configure Environment

git clone https://forge.nahalopagus.cc/przemchess/nahalo-vault.git
cd nahalo-vault
cp .env.example .env

Edit .env to set your desired POSTGRES_PASSWORD and host port APP_PORT (default 5175).

2. Launch the Production Stack

docker compose -f docker-compose.prod.yml up -d --build
  • Web App: http://localhost:5175 (or your configured APP_PORT)
  • Backend API: Proxied internally by Nginx to Node.js runtime

🛠️ Local Development

Prerequisites

  • Node.js 20+
  • PostgreSQL 16+ (or run via docker compose -f docker-compose.dev.yml up db -d)

1. Install Dependencies

npm install
npm --prefix server install
npm --prefix client install

2. Push Database Schema

npm --prefix server run db:push

3. Start Development Servers

npm run dev
  • Client runs on http://localhost:5175
  • Backend API runs on http://localhost:3005

⚙️ Environment Configuration (.env)

Variable Description Default
APP_PORT Host port exposed for web app 5175
NODE_ENV Environment mode (production / development) production
POSTGRES_USER Database username postgres
POSTGRES_PASSWORD Database password postgres
POSTGRES_DB Database name mtg_vault
CLIENT_URL Public origin URL for reverse proxy routing http://localhost:5175
ALLOWED_ORIGINS Comma-separated list of allowed CORS origins http://localhost:5175,http://localhost:80
JWT_SECRET (Optional) Pre-defined 64-character JWT secret Auto-generated in DB
VAULT_MASTER_PASSWORD (Optional) Pre-configured master password fallback Configured on first launch

📜 License & Disclaimers

License

This project is open source under the MIT License.

Wizards of the Coast Fan Content Policy

Nahalo Vault is unofficial Fan Content permitted under the Wizards of the Coast Fan Content Policy. Portions of the materials used are property of Wizards of the Coast. © Wizards of the Coast LLC.

Scryfall Attribution

Card data, prices, imagery, and mana symbols are powered by the Scryfall API. Scryfall is not affiliated with this project.