Skip to main content
← Back to Capr.

Changelog

New features, improvements, and fixes shipped to Capr.

v0.11.0

Performance insights, dependency hardening, and reliability improvements

📈Observability

  • Improved

    Vercel Analytics & Speed Insights

    Real-time page analytics and Core Web Vitals monitoring are now active in production. Performance regressions will be caught before they affect your league experience.

  • Improved

    Performance tracing for core operations

    Cap recalculations, trade executions, waiver processing, and auction bid awards are now instrumented with Sentry performance spans. P95 latency is tracked per operation so slow queries surface immediately.

  • Improved

    Structured server logging

    All major server-side operations now emit structured JSON logs with timing data, enabling faster diagnosis of production issues via Vercel log drain.

🔒Security

  • Security

    Automated dependency vulnerability scanning

    Every pull request now runs npm audit against high and critical CVEs as a required CI check. Dependabot is configured to open weekly grouped PRs for patch and minor updates.

  • Security

    Startup environment validation

    The server now validates all required environment variables at boot time and fails fast with a clear error if anything is missing, eliminating silent misconfiguration issues in new deployments.

🐛Bug Fixes

  • Fixed

    Cap glossary tooltip rendering fix

    Fixed a React hooks ordering bug in the cap glossary tooltip component that could cause inconsistent rendering when a glossary term was not found.

v0.10.0

Smarter pick values, dismissable alerts, and time travel

📊Trade Calculator

  • New

    Team build modifier on draft picks

    Picks are now automatically adjusted based on the original team's strength. Rebuilder picks get boosted up to +25% and contender picks are derated up to −25%, using a composite power score of win rate, points scored, and cap usage.

  • New

    Power ranking badge on picks

    Every pick in the trade calculator now shows the original owner's record and a color-coded tier badge (Contender, Competitive, Mid-Pack, Rebuilding, Teardown) so you can see pick quality at a glance.

🛡️Commissioner Suite

  • New

    Dismissable alert system

    Commissioner alerts are now typed by severity (critical, warning, info) with individual dismiss and 7-day snooze controls. Dismissed alerts live in a collapsible drawer and can be restored at any time.

  • New

    Roster over-limit lockout

    Teams exceeding the active roster limit are now blocked from making roster moves until they cut down. The commissioner dashboard shows a dedicated widget with per-team cut requirements.

  • New

    Time travel mode

    Test leagues can now rewind or fast-forward to any point in the season. Commissioners can simulate offseason transitions, score entry, and waiver processing at arbitrary dates.

📝Waivers & Free Agency

  • Fixed

    Active roster limit enforcement

    Waiver claims and free agent signings now check the active roster limit (starter + bench only) instead of total roster size, so taxi and IR slots no longer block pickups.

  • Fixed

    Deduplicated waiver wire

    Players with multiple terminated contracts no longer appear as duplicate entries on the waiver wire. Only the most recent contract is shown.

🏠Dashboard

  • Improved

    Streamlined league home

    Removed the full-width cap standings table from the league dashboard for a cleaner layout. Cap data is still accessible from the dedicated Cap Hub pages.

v0.9.0

Auth hardening, real-time everywhere, and accessibility overhaul

🔒Security & Authorization

  • Security

    Role-based API route protection

    All commissioner-only API routes now use a unified withCommissioner wrapper with CO_COMMISSIONER co-manager support. Expanded the protected routes manifest from 4 to 12 endpoints.

  • Security

    Cross-league data isolation

    Trade finder and all league API routes now verify league membership server-side, preventing authenticated users from accessing other leagues' data.

  • Security

    Co-manager permission enforcement

    New requireTeamAccess helper enforces VIEW_ONLY, ROSTER_CONTROL, and CO_COMMISSIONER permission levels on every team-scoped endpoint — not just in the UI.

  • Security

    Score override authorization

    Manual score entry endpoint refactored to use the standard commissioner wrapper with full audit logging for every override.

🤝Trades

  • New

    Optimistic trade submission

    Proposed trades now appear instantly with a pending state card while the server confirms, eliminating the wait-and-refresh cycle.

  • Improved

    Real-time trade list

    Trade list updates automatically via Realtime subscriptions when other teams propose, accept, or counter trades.

  • Improved

    Enhanced trade conditions

    Rebuilt the condition builder to support multi-team trades with flexible asset configurations and more accurate condition summaries.

  • New

    Trade finder filters

    New filter bar on trade block suggestions — sort by match score, need, or activity, with position-specific filtering.

