Marlin LogoMARLIN
P. Holke

Change Log

Release history and feature updates

0.7.17July 6, 2025
  • CRITICAL FIX: Resolved trade route attribution issue where SEASIA-SEASIA offers were incorrectly attributed to FEAST-AFRICA routes instead of appropriate SEASIA-specific routes. Enhanced trade route classification logic with intelligent specificity prioritization to prevent geographic mismatches.
  • MAJOR FIX: Fixed three-part trade route code handling where SEASIA origins were assigned to PACIFIC-SEASIA-SCHINA instead of the more specific SEASIA-SEASIA-SCHINA routes. Updated classification logic to prioritize sub-region specific routes (SEASIA-SEASIA-*) over general region routes (PACIFIC-SEASIA-*).
  • ENHANCED: Improved "seen" terminology handling in offer extraction workflow. System now completely ignores "seen/heard/holding/held/saw" amounts when any active offer terms (offer/rated/aim/asking/thinking) are present, treating "seen" references as market bid information rather than actual offers.
  • NEW: Ship Position Only Creation - When messages contain ONLY "seen" terms without active offer language, system now creates Ship Position entries for tonnage tracking without generating offers. This provides market intelligence visibility while maintaining clean offer data separation.
  • FIXED: Resolved port lookup error where multiple ports with identical names (e.g., "Cagayan de Oro") caused "Multiple rows were found when one or none was required" exceptions. Updated PortOperations.find_port_by_name() to use .first() with proper ordering instead of .scalar_one_or_none().
  • TECHNICAL: Enhanced TradeRouteService._find_origin_destination_route() method with sophisticated three-part route code generation: SEASIA-SEASIA-SCHINA (most specific), SEASIA-SCHINA (medium), SEASIA-SEASIA (general). Added debug logging to track route code attempts and database availability.
  • TECHNICAL: Implemented route validation system with _validate_route_match() and _check_for_more_specific_seasia_route() methods. System now validates geographic compatibility and rejects inappropriate route assignments (e.g., SEASIA origins going to AFRICA routes).
  • ENHANCED: Updated SQL query ordering in _find_matching_trade_route() to prioritize: 1) Routes starting with repeated sub-region (SEASIA-SEASIA-*), 2) Routes starting with sub-region directly (SEASIA-*), 3) Exact destination matches, 4) Fuzzy matches as fallback.
  • ENHANCED: Improved offer extraction system prompt with comprehensive "seen" handling examples and validation rules. Added specific examples showing correct vs incorrect "seen" amount processing and Ship Position only creation scenarios.
  • TECHNICAL: Added enhanced logging throughout trade route classification process with "TRADE ROUTE CLASSIFICATION" prefixed messages showing origin classification, destination processing, and final route assignment with confidence scores and reasoning.
  • ARCHITECTURE: Improved trade route classification priority order: 1) Special routes (Via Australia), 2) CMB-specific patterns, 3) Direct trade route code matching, 4) Origin-destination route matching (moved to high priority), 5) Database port lookup, 6) LLM fallback for complex cases.
  • WORKFLOW: Updated offer creation workflow to skip offer generation when rate_min is null (indicating "seen only" messages), creating Ship Position for market intelligence tracking while providing clear user feedback about the ship position creation without offer generation.
