Changelog

The complete development history of CS2Locker

1601+ commits since July 2025

1601
Total Commits
958
Features
348
Bug Fixes
10
Months Active

April 2026

5 weeks

Week 5 (Apr 26-30)

Features(8)
  • Cash Trader: subscription model with pricing tiers and access control — gated quote building, partner management, and trade logging behind paid plans
  • Tradeup Finder: subscription model with pricing tiers and access control, plus a dedicated /tradeup-access page for plan selection
  • Tradeup Finder free-plan banner: rewritten copy to make ROI opportunities and the upgrade value prop clear at a glance
  • Inventory Pricer: founding-plan pricing display now shows the original price with strikethrough alongside the discounted founder price
  • Subscription descriptions (i18n EN + RU): clearer wording on what each product unlocks and the billing terms — applied across pricing pages, paywalls, and checkout
  • Skin descriptions: editorial generation pipeline with improved formatting — auto-generates richer, more readable copy on item pages instead of the older terse blurbs
  • SteamMarketPanel: full Steam market data display added, and the trending data source switched to use it as the primary feed
  • Steam API retry logic: transient Steam failures (timeouts, 5xx) now retry with backoff instead of bubbling up as a hard error to the user
Fixes(3)
  • SteamMarketPanel: surrounding-point scan now includes the final element of the price series — previously the last data point was skipped, causing the rightmost segment of the chart to render incorrectly
  • SteamMarketPanel: zero/null prices are dropped from the market-average curve so missing data no longer drags the average to 0 and creates phantom dips on the chart
  • SteamMarketPanel: change percentages now align with the chart line across data gaps — the % delta and the rendered curve no longer disagree when a day has no listings

Week 4 (Apr 19-25)

Features(14)
  • Inventory Value Checker: delta badge shows "+$X (+Y%) since last checked on [date]" on the estimated value, comparing the current check against the previous snapshot of the same Steam ID (stored per-device in localStorage, persisted in session cache across back-nav)
  • Multi-source pricing: PricerTab and QuoteBuilder now let users pick which price source to trust, with the selection and picked sources persisted to localStorage across sessions
  • SteamMarketPanel: added "market average" and "cheapest listing" source options alongside the existing providers
  • Cash Trader "How to use" modal: full walkthrough covering inventory pricing, quote building, and partner management
  • QuoteBuilder: price mode selector + offer percentage input; offer percentage now shown on the public quote view
  • CashTradePanel: price mode selection and improved item filtering with the shared pricing logic
  • PricerTab / new PricerItemRow component: cleaner per-item display with inline overpay breakdown
  • Stacking for fungible duplicates in the PricerTab so identical items collapse into a single row
  • Craft recommendations: finish selector and enhanced filtering; flagged items now show total overpay
  • New Glove Popup: celebratory prompt when a new glove is discovered in inventory, with suggestion list
  • Live Deals: enhanced price display and clearer SEO meta descriptions
  • Bulk sell handling, quote acceptance flow, and inventory estimation adjustments across the Cash Trader suite
  • Skinplace added back into the per-source price flow after the aggregator-only period
  • Float sorting added to the trade-up inventory selector
Fixes(9)
  • Fixed /deals market-to-market returning 0 results when both sides were Buff163/YouPin/LIS Skins/Steam: catalog_item_prices.count is NULL for these providers (they do not publish a listings count) and the minListings filter used COALESCE(count, 0) >= N, so NULL → 0 silently excluded every row. Switched to (count IS NULL OR count >= N) and cleared the poisoned L2 response cache (1,161 entries)
  • Fixed /deals tab switching feeling sluggish: tab state was bound to the route, so every tab click triggered a full Nuxt route change and re-awaited useFetch in Suspense before rendering. Moved the direction to local state + window.history.replaceState so the URL still updates but there is no route transition — useFetch just refetches reactively against the warm L2 cache
  • Fixed inventory value page session handling on reloads and with query parameters
  • Fixed craft sold check API endpoint in useCraftSoldCheck
  • Fixed sold sticker craft deals leaking into craft recommendations (now filtered server-side)
  • Fixed inventory fetch errors: detailed error messages with dismiss option instead of a generic banner
  • Fixed affiliate link generation to use encodeURIComponent for special characters in market hash names
  • Fixed cs2c /market/items liquidity field rename (upstream renamed the field; our reader now follows)
  • Stopped flagging Shadowpay as a missing source after it was removed from dataset regeneration
Performance(2)
  • Streamlined price fetching by integrating the cs2c prices stream and removing redundant per-item API calls
  • Craft deals dedup + improved scoring so identical listings don't occupy multiple slots in recommendations
Refactoring(4)
  • Restored per-source price fetchers (pre-cs2c aggregator) for reliability — aggregator is still used where it wins, but individual providers can be refreshed independently
  • Removed Shadowpay from dataset regeneration (provider discontinued)
  • Removed inventory indication from sticker display in portfolio and craft recommendations
  • z-index pass across modals + liquidity-aware row class logic in the live deal tables

Week 3 (Apr 12-18)

