{
  "product": "Obriym CRM",
  "description": "Machine-readable changelog for AI agents and integrations. Updated with every shipped sprint.",
  "url": "https://obriym-crm.com/changelog.json",
  "lastUpdated": "2026-06-07",
  "releases": [
    {
      "date": "2026-06-07",
      "tag": "pricing-plan-limits",
      "summary": "Free plan limits and future paid tiers prepared",
      "changes": [
        "Free plan is now the active production default with enforced limits for CRM records, products, orders, team invitations, API tokens, widgets, and platform adapters",
        "Settings → General includes Plan & Usage with resource usage meters and a link to pricing",
        "Public pricing page now shows real Free, Team, and Scale limits with planned future prices",
        "Team and Scale remain future paid tiers; automated billing is not enabled yet"
      ]
    },
    {
      "date": "2026-06-07",
      "tag": "payment-sandbox-validation",
      "summary": "Payment adapter sandbox validation for LiqPay and WayForPay",
      "changes": [
        "Settings → Platform Adapters now shows a sandbox validation panel for active LiqPay and WayForPay adapters",
        "Owners can generate a signed test callback payload using CRM order externalId, amount, currency, and WayForPay merchantAccount",
        "Validation locally verifies LiqPay and WayForPay signatures without exposing stored secrets and without writing payment rows",
        "Added tests for payment signature creation, sandbox validation input schema, and adapter settings permissions"
      ]
    },
    {
      "date": "2026-06-07",
      "tag": "telegram-lead-adapter",
      "summary": "Telegram lead-capture adapter stabilized",
      "changes": [
        "POST /api/v1/adapters/telegram/{configId} receives Telegram Bot API updates with 512 KB payload limit",
        "Webhook authentication uses X-Telegram-Bot-Api-Secret-Token derived from the bot token",
        "Text messages and contact shares create CRM leads with source=telegram",
        "Bot confirmation reply is sent after new lead creation and skipped for deduplicated updates",
        "Settings → Platform Adapters includes Telegram setup guidance and one-time derived webhook secret reveal",
        "Added Telegram server tests for secret verification, lead mapping, ignored updates, and deduplicated reply behavior"
      ]
    },
    {
      "date": "2026-06-07",
      "tag": "document-generation",
      "summary": "Document generation: invoices, delivery notes, and commercial proposals",
      "changes": [
        "Settings → General: workspace document requisites stored per workspace in app_settings",
        "Order detail: Invoice and Delivery note buttons open protected print-to-PDF document pages",
        "Deal detail: Proposal button opens a protected print-to-PDF commercial proposal from deal products",
        "Document routes require active workspace session and owner/manager generation permissions",
        "Added requisites schema and permission matrix tests"
      ]
    },
    {
      "date": "2026-06-07",
      "tag": "ukrainian-market-adapters",
      "summary": "Ukrainian market integrations: Nova Poshta TTN, LiqPay and WayForPay payment callbacks, Prom.ua order import",
      "changes": [
        "POST /api/v1/adapters/nova_poshta/{configId}/ttn — creates TTN via Nova Poshta API v2; stores trackingNumber in crm_order_shipments",
        "POST /api/v1/adapters/nova_poshta/{configId}/tracking — syncs shipment status via Nova Poshta tracking documents",
        "POST /api/v1/adapters/liqpay/{configId} — payment callback with base64 SHA1 signature verification; upserts crm_order_payments and updates order status",
        "POST /api/v1/adapters/wayforpay/{configId} — payment callback with merchantSignature HMAC-MD5 verification; upserts crm_order_payments and updates order status",
        "POST /api/v1/adapters/prom/{configId}/orders/import — normalized Prom.ua order import for external polling workers; X-Adapter-Secret auth",
        "Order detail → Shipments tab: clickable Nova Poshta tracking number chip with direct link to novaposhta.ua/tracking",
        "Settings → Platform Adapters: per-adapter setup guides for all 6 adapters with readiness notes, credential purpose, and step-by-step instructions",
        "DB migration 0039: added nova_poshta, liqpay, wayforpay, prom values to platform_adapter_platform enum"
      ]
    },
    {
      "date": "2026-06-06",
      "tag": "api-catalog-filters",
      "summary": "Product catalog API: filter and navigation improvements",
      "changes": [
        "GET /api/v1/products: new query params — brandId, minPrice, maxPrice, inStock, sort (name_asc|name_desc|price_asc|price_desc|newest)",
        "GET /api/v1/categories/{id}: new endpoint returns category with direct children array",
        "GET /api/v1/inventory: OpenAPI response shape now fully documented (InventoryProduct + InventoryAdjustment schemas)",
        "POST /api/v1/inventory/adjustments: typed InventoryAdjustmentResponse in OpenAPI spec"
      ]
    },
    {
      "date": "2026-06-04",
      "tag": "i18n-foundation",
      "summary": "Internationalization: Ukrainian and English locales for all public pages",
      "changes": [
        "next-intl integration with uk (default) and en locales, localePrefix as-needed for SEO",
        "All public pages localized: landing, features, pricing, privacy, terms, sign-in, sign-up",
        "Language switcher in landing header",
        "Structured message catalogs: src/messages/{locale}/*.json",
        "hreflang alternates for search engine indexing"
      ]
    },
    {
      "date": "2026-06-01",
      "tag": "shopify-adapter-keyboard-shortcuts",
      "summary": "Shopify adapter, kanban improvements, keyboard shortcuts, entity hover cards",
      "changes": [
        "Shopify webhook adapter: orders/create,updated,cancelled,fulfilled,paid and customers/create,update",
        "HMAC-SHA256 signature verification (timingSafeEqual)",
        "Guided setup stepper for WooCommerce, Shopify, Telegram adapters in Settings UI",
        "Kanban: collapsed stage columns with localStorage persistence",
        "Kanban: WIP limit per stage with orange warning badge",
        "Keyboard shortcuts: ⌘K search, N new entity, E edit, ? cheatsheet modal",
        "EntityHoverCard (Radix HoverCard) for leads, contacts, companies, deals"
      ]
    },
    {
      "date": "2026-05-20",
      "tag": "advanced-crm-features",
      "summary": "Outbound webhooks, recurring activities, customer segmentation, tags manager",
      "changes": [
        "Outbound webhooks with HMAC-SHA256 signing for deal.won, deal.lost, lead.converted, order events",
        "Recurring activities: daily/weekly/monthly recurrence with auto-create on completion",
        "@mention in activity notes: type @Name to notify workspace members in-app",
        "Customer segmentation: LTV buckets, won deals min, health filters, saved segments",
        "Tags manager: rename, merge, delete tags across leads and contacts",
        "Lead scoring v2: rule-based (+10 activity, +5 qualified, -20 overdue 14d), daily cron",
        "Orders UI: Payments/Shipments/Returns tabs on order detail page"
      ]
    },
    {
      "date": "2026-05-05",
      "tag": "notifications-analytics",
      "summary": "In-app notifications, reports module, dashboard goals, stagnation detection",
      "changes": [
        "In-app notification bell with unread badge: assignLead, assignActivity, updateDeal triggers",
        "Stagnation cron: daily check for stale deals/leads → workspace_notifications",
        "Email digest customization: frequency (daily/weekly/never), preferred time",
        "Reports module /admin/reports: conversion by source, pipeline velocity, team performance, revenue trend",
        "Dashboard monthly goals: revenue target + deals target with progress bars",
        "Pipeline analytics view: per-stage funnel reach, bottleneck detection",
        "Lead source analytics view: volume, qualified%, converted%, avg score per source"
      ]
    },
    {
      "date": "2026-04-20",
      "tag": "bulk-actions-import-export",
      "summary": "Bulk actions, CSV import/export, global search, record attachments, audit log page",
      "changes": [
        "Bulk actions for leads: assign, status change, delete with floating action bar",
        "Bulk actions for deals: assign, delete on kanban",
        "CSV import for leads and contacts with drag-and-drop preview",
        "CSV export for leads, contacts, companies, orders",
        "Global search ⌘K: leads, contacts, companies, deals — 5 results each, keyboard navigation",
        "Record attachments: Vercel Blob upload to leads, deals, contacts, companies (10MB/file, 20/record)",
        "Audit log page /admin/audit with filters (q, entityType, actor, date range)"
      ]
    },
    {
      "date": "2026-04-05",
      "tag": "trust-compliance",
      "summary": "2FA, session management, workspace export, workspace deletion, Sentry",
      "changes": [
        "Two-factor authentication (TOTP): enable flow with QR + backup codes, 2FA challenge at sign-in",
        "Active session management: list sessions by device/IP, revoke individual or all",
        "Workspace data export: ZIP with CSV for all CRM entities (GDPR)",
        "Workspace soft deletion: slug confirmation, 30-day retention, branded email",
        "Sentry error tracking with workspace ID and role context",
        "Auth rate limiting: 10 attempts / 60s via Better Auth built-in",
        "Terms of Service and Privacy Policy pages"
      ]
    },
    {
      "date": "2026-03-20",
      "tag": "activities-dashboard-notifications",
      "summary": "Activities module, CRM dashboard, daily email digest",
      "changes": [
        "Activities module: tasks, calls, meetings, emails, notes with type, priority, due date",
        "Activity completion flow and recurring activities groundwork",
        "Entity timeline: activities linked to leads, contacts, companies, deals",
        "Dashboard: active leads, pipeline value, weighted forecast, stale leads, overdue activities",
        "Conversion funnel chart, revenue forecast chart, team activity bar chart",
        "Win rate and average deal cycle cards",
        "Daily email digest: overdue activities, stale leads, stale deals (react-email templates)",
        "Workspace notification preferences per organizationId"
      ]
    },
    {
      "date": "2026-03-05",
      "tag": "pipeline-deals-products",
      "summary": "Deals pipeline with drag-and-drop, deal products with margin, customers module",
      "changes": [
        "Kanban pipeline with @dnd-kit drag-and-drop, stage transitions, lost reason",
        "Weighted forecast = amount × probability",
        "Deal products (deal_products junction): add from catalog, qty/price/discount, syncDealAmount",
        "Pipeline stage settings: owner renames stages and sets default probability",
        "Customers module: post-sale CRM view (companies with won deals), health score",
        "Company 360° view: won deal purchases, order history island",
        "Lead scoring: base score 50, decay 3pts/day after 3 days without update"
      ]
    },
    {
      "date": "2026-02-20",
      "tag": "leads-contacts-companies",
      "summary": "Leads, contacts, companies with 360° cards, lead conversion",
      "changes": [
        "Leads module: list with nuqs filters, create/edit, 360° detail, stale detection, score visual",
        "Lead conversion: 1-click creates Contact + Company + Deal atomically via db.batch()",
        "Contacts module: list, 360° card, company association, tags, activities",
        "Companies module: list, 360° card, key contacts, open deals, lifetime value",
        "Contact/Company merge with deduplication (exact email or name match detection)",
        "Lead sources: built-in + custom workspace slugs, archive without breaking history",
        "Bulk lead import with CSV preview and error reporting"
      ]
    },
    {
      "date": "2026-02-05",
      "tag": "catalog-api-js-widget",
      "summary": "Product catalog, Public API, JS lead widget, WooCommerce adapter",
      "changes": [
        "Product catalog: brands, categories, bundles, Vercel Blob images (10/product, 2MB, drag-to-sort)",
        "API tokens with least-privilege scopes and one-time token reveal",
        "Public REST API: GET/POST/PATCH/DELETE /products, /categories, /brands, /inventory",
        "OpenAPI 3.1 spec at /api/v1/openapi.json, interactive Scalar UI at /api-docs",
        "JS lead widget: <script> embed, iframe, honeypot, rate limit 10/min",
        "WooCommerce webhook adapter: orders + customers, HMAC signature verification",
        "Full e-commerce API: orders, payments, shipments, returns, storefront customers, addresses"
      ]
    },
    {
      "date": "2026-01-15",
      "tag": "crm-foundation",
      "summary": "CRM foundation: workspace, team, roles, settings, sidebar navigation",
      "changes": [
        "Better Auth workspace organizations: owner/manager/viewer roles",
        "Email invitations with onboarding screen, workspace-local suspension",
        "Compact collapsible sidebar with Quick Create menu",
        "Pipeline stage configuration, lead source settings",
        "Theme (light/dark/system), notification preferences, workspace currency",
        "Workspace selector for multi-membership users",
        "Activity calendar view (roadmap)",
        "Platform admin read-only dashboard for CRM_OWNER_EMAIL"
      ]
    }
  ]
}