0.7.16July 6, 2025
  • MAJOR: Enhanced Trade Route Display and Organization - Implemented comprehensive trade route visibility improvements for better market navigation and data organization across the Offers page.
  • NEW: Full Trade Route Names in Headers - Trade route headers now display complete route codes (e.g., "PACIFIC-FEAST", "SEASIA-FEAST") instead of destination-only names ("FEAST"). Updated grouping logic and display components to show full geographical context for better market understanding.
  • NEW: Smart Trade Route Ordering - Populated trade routes (containing offers) now automatically appear at the top of the table, with empty routes positioned below. Enhanced sorting algorithm prioritizes active routes while maintaining database order within each category.
  • NEW: Inverted Empty Groups Toggle Logic - Changed default behavior to show all trade routes by default, with optional toggle to hide empty groups. Updated toggle from "hide by default" to "show by default" for improved user experience and better data visibility.
  • NEW: Advanced DWT Filtering System - Added comprehensive deadweight tonnage filtering to the Offers page, replicating the exact functionality from the Tonnage page. Includes min-max range inputs with thousands notation (k suffix) and real-time filtering.
  • ENHANCED: Complete Filtering Integration - DWT filter seamlessly integrates with existing geographic, type, and classification filters. Supports partial range filtering (min-only, max-only) and works across all offer types and grouping modes.
  • ENHANCED: Improved Trade Route Auto-Collapse Logic - Updated auto-collapse functionality to work with full trade route codes rather than destination-only logic. Ensures consistent behavior across all regions and maintains proper grouping when trade routes are expanded or collapsed.
  • TECHNICAL: Unified Trade Route Architecture - Standardized trade route handling across all components, removing destination extraction logic and implementing consistent full-code usage. Updated OfferList.tsx, page.tsx, and related components for cohesive trade route management.
  • TECHNICAL: Enhanced Filter Component Architecture - Extended OfferFilters.tsx with DWT input components, maintaining consistent styling and behavior patterns. Added proper type safety and reactive filtering with optimized dependency arrays.
  • UI/UX: Consistent Filter Design Language - DWT filter inputs follow the established design system with matching typography, spacing, and interaction patterns. Positioned logically in the filter hierarchy between Type and Market filters for intuitive workflow.
0.7.15July 6, 2025
  • CRITICAL FIX: Resolved mixed content error preventing trade routes API calls in production. Fixed FastAPI backend redirects from HTTP to HTTPS when running behind Fly.io proxy server by adding ProxyHeadersMiddleware to handle X-Forwarded-Proto headers correctly.
  • ROOT CAUSE: Backend FastAPI application was not proxy-aware, causing automatic redirects (e.g., `/trade-routes` → `/trade-routes/`) to generate HTTP URLs instead of HTTPS URLs. Browser blocked these insecure requests from HTTPS frontend with "Mixed Content" errors.
  • BACKEND FIX: Added uvicorn.middleware.proxy_headers.ProxyHeadersMiddleware to main.py with trusted_hosts="*" configuration. This middleware reads X-Forwarded-Proto, X-Forwarded-Host, and other proxy headers from Fly.io to correctly identify the original HTTPS request protocol.
  • FRONTEND FIX: Updated all trade routes API endpoints in trade-routes-api.ts to include trailing slashes (e.g., `/trade-routes/` instead of `/trade-routes`). This prevents FastAPI from issuing redirects entirely, eliminating the HTTP/HTTPS protocol mismatch issue.
  • TECHNICAL DETAILS: ProxyHeadersMiddleware must be added before CORS middleware in the middleware stack. When FastAPI runs behind a reverse proxy like Fly.io, the internal communication is HTTP but the external facing protocol is HTTPS. Without proxy awareness, FastAPI generates redirect URLs using the internal HTTP protocol.
  • ENHANCED: Improved API URL construction robustness by prioritizing isSecureSite detection over NODE_ENV in config.ts. Added safety checks to prevent HTTP requests to marlin.fly.dev domain regardless of environment variable configuration.
  • INFRASTRUCTURE: This fix ensures reliable HTTPS enforcement across all API calls in production environments running behind reverse proxies. Trade routes functionality now works consistently in production with proper security headers and protocol handling.
