Project Parabellum
← Back to home

Changelog

A history of updates, fixes, and improvements to Project Parabellum.

v1.72.02026-05-28

Features

  • sales-rep accounts bypass FFL/plan gates across nav, search, and dashboard; admin role dropdown gains Sales Rep option
v1.71.02026-05-27

Features

  • impersonate button on the users table
v1.70.02026-05-27

Features

  • contextualized /trial-ended + route existing customers to portal
v1.69.02026-05-27

Features

  • /trial-ended routes to existing open invoice when present
v1.68.02026-05-27

Features

  • days late admin column + dashboard past-due card
v1.67.02026-05-27

Features

  • add FFL + stats hero to the dashboard
  • compatible accessories sidebar preview + dialog; alternatives only when all out of stock
v1.66.02026-05-27

Features

  • move usage into a Search History tab on the dashboard; remove standalone /usage page
  • dashboard product search, per-period savings cards, results per-search savings, activity chart hover/axis/legend
  • drive home feature badges from the live subscription plan matrix

Bug Fixes

  • show cumulative search volume (searches table) as the searches metric on usage + savings site-wide

Refactors

  • remove the seed default plans admin button
  • remove all lint-disable comments — ExternalImage wrapper, chat useImperativeHandle, onboarding lifecycle hook

Chores

  • bump web catalog deps (sentry, tanstack, date-fns, resizable-panels)
v1.65.02026-05-27

Features

  • clamp admin watch description to one line with click-to-expand popover
  • add sales-rep role
  • add dashboard savings widget, search history, and vendor price badges
  • sales-rep self-enrollment via SR- codes + admin management
  • in-app banner when a member payment is past due
  • mount past-due payment banner app-wide
  • show next payment and days-late on admin user detail
  • aggregate vendor-sync changelog fragments on prod deploy
  • show past-due status and days-late in admin users table
  • support UPC, MPN, or product name search from results page sidebar
  • add /api/searches/savings-events proxy route with time-window support
  • pure period-bounds and deriveTimeline logic for usage timeline
  • useUsageTimeline hook with fetch-once derive-per-period design
  • add period selector cards component for usage timeline
  • add period-aware activity bar chart component
  • secondary stats component for streak and peak hour
  • optional period filter props for SearchHistory component
  • time-aware savings widget copy and period dollar total
  • unified usage timeline dashboard with period-aware savings and search history

Bug Fixes

  • allow coreware CDN subdomains for next/image

Refactors

  • remove RevenueCat + coupon UI (Stripe-only billing)
  • split personal analytics dashboard into read/ card components

Styles

  • fix import ordering in sales-rep web files
v1.64.02026-05-24

Features

  • move /status to /activity (permanent redirect), relocate footer legal/version links into the user menu, and show per-vendor changes-tracked counts on partner cards
v1.63.02026-05-24

Features

  • redesign /status as Market Activity page and relocate footer chrome to sidebar
  • rewrite /faq as docs-site shell with sidebar, per-faq pages, copy/share, helpful widget
  • add sitemap with FAQ article URLs; fix admin FAQ ?edit deep link
  • show per-vendor changes-tracked count on partner cards via /api/changes-total/by-vendor proxy

Documentation

  • update privacy policy and terms of service content
v1.62.22026-05-22

Chores

  • hide partners link in nav and footer
v1.62.12026-05-22

Build System

  • stage regenerated OpenAPI client during deploy to prevent dirty working tree

Chores

  • remove fflscan sync button and paste-import dialog (dmca takedown)
v1.62.02026-05-22

Features

  • signal-aware deal-detail dialog, rebuilt home cards, price-history + changes-total endpoints, vendor-logos in distributor list
v1.61.02026-05-22

Features

  • per-UPC price-history endpoint + real sparkline on deal detail
v1.60.02026-05-22

Features

  • rebrand home deals section ("The Real Price, Everywhere") and switch OFF badge from orange to emerald

Bug Fixes

  • guard null logs array in user detail api usage tab
  • use live distributor count on home "See What You're Missing" section
v1.59.12026-05-22

Chores

  • bun 1.3.5→1.3.12, node →24.13.0, consolidate explicit deps into root catalog
v1.59.02026-05-21

Features

  • maintenance mode (full-page screen for users, admin banner)
v1.58.62026-05-21

Refactors

  • drop Settings JSON editor from admin system credentials page
v1.58.52026-05-21

Refactors

  • strip dead vendor config fields from Configure Vendor dialog — only credentials remain editable
v1.58.42026-05-21