Features(36)
  • Sticker Craft Scanner: new tool that surfaces underpriced sticker crafts, with a dedicated API, deal listings, alerts, and cross-promotion on the Live Deals page
  • Craft Recommendations: portfolio-linked widget surfacing relevant sticker crafts with skin images, click tracking, inspect links, and a sign-in prompt for non-logged-in users
  • Server-side craft deal filtering: sticker-aware search (with 5-word cap to prevent query amplification), dedicated StickerAutocomplete component with keyboard nav, stale-response guard, and tab-close handling
  • Craft deal filters (sticker, etc.) gated behind Pro/Elite; sneak-peek visible for free users, with a 200-result cap + total count + upgrade prompt
  • Pagination for sticker craft deals API, client pagination for craft listings, and direct-on-mount fetch (no longer SSE-only)
  • Sticker identity extraction and scoring improvements for craft deal matching, plus "exclude previously shown stickers" and a max-price filter
  • User Reviews: full CRUD reviews feature with dedicated UI, FeaturedByCreators component, and responsive ReviewFeed layout with dynamic load-more
  • Discord Bot: launched with /price, deal feed, inventory pricing, market pulse, and /craft commands — semantic skin search, wear/color autocomplete, and a color-first random-skin mode; /help with detailed usage examples
  • Developer Portal: public /developers API docs page, Developer link in the user menu, attribution snippet with live preview and partner source slug, response example updated to match actual slim API output
  • Partners API: new partners + partner_api_keys + partner_api_usage tables, partner-auth utility (API key validation + usage logging), GET /api/partner/inventory endpoint (calls embed internally — no duplicated pricing logic), admin partners CRUD + management page, Partners link in admin nav, /developers restricted to partners and admins, ?ref source tracked in quotes/embed for partner usage logging
  • Embed API slim mode: inventory-value gets full items, browser extensions get top5Items + bestCraft instead of the full inventory array
  • Investment Recommender: new backend engine with horizon configs, pure scoring functions, phase-aware scoring + MHN/phase dedup, backtest runner with expected-return calibration, cron that persists top-100 per horizon, admin read endpoint, backtest POST + status GET endpoints, marketplace URL builder, and a 3-column admin UI registered as an Investments tab on /admin/stats
  • Investments UI: rows link to cs2locker item pages (dropped marketplace buttons), historical value chart with daily price tracking, pump-alert data migrated to trending_precomputed + item_prices
  • Trending precomputation: aggregated data storage with refined SQL window functions and cache management (reduces cold-query cost on /trending)
  • Skinplace added as a new marketplace source — price provider wired across all per-item pages, marketplace mapping JSON extended, affiliate links and favicon added, EN + RU translations
  • Skinplace styling + integration polish across all pages
  • Skin-slug price lookup API for quick single-item price fetches with DB integration
  • Sticker search added in the inventory view with debounce, and in StickerAutocomplete for live-deals filtering
  • Mobile navigation redesign: collections and capsules sections added to the mobile sheet
  • Navigation: weapon-specific dropdowns with improved item URL handling
  • Admin regenerate-dataset button with auto-retry on missing sources, routed through a session-gated proxy endpoint
  • Maintenance mode with dedicated page and middleware (for controlled rollouts)
  • Sold reporting with real-time updates for bot deals
  • Sticker event filtering + craft quality options on live deals
  • Fade skin "% not tracked" note in inventory so users know fade percentage is not yet measured
  • Inventory caching + sticker overpay calculations added to the inventory pipeline
  • Phase detection logic supports multiple market-hash-name formats (Doppler, Gamma Doppler, Case-Hardened variants)
  • Phase info added to item linking and display so Doppler phases route correctly
  • Trophy sticker pricing: premium base threshold for high-tier stickers
  • SkinSwap: added price fetching and source-health monitoring
  • Sticker interface migrated to refPriceUsd with tooltip updates
  • Pending queue for new craft deals + bulk merge logic (ingest smoother under burst load)
  • Inspect-in-game link functionality for craft deals (DB schema updated)
  • Free tier: show 200 craft deals sorted by creation date with upgrade prompt, limit featured results to 10
  • Craft sales image generator rendering template polished for the new slideshow cards
  • AWP Chromatic Aberration giveaway promos removed (campaign ended)
Fixes(13)
  • Fixed sticker crafts being hidden when regular deal filters eliminated all deals — crafts now fetched and displayed independently of the deal filter chain
  • Fixed currency selector not updating prices on the live-deals page
  • Fixed currency selector ignored on the market-arbitrage deals page
  • Fixed craft deals not fetching on mount (was SSE-only — cold loads showed empty)
  • Fixed free-user load-more miscounting craft deals when capping at 200
  • Fixed source-agnostic sticker price lookup in embed so non-CSFloat sources return prices
  • Fixed attribution snippet: now a single copyable "Powered by" block with inline logo, points at the inventory-value page with steamId + utm_source
  • Fixed embed endpoint overpay=false param so estimator includes float and sticker premiums
  • Fixed ensurePartnerTables not being called on admin partner endpoints (first request failed cold)
  • Fixed /developers refresh: client-side fetch to avoid stale stats
  • Removed duplicate isFree declaration in craft deals endpoint
  • Moved craft filter watchers after craftSortBy declaration to avoid TDZ reference errors
  • Session check logic tightened to prevent redundant auth checks on mount
Performance(6)
  • Sitemap index trimmed to only high-value sitemaps (thin content handled separately)
  • Upsert prices earlier during dataset regeneration and shortened the overall run
  • useLazyFetch for collections data + optimized sparkline computation
  • cs2c fallback retry inlined before parse/upsert (one fewer round-trip per miss)
  • SQL query for trending items refined: aggregation + window functions tightened for the precomputed path
  • Paginated sticker craft deals API + optimized SSE streaming
Refactoring(5)
  • Partner endpoint calls embed internally, removing the duplicate inventory-pricing util
  • Developer portal and admin wiring: added Partners table + indexes, steam_id column on partners for developer-portal linking, unique index for overpay discovery combo
  • Removed social proof section and review modal from the dashboard
  • Discord bot: rewrote /craft to use cs2locker's craft-suggestion endpoint so both surfaces agree on pricing and scoring
  • Various scripts added for pricing diagnostics, float analysis, and investment diagnostics/scoring

Week 2 (Apr 5-11)

Features(22)
  • Deals page full rebuild: new card grid + Pro table view with localStorage-persisted toggle
  • Trust Score 0-100 per deal: composite metric combining liquidity, sales velocity, price stability, freshness, and provider health
  • Trust Score breakdown popover: hover any badge to see the 5-factor bars
  • Deal Story chart: compact composite price sparkline per card with buy/sell reference lines and shaded profit gap band
  • Detail drawer: slide-in per-deal breakdown with 180-day chart, profit calculator, and recent sales
  • Profit Calculator widget: live quantity + cashout method selection with real per-provider fees
  • Persistent filter sidebar with new Min Trust Score slider (0-100)
  • Direction unified: Market -> Steam and steam-instant merged into one tab with sell-price-mode toggle
  • Sell price toggle (Listing / Buy Order) on every direction for honest profit math
  • Working quick-action deep links per provider (Steam, CSFloat, Buff163, YouPin, CSMoney, White.Market, Tradeit.gg, Skinport, Waxpeer, and 8 more) with affiliate/ref params
  • Researched cashout methods for all 17 providers with accurate per-provider fees (CSFloat crypto 1.5%, LIS Skins crypto 0.4%, Shadowpay 5%, Skinport/Skinbaron bank 0%, etc)
  • New methods supported: card payouts, Skrill, Alipay, steam_wallet
  • Profit now includes both marketplace fee AND cashout fee, compounded correctly
  • External market buy-order prices (instant sell) via catalog_item_bids join for steam_to_market and market_to_market directions
  • Soft real-time refresh: 60s polling with pause-when-tab-hidden
  • New deal-metrics ingest job: top-500 items enriched every 6h with sales velocity, candles, liquidity scores, and trust breakdowns
  • Three new DB tables: catalog_item_metrics, catalog_item_sparklines, deal_metrics_top_items
  • Per-item price coherence outlier filter (drops prices >3x or <0.33x the median) to block data corruption in rankings
  • Deal frequency ranking weighted by absolute USD gap (not raw count) so expensive items with real arb beat cheap items with penny gaps
  • Pro table: sticky header, inline 80x24 sparklines per row, color-gradient profit cells
  • Sell-side buy-order warning: yellow label when Instant mode is used on non-Steam directions (float/pattern-specific caveat)
  • Full en + ru locale support for all new strings