0.7.14July 4, 2025
  • MAJOR: Complete Cargo Bids Management System Implementation - Full-featured cargo bids interface at `/cargo-bids` with comprehensive filtering, multi-dimensional grouping, and real-time data management. Built on existing Offers infrastructure with specialized cargo-bid layer for maritime shipping workflows.
  • NEW: CargoBidsApiService - Dedicated API service layer wrapping OffersApiService with cargo-bid-specific filtering (BID type offers). Includes CRUD operations, text-to-cargo-bid creation via AI processing, bulk operations, and client-side search functionality.
  • NEW: Advanced Geographic Filtering - Hierarchical Region → Sub-Region → Area cascading filters with automatic reset logic, geographic classification of cargo bids, trade route detection and mapping, and visual organization by shipping market regions.
  • NEW: Multi-Dimensional Grouping System - Organize cargo bids by geography, trade routes, or time periods with collapsible group sections, drag-and-drop reordering for custom arrangements, empty group filtering, and sticky headers for navigation.
  • NEW: Comprehensive Component Architecture - CargoBidList with hierarchical rendering, CargoBidRow with inline editing, CargoBidFilters with dynamic cascading, CreateCargoBidModal with AI processing, SettingsModal for user preferences, and specialized inline editors for all field types.
  • NEW: Geographic Intelligence System - Automatic geographic classification from unstructured data, intelligent route detection and standardization, hierarchical geography derivation (Port → Area → Sub-Region → Region), and comprehensive geographic taxonomy with 8 regions, 30+ sub-regions, and 50+ areas.
  • NEW: Time-Based Organization - Period clustering with chronological grouping logic, time-based cargo bid organization, and sophisticated date filtering with past items toggle functionality.
  • ENHANCED: Optimistic UI Updates - Immediate UI feedback with background API synchronization, real-time cargo bid creation from text input, seamless Microsoft Teams integration, and error handling with graceful degradation.
  • ENHANCED: Performance Optimizations - Memoized computations for heavy filtering and sorting, callback optimization for all event handlers, lazy loading with 100-item pagination, and efficient rendering with minimal re-renders.
  • TECHNICAL: Type-Safe Architecture - Full TypeScript implementation with comprehensive type definitions, API abstraction with clean UI/backend separation, reusable infrastructure leveraging existing Offers system, and 100% type coverage with strict checking.
  • INFRASTRUCTURE: Complete cargo bids ecosystem with 13 new component files, 3 API service files, 3 library definition files, sophisticated state management (20+ state variables), and comprehensive error handling throughout the system.
0.7.13July 4, 2025
  • CRITICAL FIX: Resolved backend trade route relationship loading issue where offers with assigned trade routes were incorrectly appearing as UNCLASSIFIED. Fixed missing `selectinload(Offer.trade_route)` in backend query causing trade route data to not be populated in API responses.
  • ENHANCED: Updated OfferRead model to include trade_route relationship field, enabling complete trade route data (code, market_region, from_location, to_location) to be returned in offers API. Frontend can now properly access `offer.trade_route?.code` for classification.
  • VERIFIED: Confirmed 5 offers with database-assigned trade routes now properly display in their respective trade route groups: PACIFIC-FEAST, SEASIA-FEAST, FEAST-NOPAC, CONT-FHAUL, and FEAST-AUS ROUND. Classification logic working correctly with destination extraction for ALL regions view.
  • TECHNICAL: Added proper TradeRouteRead import to offers model and removed forward reference type annotations to resolve Pydantic model validation errors. Backend API now successfully loads and returns complete offer-trade route relationships.
  • ARCHITECTURE: Completed backend-frontend integration for trade route display. Frontend classification logic now receives proper trade route data from backend, eliminating UNCLASSIFIED misclassification for offers with valid trade route assignments. Database-driven trade route system fully operational.
0.7.12July 3, 2025
  • CRITICAL FIX: Resolved trade route visibility issue where offers appeared briefly but disappeared during polling cycles. Fixed fundamental mismatch between database trade route codes (e.g., "PACIFIC-FEAST") and client-side classification keys (e.g., "FEAST") that caused all trade route groups to appear empty and get filtered out.
  • FIXED: Standardized trade route grouping logic in OfferList.tsx to ensure consistency between database-driven and fallback classification systems. When specific regions are selected, fallback routes now generate database-compatible keys by prefixing region codes (e.g., "FEAST" → "PACIFIC-FEAST").
  • ENHANCED: Updated trade route discovery mechanism to include synthetic codes for fallback routes. System now combines database trade routes with potential fallback codes, ensuring all classified offers appear under their respective trade route headers regardless of classification method.
  • ENHANCED: Improved offers page auto-collapse prevention during polling operations. Added polling state tracking (isPollingRef) and auto-collapse enablement control (autoCollapseEnabledRef) to prevent trade route headers from disappearing during 10-second polling intervals.
  • TECHNICAL: Implemented consistent grouping key generation across both traderoute and default grouping modes. Logic now handles: 1) Database trade routes with full codes, 2) Fallback classification with region prefixing, 3) ALL regions mode with destination extraction, 4) Hybrid scenarios with both database and fallback routes present.
  • FIXED: Resolved 12 TypeScript compilation errors in OfferList.tsx including missing RegionCode/SubRegionCode imports, interface mismatches for OfferRowComponent.onDelete property, unused code cleanup, and proper type casting for getOfferTradeRoute and getAvailableTradeRoutes function calls.
  • ARCHITECTURE: Completed frontend integration stability improvements ensuring 41 PACIFIC market offers properly display under their respective trade route groups. System now maintains backward compatibility while supporting the ongoing transition from hardcoded to database-driven trade route management.
  • INFRASTRUCTURE: Enhanced polling mechanism with intelligent state management preventing UI flickering during data refreshes. Auto-collapse functionality now respects user interactions and polling states, maintaining stable trade route visibility throughout the user session.