Chores

  • extend TopPriceChangeRow with enrichment fields
v1.58.32026-05-21

Bug Fixes

  • use white photo frame for product cards in dark mode
  • route onboarding success/warning colors through theme tokens for dark mode
  • route hardcoded colors through success/warning/info/destructive theme tokens for dark mode
v1.58.22026-05-19

Documentation

  • P5.1 T6 prod verification notes
  • accessories metrics baseline + external-api decision
v1.58.12026-05-18

Bug Fixes

  • use real cron parser so /admin/vendors syncs tab shows next-run for offset-minute schedules instead of "Unknown schedule"
v1.58.02026-05-18

Features

  • product-field config served from PG via typed REST routes; admin tabs swapped off Convex

Bug Fixes

  • hydrate /admin/deals kill-switch/per-platform/redditSlots from persisted settings on load

Refactors

  • remove Reddit social-credential card; add Reddit posts/day slot control

Documentation

  • sync-invariant comments on credential-platform union

Chores

  • regen rest-hooks for dealSocial reddit bridge
v1.57.02026-05-15

Features

  • Social credentials card on /admin/deals with mask, reveal, and test button
  • auto-attach Convex JWT to $api/fetchClient; full OpenAPI coverage (69 routes); public /api/openapi.json + /api-docs; admin vendor-comparison route replacing the Convex action

Refactors

  • flip per-platform pause card to per-platform enabled with new semantics
v1.56.22026-05-15

Bug Fixes

  • skip FFL document query when no FFL is selected (was throwing ArgumentValidationError)
v1.56.12026-05-15

Bug Fixes

  • add VisuallyHidden DialogTitle to deals and chat-image dialogs

Chores

  • bump catalog deps (convex 1.39, expo 55.0.24, sdk patches)
v1.56.02026-05-15

Features

  • midnight-Denver deal pipeline + shared deals-grid component; admin regenerate is single-shot
  • wire /api/admin/dropship-inventory-stats and -by-vendor to the Go vendor-service (drop 501s)

Refactors

  • drop 5 stale dashboard cards backed by deleted Convex normalization queries
  • migrate upc-search-form + use-upc-search from convex normalizedSearchQueries to /api/search-results (PG)
  • migrate dealSocial/dropship admin/productConfig admin/upc-vendor-lookup off convex vendorInventory to PG endpoints
  • delete orphaned components/user-vendor/ folder (post-userVendorInventory cutover)
v1.55.12026-05-14

Refactors

  • remove unused "Populate Normalized Fields" admin button
v1.55.02026-05-14

Features

  • regenerate REST hooks for new vendor-product-counts and vendor-field-coverage endpoints
  • add /api/vendor-product-counts and /api/vendor-field-coverage proxy routes + tanstack hooks
  • search-results route + useSearchResultsPG surface normalized_* attributes; canonical mfr/model/caliber win over vendor strings
v1.54.02026-05-13

Features

  • register /api/product-search openapi schema
  • add /api/product-search proxy to Go vendor-inventory search
  • add useProductSearch hook with 300ms debounce backed by /api/product-search
  • migrate SearchSuggestions to PG-backed product search API
  • rewrite /unified-search as PG-backed product grid
  • add product thumbnails, stock filter, and price gating to /unified-search results

Bug Fixes

  • reject hex/scientific notation in limit param for /api/product-search
  • suppress empty-state flash on /unified-search UPC queries

Refactors

  • use existing useDebounce hook and remove unsafe cast in useProductSearch
  • drop SearchType toggle types and remove UPC/MPN-specific validation
  • drop UPC/MPN toggle from UnifiedSearchForm — auto-detect server-side
v1.53.02026-05-12

Features

  • OG card uses brand name and hides price; admin date input + Activate row action
v1.52.02026-05-12

Features

  • /deals/[slug] auth-aware view with live distributor count
v1.51.02026-05-12

Features

  • /api/og/deal/[slug] route for branded social images
  • deal-of-the-day landing teaser, /deals/[slug], dashboard tile, /admin/deals
  • admin/deals adds dry-run button, per-platform pause toggles, OG preview links
  • show picker timestamp in Recent Deals date column
  • /admin/deals adds Pick by UPC form; proxy passes current-gaps + new params

Bug Fixes

  • nav entry + Quick Nav button for Deal of the Day
  • /deals/[slug] uses convex api directly so server component does not pull in React hooks
  • useProductData reads from /api/search-results, not stale Convex products
v1.50.02026-05-11