Fixes(10)
  • Fixed TrustScoreBadge hover popover being clipped by card overflow (now Teleported to body with fixed positioning)
  • Fixed detail drawer z-index being below the site navbar (bumped to z-[9999])
  • Fixed DealStoryChart rendering blank on expensive variants (Y-scale now based on sparkline range, reference lines clamped to viewport)
  • Fixed opportunity rank collapsing wear variants: computeTopItems now picks most-listed market_hash_name as representative per (item_type, item_id)
  • Fixed /sales, /prices/candles, /market/items upstream shape mismatches discovered during ingest build-out
  • Fixed numeric item_id lookup for /market/items (now extracts from first sale instead of using slug)
  • Fixed TRUNCATE + INSERT on deal_metrics_top_items to run inside a transaction so a failed batch does not leave the table empty
  • Fixed itemsSucceeded counter over-counting on silent upsert failures in the ingest script
  • Removed FreshnessBadge from cards and pro table (metric was misleading - measured enrichment refresh, not deal freshness)
  • Fixed legacy /deals/steam-instant URL redirecting to /deals/market-to-steam with instant mode pre-selected
Performance(4)
  • CS2C per-item cache (6h TTL, FIFO eviction at 5000 entries) to keep lazy drawer fetches free
  • Opportunities endpoint LEFT JOINs enrichment tables instead of live fetching per page request
  • Deal-metrics ingest runs with concurrency=10, ~100s wall time for 500 items, ~180k CS2C calls/month (36% of budget)
  • cs2c-detail caches registered with the global cache-registry for memory diagnostics visibility
Refactoring(3)
  • Replaced the 979-line pages/deals/[[mode]].vue monolith with a ~280-line shell composing 20 new components under components/deals/
  • Extracted 3 new composables: useTrustScore, useDealsView, useDealRefresh
  • Trust score factor values now clamped to 0-100 to prevent breakdown leakage on malformed inputs

Week 1 (Apr 1-4)

Features(12)
  • Market Signals: indicators and signals tab for price trend analysis
  • Market Context API with aggregated prices, bids, and server-side caching
  • Special Sales Feed: notable sales component with dedicated API endpoint
  • Craft sales image generator with API endpoint and rendering template
  • Bids functionality added to sticker API with new bids table
  • Buy order profit sorting option added to live deals
  • Craft sales: period selection for image generation and simplified data handling
  • Cases tab added to trending page with category chip filter
  • Stickers page: color filter functionality with updated translations
  • SteamMarketPanel: watermark logo and improved spacing
  • Liquidity volume: prefer candle volume over reported volume for accuracy
  • Market indicators terminology update and price history backfill improvements
Fixes(3)
  • Fixed current price display: font size, layout responsiveness, and removed truncation
  • Fixed webhook URL validation to support both Discord API endpoints
  • Fixed Cases category filter to use weapon_category directly

March 2026

5 weeks

Week 5 (Mar 25-31)

Features(19)
  • Price Database page with float and sticker overpay analysis, highlights, pagination, and StatTrak support
  • Float overpay: premium calculation, tier aggregation, sorting, and float values as clickable CSFloat links
  • Sticker overpay: per-sticker breakdown, sticker count filtering, search and sales detail display
  • Craft Calculator with API endpoint for estimating craft value, sticker selection enhancements, and sorting by price/overpay
  • Recent stickered sales feature with API endpoint for fetching sales data
  • Portfolio: timeframe selector with value chart, holdings breakdown, mover display mode, and profile tab with overview and performance metrics
  • Portfolio: sticker overpay pricing in estimator and inventory, market information and overpay details in PricerTab
  • Inventory pricer: sorting by price/float/sticker overpay, overpay totals display, clear button, and inspect links
  • TikTok/social media slideshow generator for Live Deals with English captions, float values, stickers, and separate CSFloat/Youpin prices
  • Case investment page: risk levels, diversification strategy, disclaimer and how-it-works section
  • UpgradeModal: dynamic button states, loading indicators, Discord notifications for new subscriptions
  • Live Deals: upgrade prompts with social proof, stickers support in bot deals, absolute $ savings sort
  • Google Ads conversion tracking and upgrade modal tracking
  • Tier assignment (Pro/Elite) to admin users table
  • InGamePreview: inspect functionality with server modal auto-open
  • Crafts tab added to admin stats page with top craft sales API
  • SEO audit script to check HTML size and meta tag placement
  • Popular skins aggregation for landing page
  • Enhanced inventory filtering with category and quality options
Fixes(9)
  • Fixed aggressive strategy showing no cases on investment page
  • Fixed mobile overflow on live deals subscription banners and filters
  • Fixed mobile subtitle visibility for top deals section
  • Fixed discount percentages and redesigned deal slides fullscreen
  • Fixed sticker icon URLs: normalize raw Steam hashes to absolute URLs
  • Fixed Steam skin loading: fetch all skins instead of only first page
  • Fixed mobile menu, sticker URLs, and top gainers price source
  • Fixed float limit in overpay fetch parameters for improved performance
  • Fixed "Tradeup" to "Trade Up" across all user-facing text for SEO consistency
Performance(3)
  • Sitemap size drastically reduced by noindexing thin content pages
  • CDN caching + ISR enabled for /tradeup and /loadout-builder
  • Optimized fetchSparklines function to handle large batches of marketHashNames
