Skip to content

Releases: lbruton/StakTrakr

v3.34.38 — Silverback · Lot/Each · Settings overhaul · Inventory safety

30 Apr 03:13
v3.34.38
7984d3b

Choose a tag to compare

New Features

  • Lot ⇄ Each purchase price toggle (STRK-4): Enter a lot total when buying multiples — the app divides by quantity and stores per-unit price. Purchase column now shows qty-multiplied totals.
  • Silverback as a first-class metal type: Goldback and Silverback are now proper type categories with dedicated purity defaults and denomination handling.
  • Fly.io→sqld reachability health probe (STRK-7): New health endpoint verifies the Fly.io poller can reach the sqld database.

Inventory Data Safety

  • Seed guard (STRK-13): Startup no longer overwrites inventory with sample data when localStorage is missing or corrupt. Recovery banner appears instead of silent data replacement.
  • Vault restore deduplication (STRK-14): Re-importing your own encrypted backup no longer produces duplicates. Items matched by serial → Numista ID → name+date before comparison. Volatile cache keys excluded from settings diff.
  • Silverback weight unit fix (STRK-17): Silverbacks now use a dedicated sb unit (0.001 troy oz), separate from Goldback retail pricing. Legacy gb records migrate automatically on load, import, backup preview, and cloud restore.

Settings UI Overhaul

  • Search tab merged into Filters (STAK-437): Fuzzy autocomplete toggle, search behavior controls moved into the Filters tab.
  • Images tab redesign (STAK-439)
  • Danger buttons moved to Inventory (STAK-442): Data reset relocated from Storage tab.
  • API tab sectioned card layout (STAK-443): Multi-provider config with priority order, Numista/PCGS tabs, usage tracking.
  • Activity Log tab redesign (STAK-446): Full change history with undo/redo.
  • Currency tab redesign (STAK-570): 17-currency display with exchange rates and Goldback pricing controls.
  • Force Refresh moved to About (STAK-564): Troubleshooting card in About tab.

Market & Retail

  • Retail currency conversion phase 1 (STAK-581): Retail and market price surfaces honor selected display currency via shared currencychange event bus.
  • Spot provider switch confirmation (STAK-571): Settings → API shows a confirmation dialog before switching providers.
  • Mobile action button safe areas (STAK-578): Save/Cancel/Edit buttons clear Android gesture nav and iOS safe-area insets including landscape notch.

Bug Fixes

  • STRK-11: PCGS API test button token fix
  • STRK-12: Silverback denominations, unit label, purity default corrected
  • STRK-15: Silverback denomination aria-label no longer references Goldback
  • STRK-16: Placeholder regression + seed-guard test isolation
  • STRK-19: eBay search button overlap with close button in view modal
  • STRK-20: Backup conflict modal context-aware messaging (newer vs. existing)
  • STAK-517: Market filter cache invalidated after vault restore
  • STAK-546: Filter chip AND predicate semantics restored
  • STAK-548: SQLD_URL rename in poller code
  • STAK-549: Cloud sync header button silent failure fix
  • STAK-551: Filter chip predicate logic fix
  • STAK-565: JM Bullion scraper column fix
  • STAK-573: API tab catalog UX, Bulk Sync rework
  • STAK-576: Numista search UX when API key not configured
  • STAK-577: Wire/eCheck price extraction from JSON-LD priceSpecification

Infrastructure & Tooling

  • STRK-5: Codacy CLI switched from semgrep to opengrep
  • STRK-6: Tailscale subnet route re-applied on every container start
  • Home poller: byparr pinned to ghcr.io/lbruton/byparr:2.1.0
  • Prettier + lint-staged quality gates added
  • .coderabbit.yaml added
  • Accessibility hardening pass
  • Issue tracking migrated from DocVault to Plane (STRK- prefix)

v3.34.14 — STAK-558: Comma and semicolon delimiters in tag input

19 Apr 20:38
c9eed86

Choose a tag to compare

STAK-558: Comma and semicolon delimiters in tag input

  • Added: Tag input fields in edit modal and view modal now support comma (,) and semicolon (;) as delimiters. Type Silver, Bullion, 2024 or Silver; Bullion; 2024 and all three tags are added at once.
  • Added: Empty tokens between delimiters are automatically skipped, and each token is trimmed of whitespace before adding.
  • Added: Single-tag entry without delimiters behaves identically to before — no breaking changes.
  • Added: Existing deduplication and max-tag limits apply per token, so bulk entry cannot bypass safety rules.
  • Improved: addItemTag calls batched with persist=false + single saveItemTags(), reducing localStorage writes and sync churn.
  • Improved: Extracted parseTagInput() utility to js/utils.js for DRY tag parsing across edit and view modals.

v3.34.03

16 Apr 03:10
40dcf8a

Choose a tag to compare