Features

  • sync convex user_id and user properties to GA4 for session attribution
  • fire GA4 search event with UPC + vendor result summary on every search
v1.49.02026-05-11

Features

  • client-side GA4 event tracking — view_pricing, signup_start, begin_checkout, bullseye_watch_created — and gaClientId capture for server-side correlation

Bug Fixes

  • address CodeRabbit review on PR #265 — dataLayer fallback uses gtag tuple format, GaClientIdSync gates on auth state, vendors fallback consistent, behavior tests for tracking hooks/components, --pull respects --preview target
  • resolve all oxlint errors and flaky test timing issues

Chores

  • bump catalog and web package versions
v1.48.12026-05-08

Bug Fixes

  • ensure NEXT_PUBLIC_* env vars ship to production builds via turbo cache invalidation and auto-pull
v1.48.02026-05-08

Features

  • show Loops emails in /admin/email-history and add Loops/Resend badge in user outreach tab
  • route GA4 through sGTM at sst.projectparabellum.com

Bug Fixes

  • address CodeRabbit review — dialog test prop, scoped row assertions, provider label map, JSDoc, FFL filter test
v1.47.12026-05-08

Bug Fixes

  • wrap onboarding useSearchParams in Suspense for production build
v1.47.02026-05-08

Features

  • add stripe checkout utility
  • BillingPeriodToggle shared component
  • handle Stripe success return in onboarding
  • paywall step uses Stripe Checkout
  • trial-ended page uses Stripe Checkout
  • membership pricing uses Stripe Checkout
  • membership dashboard uses Stripe
  • refactor users-table — editable Plan, Stripe Status badge, Grant Promotional dialog
  • add server-side multi-select user filtering and filter presets to admin users table

Bug Fixes

  • update CouponCode type to handle optional createdAt field
  • pass requireCardForTrial through getFlowWithSteps and useWebOnboarding so paywall step honors the no-card toggle

Styles

  • fix import spacing in Stripe checkout files

Chores

  • remove @revenuecat/purchases-js dependency
v1.46.02026-05-08

Features

  • forgot-password flow on login modal (Welcome Back / Sign in)

Bug Fixes

  • suppress "Invalid Reset Link" flash on /reset-password after successful reset

Documentation

  • add RevenueCat to Stripe migration design spec
  • address review feedback in RC→Stripe migration spec
  • add RC→Stripe migration implementation plan

Chores

  • bump all outdated packages to latest versions
v1.45.02026-05-08

Features

  • vendor-status page uses typed $api.useQuery hook instead of manual fetch
v1.44.02026-05-07

Features

  • verify user credentials before save in admin edit dialog
v1.43.02026-05-07

Features

  • rewire admin UI hooks from deleted modernVendorSync to vendorSyncCrons + vendorStatusQueries

Chores

  • fail-fast commit-message lint at top of pre-commit hook
v1.42.02026-05-07

Features

  • rich user-sync detail dialog with change details, price ledger, name-based filtering
v1.41.02026-05-07

Features

  • dual-write API usage logs to PG; port products + exclusives to PG endpoints
v1.40.12026-05-06

Chores

  • bump catalog deps (next, react-dom, tanstack-query, zod, postcss, etc.)
v1.40.02026-05-06

Features

  • admin users table shows new-user onboarding step and sorts by name
  • add user-vendor sync history dashboard
  • admin can edit other users personal vendor credentials from user-vendor accounts table
  • vendor-specific credential FAQ help on settings + onboarding entry surfaces

Tests

  • add UsersTable + useUserManagement test coverage

Chores

  • bump TS lib/target to ES2023 (shared base + web app inherits)
  • bundle pre-staged session work (product-views/vendor-feedback API tests, loops cleanup)
v1.39.02026-05-06

Features

  • port admin user vendor management pricing analytics to typed REST hook
  • port admin FFL registry stats/filters/syncs to PG-backed typed hooks
  • port user-facing FFL search call sites onto /api/ffl/search PG proxy
  • port platform-summary, top-price-changes, top-inventory-changes consumers off Convex onto typed PG REST proxies
  • add typed /api/product-images schema and rewire useProductImage hooks to use $api typed client
  • port /results alternatives card from convex suggestAlternatives to typed REST hook (PG-backed)
  • port trackProductView consumer onto /api/product-views proxy backed by Postgres
  • port AccessoriesSection to typed PG-backed /api/accessories proxy
  • port vendor-feedback submit to pg via /api/vendor-feedback proxy and useSubmitVendorFeedback hook
