Justin Edwards justin edwards / dizruptr
> |

I build tools that solve problems I actually have. Music libraries, polyrhythm engines, language learning, privacy-first health tracking — if I need it, I build it.

~/projects
├── suno-explorer music library management & curation released

Chrome extension + PWA that indexes your entire Suno AI music library — intelligent grouping, version lineage tracking, analytics, and encrypted cloud sync for libraries of 27k+ songs. 15k+ lines of vanilla JS, no framework, no runtime dependencies.

stack
Vanilla JS Chrome MV3 IndexedDB Supabase Stripe

highlights

  • DNA strand grouping — groups songs by normalized title into lineage trees tracking generation, upload, extend, cover, and concat relationships. Processes 27k+ clips in 5,000-record chunks with explicit browser yields for UI responsiveness.
  • Parent inference heuristic — multi-signal scoring algorithm reconnects orphaned clips to likely parents using prompt matching, tag overlap, time proximity, and duration ratios. Pre-built title index provides O(1) candidate lookup.
  • Library compression — two-pass lossless compression builds dictionaries for IDs, lyrics, tags, and prompts, replacing values with integer indexes. Documented result: 100MB → 18MB. Backwards-compatible format detection.
  • Encrypted cloud sync — all sync through Supabase Edge Functions with server-side token verification, SHA-256 hashed display IDs, and union merge for tags. Never direct DB access.
  • Insights dashboard — GitHub-style activity heatmap, genre/tag cross-referencing explorer, frequency-weighted lyrics word cloud, Suno model version breakdown, achievement badges, and shareable stats cards.

architecture

  • Offline-first — IndexedDB is source of truth, cloud is a replication layer, not a dependency
  • MV3 service worker keepalive via Web Locks API for long-running indexing operations
  • Zero-framework DOM manipulation with event delegation and custom state management at scale

Public curation features power VAiRiOUS ARTiSTS — a public music discovery platform built on Suno Explorer's export pipeline.

├── co-composer polyrhythm engine & music creation live / unreleased

Browser-based polyrhythm engine with real-time audio synthesis, circular D3.js visualization, MIDI import/export, brainwave entrainment, and stateless composition sharing that encodes entire compositions into shareable URLs — no database required.

stack
React TypeScript Web Audio API Tone.js D3.js FastAPI

highlights

  • Multi-track polyrhythm player — unlimited simultaneous rhythmic tracks with per-rhythm sound, color, and volume. Phase-synchronized circular D3.js canvas animation renders beat positions in real time against a shared pulse.
  • DNA encoding — compositions serialized into compact URLs with binary beat packing and RLE compression. Three encoding generations achieve lossless sharing in under 200 characters. No database, no server, no expiration.
  • Orbital Resonance Encoding (ORES) — maps polyrhythmic ratios to real exoplanetary orbital resonances using Stern-Brocot trees. Produces human-readable addresses like trappist.RRL.5a backed by a 93KB exoplanet catalog.
  • Inverse synthesis — upload an audio sample and the browser reverse-engineers synth parameters to approximate it. Multi-resolution STFT analysis, Bark-scale perceptual weighting, and evolutionary optimization. No ML, no server.
  • Isochronic brainwave entrainment — LFO-modulated carrier oscillators at target brainwave frequencies. The Rhythm Mapper exploits the identity between rhythm and pitch at different timescales to derive polyrhythm configurations from entrainment parameters.

architecture

  • Phase-normalized orchestration — all animation and audio scheduling use 0–1 phase values, decoupled from wall-clock time
  • Sound routing via factory + registry pattern across 5 engine types (oscillator, nature-voice, percussion, layered, sample)
  • Immer-backed reducer with 38+ action types centralizing all polyrhythm state mutations
try co-composer →
├── game-workbench 67 games from 51 zero-dep primitives live / unreleased

A composable game engine built from scratch — 51 reusable primitives (deck, dice, board, FSM, seeded RNG, ECS, physics, voxel raycast) compose into 67 fully playable games spanning card, board, arcade, and 3D voxel worlds. Zero runtime dependencies. Every game is a pure-logic engine separated from its renderer, tested with 5,000+ unit tests, and playable in-browser as an installable PWA with offline support.

stack
TypeScript Canvas2D SVG Web Audio API WebSocket zero deps