Refactoring(7)
  • Excluded Steam prices for Doppler/Gamma Doppler to improve phase-specific pricing accuracy
  • Unified trending stats computation for consistency across market panels
  • Removed marketplace health monitoring features and related code
  • Removed wear previews and 3D model viewer from skin slug pages
  • Reverted tradeup SEO to "Trade Up" (two words) to recover search rankings
  • Updated search word cleaning to allow periods and hyphens for improved matching
  • MegaMenu component renamed to UiMegaMenu with adjusted menu width

Week 4 (Mar 22-25)

Features(14)
  • Inventory Pricer tool: full Steam inventory pricing with access control, price history charts, liquidity data, 24h price change stats, Doppler phase detection, recent searches, item modal, and mobile optimization
  • Cash Trade Logger: track cash skin trades with partners, items, search/sort by market price, bulk item delete, optimistic UI updates, and unified Cash Trader page combining inventory pricer and cash trades
  • Elite Stats Dashboard: overview cards (deals today, this week, avg savings, best deal), hourly heatmap with local timezone conversion, category breakdown, savings distribution charts, and personal alert stats
  • Live Deals improvements: SSE Web Worker for reliable streaming, sound and push notification options for deal alerts, saved filter defaults, best finds (top deals last 7 days), subscription tier watch for alert reload, and deal cleanup optimization
  • Inventory estimator widget with embeddable functionality, quote management, and SEO metadata
  • Telegram integration for linking and unlinking accounts
  • Skin search with debounce and results dropdown across the app
  • Trending page: top 5 cheapest pricing providers for averages, unified change_pct calculations, 7d/30d stats support, and outlier method alignment across market history panels
  • Inline hints and cross-links added across key pages for better discoverability
  • Sticker search click tracking with stats API
  • Docker Compose configuration for development environment
  • Security.txt added conforming to RFC 9116 with scope and disclosure policy
  • API middleware to prevent search engine indexing of API endpoints
  • "View offers" label replacing "Buy Now" across EN and RU translations
Fixes(10)
  • Fixed SSR cookie forwarding in checkSession to prevent auth redirect on page reload
  • Fixed CurrencySelector not respecting v-model binding and improved visibility
  • Fixed sparklines computed from raw daily snapshots instead of precomputed table
  • Fixed chart not updating when switching pricing source
  • Fixed SteamMarketPanel mobile layout
  • Fixed item images and item selection in cash trade panel
  • Fixed optimistic UI updates on delete for all tabs in cash trades
  • Fixed tab refresh (holding, sold, partners, overview) on any data change
  • Fixed instant partner delete and bulk item delete with full tab refresh
  • Fixed stickers JSON serialization in cash trade record creation
Performance(2)
  • Web Worker for SSE deal streaming eliminates main-thread blocking
  • Refactored alert notification processing to use existing DB connection
Refactoring(3)
  • Trending stats calculations unified with change_pct and aligned outlier methods
  • Quote data fetching refactored to use useFetch with improved error handling
  • Removed fallback polling and visibility change handling from live deals component

Week 3 (Mar 15-21)

Features(13)
  • Portfolio investment tracker: crafts tab with SP% guidelines, discontinued items category, float premium feature, manual item add/remove with context menu, event price editing, removed items popup, and global currency formatting
  • Sticker Search page: CRUD operations, duplicate/clear action buttons, click tracking, and SEO metadata with structured data
  • Pump Detection Radar: hourly heuristic scoring with filtering by confirmed sources
  • Custom error page with dynamic messaging and action buttons
  • API token generation and validation with rate limiting for secure external access
  • Trending page: collection filter, weapon category filters with toggle, time period selector for social media image generator
  • Trade-up improvements: improved layout and mobile responsiveness, currency formatting with pinned currencies in selector
  • Inspect in-game feature with modal and initial stickers support
  • Combined slideshow with compact cards (5x2 per section) and TikTok 1:1 layout (5x3 grid)
  • Inventory banner with authentication prompts added to LoadoutBuilder
  • Responsive showAdvanced state based on client width
  • Portfolio inventory filter and overview API filtering support
  • Skin color analysis batch size increased for larger datasets
Fixes(9)
  • Fixed trending data timezone bug (UTC to CET) with migration to rebuild historical data
  • Fixed precompute-trending crash by installing pg in Docker runner stage
  • Fixed duplicate hourly snapshot rows causing ON CONFLICT errors
  • Fixed badge overlap on small card screens in trending page
  • Fixed condition filtering logic for skin selection based on float ranges
  • Fixed slugify function in sitemap routes for better URL formatting
  • Fixed header/footer layout: logo class bindings, link padding, image alignment
  • Fixed image source URL for sporty gloves on homepage
  • Fixed minListings condition to allow zero listings in trending
Performance(6)
  • Optimized SQL queries for item statistics with new database indexes and sparkline fetching
  • ISR caching for routes with Cloudflare edge rules and streamlined Docker build
  • LRU cache driver with 500-entry limit replacing unbounded caches to prevent memory growth
  • API Cache-Control headers optimized for Cloudflare edge caching
  • Enforced query limits across APIs to prevent memory leaks
  • Memory monitor with startup grace period, per-request tracking, and 5MB leak threshold
Refactoring(3)
  • Normalized slashes to hyphens in item names for consistent cross-source matching
  • Removed verbose console logs and simplified cache TTLs for dataset and tradeup skins
  • i18n locale files removed; configuration streamlined

Week 2 (Mar 8-14)