What's New

Features

  • STAK-444: Dedicated Cloud tab in Settings — Dropbox, Cloud Sync Beta, backup/restore consolidated
  • STAK-538: Remove first-run acknowledgment modal — app shown immediately on first load
  • STAK-529: Sort direction toggle in Settings > Appearance (Asc/Desc)
  • STAK-547: Replace What's New modal with toast card; changelog capped at 5 entries

UX / Header

  • STAK-544: Header cloud button triggers manual sync (ready) or opens Settings (needs setup)
  • STAK-545: Header market button triggers syncRetailPrices() instead of opening panel
  • STAK-445: Move FAQ below LOG in Settings sidebar

Bug Fixes

  • STAK-527: Clear autoRefresh.STAKTRAKR when provider disabled
  • STAK-526: Atomic rollback on cloud sync settings write failure
  • STAK-521: Quarantine unresolved slugs from market filter matrix
  • STAK-533: Numista API key no longer stripped during cloud sync
  • STAK-525: Market sync button stuck in "Syncing" state fixed
  • STAK-520: Market filter deep validation on load
  • STAK-519: Cloud sync API key loop on blank storage fixed
  • STAK-516: Vendor prices refresh stuck on file:// fixed
  • STAK-510: APMEX Goldback prices — Check/Wire price now used

Infrastructure

  • STAK-508: v2 API migration — frontend cutover complete
  • STAK-509: V1 API dead code cleanup (~486 lines removed)
  • STAK-531: Security hardening post-INC-001
  • STAK-528: Shape-aware dimension fields (bars: Length/Width vs Diameter)
  • Pre-commit hooks: gitleaks, release-artifact sync, CLAUDE.md guard
  • Seed bundle: 47552 entries, 59 years (1968–2026)

v3.33.93 — Market Filters, Cloud Sync Fixes, Shape Dimensions, Security Hardening

05 Apr 03:45
1e983c6

Choose a tag to compare

Market Filters, Cloud Sync Fixes, Shape Dimensions, Security Hardening

Market Data & Filtering

  • Market Filter Matrix — Settings > Market redesigned with per-metal checkbox matrix for items and vendors (STAK-515)
  • V1 API dead code removal — ~486 lines removed. Market log tab shows dynamic vendor columns (STAK-509)

Data Integrity & Cloud Sync

  • Cloud sync API key fix — Keys no longer destroyed as [object Object] when synced (STAK-519)
  • StakTrakr API settings simplification — Cache settings no longer revert to 24h (STAK-518)

UI & Data Model

  • Shape-aware dimension fields — Bars/ingots show Length/Width instead of Diameter. Shape dropdown drives conditional fields (STAK-528)
  • Logo and theme refinements — Height-driven logo sizing, light/sepia palette improvements (STAK-514)

Security (STAK-531)

  • Malicious GHA workflow removed, all secrets rotated
  • SSH commit signing, CODEOWNERS, zero GitHub repo secrets, PR requirements on all branches

v3.33.88 — Ticker Duplication & Stale What's New Fix

29 Mar 21:00
1eaf908

Choose a tag to compare

Ticker Duplication & Stale What's New Fix (STAK-513)

  • Fixed: Market ticker marquee duplicating into 4-5 stacked rows due to race condition in renderBestPriceTicker() — orphaned .ticker-track elements now swept on every finalize (STAK-513)
  • Fixed: Removed redundant renderBestPriceTicker() call inside async _renderVendorTable completion that was the primary trigger for the race (STAK-513)
  • Fixed: Stale What's New content on Cloudflare-proxied deployments — SPA fallback returning HTML instead of 404 for deleted announcements.md now detected and bypassed (STAK-513)
  • Added: CSS max-height safety clamp on .market-ticker to prevent visual overflow if ticker tracks accumulate (STAK-513)

Reported by beta user PumpkinCrouton on r/Silverbugs.

v3.33.87 — Market Data Module, Inventory Modularization, Branding Refresh

29 Mar 18:53
0973613

Choose a tag to compare

Highlights

This release ships 13 patches (v3.33.71 → v3.33.87) — the biggest update since the DiffModal overhaul.

Market Data Module (STAK-504)

  • Best Price Ticker — scrolling strip below spot cards showing cheapest vendor per coin with premium percentages
  • Vendor Prices Table — metal-tabbed comparison table with per-vendor prices, premium badges, and clickable buy links
  • Market Detail Modal — TradingView Lightweight Charts with 7-day spot history and per-vendor price comparison
  • All sections toggleable and reorderable in Settings > Layout

Inventory Modularization (STAK-484)

  • Split inventory.js (3000+ lines) into inventory-table.js, inventory-backup.js, and inventory-import.js
  • Extracted chart-utils.js for shared charting code