highlights

  • 51 composable primitives — hand-written modules for cards, dice, boards, turns, scoring, state machines, tweening, seeded RNG, spatial hashing, steering behaviors, voxel raycasting, FOV computation, and procedural music — all zero-dep, all reusable across games.
  • 67 playable games — from Chess and Go to Pac-Man and Asteroids to a first-person voxel mining game. Card games use deck+hand+trick. Arcade games use physics+collider+spawner. Roguelikes use board+FOV+pathfind.
  • Engine/binding separation — every game follows a three-layer pattern: pure-logic engine (deterministic, testable), renderer binding (SVG or Canvas2D), and integration (routing, touch controls). Engines have zero side effects.
  • Procedural music primitive — chord progressions, Euclidean rhythm generation, ADSR envelopes, frequency-to-visible-color mapping, and section dynamics with energy arcs. Used in Rhythm Orbits for layered polymeter/polyrhythm audio.
  • Rhythm Orbits — navigate rotating circles whose beats are Euclidean rhythms. Transfer between circles when beats align. Three audio modes: polymeter, polyrhythm, and layered. 8 hand-designed levels plus infinite procedural generation.
  • First-person voxel engine — hand-written raycaster with textured walls, floor/ceiling casting, sprite rendering with depth sorting, block editing, and biome generation — running at 60fps in Canvas2D with no WebGL.
  • Lockstep multiplayer — 4 games support real-time online play via WebSocket relay with deterministic lockstep sync, reconnection handling, and shareable deep links.

architecture

  • Pure-logic engines are fully deterministic — identical inputs produce identical outputs, enabling snapshot testing, replay systems, and AI opponents (MCTS and minimax are primitives too)
  • Seeded RNG as a primitive — every procedural system uses a seedable PRNG, making randomized games reproducible and testable
  • Canvas2D voxel raycasting at 60fps — column-by-column raycasting with distance-correct texture sampling, sprite billboarding, and fog, implemented from scratch with no WebGL
try game workbench →
├── universal-lingo language learning through absorption in development

Multi-language vocabulary learning with concept-based mastery tracking, AI-powered card generation, and an absorption mode for passive multi-language exposure. Study Spanish, French, and Japanese side by side with independent spaced repetition per direction.

stack
React TypeScript Firebase Google AI Google TTS

highlights

  • Absorption mode — select any number of languages, see color-coded cards side by side, flip entire rows at once. Designed for comprehension and familiarity, not rote memorization.
  • Multi-direction tracking — each language pair (ES→EN vs EN→ES) maintains independent SM-2 spaced repetition state. Receptive and productive skills tracked as separate abilities.
  • AI-powered generation — describe what you want to learn, get a structured prompt for your LLM of choice, paste the result back, and it becomes study cards. Programmatic expansion via synonyms, antonyms, and related words.
  • Concept-based mastery — progress tracked at the semantic level, not per-card. Learning "hello" on one card improves your score for all cards representing that concept across your library.

architecture

  • Hexagonal architecture — ports & adapters pattern with swappable storage backends and zero framework dependencies in domain logic
  • SM-2 algorithm with direction independence — each (concept, direction) pair maintains its own ease factor, interval, and due date
├── enclave privacy-first health tracking framework live / unreleased

A monorepo of privacy-first health tracking apps built on a shared encryption and UI framework. AES-256-GCM encryption with PBKDF2 key derivation. No servers, no accounts, no tracking. Your data never leaves your device.

stack
React 19 TypeScript Web Crypto API npm workspaces Recharts

highlights

  • Shared encryption core — AES-256-GCM with PBKDF2 key derivation (100k iterations). Portable encrypted files work across all apps in the ecosystem. Export your data, own your data.
  • Domain-driven engines — CycleEngine, PredictionEngine, TaperEngine, WithdrawalEngine — all pure TypeScript with zero React dependencies. Fully testable without mocking the DOM.
  • Adaptive predictions — confidence scoring factors both data quantity and statistical regularity. More data + lower deviation = higher confidence. Prevents overconfident predictions on sparse data.
  • Harm reduction philosophy — non-judgmental language throughout. Supportive messaging on partial compliance. Privacy by design because health data shouldn't require trust in a corporation.
tolerance
Models substance intake using pharmacokinetic decay curves. Tracks accumulation and tolerance over time with configurable half-life parameters.
taper
Generates safe dose reduction schedules. Weekly plans respect safe reduction rates (never >25% per phase), adjust for half-life, and adapt based on real-time withdrawal feedback.
rhythm
Menstrual cycle tracking with adaptive prediction, fertile window calculation, and a two-factor confidence score that balances data quantity against cycle regularity.

architecture

  • Abstract base storage pattern — encryption/decryption handled once, each app extends with ~40 lines vs 200+ of crypto logic
  • CSS variable theming with 4 themes via pure selector swaps — zero runtime overhead
  • No backend by design — privacy is architectural, not a policy
├── redstone-companion bedrock-accurate redstone simulator in development

Tick-for-tick Bedrock Edition redstone simulator with a text DSL, logic graph compiler with auto-layout, and an isometric 3D visualizer. 727 tests. Zero runtime dependencies.