Features(24)
  • Skinbaron marketplace integration with EUR/USD exchange rate conversion for accurate pricing
  • Live Deals feature: real-time bot deal cards with SSE streaming, admin-only access, rarity colors, and CSFloat affiliate links
  • Live Deals widget on trade-up page with tracking and announcement banner promotion
  • Live Deals FAQ section, enhanced SEO metadata, and OG image generator
  • Knife & Glove Combo Generator page with budget optimization, gloves toggle, and SEO-optimized writing guidelines
  • Social media image generator added to admin panel with trending card-style design
  • Marketplace finder wizard with step-by-step guidance for choosing the best marketplace
  • Trending page: pre-computed data with pagination, min marketplaces control, sparkline charts, and multi-period analysis (24h/7d/30d/90d)
  • Trending page: crate item support, source filtering, and optimized SQL aggregation with smarter caching
  • "Remember filters" feature: logged-in users can save filter preferences per page (DB-backed, auto-loads on return visit)
  • Redesigned trending filter bar: segmented period/direction controls, expandable advanced panel with grid layout, hover tooltip on remember button
  • Item count added to agent, case, graffiti, keychain, music kit, patch, and sticker API endpoints
  • Price aggregation updated to use best prices across all sources
  • CDN integration enhanced with image key listing and optimized upload logic
  • items_game.txt download and caching in dataset regeneration process
  • New case and gloves sections added to homepage index
  • Stock count handling added to listings in dataset regeneration
  • Marketplace logos and favicons updated for accuracy; OG image added to highlights page
  • Marketplace quick links added to admin affiliates tab
  • Stable scrollbar UI enhancement and improved announcement banner dismissal
  • "Deals" renamed to "Market Arbitrage" across all components with improved item type filtering
  • Color classification thresholds updated for skin analysis
  • Admin panel: tab button bar replaced with dropdown select for cleaner UI
  • Deal expiration extended from 30 minutes to 1 hour
Fixes(8)
  • Fixed memory leak: streamed files to S3 instead of buffering entire contents in memory
  • Fixed leaked DB connection in getAndIncrementRegenerationCounter
  • Fixed duplicate in-memory caches causing excessive memory usage
  • Fixed skin prices on slug pages: skinData was undefined due to double return statement
  • Fixed itemsWithPrices created after uniquePrices was already cleared
  • Fixed duplicate image download and GC timing after dataset regeneration
  • Fixed Satori rendering error: added explicit display to all social image template elements
  • Fixed bot deals query fetching all active deals by removing artificial limit
Performance(4)
  • Streaming S3 uploads instead of buffering entire file contents in memory
  • Eliminated duplicate in-memory caches to reduce server memory footprint
  • Trending SQL queries refactored for pre-computed aggregation with optimized caching
  • Cache control for market price history reduced for improved data freshness
Refactoring(4)
  • SQL query structure improved for price comparisons with buy/sell candidate separation
  • Header scaling removed; side banner margins adjusted for cleaner layout
  • MegaMenu handleMouseLeave logic simplified
  • Removed verbose console logs from cases, stickers, and DB pool endpoints

Week 1 (Mar 1-7)

Features(25)
  • Navbar redesigned with mega-menu structure for improved navigation and browsing experience
  • iTrade.gg added as marketplace source with affiliate links and DMarket favicon sizes updated
  • Charms section: Keychains renamed to Charms across the entire app — new /charms overview page, slug detail pages, navigation added to "Other" dropdown, highlight charms filtered from regular list
  • CSFloat affiliate links for charms using keychain_id and keychain_index parameters
  • SkinSwap marketplace integration as a new price provider, with Doppler phase skin support
  • Activity history page: filters by date range, source, and price sort for tracking item price changes over time
  • DMarket marketplace integration: live price data, affiliate buy links, and Doppler phase pricing across all item detail pages
  • DMarket API integrated into dataset regeneration for aggregated prices and Doppler items
  • Trade Up Finder email verification flow: Steam login gate on /tradeup-access, email input tied to Steam account, tokenized verification link grants instant free access (capped server-side at 20% ROI), with verification email sent via Resend
  • Trade Up Finder free tier: server enforces ROI cap (roi ≤ 20%) regardless of client query params, locked count returned to show how many opportunities exist above the cap with upgrade prompt
  • Trade Up Finder notifications: pulsing badge on profile avatar and green dot on "Trade Up Finder" dropdown item when access is newly granted — cleared on first visit via localStorage
  • Verified redirect flow: ?verified=1 query param preserved through the entire redirect chain (including Steam login) so success banner always shows after email verification
  • Admin Affiliates tab: CSFloat affiliate data with summary cards for total earnings, referral count, and earnings by month
  • CSFloat affiliate data enhanced with referral and earnings breakdown
  • Required contact field added to bug report form
  • Discord webhook notification for Trade Up Finder signups replacing admin email notifications
  • Dynamic scroll banners on homepage with skins-first layout and removed Market Prices heading
  • Homepage compact pill strip: large collections/tools blocks replaced with a quick-link pill strip, navbar search shown on homepage
  • Cookie consent banner added compliant with Dutch ad regulations; AdSense removed; GA4 gated behind user consent
  • Google Analytics Consent Mode v2: GA4 always loaded with consent signals, privacy policy updated to reflect GA4 usage
  • Google Analytics opt-out option added to privacy page
  • Vercel Analytics removed (no longer on Vercel)
  • Affiliate click tracking: page category now tracked per click with a breakdown in the admin stats panel
  • Announcement banner updated to promote Trade Up Finder access
  • Trending API enhanced with improved caching strategy and flexible query parameters
Fixes(15)
  • Fixed loading state management in checkSession to prevent race conditions on page load
  • Fixed affiliates monthly breakdown date formatting using en-US locale
  • Fixed SkinSwap prices missing for Doppler phase skins
  • Fixed trade-up page SEO: h1 heading moved above forward/reverse mode switch, heading level changed from h2 to h1, title and meta description updated for better search visibility
  • Fixed aggregateRating invisible to Google by fetching rating data server-side instead of client-side
  • Fixed JSON-LD rendering and price/image schema for Google rich results
  • Fixed ID-based skin URLs now redirect 301 to canonical slug URLs
  • Fixed souvenir prices being incorrectly fetched for non-souvenir skins
  • Fixed trade-up stats layout: stats card moved above outcomes section and made compact
  • Fixed duplicate generateSkinSlug import causing build failure
  • Fixed highlight charm filter to always apply, not only when search is active
  • Fixed [nuxt] instance unavailable error in charms redirect
  • Fixed CSFloat keychain parameter name: keychain_id → keychain_index
  • Fixed side banners clipping before reaching the footer on scroll
  • Fixed admin stats: page_category migration now runs before querying, today's click count uses DB-side DATE_TRUNC to avoid timezone mismatch
Performance(2)
  • Trending API caching improved with smarter invalidation and query parameter support
  • Node.js memory limit set to 4096MB in Docker for build stability