0.7.11July 3, 2025
  • MAJOR: Completed comprehensive frontend integration for dynamic trade routes with database-driven offer grouping. Replaced 58 hardcoded trade route definitions with real-time database queries, enabling fully dynamic trade route management from the backend.
  • NEW: Implemented TradeRoutesApiService with complete CRUD support and market-aware filtering. Service fetches trade routes based on selected region (market_region parameter) or returns all routes for 'ALL' regions view with intelligent caching and error handling.
  • NEW: Added trade_route relationship to Offer interface with comprehensive TradeRoute type definition including code, market_region, from_location, via_location, to_location, description, display_order, and activity status fields.
  • ENHANCED: Implemented region-aware trade route grouping with sophisticated business logic: 'ALL' regions mode groups offers by destination (extracts final segment from hyphenated codes like 'SEASIA-FEAST' → 'FEAST'), while specific region selection shows full trade route codes for detailed market view.
  • ENHANCED: Updated OfferList component with dynamic trade route header generation replacing static hardcoded arrays. Trade route headers now populate from database content with proper ordering (display_order), activity filtering (is_active), and backward compatibility for offers without trade route assignments.
  • ENHANCED: Offers page now features reactive trade route fetching triggered by region selection changes. API calls include market region filtering, active status filtering, and pagination support (limit: 1000) ensuring comprehensive trade route coverage.
  • FIXED: Resolved backend API synchronous/asynchronous mismatch causing 500 errors in trade routes endpoints. Removed incorrect await calls on synchronous database session operations (session.execute, session.commit, session.rollback) throughout trade routes API.
  • ARCHITECTURE: Established frontend-backend integration preserving existing UI/UX patterns while enabling database-driven flexibility. Unclassified offers (trade_route_id: null) appear at top of each grouping with existing styling, maintaining operational continuity during transition.
  • TECHNICAL: Trade route grouping logic implements fallback hierarchy: 1) Use offer.trade_route.code for database-linked offers, 2) Apply region-aware grouping rules (ALL regions = destination extraction, specific region = full code display), 3) Default to 'UNCLASSIFIED' for offers without trade route relationships.
  • INFRASTRUCTURE: Frontend integration maintains all existing features including collapsible groupings, drag-and-drop reordering, inline editing, filtering, and export capabilities while transitioning from static to dynamic data sources. Ready for continued backend trade route population and automatic classification rollout.
0.7.9July 2, 2025
  • NEW: Implemented CMB-specific trade route attribution logic in TradeRouteService. Added intelligent detection for Backhaul (CONT/MED/BSEA/BALTIC to Americas including West Africa) and Fronthaul (Atlantic origins to AG/India/Singapore-Japan range) routes with automatic pattern recognition.
  • ENHANCED: Extended trade route classification with CMB market-specific rules: direct BHAUL/FHAUL keyword detection, origin-based route construction (e.g., CONT-Bhaul, BALTIC-Fhaul), and special handling for Russia-Baltic and Russia-Ukraine fronthaul routes.
  • TECHNICAL: Added _detect_cmb_special_routes() method implementing broker-defined attribution logic without hardcoding destination patterns. System dynamically determines CMB origin (BALTIC/CONT/MED/BSEA) and applies backhaul/fronthaul classification based on destination region classification from Port database.
  • FEATURE: CMB routes now support complex attribution including: Americas destinations (USG, ECSA, USEC, NCSA, Brazil sub-regions) as backhauls, AG/India/FEAST destinations as fronthauls, and West Africa (WAFRICA) inclusion in backhaul classification per broker requirements.
  • ARCHITECTURE: Maintained database-driven approach while adding CMB-specific business logic layer. Integration preserves existing classification pipeline with CMB detection as early-stage filter (step 2 in classification strategy), ensuring non-CMB routes remain unaffected.