stack
TypeScript Canvas SVG esbuild zero deps

highlights

  • Two-phase tick engine — implements Bedrock's P-tick/C-tick system where odd ticks produce signals and even ticks consume them, matching real in-game timing at 100ms resolution. The foundational mechanic most simulators skip.
  • Logic graph compiler — topological sort, crossing minimization, spatial placement, and automatic dust routing with collision detection and repeater insertion every 14 blocks.
  • Text DSLoutput out = xor(a, b) compiles to an abstract logic graph, then down to placed 3D block circuits with routed wiring. Supports nested gates and named intermediates.
  • Isometric 3D visualizer — canvas-rendered with four rotation directions, Y-layer slicing, signal-strength heatmap overlay, and full simulation transport with tick history and rewind.
  • 112+ built-in circuits — categorized across four tiers (Learn, Build, Explore, Compute) spanning logic gates, clocks, memory cells, arithmetic, farm automation, flying machines, and item sorters.

architecture

  • Pure-function block modules with immutable state — world state is a sparse Map<string, BlockState> making snapshots and replay trivial
  • Three-tier compilation: DSL → LogicGraph → CircuitJson with L-route, Z-jog, and Y-bridge wire routing strategies
  • 727 tests pinned to Minecraft Wiki documentation to verify Bedrock-specific behavior
├── oh-my-claude Claude Code usage dashboard open source

Zero-dependency static dashboard for Claude Code token usage, cost tracking, and environmental impact. Translates abstract token counts into tangible equivalents via a "Burger Index" — with a 3-tier uncertainty model backed by peer-reviewed environmental sources.

stack
Vanilla JS Chart.js zero deps

highlights

  • Burger Index — converts AI carbon footprint into cheeseburger equivalents using USDA-corrected consumption data. Dietary profile comparisons across vegan, vegetarian, average, and heavy-meat diets.
  • 3-tier uncertainty model — conservative, moderate, and generous estimates across every parameter. Token-to-energy estimates vary 10x+ by hardware, batch size, and PUE — this range captures real uncertainty instead of false precision.
  • Session analytics — daily token usage, cost breakdown by model, activity heatmap, and peak-hours analysis. Four chart types powered by Chart.js as the only runtime dependency.
  • Cited methodology — collapsible methodology section with full citations (Poore & Nemecek 2018, Scarborough et al. 2023, EPA eGRID 2024, USDA ERS). Trustworthy outputs over impressive outputs.

architecture

  • Zero-framework — global namespace pattern across 6 JS modules, no build step, works from file://
  • All data stays in your browser — reads Claude Code's stats-cache.json locally, no server, no tracking
  • Two independent time windows — AI CO2 (first session → last refresh) vs. diet savings (first session → today)
try oh-my-claude →
└── alcove local-first ambient video curator open source

Local-first library curator for ambient YouTube videos. Downloads, auto-tags, and organizes long-form ambience into collections for offline playback through Plex. No ads, no algorithms, no dopamine traps. Just 8-hour rainstorms and medieval tavern fireplaces on your own terms.

stack
Python Flask yt-dlp ffmpeg JSON flat-file
links

highlights

  • Auto-tagging engine — 16 keyword categories with synonym expansion. "Dark Gothic Castle Rain" → dark, medieval, rain. No manual input required.
  • Dual-layer deduplication — application-level tracking + yt-dlp's native archive. Two independent systems, zero re-downloads.
  • Markdown queue — URLs flow through Inbox → In Progress → Completed in a plain Markdown file. Human-readable, git-trackable, no database.
  • Transcript extraction — SRT → plain text for indexing or reading what the narrator said in that 4-hour forest walk.

architecture

  • Plex-native output — 1080p MP4, sensible filenames. Point Plex at the folder and you're done
  • Collection-based organization with color coding and reassignable tags from the web UI
  • No database — JSON flat-file storage, Markdown-driven queue. Simple by design.
view on github →
~/log
~/about

Every project here started as a personal need. I'm a guitarist and progressive metal enthusiast — most of the music tools exist because I needed them for my own creative workflow.

Started programming at 14 after discovering that numbering systems don't have to be base-10 — binary as a revelation permanently expanded how I think. Before that, Blender and animation tools at 12. Before that, gymnastics at 5. The through-line: systems thinking and kinesthetic learning.

Weber State grad, two-time national champ (cheer), benched 315 at 185 (bad idea tbh). Now in Denver, engineering dinner at altitude. Ideas become usable when externalized — that's why I build artifacts, not just plans. I call that process ghee.

I believe your data should stay yours. Privacy is architectural, not a policy.

~/contact