Refactoring(5)
  • Removed blog routes, RSS feed endpoint, sitemap blog entries, and blog post types from the server
  • Refactored CSFloat affiliates fetching to use a dedicated server API endpoint
  • Affiliates earnings calculations now use balance offset instead of raw amount cents
  • Homepage: large collections/tools blocks replaced with compact pill strip navigation
  • GA4 refactored to use Consent Mode v2; old cookie banner removed in favour of built-in consent flow

February 2026

4 weeks

Week 4 (Feb 22-28)

Features(18)
  • UUSkins marketplace integration: 24,890+ price listings fetched via paginated POST API (25 pages, 1s delay), per-phase Doppler pricing expanded from dedicated doppler sub-object (P1–P4, Ruby, Sapphire, Emerald, Black Pearl), affiliate buy URLs stored per item, favicon via PWA icon, full i18n descriptions in EN and RU
  • SkinCard compact mode: new compact prop on SkinCard renders a condensed layout in the trade-up finder — tighter padding, smaller image, inline price — without touching the default card used elsewhere
  • Trade-up finder improvements: skin result cards now link directly to /skins/:slug detail pages from the database slug, iTrade.gg and HaloSkins prices integrated into trade-up output calculations, server-side pagination added for large result sets
  • CompleteTheLook widget now dynamically labels the knives section ("Karambit", "Butterfly Knife", etc.) and gloves section ("Sport Gloves", "Hand Wraps", etc.) based on the actual items returned rather than hardcoded category headers
  • Condition-specific skin pages: /skins/:slug/:condition now serves the full skin detail page with that condition pre-selected — same layout, same prices, same float viewer, just a dedicated URL per wear — multiplies ~2,000 skin pages into ~10,000+ indexed pages including StatTrak™ and Souvenir variants
  • StatTrak™ and Souvenir condition URLs: /skins/ak47-redline/stattrak-field-tested and /skins/ak47-redline/souvenir-field-tested each get their own dedicated URL, crawlable NuxtLink, and condition-specific SEO metadata
  • Sitemap extended with ~4,000–5,000 condition-level URLs (priority 0.6) covering all weapon skins × available wear conditions
  • Condition selector buttons (Standard, StatTrak™, Souvenir) are now crawlable NuxtLinks — all variants discoverable by Google
  • Condition-aware SEO: title, description, canonical URL, OG and Twitter tags all update reactively per condition including StatTrak™/Souvenir prefix
  • Wear preview slider on condition pages pre-scoped to the condition's float range (e.g. FT slider constrained to 0.15–0.38)
  • Email validation added to trade-up access request form and portfolio waitlist modal: rejects addresses without proper @ and valid TLD
  • Skinport marketplace integration: price data, affiliate links, trade-up support, and i18n translations across all pages
  • Loadout builder inspiration section with curated themed loadout examples and improved SEO copy
  • Mobile filter sheet for advanced search: slide-up bottom sheet on mobile/tablet with full filter controls
  • Enhanced SEO metadata for knife and rifle category pages with richer descriptions and keyword targeting
  • Trade-up calculator title and meta description updated for better search visibility
  • Trade-up access request system: email notifications when users request access, with admin manual sender
  • Trade-up improvements: server-side pagination for skin results and improved float range calculations
Fixes(10)
  • Fixed condition page content not updating on client-side navigation: conditionWear was a plain const (frozen at setup time) — converted to reactive computed(() => route.params.condition) with a watch to sync selectedCondition on every route change
  • Fixed definePageMeta imported as a function causing 500 errors: it is a compiler macro and must never be imported
  • Fixed Nuxt 3 nested routing preventing condition pages from rendering: added NuxtPage outlet in parent then refactored to single-component approach where [slug].vue handles both base and condition URLs directly
  • Fixed Skinport favicon not displaying on slug pages: switched from direct skinport.com URL (blocked by hotlinking) to Google faviconV2 proxy, matching other marketplace favicons
  • Fixed price snapshot bug causing 51 days of missing trending data: NULL constraint on phase/wear columns and 30s statement timeout silently aborting bulk inserts — resolved with COALESCE defaults and disabling timeout for that operation
  • Fixed missing canonical URLs on /agents, /patches, /souvenir-packages, and /stickers/autographs pages causing Google to mark them as soft 404 or unknown
  • Fixed 5,439 soft 404 URLs: stickers, patches, graffiti, and keychains were being linked to /skins/ routes that do not exist — added getItemUrl() helper to route each item type to its correct detail page
  • Fixed collections JSON-LD schema generating wrong /skins/ URLs for non-skin items (patches, graffiti, stickers, keychains) embedded in collections
  • Fixed 404 on all Doppler and Gamma Doppler phase skin pages: stored slug column had no phase suffix (e.g. bayonet-gamma-doppler for all 5 phases) — migrated all 181 phase skins to include phase in slug (bayonet-gamma-doppler-emerald, bayonet-doppler-ruby, etc.) and added OR s.slug = $1 fallback to the API WHERE clause
  • Fixed affiliate URL never reaching buy buttons: API jsonb_build_object used camelCase key affiliateUrl but the template and computed accessed snake_case affiliate_url — all iTrade.gg and UUSkins buy buttons were silently falling back to # instead of the stored URL
Refactoring(3)
  • parseConditionSlug() / getConditionSlug() helpers handle stattrak- and souvenir- URL prefixes cleanly with zero duplication
  • Added getItemUrl() universal URL helper to useUtils.ts — detects item type and returns the correct route prefix for all CS2 item categories
  • Updated useInternalLinking.ts and related skin/collection pages to use getItemUrl() instead of hardcoded /skins/ prefix

Week 3 (Feb 15-21)

Features(4)
  • Light mode / dark mode theme toggle with localStorage persistence, system preference detection, and flash prevention
  • Markets page editorial buyer's guide: decision framework, fee breakdown, and security tips sections
  • Updated CS2 Skin Investment Guide blog post with richer market analysis and $6B+ market context
  • Portfolio tracker: inventory value tracking with 24h/7d/30d change metrics (in development)
Fixes(2)
  • Fixed CS:GO case URL slugs generating cs-go instead of csgo — slugify now matches database behavior across all sitemaps and frontend links
  • Fixed light mode toggle crashing due to missing computed import in useColorMode composable
Refactoring(1)
  • Removed Skinport marketplace integration (affiliate composable, market data, price provider, i18n strings)

Week 2 (Feb 8-14)