📋Draft Room

  • Improved

    50% faster draft page load

    Draft room and auction board are now code-split with dynamic imports, cutting initial page weight by ~300 KB.

  • New

    Mobile persistent cap bar

    Always-visible cap bar on mobile during auctions shows budget, cap used, active bids, max bid, and slots filled at a glance.

  • New

    Cap health color coding

    Consistent traffic-light system across draft boards: green (>30% remaining), amber (15–30%), red (<15%).

  • New

    Keyboard-navigable auction tabs

    Full WAI-ARIA Tabs pattern on the mobile auction board — arrow keys, Home/End, and proper focus management.

💰Cap Management

  • New

    Cap health scoring

    New holistic cap health algorithm that factors utilization, dead cap, roster size, contract distribution, and future projections.

  • New

    Cap rollover tracking

    Teams now carry unused cap space forward between seasons when rollover is enabled in league settings.

  • New

    League cap standings

    Full-width standings widget on the league dashboard showing every team's cap utilization, health score, and dead cap.

  • New

    War Room quick link

    One-click access to the cap simulator directly from the league dashboard KPI cards.

📝Free Agency & Offseason

  • Improved

    Optimistic bid placement

    Bids appear instantly in bid windows with automatic rollback if the server rejects them.

  • Improved

    Real-time bid windows

    Bid window and slow auction hubs now sync via debounced Realtime subscriptions instead of polling.

  • New

    Anti-snipe protection

    Slow auctions auto-extend deadlines when a competing bid arrives within the snipe window (default: 1 hour).

  • New

    Binding nominations

    New setting for slow auctions: when enabled, a nominating team's opening bid is binding — they win if nobody else bids.

🧭Navigation & UI

  • New

    Redesigned sidebar navigation

    Six focused nav groups — Home, Roster & Trades, Cap Hub, League, Offseason Hub, and Commissioner — replacing the previous four-section layout.

  • New

    Offseason phase indicator

    Prominent phase badge with deadline countdown in the sidebar, replacing the old text-only pill.

  • New

    Commissioner nav section

    Dedicated commissioner navigation group with shield icon and pending-action count badge.

  • Improved

    Skip navigation link

    Keyboard users can now skip directly to main content on every page.

Accessibility

  • Improved

    WCAG AA contrast compliance

    All text, borders, and interactive elements updated to meet 4.5:1 (text) and 3:1 (non-text) contrast ratios in both light and dark modes.

  • New

    Full keyboard navigation

    StripeTabs, auction boards, and trade block modals now follow WAI-ARIA patterns with arrow key navigation, focus trapping, and Escape-to-close.

  • Improved

    Dialog accessibility

    All modals now include role="dialog", aria-modal, and aria-labelledby attributes with automatic focus trapping.

🚀Onboarding

  • New

    League creation templates

    New first step in league creation: choose from pre-configured templates that auto-fill scoring, roster, and cap settings.

  • New

    Getting started checklist

    Interactive checklist on the league dashboard guides new owners through their first roster view, cap check, free agent browse, and transaction.

  • New

    Welcome modal for new teams

    First-time team owners see a friendly welcome modal introducing their league and key features.

  • Improved

    Enhanced league join preview

    Richer league preview card on the join page showing season, team count, status, and settings at a glance.

⚙️Settings

  • New

    Simple / Advanced settings toggle

    New commissioners see a streamlined settings view by default. Toggle to advanced mode for cap escalation, rollover, and floor controls.

  • New

    Inline setting tooltips

    Hover any cap-related setting to see a plain-language explanation of what it does and how it affects your league.

  • Improved

    NFL game-day schedule model

    Trade and roster locks now use real ESPN kickoff times instead of hardcoded day-of-week windows.

Performance

  • Improved

    Shared Realtime refresh hook

    New useRealtimeRefresh hook replaces per-component Supabase subscriptions with debounced batch updates, reducing re-renders across trades, standings, and bid windows.

  • New

    Real-time row flash animations

    Subtle slate-blue highlight animation when Realtime data changes, so you always know what just updated.