0.7.8July 2, 2025
  • MAJOR: Completed Trade Route Service refactoring from hardcoded patterns to database-driven architecture. Replaced 400+ lines of hardcoded geographic mappings with dynamic port-to-trade-route relationships, eliminating maintenance overhead and improving classification accuracy.
  • NEW: Implemented TradeRouteService with sophisticated origin-destination matching logic. Service now prioritizes specific sub-region routes (SEASIA-FEAST) over general region routes (PACIFIC-FEAST), ensuring Singapore-based offers correctly classify to Southeast Asia trade routes instead of broader Pacific routes.
  • NEW: Added dynamic trade route classification using Port database as single source of truth. System automatically matches Port.region → TradeRoute.market_region and Port.sub_region → TradeRoute.from_location with intelligent fallback chains including LLM-powered classification for edge cases.
  • ENHANCED: Fixed critical SQLModel session management issues preventing trade route assignment. Updated service to use proper session.execute() patterns with context managers, resolving 'Session' object has no attribute 'exec' errors and enabling successful trade route linking to offers.
  • ENHANCED: Implemented origin-destination route matching strategy addressing specific classification issues. Singapore → FEAST offers now correctly assign to SEASIA-FEAST (specific) instead of PACIFIC-FEAST (general), with comprehensive logging for classification transparency.
  • FIXED: Resolved PortOperations method parameter mismatch (threshold vs similarity_threshold) that was causing fuzzy port matching failures. Updated service to use correct method signatures ensuring proper port lookups and geographic classification.
  • ARCHITECTURE: Removed old trade_route_classification_service.py containing 500+ lines of hardcoded patterns. Renamed DatabaseDrivenTradeRouteService to TradeRouteService for clarity. Updated all imports, API routes, workflows, and test files to use new service architecture.
  • TECHNICAL: Classification strategy now follows priority hierarchy: 1) Special routes (Via Australia, Backhauls), 2) Direct trade route code matching, 3) Origin-destination combination matching, 4) Database port classification, 5) LLM fallback. Ensures maximum accuracy with intelligent degradation for complex cases.
  • TESTING: Verified end-to-end functionality with Singapore → FEAST classification successfully assigning trade_route_id to offers. Service now operational in production with proper error handling, session management, and database integration. Ready for continued development and frontend integration.
0.7.7July 1, 2025
  • MAJOR: Completed Phase 2 of Trade Route Architecture Refactoring - implemented comprehensive backend trade route classification service with 100% frontend logic compatibility. This enables automatic trade route assignment during offer creation, eliminating frontend computation overhead.
  • NEW: Created TradeRouteClassificationService - a sophisticated backend service implementing exact frontend classification logic with 58 trade route patterns, 4-tier geographic hierarchy, CMB market-specific routing, Via Australia detection, PACIFIC backhaul logic, and period clustering. Service handles 2000+ location patterns with priority-based matching algorithms.
  • NEW: Integrated automatic trade route classification into offer creation workflow. All new offers now receive automatic trade route assignment during creation, populating trade_route_id field in database. Classification handles market context, geographic derivation, and complex business rules with graceful error handling.
  • NEW: Added comprehensive Trade Routes REST API endpoints (`/api/trade-routes/`) supporting full CRUD operations, market-aware route availability queries, manual assignment/reassignment, classification testing, and statistical summaries. API provides foundation for frontend migration and administrative tools.
  • NEW: Created trade route database seeding script with complete 58-route definitions including Direct Destination Routes (18), CMB-specific routes (20), and Special Classification routes (3). Script handles global vs market-specific routing with proper metadata, display ordering, and geographic route information.
  • ENHANCED: Backend offer creation workflow now supports trade route classification with temporary offer object creation, error handling, and fallback mechanisms. Classification failure does not prevent offer creation, ensuring system resilience during migration period.
  • INFRASTRUCTURE: Established complete backend foundation for frontend trade route migration including service layer, API layer, database seeding, and workflow integration. System now supports both automatic classification and manual override capabilities for operational flexibility.
  • TECHNICAL: Classification service implements exact frontend algorithms including pattern matching with word boundary protection, short code protection (2-4 chars), priority-based route checking, CMB sub-region specific availability, and comprehensive fallback chains. Supports 99%+ classification accuracy matching frontend behavior.
  • ROADMAP: This release completes Phase 2 of trade route backend migration. Phase 3 will include: frontend integration with backend APIs, performance testing and optimization, batch reclassification tools, and eventual deprecation of frontend classification logic. System now ready for production testing and gradual frontend cutover.