v1.38.02026-05-06

Features

  • port Restock Intelligence card from Convex to typed REST hook ($api.useQuery against new /api/restock-intelligence endpoint)

Refactors

  • drop unused UserInventoryCache type after Convex userVendorInventoryCache table removal
v1.37.32026-05-05

Bug Fixes

  • auto-skip ffl upload for already-verified users

Chores

  • import order tidy in category-admin-table test
v1.37.22026-05-05

Bug Fixes

  • render MultiSelect options in a 90vh/90vw dialog so long lists are scrollable
v1.37.12026-05-05

Bug Fixes

  • MultiSelect uses cmdk default overflow so dropdown actually scrolls
v1.37.02026-05-05

Features

  • surface vendor-derived FAQ categories in admin/faq/categories

Bug Fixes

  • restore MultiSelect dropdown scroll so all options are reachable
v1.36.02026-05-05

Features

  • FAQ category management at admin/faq/categories with CRUD + cascade rename/delete
v1.35.32026-05-05

Bug Fixes

  • cap MultiSelect popover height to 60vh so long lists scroll
v1.35.22026-05-05

Bug Fixes

  • FAQ admin edit modal shows all categories and includes vendor options
v1.35.12026-05-05

Bug Fixes

  • populate FAQ edit modal fields with existing data
v1.35.02026-05-02

Features

  • typed REST factory + SPEC_HASH for non-web environments
  • wire DeleteThreadDialog to thread sidebar
v1.34.02026-05-01

Features

  • typed REST hooks via OpenAPI + TanStack Query
v1.33.22026-05-01

Bug Fixes

  • refresh toast surfaces backend error message instead of always saying 'doesn't carry this product'
v1.33.12026-05-01

Bug Fixes

  • admin schedule display now reflects the real weekly cron
v1.33.02026-05-01

Features

  • collapse force/run-first sync buttons into single "Sync Now"
v1.32.62026-05-01

Bug Fixes

  • fix vercel build packaging and deploy for monorepo setup
  • surface lastChangeReason on /results Last Changed tooltip
  • trigger-all-vendors calls Convex directly per-vendor (HTTP self-fetch was failing on Vercel); surface trigger-vendor-sync error details
v1.32.52026-05-01

Bug Fixes

  • run vercel build from app dir so Next.js framework is detected correctly
v1.32.42026-05-01

Bug Fixes

  • strip static/dev from vercel output before deploy
v1.32.32026-05-01

Bug Fixes

  • skip trim_oversized_functions when functions dir does not exist
v1.32.22026-05-01

Bug Fixes

  • remove clerk validation from deploy script
v1.32.12026-05-01

Bug Fixes

  • wrap useSearchParams in Suspense boundary on auth/transfer page
v1.32.02026-05-01

Features

  • migrate /api/search and user-vendor dashboard from Convex to PG via new vendor-service endpoints; new useUserVendorAccounts hook
  • migrate use-sales-analytics to PG hooks, replacing Convex rollup queries
  • migrate use-market-intelligence-summary to PG analytics, add transform tests
  • port search history reads + writes to Postgres

Bug Fixes

  • resolve HotProduct typecheck errors in market velocity card

Chores

  • misc updates
  • update gitignore for vendor-sync binaries
v1.31.02026-04-30

