A fast, privacy-focused web application for discovering and redeeming Destiny 2 emblem codes. Ships a curated, hand-verified catalogue of community-sourced codes.
- 🔍 Curated Catalogue — 79 hand-verified codes, each labelled active, expired, restricted, or Destiny 1
- 🖼️ Official Emblem Previews — Displays high-quality images directly from Bungie's CDN
- ⚡ Lightning Fast — Built with Vite + React for instant page loads
- 🎨 Beautiful UI — NASA-inspired "Deep Space" theme with Destiny 2 subclass colors
- 📱 Fully Responsive — Works flawlessly on desktop, tablet, and mobile
- 🔒 Privacy-First — No cookies, no user accounts, cookieless privacy-focused analytics
- 🌙 Theme Support — Dark, OLED, and Light modes
- ✨ Visual Effects — Shooting stars, particle effects, and emblem shine animations
- Node.js 18 or higher
- npm or yarn
# Clone the repository
git clone https://github.com/Manaiakalani/destiny-code-finder.git
cd destiny-code-finder
# Install dependencies
npm install
# Start development server
npm run devThe app will be available at http://localhost:8080
# Build for production
npm run build
# Preview production build locally
npm run previewdestiny-code-finder/
├── .github/
│ └── workflows/ # GitHub Actions CI/CD
├── public/
│ ├── data/
│ │ └── emblems.json # Emblem database (1000+ emblems)
│ └── emblems/ # Cached emblem images
├── scripts/
│ ├── scrape-emblems.js # Bungie manifest scraper
│ └── download-emblems.js # Image downloader
├── src/
│ ├── components/ # React components
│ │ ├── ui/ # Base UI components
│ │ ├── CodeCard.tsx # Emblem code card
│ │ ├── Header.tsx # Navigation header
│ │ └── ...
│ ├── hooks/ # Custom React hooks
│ ├── pages/ # Route pages
│ ├── services/ # API & scraping services
│ └── types/ # TypeScript definitions
├── Dockerfile # Production container
└── package.json
| Command | Description |
|---|---|
npm run dev |
Start development server with HMR |
npm run build |
Create production build |
npm run preview |
Preview production build locally |
npm run lint |
Run ESLint |
npm run typecheck |
Type-check the app and the test suite |
npm run test:e2e |
Run the Playwright end-to-end suite |
npm run test:e2e:ui |
Run the end-to-end suite in Playwright's UI mode |
npm run verify:catalogue |
Check the code catalogue and emblem database are in parity |
npm run discover:codes |
Report community codes missing from the catalogue |
npm run scrape:emblems |
Fetch latest emblem data from Bungie API |
npm run download:emblems |
Download and cache emblem images |
npm run test:e2e builds nothing on its own — run npm run build first, since the
suite is served from dist via vite preview. The specs cover appearance and the
localStorage rescue, migration, and quarantine paths that hold user-added codes.
npm run build
npx playwright install --with-deps chromium # first run only
npm run test:e2enpm run discover:codes checks community sources for emblem codes that are not yet
in src/services/codeScraperService.ts and prints them with links.
It never edits the catalogue. A Destiny code can only be redeemed once per account, so an unverified entry costs a user a real redemption — every candidate is meant to be confirmed against Bungie by hand before it is added.
npm run discover:codes # human-readable report
npm run discover:codes -- --json # machine-readable, used by the weekly workflowReddit rejects anonymous API requests, so that source is skipped unless
REDDIT_CLIENT_ID and REDDIT_CLIENT_SECRET are set (create a "script" app at
https://www.reddit.com/prefs/apps). The primary source needs no credentials.
The scrape scripts require a Bungie API key (free):
# Get your key at: https://www.bungie.net/en/Application
# Then run:
BUNGIE_API_KEY=your_key npm run scrape:emblems# Build the Docker image
docker build -t destiny-code-vault .
# Run the container (runs as non-root on port 8080)
docker run -p 8080:8080 destiny-code-vaultversion: '3.8'
services:
destiny-code-vault:
build: .
ports:
- "8080:8080"
restart: unless-stopped
read_only: true
security_opt:
- no-new-privileges:trueThe app aggregates emblem codes from multiple sources:
| Source | Description |
|---|---|
| r/DestinyTheGame, r/destiny2, r/raidsecrets | |
| Blueberries.gg | Community-verified emblem database |
| Bungie API | Official emblem images and metadata |
| Curated List | 37+ manually verified active codes |
The UI features a NASA-inspired "Deep Space" theme:
- Primary: NASA Blue (
#0b3d91) - Accent: Tech Cyan (
#4dd0e1) - Success/Active: Strand Green
- Warning: Solar Orange
- Background: Deep space gradient
- 🟣 Void: Purple (
#7c3aed) - 🟠 Solar: Orange (
#f97316) - 🔵 Arc: Cyan (
#06b6d4) - 🔷 Stasis: Ice Blue (
#38bdf8) - 🟢 Strand: Green (
#22c55e)
Code Vault is built with privacy as a core principle:
- ✅ No cookies
- ✅ No cross-site tracking, advertising, or data selling
- ✅ Cookieless, privacy-focused analytics (aggregate page counts only)
- ✅ No user accounts required
- ✅ All code data stored locally in your browser
- ✅ Open source and auditable
See our Privacy Policy for complete details.
Contributions are welcome! Please read our Contributing Guidelines before submitting a pull request.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
This project is not affiliated with, endorsed by, or connected to Bungie, Inc. Destiny 2, the Destiny Logo, and related marks are trademarks of Bungie, Inc.
Emblem codes are aggregated from publicly available community sources. Always verify codes at the official Bungie redemption site before use.
- Bungie for creating Destiny 2
- Blueberries.gg for maintaining emblem databases
- Destiny Emblem Collector for the authoritative universal code list
- Mijago's Rewards for cross-referenced emblem data
- The Destiny 2 Reddit community for sharing codes
- All Guardians who contribute to keeping the community informed
This release directly addresses community feedback from r/DestinyTheGame:
- Wrong code→emblem mappings — All 38 original code entries had incorrect emblem name associations (e.g.,
YRC-C3D-YNCwas labeled "The Visionary" but is actually "A Classy Order"). Every mapping has been corrected against destinyemblemcollector.com, rewards.mijago.net, and blueberries.gg. - Fabricated codes removed — 6 codes that never existed as universal codes were removed (
JNX-DMH-XLA,A7L-FYC-44X,N3L-XN6-PXF,X9F-GMA-H6D,3VF-LGC-RLX,X4C-FGX-MX3). - Non-universal codes marked expired — 7 codes for emblems that require special access (Game2Give donations, Bungie API developer program, Steelseries promos, Creator Hub, Netcafe vendors) are now marked "Expired" with dependency notes explaining how to actually obtain them.
- D1 shader codes properly labeled —
D6T-3JR-CKX,7MM-VPD-MHP,RXC-9XJ-4MHare Destiny 1 shaders (Prismatic Expanse, Double Banshee, Oracle 99), not D2 emblems. They now display under a dedicated "D1" filter. - Add Code crash fixed —
Uncaught TypeError: x.toUpperCase is not a functioncaused by passing aRedemptionCodeobject where a string was expected. - Code validation updated — Regex now uses Bungie's official character set (
ACDFGHJKLMNPRTVXY34679) and supports extended 14-character codes for Destiny: Rising promotions. - Missing rewards added —
R9J-79M-J6C(End of the Rainbow transmat) andTK7-D3P-FDF(Rainbow Connection emote) now included.
- D1 Filter — Combined filter row: All / D2 Active / D2 Expired / D1
- Dependency Notes — Expired and D1 cards display explanatory notes about how to obtain the item
DXL-XHC-X37— Runner emblem (universal code, available Feb 5, 2026). Confirmed via destinyemblemcollector.com.
- Runner emblem now shows correct Bungie CDN icon
- End of the Rainbow and Rainbow Connection — removed fabricated icon paths that were 404ing on Bungie CDN. These are a transmat effect and emote (not emblems), so they correctly show a placeholder icon.
- Reddit and Blueberries.gg scrapers now validate discovered codes against Bungie's official character set (
ACDFGHJKLMNPRTVXY34679), filtering out false matches with characters outside the valid set.
- Middle-click support on Redeem buttons — Redeem buttons are now native
<a>elements instead of<button>, enabling middle-click / Ctrl+click to open codes in new browser tabs. Applies to both per-code Redeem buttons and the hero "Redeem on Bungie.net" button.
- Removed unused imports (
CodeGridSkeleton,EmptyStatefrom Index page) - Removed dead types (
SortOrder, unusedsourceUrlfield) - Removed redundant
descriptionfields from 48 code entries where they duplicatedemblemName—useCodeScannernow falls back toemblemNameautomatically - Removed dead default export from
codeScraperService
- Container now runs as non-root user (
appuser) instead of root - Nginx listens on port 8080 (unprivileged) instead of port 80
- Added
server_tokens offto suppress Nginx version in responses - Added security headers:
Referrer-Policy,Permissions-Policy - Improved gzip config with
gzip_varyandgzip_min_length - Docker Compose example now includes
read_onlyandno-new-privileges
- Bumped
package.jsonversion to 2.4.0
Made with ♥ in Seattle, WA for the Destiny 2 community
Eyes up, Guardian. 👁️