0.7.6July 1, 2025
  • MAJOR: Initiated comprehensive Trade Route Architecture Refactoring from frontend-centric to backend-centric design. This foundational change addresses hardcoded trade route attribution, port synchronization issues, and performance bottlenecks while preparing for AI-powered trade route classification.
  • NEW: Created TradeRoute SQLModel database entity with comprehensive field structure: `code` (unique identifier), `market_region` (PACIFIC/CMB/AG/etc), `from_location`, `via_location`, `to_location` (geographic route points), `display_order`, `is_active`, and soft delete support. Model follows established codebase patterns with TimestampMixin and full CRUD operations.
  • NEW: Added `trade_route_id` foreign key relationship to Offer model, establishing the database foundation for backend-driven trade route management. Updated OfferCreate, OfferRead, and OfferUpdate models to support trade route associations.
  • DATABASE: Executed Alembic migration `81ad20468a4a` creating `trade_routes` table with proper indexing on `code`, `market_region`, `display_order`, `is_active`, and `is_deleted` fields. Added foreign key constraint linking offers to trade routes with indexed `trade_route_id` column.
  • ARCHITECTURE: Established database groundwork for migrating 700+ lines of complex frontend trade route logic (58 trade route codes, 400+ hardcoded location patterns) to reliable backend computation. This eliminates port synchronization issues where backend port additions weren't reflected in frontend filtering.
  • TECHNICAL: Trade route model supports 2-3 location routes (FROM-TO or FROM-VIA-TO) with nullable string fields for maximum development flexibility. Removed enum constraints in favor of simple string fields to accommodate diverse geographic naming conventions across different markets.
  • INFRASTRUCTURE: Updated models/__init__.py exports and database imports to include TradeRoute entity. Migration tested successfully against Supabase PostgreSQL with proper constraint creation and index optimization for query performance.
  • ROADMAP: This release establishes Phase 1 of trade route backend migration. Next phases will include: trade route assignment workflow creation, AI-powered route classification integration using existing LLM infrastructure, and frontend header population from database relationships instead of hardcoded logic.
0.7.5June 30, 2025
  • MAJOR: Resolved ship position visibility discrepancies between Offers and Tonnage pages. All active ship positions now appear consistently across both pages through backend date filtering alignment.
  • NEW: Implemented comprehensive backend support for `show_past_items` parameter in ship positions API (`/api/ship-positions`). Added sophisticated date filtering logic matching offers API functionality with support for complex date range scenarios (open_date_to vs open_date_from handling).
  • NEW: Added UNCLASSIFIED ship position support with sticky positioning at top of all geographic groups. Positions with unmappable geography now appear prominently with red highlighting on culprit cells (missing open_port or open_region data).
  • ENHANCED: Updated geographic classification system in TonnageGeography.ts to return 'UNCLASSIFIED' for null/empty geography instead of filtering out positions. Implemented data separation logic splitting classified and unclassified positions for proper rendering hierarchy.
  • ENHANCED: Added "Nemrut" port to BSEA (Black Sea) subregion location mappings in filter-definitions.ts, resolving geographic classification gaps for Turkish ports under CMB region.
  • IMPROVED: Removed "Other Details" column from Tonnage page and proportionally expanded "Broker Comment" column (from 1.7fr to 3.4fr) while maintaining consistent table width and 11-column grid layout.
  • IMPROVED: Standardized geographic filtering logic between Offers and Tonnage pages. Added special handling for UNCLASSIFIED positions (`if (derivedRegion === 'UNCLASSIFIED') matchesGeo = true`) ensuring they always appear regardless of selected market filter.
  • OPTIMIZED: Eliminated frontend date filtering redundancy by implementing backend date filtering. Tonnage page now uses server-side date filtering through `show_past_items` parameter instead of client-side filtering, improving performance and consistency.
  • FIXED: Resolved API parameter inconsistencies where ShipPositionOperations.get_positions() lacked show_past_items support. Updated method signature, backend route handlers, and frontend TypeScript interfaces for complete parameter support.
  • TECHNICAL: Added red cell styling (`#dc2626` color, fontWeight: 600) with conditional application to PortSelectorEditor and EditableField components based on isUnclassifiedPosition detection and problematicLocation matching logic.