Branding Refresh

  • New favicon, PWA icons (192/512), banner logos, and icon-logo SVGs
  • S-stack monogram with gold center bar on dark navy background

Infrastructure

  • v2 API export pipeline (api-export-v2.js) — vendor-centric endpoints
  • Slim Dockerfile for Fly.io remote poller
  • Wiki → DocVault migration (entire wiki/ directory removed)
  • Removed deprecated test suites, Jules config, AGENTS.md, GEMINI.md

Bug Fixes

  • Startup quota regression and market ticker stabilization (STAK-481)
  • What's New modal content flash (STAK-500)
  • JM Bullion price extraction, Goldback ghost cards (STAK-498)
  • Cloud sync image vault erasure on cross-device push (STAK-497)
  • Numista special character search (STAK-494)
  • Graceful service worker update — auto-reload on cache miss (STAK-485)
  • Chart daily average divergence on volatile days (STAK-483)
  • Retail scraper consistency and OOS pipeline (STAK-475, STAK-495)
  • Dashboard command injection fix (CodeQL)

Removed

  • Grid/card view dead code (~260 lines) — list view now unconditional (STAK-473)
  • docs/announcements.md — replaced by embedded fallback in about.js

Full changelog: https://github.com/lbruton/StakTrakr/blob/main/CHANGELOG.md
Version tags shipped: v3.33.71, v3.33.74, v3.33.75, v3.33.76, v3.33.77, v3.33.78, v3.33.79, v3.33.80, v3.33.81, v3.33.82, v3.33.84, v3.33.86, v3.33.87

v3.33.70 — Intraday trends, aggregation fixes, CF bypass, security hardening

18 Mar 15:09
7a4f8bf

Choose a tag to compare

Intraday Trends, Aggregation Fixes, CF Bypass Hardening

  • Added: Intraday trend toggle for Market Prices cards — pill button switches between current price and hourly % change (STAK-464)
  • Added: Chart polish — dashed line segments for OOS vendors + 7-day Goldback baseline on spot charts (STAK-474)
  • Fixed: aggregateWindows data merge — dropped UNIQUE constraint that caused data loss, upsert cache rows, 30-min consensus buckets carry forward vendor prices across windows (STAK-476)
  • Fixed: Retail scraper CF bypass — Byparr before Firecrawl phase, JSON-LD price=0 treated as OOS, Camoufox shm_size 1g for shared memory (STAK-475)
  • Fixed: Goldback cron staggered from :01 to :20 to avoid Fly.io overlap (STAK-477)
  • Fixed: Storage hygiene — disposed filter preference no longer resets on reload, silent auto-merge for settings-only sync diffs (STAK-470)
  • Fixed: Catalog Data fields no longer silently discarded for items without Numista number (STAK-469)
  • Fixed: Retail price accuracy — Provident Metals spot ticker fix, Hero Bullion bulk price fix, Gainesville timeout elimination (STAK-467)
  • Changed: Improved Cloudflare bypass fallback to Byparr/Camoufox cookies (STAK-462)
  • Changed: Reverse tabnabbing mitigation on all window.open() calls
  • Changed: Cached Intl.NumberFormat instances for faster rendering
  • Changed: Removed wiki/ after DocVault migration (STAK-471), CodeQL warnings cleanup (STAK-460)

v3.33.60 — DiffModal Overhaul, Dropbox Multi-Account, Market Improvements, Numista Fixes

09 Mar 20:26
3abfe90

Choose a tag to compare

What's New

  • DiffModal Complete Overhaul — Full card-based review UI for all import/sync/restore flows. Summary dashboard, per-item conflict cards, click-to-pick field selection, rich settings renderers, and orphan cards with action buttons (STAK-451, STAK-454, STAK-455)
  • ZIP Backup Restore via DiffModal — ZIP restores now route through DiffModal for review instead of directly overwriting data (STAK-457)
  • Dropbox Multi-Account UX — Connected account email/name displayed in settings; Switch Account and Sign Out of Dropbox links added (STAK-449)
  • Market View Improvements — Metal filter pills (All/Silver/Gold/Goldback/Platinum/Palladium), mobile layout fixes, expand/collapse state reset on search, Australian coin display names (STAK-433, STAK-434, STAK-452)
  • Numista N# Search Fixes — Image URLs and metal type now auto-populate when adding items via N# search (STAK-431)
  • Date Sort Fix — Dateless items now sort as oldest instead of always to the bottom (STAK-448)

Version Tags Shipped

v3.33.52 · v3.33.53 · v3.33.54 · v3.33.55 · v3.33.56 · v3.33.57 · v3.33.58 · v3.33.59 · v3.33.60

v3.33.51 — Cloud Sync Hardening, Diff/Merge, Disposition, Market Redesign

05 Mar 04:34
421de58

Choose a tag to compare

Highlights

