Current Active Release
Release Summary & Changelog
v15.11.6
Welcome to the complete version chronicle for roastfolio. Every update, architectural milestone, visual enhancement, and stability patch is tracked with full transparency according to our three-tier release numbering standard.
- Rebased portfolio cumulative returns to start from 0% on filtered sub-ranges (1W, 1M, YTD, 1Y, 3Y, 5Y) to match benchmark range-relative baselines.
- Eliminated visual scale distortion where portfolio lifetime returns were plotted against range-scoped benchmark returns.
- Rejected incomplete benchmark history that caused exaggerated percentage returns on the History chart.
- Recovered Polish index daily closes from available hourly history and prevented corrupt series from being cached or plotted.
- Deposit and withdrawal markers on the Wallets Value history chart now sit on the plotted value line instead of below it.
- Hovering a marker shows the type, date and amount of the cash flow.
- Added rising bubbles to the scuba diver while underwater.
- Below −12% drawdown, the Danger icon and label pulse neon red; reduced-motion preferences remain respected.
- Expanded Roastfolio Says commentary to the full Daily Verdict column.
- Made the against-market punchline read clearly as a spotlight with a visible lamp and illuminated beam.
- Ensured all candle animation loaders across the dashboard, wallet, chart, and analysis cards consistently render the full 8-bar animation sequence.
- Enforced flex-wrap: nowrap and non-shrinking candle dimensions to prevent narrow cards from squishing or dropping outer animation bars.
- Added contract test coverage verifying all loaders maintain all 8 animation candles and layout integrity.
- Placed Daily Verdict beside Today's Movers from the top of the dashboard, with the return and commentary aligned to the Since previous close chart.
- Made the separate benchmark price chart optional while keeping the portfolio-versus-benchmark return chart visible.
- Extended Daily Verdict effects and replay them periodically only while the widget is visible.
- Replaced the dashboard speedometer with a shared return axis. Daily percentage and PLN returns lead, followed by benchmark comparison, commentary and total value.
- Contextual accents distinguish making money from merely losing less. Brief fireworks, rain, umbrella and spotlight effects respect reduced motion and do not replay on price refresh.
- Preserved live calculations, benchmark selection and roast reactions, with explicit missing-data states and a full-width mobile layout.
- Redesigned the Coping Diary as a desktop ledger and Focus Sheet, with searchable notes, tag and open-checkpoint filters, and clearer thesis and comment sections.
- Added mobile list/detail navigation and a bottom-sheet composer while preserving existing API-backed notes, local fallback, linked assets, checkpoints and comment actions.
- Redesigned Statistics with independent unit-price/HWM and underwater drawdown charts, preserving each chart's dates and X axis. Portfolio, lake and snapshot selectors, contextual help and table pagination remain independent.
- Redesigned Transactions with separate combined filters, 12-row pagination, accessible activity-calendar drill-down, and a compact mobile ledger. Existing live data, transaction editing and automatic-cash protections are preserved.
- Removed the legacy Portfolio entry from application navigation on desktop and mobile. Wallets remains available.
- Updated the offline cache and added navigation regression checks.
- ATH now takes one third of the main desktop column, with Last 6 months and Summary stacked in the remaining two thirds.
- Today's movers and Accounts remain in their separate sidebar. Smaller screens retain a vertical layout.
- Replaced the ATH lake with an animated ocean: a beach at ATH, snorkeling down to −2%, and a scuba diver below.
- Added Relax, Explore and Danger accents, colorful shallow-water fish and distant sharks, with reduced-motion support.
- Added the 30-day deepest drawdown from available snapshots and a linear scale that expands for larger losses. Missing history is shown explicitly.
- Replaced the permanent asset panel with an on-demand picker, giving charts and financial statements more room.
- Added contextual help and responsive financial tables with a pinned metric column, preserving quote and reporting currencies.
- Improved intraday opening-data handling and clarified how the comparison differs from the daily gauge.
- Relocated verbose market session timings, quote delays, and forward-carry notes from under the intraday chart into the “i” info tooltip popover.
- Maintains a clean and uncluttered portfolio vs benchmark chart while keeping full methodology and quote status easily accessible on demand.
- Restored visible switch track and knob for the "Show PLN amounts" privacy toggle in the History Summaries recap share section ("Share your month").
- Added a dedicated
.rc-switch-track element preventing transparent background overrides from global input resets and ensuring cross-browser rendering in Safari/WebKit.
- Restored click-to-refresh functionality on the Roastfolio brand logo and wordmark in the UI 20 navigation rail and header.
- Clicking the logo now triggers live price updates via the backend Yahoo Finance price API with interactive loading status feedback.
- Enhanced monthly recap cards, poster exports, and monthly audit email digests to show friendly stock and asset names instead of raw tickers (e.g., “Mobruk” instead of “MBR.WA”).
- Corporate entity suffixes (such as S.A., Ltd, Sp. z o.o., Inc.) and parenthesized tickers are automatically cleaned and normalized to Title Case.
- Clean ticker symbols are preserved if the company name exceeds 15 characters or is identical to the ticker.
- Fixed deposit and withdrawal markers on the Wallets value-history chart appearing after today and below the x-axis; markers now sit on the line at their date and are hidden when older than the visible window.
- Fixed monthly recap headline formatting where anchor drag amounts showed a plus sign (e.g. “cost +16,173 PLN” instead of “cost 16,173 PLN”).
- Fixed the History Overview / Summaries tabs: only the selected tab is highlighted now, instead of both looking selected on Summaries.
- Overview now has a value hero with range gain, invested capital, deposits in range, market gain and the existing value/invested/deposit chart.
- Cumulative return and benchmark comparison are merged into one chart; benchmark chips are available in % mode and hidden with an explanation in PLN mode.
- Monthly bars sit beside a single daily scatter chart with best/worst halos, average line, %/PLN toggle and focused stats.
- Summaries now use a month strip navigator and a recap poster cover with mood tokens, sparkline, benchmark gap sticker and three-number strip.
- The share invite defaults to hiding PLN amounts and can either open the existing share flow or download the locally generated image.
- Recap headlines are data-backed from benchmark gaps plus carry/anchor contribution, then ATH, then sign-based fallback copy.
- Yearly summaries are visible as a disabled “Soon” segment until annual wrap data exists.
- Wallet chips and an inline create form lead into a value and performance hero, consistent with the dashboard.
- An allocation bar replaces the donut; frameless holdings keep quick Buy/Sell actions and a separate Cemetery tab.
- Quick entry and wallet settings sit in an inline rail. All wallets remains a combined read-only view.
- Transactions open in a desktop side sheet or a phone bottom sheet, with a mobile transaction shortcut above navigation.
- Design-system decisions and a Wallets field registry now cover the screen and its responsive states.
- Fixed: annual return no longer shows −99.99% when a wallet is down; the solver now finds the real rate.
- Fixed: holding rows show each position's share of the wallet instead of 0.0%.
- New all-time highs get a redesigned banner: the line breaks through the previous peak and the new record pulses.
- "Under the surface" now spans the column and uses a log scale, so even a 0.3% dip is visible; above the ATH a green tide rises.
- On phones the roast and the gauge sit side by side.
- The header is left-aligned everywhere: screen name and live status, with the market comment underneath.
- The portfolio line on the intraday chart is delayed 15 minutes, like the exchange quotes, so it no longer ends in a flat stretch.
- The baseline explanation under the portfolio vs benchmark chart moved into a small info button next to the chart title, opened by hover, keyboard focus or tap.
- The portfolio vs benchmark chart now explains that it measures from the session open, while the daily gauge measures from yesterday's close, so overnight gaps make the two differ.
- Portfolio vs benchmark chart now appears when the index publishes its first value a few minutes after the open (e.g. WIG at 09:01); that first value is used as the benchmark opening level and disclosed under the chart.
- Fixed the full price refresh failing (and breaking the gauge) when market data provided exchange session times as timestamps; intraday comparison now uses the exchange-reported session start and close.
- Fewer failed requests on a cold dashboard load: API calls are queued so they no longer burst past the server capacity, and throttled reads are retried automatically.
- Export browser-local timing history for the last 20 dashboard page loads from User settings, without recording holdings or credentials.
- Separate API wait, payload bytes, JSON parsing, dashboard rendering and intraday chart computation; distinguish backend lite/full/history timings.
- Repeatable before/after benchmarks with synthetic portfolios and explicit network and CPU assumptions.
- Compare portfolio and benchmark returns minute by minute from the benchmark session open, synthesized in the browser without snapshot jobs.
- Choose a saved session-only or calendar-day view; portfolio prices can continue after the benchmark closes, with constant-FX and data-quality disclosures.
- Redesigned dashboard with a compact header grouping the screen title and live-update status.
- Multi-Wallet Summary Consolidation: Normalized holding aggregation across wallets by canonical ticker base (handling Warsaw Stock Exchange
.WA suffixes) to unify split lots into single consolidated holdings.
- Today's Movers Defensive Deduplication: Added frontend consolidation in
renderDailyBreakdown() to prevent duplicate rows when rendering multi-portfolio cross-holdings, preserving live market pricing, volume pace, and sparklines.
- Warsaw Ticker Suffix Preservation: Preserved canonical
.WA tickers across transaction recording, holding lookups, and transaction ledger rebuilds.
- Cognito Schema Update Compatibility: Removed redundant Schema definition block from AWS SAM template for the existing Cognito User Pool to eliminate Cognito
UpdateUserPool 400 InvalidRequest ("Required custom attributes are not supported currently") errors during CloudFormation stack updates.
- Unblocked Automated Deployments: Re-enabled successful automated CloudFormation stack updates and static website synchronization across Dev and Prod pipelines.
- Multi-Portfolio Valuation Drop: Fixed historical summary snapshot drops by carrying forward the latest known snapshot values for portfolios without a new transaction on the recalculation date instead of omitting them from the aggregate sum.
- Duplicate Recap Email Protection: Forced recalculations and maintenance runs for monthly wraps now default to suppressing email dispatch (
send_email=False / skip_email=True), preventing duplicate email deliveries to users when regenerating historical recaps.
- Strict Delivery Scoping: Automated recap emails remain strictly limited to the scheduled monthly cron on day 1 of the month or explicit user clicks in the UI.
- Nightly Snapshot Overwrite: Updated the daily closing snapshot scheduler (EventBridge) to execute with
overwrite: true, guaranteeing that official end-of-day market closes always finalize any partial intra-day snapshots taken during active market hours.
- Intra-day Wrap Refresh: Enhanced live monthly wrap generation to update snapshots dynamically without locking in incomplete preliminary data.
- Profit Engine Calculation: Updated primary profit engine wallet selection in wrap generation, email digests, and client-side monthly audit views to evaluate true algebraic maximum nominal change instead of absolute magnitude, correctly prioritizing profitable wallets over loss-making wallets.
- Gmail Email Background: Fixed dark background dropping to white in Gmail by explicitly specifying
bgcolor="#07091A" and inline background styling on every individual chapter and separator table cell.
- Commentary Ink Contrast: Styled monthly audit commentary with dedicated secondary ink color (
#344634) and locked hero header text to prevent child element color inheritance when positive status is active.
- Streak Placeholder Replacement: Dynamically formatted
{streak} placeholder in AI commentary templates with the exact green/red streak months count.
- Email Full Dark Background: Encapsulated monthly recap email template within a full-width dark table with
color-scheme styling to prevent client background truncation on Gmail and Apple Mail.
- Hero Commentary Layout: Relocated commentary directly into the monthly audit hero card bottom without boxed framing, harmonizing with the main summary view.
- Grammarly Deactivation: Disabled Grammarly hooks across all Roastfolio views and inputs via standardized attributes (
data-gramm="false", data-enable-grammarly="false", spellcheck="false").
- Extension Error Filtering: Enhanced global error and unhandled rejection interceptors in
config.js to suppress third-party browser extension noise without masking application errors.
- DOM & CSS Isolation: Added dynamic runtime stamping for newly rendered fields and universal CSS rules to eliminate extension overlays and DOM conflicts.
- Bug Fix: Fixed commentary retrieval bug where scenario keys did not map properly.
- UI Tweak: Centered commentary block at the bottom of the Desktop Wrap view.
- Email Styling: Removed commentary frame and background in emails for a sleeker, minimal look.
- AI Recap Commentary: Introduced AI-generated contextual commentary into the Monthly Audit experience based on market outperformance and portfolio trajectory.
- Email Template Injection: Upgraded the periodic wrap engine to securely embed stylized commentary blocks into the premium HTML emails.
Release Notes Publication Dates & Milestone Timeline Precision
Release Notes
UI/UX
Changelog
Design System
- Dedicated Release Dates: Added explicit publication dates across all release cards on the Release Summary screen, replacing vague temporal placeholders with exact chronological dates.
- Hero Metadata Release Timestamp: Added official "Released" timestamp to the top hero section header alongside milestone status and TOMINEX architecture attribution.
- Active Milestone Badge: Enhanced the active release card with a pulsing green status indicator badge clearly distinguishing the deployed production release from prior versions.
PWA Web App Manifest Deployment & Favicon Synchronization
PWA
Manifest
Deployment
Assets
- PWA Manifest S3 Deployment Fix: Refined
deploy.sh S3 sync exclusion rules from --exclude "*.json" to targeting local cache files specifically (*-cache*.json, benchmark-*.json, price-cache.json, widget-cache.json), ensuring manifest.json is properly synced and explicitly uploaded with application/manifest+json MIME type.
- Manifest Version Query Busted: Added
?v=14.2.1 query parameter to <link rel="manifest"> in index.html, ensuring browsers and desktop Chrome app shortcut updaters fetch the fresh web manifest without stale caching.
- Vector SVG Manifest Icon: Added
roastfolio-logo.svg to manifest.json icon declarations to enable high-resolution vector scaling on supported modern PWA engines.
- Favicon Version Alignment: Synchronized cache-busting query strings for favicons and apple-touch-icons across all subpages (
releases.html, achievements.html, telemetry.html).
- Service Worker Cache Refresh: Bumped service worker cache namespace to
roastfolio-v70 to cycle cached app shell assets.
Summary Wrapped Email Branding & Sender Picture Integration
Email
Branding
BIMI
SES
- Email Header Brand Logo: Embedded the official Roastfolio neon candlestick logo directly into the monthly recap and periodic wrap email header, matching the web app design system.
- BIMI & SVG Vector Standards: Generated standalone BIMI-compliant SVG vector logos (
roastfolio-bimi.svg, roastfolio-logo.svg) enabling email clients (Apple Mail, Yahoo, Fastmail, Gmail) to display the Roastfolio logo as the sender profile picture.
- Universal Sender Avatar Documentation: Added comprehensive setup guide (
docs/EMAIL_BRANDING_AND_SENDER_PICTURE.md) covering Cloudflare BIMI TXT records, Gravatar profile configuration, Google Account avatar association for Gmail, and Apple Business Connect.
Wallets Search Dropdown Visibility & Yahoo Live Price Auto-Suggestion
Wallets
Transactions
Yahoo Finance
UX
- Search Dropdown Positioning & Visibility: Fixed ticker autocomplete dropdown positioning to always open downwards directly under the search box with proper z-index and overflow handling, preventing it from clipping or rendering underneath the wallet history overview card.
- Instant Holdings Display: Focusing on the search input now immediately renders existing wallet holdings without waiting for network responses, giving users instant access to their assets.
- Yahoo Finance Price Auto-Suggestion: Fixed candle close price extraction (
c property) in _fetchStockPricePLN, automatically populating the live price per share in PLN when selecting any asset from Yahoo Finance or existing holdings.
- Multi-Currency FX Support: Enabled seamless live FX rate conversion for Warsaw (PLN), European (EUR via
EURPLN=X), UK (GBP/GBp via GBPPLN=X), and US/global (USD via USDPLN=X) assets.
Wallets In-Place Table Reload & Active Transaction Draft Protection
Wallets
Transactions
Performance
UX
- Transaction Draft Protection: Prevented background
liveDataReady events from interrupting the user while drafting or entering a transaction in the Wallets trade form or Quick Entry.
- In-Place Table Reloads: Eliminated disruptive whole-screen flashes and skeleton loader wipes during refresh cycles; holdings and transaction tables now update cleanly in-place.
- Fast-Path Live Price Updates: Market price updates in the background update live holdings values in-place without triggering redundant DynamoDB network fetch cascades.
- Immediate Post-Trade Reset: Optimized transaction submission to close the form instantly upon save and smoothly reload only the affected tables without double-reloading.
Dashboard Today's Movers Tablet Layout & Nominal Change Alignment
Dashboard
Today's Movers
Tablet UX
Responsive
- Volume Badge Overlap Resolution: Fixed layout collision on tablet viewports where the intraday volume pace chip badge overlapped with the nominal change figure in the "Daily PLN" column.
- Optimized Column Proportions: Rebalanced table layout from default equal thirds to dedicated proportions (28% Company, 52% Chart & Metrics, 20% Daily PLN) with tablet media query adjustments providing generous breathing room for sparklines and volume chips.
- Right-Aligned Financial Metric: Set
text-align: right on the Daily PLN header and values to eliminate dead space on the right and neatly align monetary changes against the card edge.
- Company Name Truncation: Added ellipsis overflow handling to prevent unusually long company names from distorting table column dimensions on compact tablet screens.
Manual Wrap Share Recipient Scope Selection (Just Me vs All Recipients)
Summaries
Email
Sharing
User Profile
- Smart Recipient Prompt: When manually sharing a monthly performance wrap via email, users with multiple email addresses on their profile share list are prompted to choose whether to send just to themselves (logged user email) or to all configured recipients.
- Direct Single-Email Dispatch: Users with only a single email configured experience zero friction with instant, direct dispatch.
- Scoped Backend Delivery: Enhanced
POST /monthly-wraps/email with secure recipientScope validation ('me' vs 'all') ensuring emails are sent precisely to the intended recipients.
Testing Architecture Segregation & Sub-Second Smoke Test Runner
Testing
Performance
Developer Experience
Authentication
- Sub-Second Smoke Test Suite: Segregated test suites into fast smoke tests (
./test.sh smoke, npm run test:smoke) executing all UI and layout contracts in < 0.6 seconds by directly targeting UI contract modules and bypassing heavy backend dependencies.
- Universal Test Runner: Added
./test.sh supporting smoke/ui, full, browser, and all modes, integrated directly with package.json scripts.
- Strict Auth Bypass Architecture: Documented and enforced mock authentication via
?devAuth=1 / localStorage.setItem('roastfolio.devAuth', '1'), completely eliminating slow live Cognito user creation, verification emails, and password reset loops during UI testing.
Browser URL Box Favicon Resolution & Brand Typography Standardization
Favicons
Browser URL Box
Brand Typography
Bug Fixes
- Browser URL Box Favicons: Resolved stale logo caching in browser URL and address bar tabs by generating a full multi-frame 16/24/32/48/64 ICO binary, dedicated 32x32 and 16x16 PNG fallbacks, and adding cache-busting link tags.
- Root Favicon Sync: Synchronized
favicon.ico and PNG icons to repository root to support local dev servers serving from root.
- Brand Typography Standardization: Standardized application header and banner brand titles across all views and navigation bars from capitalized "Roastfolio" to lowercase "roastfolio".
Dedicated Release Summary Screen & Brand Identity Overhaul
Screens
Brand Identity
Navigation
Testing & CI
- New Screen: Introduced this dedicated, standalone Release Summary & Changelog screen accessible across all app footers and navigation menus.
- Brand Overhaul: Replaced app icon assets across touchpoints with the high-resolution neon green candlestick and purple "R" emblem, featuring dark squircle bevel and ambient glow.
- Multi-Resolution Favicons: Generated crisp 16/32/48 ICO favicons, 192/512 PNG icons, and adaptive maskable icons for Android and iOS PWA installs.
- Sub-Second Test Performance: Optimized pytest configuration to bypass slow headless browser tests by default and resolved Python 3.12 keyword collection bottlenecks.
Neon Candlestick App Icon Integration & Visual Assets
Brand
PWA
UI/UX
- Brand Integration: Deployed the neon candlestick icon across splash loader, auth modal, sidebar header, brand preview modal, and global footer.
- User Guide Polish: Replaced generic emoji headers in User Guide with official Roastfolio brand assets and added touch-icon links.
- Service Worker Caching: Added multi-size favicon to precache assets for instant offline presentation.
Calendar Hover Tooltip Formatting Correction
Bug Fix
Monthly Audit
- Tooltip Format: Eliminated duplicate plus sign display on calendar day hover tooltips for positive performance days.
- Visual Cleanup: Enhanced typography rendering on high-DPI displays.
Market Context Returns & Snapshot Fallbacks
Email Recap
Snapshots
- Benchmark Accuracy: Resolved benchmark return discrepancy by prioritizing canonical close-to-close market returns.
- Calendar Heatmap: Trimmed journey chart strictly to month-end boundaries with solid email-compatible hex colors.
- Dynamic Snapshot Fallback: Added automatic snapshot estimation for missing intraday moves.
Summary Wrapped Benchmarks Card
Analytics
Benchmarks
- Benchmark Comparison: Added summary wrapped benchmarks card in the lower right corner displaying Poland (WIG) and World (MSCI ACWI) monthly performance.
Tactile Texture Mesh & Weekend Extrapolation
Visuals
Charts
- Tactile Aesthetics: Subtle tactile texture and ambient lighting mesh on recap covers.
- Weekend Handling: Gapless weekend benchmark extrapolation in The Journey chart.
Spotify Wrapped & Revolut-Style Monthly Audit Engine
Monthly Audit
Email Engine
Architecture
- Audits & Wraps: Spotify Wrapped and Revolut-inspired monthly audit email template redesign.
- Cumulative Journey Chart: Inline SVG cumulative journey chart with dynamic green/red outperformance fill.
- Heatmap & Movers: 7-column calendar heatmap, Who Moved Your Month leader & anchor highlights, and conditional seasonality.
Cash Masking Privacy & Share Sheet Controls
Privacy
Sharing
- Privacy Control: Added user privacy preference to mask PLN cash flows and nominal positions in notification emails (
hideCashInNotifications).
- Share Sheet: Integrated privacy toggle directly into social share dialogs.
Automated Report Email Engine & Multi-Recipient Notifications
Architecture
Notifications
AWS SES
- Email Dispatch Engine: Automated serverless report email generator built on AWS SES with multi-recipient preferences.
- On-Demand Dispatches: Manual and scheduled recap trigger directly from the user dashboard.
Milestones Calendar & All-Time High Celebrations
UI/UX
Gamification
- Milestone Calendar: Interactive daily return calendar widget on Monthly Summaries with Best/Worst day callouts.
- ATH Celebrations: Radiant golden pulsing halo and trophy badge when portfolio touches All-Time Highs.
Floating Interactive Crosshair Tooltip on The Journey
Charts
Interactivity
- Interactive Crosshair: Replaced static under-chart display with floating hover crosshair tooltip with indicator swatches and bounds clamping.
Continuous Snapshot Backfills & Modal Error Handling
Data Engine
XIRR / TWR
- Continuous Backfills: Continuous calendar day snapshot backfilling from earliest historical transaction dates (2021+).
- Performance: Fast incremental XIRR/TWR recalculation and background async workers for transaction edits.
- Modal Feedback: Converted inline validation errors to dedicated modal dialog popups.
Editorial Bento Presentation & Private Share Sheets
Bento UI
Export
- Editorial Bento Layout: High-impact Bento-grid architecture for monthly performance summaries.
- Private Exports: High-resolution PNG sharing canvas and localized client-side image generation.