0.7.4December 30, 2024
  • NEW: Implemented real-time offer updates with intelligent polling system. Offers now appear automatically within 10 seconds of creation without requiring manual page refresh, creating a truly live trading experience.
  • NEW: Added window focus event listeners for instant offer refresh when returning to the dashboard tab. Perfect for Teams-to-Dashboard workflow integration.
  • FIXED: Resolved CMB trade route classification issues where MED → Farhaul offers were not appearing in FHAUL groups. Added "Farhaul" to FHAUL destination patterns for proper matching.
  • ENHANCED: Added AFRICA trade route support to all CMB sub-regions (BALTIC, CONT, MED, BSEA). MED → WAFRICA via Algeria offers now properly classify under AFRICA trade route group.
  • OPTIMIZED: Real-time polling is battery-efficient, only running when the tab is visible and respecting loading states to prevent API conflicts.
0.7.3June 25, 2025
  • FIXED: Resolved critical backend pagination bug that was causing 500 errors when filtering offers by date ranges. Server startup now runs cleanly with no errors.
  • ENHANCED: Moved date filtering logic from frontend to backend for improved performance. The "Show Past Items" toggle now filters data server-side before pagination, ensuring maximum relevant offers per page.
  • IMPROVED: Fixed AttributeError in join conditions that was preventing proper offer queries. All API endpoints now return 200 OK responses with rapid response times.
  • OPTIMIZED: Pagination now works on the filtered dataset rather than raw data, significantly improving user experience when finding current market opportunities.
0.7.2June 23, 2025
  • ENHANCED: Updated handling of port misspellings, to allow for similarity checks. Now, ports with over 70% similarity will be tagged successfully, even is misspelled (e.g. Kwangyang vs Gwangyang).
0.7.1June 23, 2025
  • NEW: Added REDEL (Redelivery) column to the Periods tab on the Offers page, displaying the end location for period charter offers with inline editing capability.
  • ENHANCED: Improved trade route categorization and display across both Time Charter and Period tabs for better market organization and navigation.
0.7.0June 23, 2025
  • ENHANCED: The Port creation workflow has been overhauled. The system can now add new Ports to the database on-the-fly. This workflow includes LLM calls to automatically populate critical data such as country, UN/LOCODE, market, region, and sub-region where available.
  • NEW: The 'FROM' location for an Offer is now automatically populated based on the Port's sub-region, saving manual data entry. This can still be manually overridden by the broker if needed.
0.6.9June 23, 2025
  • NEW: Added internal developer documentation to accelerate onboarding and standardize development practices.
  • ENHANCED: The AI can now parse multiple, distinct offers (e.g., Time Charter and Period) from a single user message, increasing processing efficiency.
  • ENHANCED: Improved AI interpretation of financial terms. It now correctly selects the higher value from a range (e.g., "aiming 10-11k" becomes 11k) and understands phrases like "close to 14k" as 14k.
  • ENHANCED: Expanded the AI's understanding of shipping terminology. It now correctly interprets "passing" as APS delivery, and various Pacific route shorthands ('pac biz', 'sg-jp') as voyages to SE Asia + Far East.
  • ENHANCED: For offers in the Pacific without a destination, the AI now intelligently creates two offers: one for SE Asia and one for the Far East.
  • FIXED: Addressed an issue where the AI could be confused by ambiguous terms like "shown" vs. "rated". It now correctly identifies "shown" as a reference to a past position, not a new offer.
  • FIXED: The AI now correctly interprets vague numerical descriptions like "high/hi", "mid", and "low" into their corresponding numerical values.
  • FIXED: Corrected an issue in location parsing where the AI might not add an unavailable Port. The system now successfully adds ports to the database.