Cloud Sync & Encryption

  • Bi-directional sync overhaul — multi-key decrypt, race condition fixes, deadlock fix (STAK-398)
  • Cloud storage API hardening, sync scope & serialization (STAK-425, STAK-426)
  • 10+ sync bug fixes: pull root cause, Keep Mine loop, empty diff, push racing, storage blowout

Diff/Merge Architecture

  • DiffEngine + DiffModal — reusable change-review UI with UUID matching (STAK-184, STAK-380)
  • Selective apply for cloud sync pull and vault restore (STAK-190)

Data Portability & Backup

  • Import/restore completeness with cloud backup photos (STAK-427)
  • Full backup for sync snapshots, separate manual backups (STAK-419)
  • Backup integrity audit — import transparency & validation (STAK-374)

Inventory & Market

  • Realized gains/losses — item disposition tracking (STAK-72)
  • Market page redesign Phase 1 & 2 — list view, manifest-driven coins, Goldback vendor (STAK-369, STAK-371)
  • Oklahoma Goldback G1, vendor medal ranking fix (STAK-370)

UI/UX

  • Clone mode redesign, modal UX consistency (STAK-375, STAK-378)
  • Numista search overhaul — fieldMeta, re-sync picker, tag controls (STAK-345/346/354/362/363)
  • Summary bar items + weight, filter chip cap, disposed items view (STAK-418, STAK-169, STAK-388)
  • Spot price card label fix + mobile long-press entry (STAK-274, STAK-285)

Security (Pre-ship Hardening — STAK-430)

  • XSS fix in settings pattern rule innerHTML
  • OAuth CSRF — state parameter validation on localStorage relay
  • Sync flag leak fix, console log sanitization, dead code removal

Infrastructure

  • Wiki migrated to in-repo /wiki/ with Docsify (STAK-390)
  • Wiki accuracy sweep — ~85 fixes across 27 pages (STAK-392)
  • Browserbase test runbook v2, Playwright test additions
  • Skill cleanup — removed 27 obsolete/duplicate skill files

50 patch versions (v3.33.01 → v3.33.51) | 55 Linear issues | PR #756

v3.33.25

03 Mar 01:14
253e824

Choose a tag to compare

What's New in v3.33.25

Highlights

  • Realized Gains/Losses (v3.33.17) — Disposition workflow: Sold, Traded, Lost, Gifted, Returned. Calculates realized gain/loss with badges, filters, portfolio summary, and CSV export
  • DiffMerge Integration (v3.33.19) — Selective apply for cloud sync pull and encrypted vault restore. Preview changes before applying
  • Disposed Items: Restore & View (v3.33.21) — Three-state disposed filter, changelog undo, restore-to-inventory button
  • Backup Integrity Audit (v3.33.24) — exportOrigin metadata, pre-import validation, DiffModal count header, post-import summary
  • Market Page Phase 1 & 2 (v3.33.06, v3.33.13) — Full market page redesign with manifest-driven coins and Goldback vendor support

All Patches (v3.33.01–v3.33.25)

Version Description
v3.33.25 Browserbase Test Runbook v2 (STAK-396)
v3.33.24 Backup integrity audit (STAK-374)
v3.33.23 Chip max count setting (STAK-169)
v3.33.22 Suppress storage error modal for intraday cache (STAK-383)
v3.33.21 Disposed items restore and view (STAK-388)
v3.33.20 Market panel bug fixes (STAK-389)
v3.33.19 DiffMerge integration (STAK-190)
v3.33.18 Diff/Merge architecture + modal UX (STAK-184/378/380)
v3.33.17 Realized gains/losses — item disposition (STAK-72)
v3.33.16 Clone mode redesign + edit modal UX (STAK-375)
v3.33.15 Beta domain toast (STAK-376)
v3.33.14 Goldback G½ slug resolution (STAK-373)
v3.33.13 Market Page Phase 2 (STAK-371)
v3.33.12 Version drift correction
v3.33.11 Spot price card label root cause fix (STAK-274)
v3.33.10 Mobile long-press spot price entry (STAK-285)
v3.33.09 Spot price card cache label fix (STAK-274)
v3.33.08 Vendor medal ranking fix (STAK-370)
v3.33.07 Oklahoma Goldback G1 on market page (STAK-370)
v3.33.06 Market Page redesign Phase 1 (STAK-369)
v3.33.05 Search cache cleanup, dead code removal
v3.33.04 NGC lookup, fractional oz, cloud sync reorder
v3.33.03 Clean up announcements
v3.33.02 Cloud sync safety overhaul (STAK-295/190/360)
v3.33.01 Numista search overhaul (STAK-345/346/354/362/363)

Release Archive Fix

.gitattributes updated to exclude wiki/, playground/, ui-standards/, and dev tooling from release downloads.