Features(5)
  • Sticker rarity filter: filter stickers by rarity (Consumer, Industrial, Mil-Spec, etc.)
  • Sticker effect/finish filter: holo, foil, glitter, gold, paper, and more
  • "All Stickers" view mode to browse individual stickers across capsules
  • CSFloat direct link generation for cases and agents using def_index for accurate affiliate URLs
  • Admin route protection: server-side middleware blocking trade-up and admin pages without authorization
Fixes(2)
  • Enforce server-side authorization for trade-up finder and admin pages
  • Increase Node.js heap size for Docker builds to prevent OOM errors
Refactoring(2)
  • Trade-up educational content and FAQ structure updated for clarity
  • Removed placeholder data message from trade-up performance component

Week 1 (Feb 1-7)

Features(12)
  • Competitor comparison page: CS2Locker vs TradeUpSpy with detailed feature breakdown and FAQs
  • Email visit tracking and statistics in admin panel
  • HTML email newsletter template for marketing campaigns
  • llms.txt and llms-full.txt endpoints for AI crawler discoverability
  • Homepage FAQ section with structured data for AI SEO
  • Homepage feature cards expanded with Crosshair Generator, Best Skins, Markets, and Blog links
  • Best Skins pages: per-weapon skin rankings with price data and SEO content
  • Hreflang tags (en, ru, x-default) added to all pages for multilingual SEO
  • Enhanced robots.txt with explicit AI crawler rules (GPTBot, ChatGPT-User, ClaudeBot, PerplexityBot)
  • Improved structured data: Organization schema with knowsAbout, GitHub sameAs link
  • Competitor alternative pages (CSGOSkins.gg, TradeUpSpy) redesigned with richer SEO content
  • VS comparison pages (vs CSGOSkins.gg, vs TradeUpSpy) expanded with detailed feature tables
Fixes(2)
  • MarketCSGO affiliate links now point directly to item pages instead of search results
  • Removed Bitskins marketplace integration (provider discontinued)
Refactoring(2)
  • Consolidated SEO meta descriptions across site to emphasize "free" and "12+ marketplaces"
  • Cleaned up price provider composable after Bitskins removal

January 2026

5 weeks

Week 5 (Jan 27-31)

Features(9)
  • P2P Trading page with listings, search, filtering, and create functionality
  • Trading page SEO metadata and detailed trading information
  • Item phase (Doppler etc.) shown in display names across trading components
  • Admin moderation: admins can delete any trade listing
  • Trade URL required for P2P trading listings
  • Trade-up calculator test mode and float requirements
  • Float range calculations for input skins with minimum float display
  • Limited Edition items excluded from trade-up calculator
  • GitHub Actions workflow for automated trade-up calculations
Fixes(2)
  • Adjusted float calculation for realistic worst-case scenario
  • Side banner margin calculations for better responsiveness

Week 4 (Jan 20-26)

Features(13)
  • Server-side Trade Up Calculator with wear conditions and float calculation
  • Comprehensive CS2 trade-up analysis article and infographic
  • Trade-up recalculation frequency updated to every 6 hours
  • Changelog page with full development history
  • New collections section on homepage with featured collections
  • Chart period selection for price history visualization (7d, 30d, 90d)
  • Enhanced skin and sticker APIs with category mapping and color analysis
  • Skin type detection improvements for stickers and related items
  • Image error handling and fallback placeholder in sticker preview
  • Search bar responsiveness and focus handling improvements
  • Reset skins API endpoint with admin authorization
  • CDN image generation and items game data parsing endpoints
  • Zeus X27 added to weapon name mapping
Fixes(3)
  • Correct odds calculation for covert skins from multiple cases
  • Merge cases with shared outputs into single display group
  • Optimize sitemaps with direct database queries instead of API calls
Refactoring(1)
  • Removed video download plugin to streamline server startup

Week 3 (Jan 13-19)

Features(6)
  • Core application structure with item browsing and internationalization
  • Advanced search page with comprehensive filtering
  • Comprehensive trade-up system (calculator, finder, statistics)
  • Stripe-powered premium subscription model
  • Trade Up Finder with search, filtering, and results display
  • Client-side caching for tradeup skins loading
Fixes(2)
  • Header/navbar responsiveness on smaller desktop screens
  • Mobile header styling improvements

Week 2 (Jan 6-12)

Features(7)
  • Skin detail page with condition selection and inspect links
  • Normalized catalog database schema
  • Admin dashboard with stats and user management
  • Loadout builder with budget optimizer and image export
  • Inventory export image functionality
  • Steam inventory selector with search and sort
  • BitSkins, MarketCSGO, and Tradeit prices
Fixes(4)
  • Sticker name handling in inventory price loading
  • Item stacking logic in LoadoutImageExport
  • Buff and YouPin links
  • Overlapping buttons on tradeup page

Week 1 (Jan 1-5)

Features(6)
  • Strict budget allocation in loadout optimization
  • Inventory refresh rate limiting
  • Knife + Glove Combo Generator
  • Budget optimization to maximize spending
  • CS2 Inspects server integration
  • Cloudflare IP address handling

December 2025

5 weeks

Week 5 (Dec 27-31)

Features(6)
  • Lazy loading for skins in SkinSelector
  • Collection filter in TradeupSkinSelector
  • Wishlist API with CRUD operations and price alerts
  • Email alert banner for wishlist
  • Admin user management API with email statistics
  • Blog post and category pages with dynamic skin showcases
Refactoring(1)
  • Removed SuggestieBanner for cleaner UI

Week 4 (Dec 20-26)

Features(7)
  • Dynamic currency selection from exchange rates
  • "What's Coming" section for price analysis
  • Session persistence for tradeup
  • Rarity lock logic and reverse mode state
  • Color-themed loadout generator
  • Arbitrage opportunities API
  • "NEW" badge for unvisited deals
Fixes(1)
  • Ensure allSkins loaded before restoring tradeup session
Performance(1)
  • Streamlined PgBouncer configuration
Refactoring(1)
  • Database connection handling

Week 3 (Dec 14-19)

Features(5)
  • 3D Skin Viewer with WebGL rendering
  • Full-screen mode for 3D viewer
  • Screenshot and video export from 3D viewer
  • Wear slider for real-time preview
  • Multiple lighting presets
Performance(1)
  • Optimized 3D model loading