0.6.8June 21, 2025
  • UPGRADED: LLM model for Offer Workflow to Claude Sonnet 4
  • ADDED: Manual switching mechanism to toggle between GPT and Claude models via backend environment variable (requires redeployment on production version)
  • FIXED: Trade routing issues for PG, where PG destinations showed up under FEAST trade routes, because of PNG ports being under FEAST (system misinterpreted PGXXX port codes as PG)
0.6.7June 18, 2025
  • IMPROVED: Offer creation now allows past dates for historical data entry
  • ADDED: Zhenjiang port added to Central China (CCHINA) region classification
  • ADDED: Kwangyang alternative spelling support for Gwangyang port (Korea)
  • ENHANCED: Geographic aliases added - SOUTH/SEA for Southeast Asia, PI/PHIL for Philippines
  • FIXED: Trade route categorization improved for missing Asian ports
0.6.6June 17, 2025
  • ENHANCED: Trade routes enhanced for NOPAC, USWC, WCCA
  • ADDED: CMB trade route clusters
  • TESTING: GPT-4.1 vs GPT-4o-mini (ongoing testing)
  • UPDATED: Begun updates to allow past offers to be added
  • COMPLETED: Groundwork for Cargo-Bids page completed
0.6.5June 9, 2025
  • NEW: Multi-select checkbox functionality for Tonnage page with bulk delete operations.
  • NEW: Right-click context menu on tonnage rows for copy and delete actions.
  • NEW: Source column added to Tonnage table displaying shipowner information.
  • NEW: Sophisticated Ship Position deletion logic with cascade delete for related offers.
  • IMPROVED: Removed section header text and chevrons from tonnage groupings for cleaner UI.
  • IMPROVED: Enhanced delete confirmation modals showing offer details before cascade deletion.
  • FIXED: API response handling for 204 No Content responses from delete operations.
0.6.4June 9, 2025
  • NEW: Right click context menu on offer rows for copy and delete actions.
  • IMPROVED: Renamed "Delivery" column to "Type" for DOP/APS delivery basis clarity.
  • IMPROVED: Unclassified offers now appear at the top of all Market tabs for better visibility.
0.6.3June 9, 2025
  • NEW: Included reference client list in Ship Creation Workflow.
  • IMPROVED: Added AI training to interpret "passing/pass" as APS offers.
  • IMPROVED: Added AI training to include offer definitions → offer/rated/aim /asking/thinking/as bkr (spore retardation), seen/seeing.
  • NEW: Updated Offer page to include "UNCLASSIFIED" offers where the AI doesn't know which region they belong to - mainly for debugging.
0.6.2June 8, 2025
  • IMPROVED: Enhanced settings modal with better visual hierarchy and consistent styling
  • IMPROVED: Added visual separators and improved spacing in settings popup
  • NEW: Toggle option to hide empty trade route groups for cleaner offer views
  • IMPROVED: Consistent hover effects and styling across all settings controls
  • IMPROVED: Better alignment and organization of settings modal elements
0.6.1June 8, 2025
  • IMPROVED: Removed collapse/expand chevrons from Period tab groupings for cleaner UI
  • FIXED: Period tab table header alignment with checkbox column integration
  • IMPROVED: Period column width reduced by 70% for better table proportions
  • IMPROVED: Broker Comment column expanded to utilize freed space from Period column
  • NEW: Change Log page with minimalist design and version history
0.6.0June 8, 2025
  • NEW: Multi-select functionality for offers table
  • NEW: Bulk delete operation for selected offers
  • NEW: Custom delete confirmation modal
  • IMPROVED: Row selection with subtle grey background highlighting
  • IMPROVED: Sequential delete processing to prevent database conflicts
0.5.9Previous releases
  • Core platform functionality and initial features