Features

  • getPublicVendorList returns _id so PG-readers can map vendor_id_ref -> vendor_key
  • search results read from PG via /api/search-results proxy (was Convex useQuery)
  • Raw Data Preview tab fetches from /api/raw-data-sample (vendor-service PG) instead of Convex query
  • /status page fetches vendor status + recent changes from /api/vendor-status (vendor-service PG) instead of Convex
  • sync-history dashboard fetches from /api/sync-history/* (vendor-service PG); /api/vendor-sync-status powers consolidated cron table
  • admin FFL pages fetch from /api/pg/ffl/* (vendor-service PG) instead of Convex queries

Chores

  • remove manual image upload UI
v1.30.02026-04-29

Features

  • product images now read from PG via /api/product-images proxy (was Convex useQuery)
  • product image cache TTL bumped to 5min with jitter (avoid thundering herd)

Bug Fixes

  • product-image route uses VENDOR_SERVICE_API_KEY (separate from local CRON_SECRET)
  • vendor-service URL uses vendor-api.projectparabellum.com (TLS cert valid)
  • SafeImage syncs currentSrc when src prop changes; useProductImage uses simple useState pattern
  • validate UPC format before proxying to vendor-service
v1.29.02026-04-28

Features

  • contact detail panel reads derived plan/lead-source/touch counts from enriched query
  • outreach tab on user detail showing all sends/scans/clicks/redemptions

Bug Fixes

  • show auto-detected lead source badge when derived value is not in the options list
  • sort user-detail tabs alphabetically (Outreach moves between Notifications and Searches)

Refactors

  • update CRM/Loops admin components to read _creationTime instead of deprecated createdAt

Documentation

  • add outreach identity consolidation design spec
  • add outreach identity consolidation implementation plan
  • operational notes for Loops webhook + runtime caveats
v1.28.12026-04-27

Styles

  • apply lint-staged import reorder to step-list test

Tests

  • add coverage for onboarding guard, paywall, step editor/list, FFL overview, and trial-ended page
v1.28.02026-04-27

Features

  • typed returns on shouldSkip Convex query hooks (FunctionReturnType vs as any)
  • show OCR verification status for FFL documents and allow re-running

Chores

  • adopt tsgo, consolidate typescript configs, ratchet strictness
v1.27.02026-04-25

Features

  • add delete icon to FFL verification table with cascade-delete confirmation
v1.26.02026-04-23

Features

  • add test profiles with e2e-mobile Maestro flow checking to SRP config
  • replace header logo with favicon icon and add dark mode variant
  • send FFL business details to Loops contact on ffl_approved event

Bug Fixes

  • use branded red favicon as header logo
  • ffl_approved Loops event now falls back to tradeName/licenseName when businessName is empty
  • fall back to tradeName/licenseName when businessName is empty across ffl_approved flows
v1.25.02026-04-22

Features

  • add useSignupCode hook for campaign ref capture
  • capture campaign ref on sign-in + sign-up via useSignupCode
  • dispatch signup code by prefix on onboarding
  • dispatch /t/[code] by campaign audience
  • add CampaignGreetingBanner component
  • render campaign greeting banner on prospect homepage
  • add audience + destinationUrl to CreateCampaignDialog
  • allow editing campaign audience + destination from detail page
  • add Restart button to campaign detail page
  • Add Users dialog on campaign detail page
  • render OG previews for social crawlers on /t/[code]
  • add EventTypeMultiSelect component
  • add SecretRevealDialog
  • add AddEditDestinationDialog
  • add DeliveryHistoryDrawer
  • add WebhookDestinationsPanel
  • mount WebhookDestinationsPanel in settings notifications tab
  • add admin webhooks page with system/users/preferences tabs
  • add UserNotificationAdminPanel
  • add Notifications tab to admin user detail page
  • add Send test button and style destinations table
  • add Clear all personal notifications card on settings page
  • add Edit + Copy URL buttons to destinations list
  • click UPCs on search-trends/alerts/sales tabs to see shared UpcPreview popover
  • move EventTypeMultiSelect to channels namespace
  • move SecretRevealDialog to channels namespace
  • move DeliveryHistoryDrawer to channels namespace
  • add type-aware AddressField
  • add type-aware AddEditChannelDialog
  • add GlobalSettingsCard
  • add ChannelsPanel with scope-aware data source
  • wire new panels into /settings?tab=notifications
  • add /admin/notifications with three tabs + redirect /admin/webhooks
  • rewrite admin user detail Notifications tab
  • scope-aware EventTypeMultiSelect with human labels
  • ManageFiltersDrawer for per-(user, vendor) channel mutes
  • wire ManageFiltersDrawer into ChannelsPanel + show owner name/email in admin audit

Bug Fixes

  • style EventTypeMultiSelect and widen dialogs to 90vw
  • add Send Notifications links to admin-panel + breadcrumbs
  • update EventTypeMultiSelect tests for exact event name matching
  • replace hardcoded UPC-Me with Project Parabellum in user-facing strings
  • route admin-scope channel delete/toggle through admin mutations
  • route admin-viewing-user channel edits through adminUpdateUserChannel
  • allow editing auto-managed channel types (inApp, mobilePush) in edit mode
  • wrap HomeScreen in Suspense so useSearchParams prerender bail works

Performance

  • swap usage tab to bounded getUsageStats query (fixes navigation stall after opening /settings?tab=usage); settings tabs ordered alphabetically
  • render Market Data tab immediately; defer only summary cards while 30-day analytics action runs
  • summary is now a live Convex query that updates instantly instead of re-running a 30-day scan on every mount

Refactors

  • rename "Codes Generated" to "Recipients" across campaign admin
  • consolidate campaign codes into engagement table + add search
  • delete legacy webhook/slack frontend components

Styles

  • reskin /admin/notifications tables to match admin/users pattern
  • drop trailing space in describe name

Chores

  • fix import ordering in use-signup-code test
v1.24.12026-04-18

Chores

  • add brochure + label generators for print campaigns
v1.24.02026-04-17

Features

  • delete button in contact detail dialog + bulk delete for selected rows
  • contact detail opens in a modal dialog instead of side panel
  • pipeline phase filter in Import Existing dialog and Purge dialog, phase column on CRM table and purge table with multi-phase tooltip
  • rename Automation tab to Loops

Bug Fixes

  • single AlertDialog for purge confirmation so step transitions do not lose state
v1.23.02026-04-17

Features

  • choose which contacts to purge in local Loops purge dialog

Bug Fixes

  • correct test mock shape and remove redundant state reset in purge dialog
v1.22.02026-04-16

Features

  • tooltip on restock intelligence prediction badges showing event count

Bug Fixes

  • render user_welcome notification with a personalized greeting and unify distributor count across landing, pricing, and welcome surfaces

Documentation

  • spec for splitting user_welcome from user_joined notification
v1.21.22026-04-16

Bug Fixes

  • make BullsEye Watch entire button clickable to toggle (was only the icon)
  • make Sonner toast description text readable (was almost invisible)
v1.21.12026-04-16

Bug Fixes

  • show BullsEye Watch toggle when only unconfigured vendors block the all-unavailable gate
  • make BullsEye Watch toggle button readable and obviously clickable in dark and light mode
v1.21.02026-04-16

Features

  • add Select Existing mode to campaign import wizard — multi-select CRM contacts, skip review step, route to generateCodesForCrmContacts
  • Loops CSV import dialog with metadata (stage/priority/status/phase + override)
  • CRM bulk edit with row selection and dialog
  • CRM mailing list multi-select filter popover
  • Copy URL button now a dropdown with QR URL and Link URL options in outreach views
  • remove dead views column from campaign codes table
  • enforce 20-char max on campaign name input with live counter
  • show per-vendor results on search + api-usage admin views

Bug Fixes

  • re-enable web vitest suite, remove unauthorized e2e exclusions
  • update useCrmContactsList/Search call sites for mailingListKeys param
  • remove Generate Codes button, show CRM contact name in codes table, add Remove Orphan Codes action

Tests

  • add real RTL tests for CSV import, bulk edit, mailing list filter, and create campaign dialogs

Chores

  • remove native app from monorepo and bundle in-progress admin/test updates
v1.20.02026-04-13

Features

  • unified outreach hub implementation plan
  • add unified outreach hub page with route redirects
  • add campaign funnel bar, engagement table, and contact engagement timeline components
  • add 4-step bulk import wizard to campaign detail for importing CRM contacts and generating codes
  • add campaign name inline editing and delete with confirmation dialog
  • add Purge Local button to Loops contacts table
  • add Import Audience button to Loops contacts table
  • CSV parser extracts all columns into customProperties
  • display custom properties in contact detail panel and CRM field settings
  • display custom properties in contact detail and CRM settings

Bug Fixes

  • remove unused searchParams import in crm-page-content
  • move Outreach nav entry to alphabetical position
  • campaign detail links point to /admin/outreach route
  • Import Audience button now accepts CSV file upload
  • use RFC 4180 CSV parser for Loops audience import
  • replace as-any casts with Id<"campaigns"> types, add email regex validation in CSV import

Refactors

  • extract shared PageLoadingFallback component from 6 admin pages

Documentation

  • add unified outreach hub design spec

Chores

  • gitignore .superpowers dir
  • commit formatter changes
v1.19.02026-04-08

Features

  • tooltip + presence badges in chat header and admin chat sidebar

Documentation

  • add chat header presence design spec
v1.18.02026-04-08

Features

  • show hypothetical API overage spend for super-admins on admin user detail page
v1.17.02026-04-07

Features

  • unified user vendor configurations table with Source column on credentials tab
v1.16.02026-04-07

Features

  • show shop name on admin user overview

Bug Fixes

  • show suggested alternatives above results table for all users

Tests

  • install vitest infrastructure, add lib/utils + hooks tests, scope SRP rule
v1.15.12026-04-07

Bug Fixes

  • wrap useSearchParams consumers in Suspense for Next 16 prerender

Styles

  • apply formatter import order to admin page wrappers
v1.15.02026-04-07

Features

  • standalone /api-usage page mirroring admin /admin/api-usage layout
  • admin breadcrumbs, quick-nav search & layout consistency

Bug Fixes

  • respect iOS safe-area inset on mobile bottom nav

Chores

  • expand SRP testRequired exclusions for framework files
v1.14.02026-04-07

Features

  • usage spending limits panel for api overages in user settings and admin user detail
  • distinguish global default vs per-user override on api spending limits panel

Bug Fixes

  • handle null heartbeat result from presence:heartbeat

Styles

  • reorder imports in presence-provider
v1.13.02026-04-01

Features

  • add monthly API quota progress bar and overage alerts to settings
  • add API Calls/Month input to admin plan editor
v1.12.32026-04-01

Refactors

  • use _creationTime for API usage log display
v1.12.22026-04-01

Bug Fixes

  • remove degraded status from vendor status page
v1.12.12026-04-01

Bug Fixes

  • treat plan field as source of truth for subscription status badge
  • use data-layer hook in api-usage-dashboard instead of direct convex imports

Performance

  • use local SHA256 hashing for API key validation

Documentation

  • add Loops.so integration documentation
v1.12.02026-03-31

Features

  • show upgrade teasers for Pro+ gated features instead of hiding them

Bug Fixes

  • resolve redirect loop for returning cancelled trial users
  • document onboarding query deduplication and restock skip pattern
v1.11.12026-03-27

Refactors

  • migrate onboarding steps to data-layer hooks

Chores

  • update safe patch/minor dependencies across monorepo
  • upgrade zod to v4
  • upgrade lucide-react to v1.7.0, rename deprecated icons
v1.11.02026-03-26

Features

  • add full sync change manifest with item-level details in sync history dialog

Bug Fixes

  • load sync change data on-demand instead of auto-loading all pages
  • address code review - CSV injection, type safety, on-demand loading progress
  • fix double csvSafe, filename sanitization, proper useEffect loading, type-safe interfaces
v1.10.02026-03-25

Features

  • add public vendor status page at /status showing connection status and 30-day uptime
  • add landing navigation header to status page
  • add landing navigation header to status page
  • add public /partners page with vendor directory and partner application form
  • add Partners link to landing page navigation and footer
  • add live per-UPC vendor refresh button to search results
  • expand sync history detail dialog to 90vh x 90vw
  • expand sync detail dialog to 90vh x 90vw

Bug Fixes

  • capture global vendor sync time in feedback when user has no personal inventory
  • use correct data-layer import for status page hooks
  • suppress overly strict FunctionArgs type on paginated notification query
  • fix sync history detail dialog rendering
v1.9.12026-03-24

Bug Fixes

  • disable SMS notification toggles with coming soon label
v1.9.02026-03-24

Features

  • add vendor credential failure and recovery notification preferences to System & Admin settings

Bug Fixes

  • improve notification preference warning copy for notify every occurrence toggle
v1.8.02026-03-14

Features

  • add API usage history and stats to settings page
  • add API usage tab to admin user page and vendor results to usage logs

Refactors

  • remove tier pricing fields and admin pricing model UI
v1.7.12026-03-13

Refactors

  • remove user inventory quantity display from search results
v1.7.02026-03-11

Features

  • add backfill sync status button to Loops contacts table

Bug Fixes

  • show diagnostic info in backfill sync status toast
v1.6.02026-03-11

Features

  • show Loops sync status indicator on CRM contacts
  • add separate Sync New and Update Existing buttons for CRM-to-Loops sync
v1.5.02026-03-11

Features

  • add vendor credential help links in onboarding, settings, and dashboard error surfaces
  • add server-side CRM contact filtering and search with debounced text search
  • add CSV export/import buttons to CRM admin page
  • repurpose campaigns page as Loops marketing dashboard with contacts, events, and stats
  • add CRM phases management UI, contact phase selector, and phase filter
  • add sync dialog with filter controls for CRM-to-Loops contact sync

Bug Fixes

  • remove non-existent oxlint rule no-pass-ref-to-parent
  • remove non-existent oxlint rule and ignore .d.ts files
  • always show CRM phase filter dropdown
v1.4.12026-02-26

Bug Fixes

  • use direct convex API import in campaign tracking route for React 19.2 compat
v1.4.02026-02-26

Features

  • add invoices tab to settings for viewing and downloading billing invoices
  • update favicon to Project Parabellum branding
  • add personal analytics dashboard with search trends, top products, vendor usage, and activity feed
  • add subscription management - manage subscription button, upgrade/downgrade plans
  • add campaign tracking admin pages with QR code generation and CSV export
  • add invoice history to membership page
  • unify billing settings tab with membership dashboard
  • sync RevenueCat subscriber attributes on membership dashboard init
  • add campaigns to admin sidebar navigation
  • add CRM admin page with pipeline stats, filters, and contact table
  • add CRM contact detail panel with split-panel layout and inline editing
  • replace hardcoded CRM dropdowns with DB-driven field options and settings tab

Styles

  • fix import ordering in campaign tracking components
  • align invoice card width with membership dashboard cards

Chores

  • update bun.lock
v1.3.12026-02-25

Bug Fixes

  • add @tailwindcss/typography for proper markdown prose rendering in legal pages

Refactors

  • remove landing page content management admin page and legacy dead code
v1.3.02026-02-25

Features

  • add vendor exemption from credential validation via env var
  • update fallback pricing plan feature lists to match DB-driven data
  • consolidate plan features into DB-driven array with admin management, DnD reorder, and comingSoon flag
  • add Google Analytics via @next/third-parties

Bug Fixes

  • add missing useEffect dependencies in hero-search-mock
  • add useEffect dependency and document buildFeatureRows semantics

Refactors

  • remove deprecated feature list items from fallback pricing plans
  • update comments referencing removed platformFeatures table
v1.2.02026-02-24

Features

  • show version and changelog in web app settings and footer
  • add coupon code redemption to paywall and billing settings
  • add admin coupon management page with stats, table, create/deactivate dialogs, and redemption history
  • add Test Connection button for vendor credential validation during onboarding
  • add Test Connection button to vendor settings credential form
  • display subscription platform icon and smart manage URL on membership dashboard
  • add Test Credentials button to vendor cards, use data-layer hooks
  • vendor card Test Credentials uses server-side stored credential lookup
  • switch Test Credentials to async ECS validation with reactive status
  • synchronous credential validation replaces async ECS pattern
  • add abort generation button and smooth text streaming to AI assistant
  • add test credentials button to uniform pricing vendor cards and admin vendor management tabs
  • auto-download hook binaries with staleness cache
  • add invalid credentials status to search results and prominent vendor card indicators
  • show stored credential validation status in admin vendor tabs

Bug Fixes

  • enable Turbo TUI for interactive dev sidebar
  • address code review findings for coupon admin UI - missing durations, parseInt radix, type safety
  • add opticMount productType to alternative types and display
  • wrap isOptic and isRedDot in useMemo for consistency
  • derive Alternative type from Convex query and add enter animation to prevent layout shift
  • exclude credentials_required from unavailable results check to avoid misleading alternatives
  • remove unreachable match and unsafe reverse category lookup in formatters
  • align grain suffix in header and alternatives titles, add loading skeleton, improve img alt text for accessibility
  • use plan homeRoute instead of hardcoded /dashboard on home screen
  • show actual plan name and fix manage subscription button on membership page
  • show credential config button for vendors with system-allocated credentials
  • route uniform pricing vendor credential tests through system credentials action
  • route uniform pricing vendor credential tests through system credentials action
  • replace hardcoded bg-white with theme-aware bg-background in vendor management cards

Refactors

  • remove legacy member plan references, use pro/pro_plus only

Styles

  • apply formatter fixes

Tests

  • add unit tests for buildProductTitle, normalizeCaliber, normalizeManufacturer

Chores

  • migrate linting from ESLint to OxLint
v1.1.02026-02-09

Features

  • per-vendor restock intelligence with env var override
  • add per-app changelog aggregation with just release recipes

Bug Fixes

  • use bun instead of pnpm in vercel build config
  • stub native workspace for vercel bun install
  • clear notification records when viewing a conversation
  • handle \*/30 cron schedule in next run calculation
  • show entriesProcessed as fallback when totalEntriesAfterSync is missing in sync history table
  • show BullsEye Watch button when unconfigured vendors are present in search results

Performance

  • reduce redundant markAsRead calls on subscription refreshes

Refactors

  • remove ETL config editor from vendor management
  • rename allOutOfStockOrNotCarried to allResultsUnavailable and add unit tests
  • use strict Result type in computeAllResultsUnavailable and add all-loading test

Documentation

  • add README and CLAUDE.md with project setup instructions

Chores

  • enable lintTypecheck, fullLintOnCommit, changelog, convexValidation, and mockCheck pre-commit features
  • add setup-hooks make command for cross-platform hook binary installation
  • add manual workflow_dispatch trigger to build workflow
  • migrate pnpm references to bun