Week 2 (Dec 7-13)

Features(4)
  • Community page with user profiles
  • Profile customization options
  • Steam inventory synchronization
  • Trade offer links

Week 1 (Dec 1-6)

Features(3)
  • Price history charts
  • Multiple pricing providers comparison
  • Price drop alerts foundation

November 2025

4 weeks

Week 4 (Nov 24-30)

Features(4)
  • Steam authentication integration
  • User profile system
  • Saved loadouts functionality
  • Favorite skins feature

Week 3 (Nov 17-23)

Features(3)
  • Email capture system
  • Newsletter infrastructure
  • Price alert notifications

Week 2 (Nov 10-16)

Features(3)
  • GenCode system for shareable loadouts
  • Short URL generation
  • Social sharing improvements

Week 1 (Nov 1-9)

Features(3)
  • SEO improvements across all pages
  • Structured data implementation
  • OpenGraph and Twitter cards
Performance(1)
  • Core Web Vitals optimization

October 2025

4 weeks

Week 4 (Oct 27-31)

Features(4)
  • Trade Up Calculator launch
  • Expected value calculations
  • ROI analysis per trade-up
  • Float range predictions

Week 3 (Oct 20-26)

Features(4)
  • Multi-provider pricing system
  • CSFloat API integration
  • Pricempire integration
  • CSMoney pricing data
Performance(1)
  • Price caching system

Week 2 (Oct 13-19)

Features(3)
  • FAQ page
  • Contact form
  • About page revamp

Week 1 (Oct 1-12)

Features(3)
  • Internationalization (i18n) system
  • Multi-language support foundation
  • Currency conversion

September 2025

4 weeks

Weeks 3-4 (Sep 15-30)

Features(4)
  • Sticker browser and details
  • Music kit browsing
  • Patches section
  • Graffiti browser

Weeks 1-2 (Sep 1-14)

Features(4)
  • Advanced filtering system
  • Price range filters
  • Rarity filters
  • Collection filters
Performance(1)
  • Lazy loading for images

August 2025

4 weeks

Weeks 3-4 (Aug 15-31)

Features(3)
  • Mobile responsive redesign
  • Touch-friendly interactions
  • PWA foundation

Weeks 1-2 (Aug 1-14)

Features(3)
  • Dark mode support
  • Theme system
  • UI polish and refinements

July 2025

4 weeks

Weeks 3-4 (Jul 15-31)

Features(4)
  • Cases browser
  • Collections browser
  • Skin detail pages
  • Search functionality

Week 2 (Jul 6-14)

Features(4)
  • Loadout Builder initial release
  • Budget tracking
  • Skin selection interface
  • Shareable loadouts

Week 1 (Jul 1-5)

Features(5)
  • Initial project setup
  • Nuxt 3 + Vue 3 foundation
  • Tailwind CSS styling
  • Basic skin database
  • Rebrand to CS2Locker

Key Milestones

Jul 3, 2025

Project Inception

Initial commit as "CS2 Loadout Builder"

Jul 5, 2025

Rebrand to CS2Locker

New name, new identity

Jul 6, 2025

Loadout Builder Launch

Skin selection, sharing, and budget optimization

Jul 8, 2025

Cases & Collections

Browse all CS2 cases and collections

Oct 2025

Trade Up Calculator

ROI/EV analysis with float calculations

Oct 2025

Multi-Provider Pricing

CSFloat, Pricempire, CSMoney integration

Nov 2025

User Accounts

Steam authentication and profiles

Dec 2025

3D Skin Viewer

Interactive 3D preview of any skin

Jan 2026

Trade Up Finder

Automated profitability analysis

Jan 2026

Premium Subscriptions

Stripe-powered premium features

Jan 2026

P2P Trading

Peer-to-peer skin trading with inventory integration and multi-source pricing

Feb 2026

Competitor Comparison Pages

Detailed comparison pages like CS2Locker vs TradeUpSpy

Feb 2026

Skinport Integration

Skinport prices, affiliate links, and trade-up support added across all pages and marketplaces

Feb 2026

SEO & AI Optimization Overhaul

Hreflang tags, llms.txt, AI crawler rules, structured FAQ data, and enriched Organization schema

Feb 2026

Light Mode

Full light/dark theme toggle with system preference detection and flash-free switching

Mar 2026

DMarket & SkinSwap Integration

Two new marketplace price providers added, expanding price comparison to 14+ sources

Mar 2026

Charms Section

Keychains renamed to Charms with a dedicated overview page, highlight filtering, and CSFloat affiliate links

Mar 2026

Cookie Consent & Privacy Compliance

Cookie consent banner, GA4 Consent Mode v2, AdSense removed — fully compliant with Dutch ad regulations

Mar 2026

Skinbaron Integration

EUR/USD exchange rate conversion for accurate Skinbaron pricing across all pages

Mar 2026

Live Deals

Real-time deal stream with SSE, CSFloat affiliate links, and admin-only access

Mar 2026

Trending Page Overhaul

Pre-computed data, sparkline charts, multi-period analysis, pagination, and saveable filter presets

Mar 2026

Knife & Glove Combo Generator

Budget-based combo suggestions with gloves toggle and SEO optimization

Mar 2026

Portfolio Investment Tracker

Full investment tracking with crafts, discontinued items, float premiums, and global currency support

Mar 2026

Sticker Search

Search and preview sticker combinations on weapons with duplicate/clear actions and click tracking

Mar 2026

Inventory Pricer

Steam inventory pricing tool with price history, liquidity data, 24h changes, and Doppler phase detection

Mar 2026

Cash Trade Logger

Track cash skin trades with partner management, item selection, and market price sorting

Mar 2026

Elite Stats Dashboard

Real-time deal analytics with heatmap, category breakdown, savings distribution, and personal alert stats

Mar 2026

Inventory Estimator

Embeddable inventory estimation widget with quote management and SEO optimization

Mar 2026

Price Database

Float and sticker overpay analysis with per-sticker breakdowns, premium calculations, and sorting

Mar 2026

Craft Calculator

Estimate craft value with sticker selection, recent stickered sales feed, and craft sales image generation

Apr 2026

Market Signals

Market indicators and signals tab for price analysis with bids data and market context API

Apr 2026

Cases on Trending

Cases added as a category on the trending page with dedicated filtering

Want to see what we're working on next?