Skip to content

Releases: SuamiSihat/ss_cam

SS-CAM v5.2.1 - Enterprise Web Portal Overhaul, Security Hardening & Desktop Sync

Choose a tag to compare

@manaphassan manaphassan released this 15 Oct 09:34

[5.2.1] - 2026-10-15 (Enterprise Web Portal Overhaul, Security Hardening & Desktop Sync)

Details and verification evidence: QA/FINAL-WEB-PORTAL-REPORT.md, QA/FINAL-QA-REPORT.md, and QA/PHASE-LOG.md.

Web Management Portal Enterprise Overhaul & Remediation (Phases 1–5)

  • Security Hardening (Phase 1): Mandatory JWT authentication across data endpoints; short-lived, read-only media cookies for images, downloads, and live SSE event streams; unique email/username enforcement preventing look-alike account takeover; legacy plain-text password scrubbing on start-up; forced password rotation with random one-time passwords for new accounts; active session termination on password change, suspension, or role demotion; per-account and per-IP brute-force rate limiting; scoped guest share links with 1–30 day expirations hiding internal staff comments; script execution blocking on SVG/HTML file uploads; directory traversal prevention; Helmet CSP; and sanitization of file paths in server errors.
  • Role Model & Capabilities (Phase 2): Canonical 7-role authorization architecture (admin, ceo, manager, designer, copywriter, clinic, viewer) with explicit roleKey storage and automatic start-up migration; dynamic capabilities derivation from /api/auth/me; centralized routes.ts defining all 12 portal views, navigation groups, mobile dock, and palette actions; client route guards with 404 recovery; and complete stripping/disabling of 403-inducing interactive controls for disallowed roles.
  • Fluent 2 Design System & Visual Harmony (Phase 3): Full adoption of the 60:30:10 visual token hierarchy (Porcelain #FCFAF6 / Charcoal #1C1C1C, Prussian Blue #022057, Banana #FCE53D CTA); complete elimination of all 129 legacy occurrences of #0078D4; global :focus-visible ring; 44px minimum target heights; standardized FluentButton, FluentCard, FluentInput, FluentSelect, FluentDialog, and FluentBadge; offline vector FluentIcons.svelte replacing remote iconify dependencies and emoji glyphs; and unified brand title SS-CAM Creative Portal.
  • Plain-Language Copywriting & Brand Voice (Phase 4): Published QA/copy-guide.md and client/src/lib/copy.ts; sanitized user notifications using getErrorMessage() (0 raw stack traces, 0 exclamation marks); added bilingual English/Malay clinical labels with regulatory disclaimer; and verified 0 forbidden technical jargon terms in user-facing client strings.
  • Module UX, Accessibility & Data Safety (Phase 5): Accessible FluentDialog confirmations replacing native browser confirm()/alert(); inline FluentErrorBanner with one-click retry; filter-aware empty states; priority queue dashboard ("My priority queue" + collapsible "Studio performance"); 5-tab project detail (Brief, Copywriting, Deliverables, Comments, History); 5-tab admin view with URL hash routing; WCAG 2.1 AA keyboard navigation, focus traps, and drawer aria-modal="true"; mobile-first breakpoints down to 390px with >=44px touch targets and horizontal Kanban snap-scrolling; and HTTP 409 conflict detection with user resolution options ("Replace" / "Keep both" / "Skip").
  • Approvals & Deliverables Dashboard Live Hardening: Restored /deliverables scanning across project folders; resolved empty-state $derived filter rune runtime exception; verified live on Synology NAS Docker (creative.suamisihat.myds.me) indexing 520 master deliverables across active campaigns with real-time storage telemetry (4.11 GB, 227 pending, 291 approved) and interactive lightbox zoom/pin annotations.

Cross-Platform Desktop & Ecosystem Synchronization

  • Windows Desktop App (.NET Framework 4.8 / WPF):
    • Verified clean Release build (src/SS-CAM/bin/Release/SS-CAM.exe, 6,349,824 bytes, AssemblyVersion 5.2.1.0).
    • SHA256: F13470BF7228D2BB0ED941DD5B08C83133770903677095616499EC91E0461659.
    • Source Guardian verified: 14/14 checks passed (UTF-8 BOM, Fluent 2 <ui:Button>, ComboBox MinHeight >= 34/36, zero UI-thread blocking).
  • One Project Format on Every App:
    • Standardized folder hierarchy across Windows, Web, Linux, and Android: <YYYY>/<YYYYMM>_<Month>/<YYYYMM>_<NNNN>D_<BRAND>_<Title>/ with 01_BRIEF_ASSETS through 05_DELIVERABLES.
    • Canonical project statuses: backlog, in-progress, review, revision, approved, on-hold.
  • Automated Test Suite:
    • 127 automated Web tests passing (72 unit/DOM, 13 admin, 42 security).
    • Dual-Track Master Gatekeeper verified: 14/14 checks passed (zero tenant/brand leakage in generic Core).

Binary & Artifact Integrity

Component Target / Platform Version Checksum (SHA256)
Windows Portable Desktop App src/SS-CAM/bin/Release/SS-CAM.exe 5.2.1.0 F13470BF7228D2BB0ED941DD5B08C83133770903677095616499EC91E0461659
Web Portal Server & API src/SS-CAM.Web/server/ 5.2.1 Node.js 20 Express / Helmet / JWT RBAC
Web Client Production Dist src/SS-CAM.Web/client/dist/ 5.2.1 Svelte 5 / Vite 5 (index-0XGJ06aT.js)

One project format on every app

  • Same folders everywhere: Windows, Web, Linux and Android now all create projects as <YYYY>/<YYYYMM>_<Month>/<YYYYMM>_<NNNN>D_<BRAND>_<Title>/ with 01_BRIEF_ASSETS … 05_DELIVERABLES.
    • Web: projects were created at the top of the shared drive with a random number. They now go in the year/month folder with the next project ID (server/services/ProjectFormat.js).
    • Linux: replaced the old 01_BRIEFS / 02_RAW_ASSETS / 03_WORKING_FILES / 04_EXPORTS folders and the SS-2026 year folder. The month name is always English. COPY.md moved to 03_COPYWRITING; old Linux projects are still read. Linux no longer writes project.yaml.
  • Same status values everywhere: backlog, in-progress, review, revision, approved, on-hold.
    • New projects start as backlog, priority medium, revision 0 on every app.
    • Approving a project now writes approved on Windows, Linux and Android. Windows and Linux used to write done, which the web dashboard counts as Archived.
    • Android now sends canonical values. It used to send in-review, stuck and queued.
    • Web and Linux read older spellings (in_progress, on_hold, normal) correctly. The Linux task board no longer hides projects saved with those spellings.
  • Android: new projects get a deadline one week ahead. They used to get a fixed 15 Sep 2026.
  • New check: QA/verify-format-sync.ps1 confirms all four apps agree. It is now step 3 of QA/verify-dual-track.ps1. It replaces QA/sync-status-enums.ps1, which rewrote source files from a file outside the repo.

Sign-in on every app

  • Type your username; no staff list. The Web and Android sign-in screens no longer show a list of everyone's names.
    • The public /api/auth/roster route is removed.
    • The staff list that was built into the web page's code is removed.
    • /api/team/roster and Quick Notes now require sign-in.
  • Remember me shows Continue as [name] with a Not you? Switch account link (Web and Android).
  • Default password must be changed. Signing in with the default password returns mustChangePassword and a restricted session that can only choose a new password. Every app shows a "Choose a new password" step. The new password must be at least 10 characters and different from the default.
  • Windows app: real portal sign-in in Settings → Web portal account (new PortalAuthService).
    • Orders and Quick Notes sync with the web now authenticate. Quick Notes upload and delete never worked before.
    • The username and password are saved encrypted with Windows DPAPI for the current Windows user only (%LOCALAPPDATA%\<AppFolder>\portal_account.dat). The app signs in again silently when the 12-hour session ends.
    • The old username-only login and admin fallback are removed.
    • Certificate errors are now accepted only for the configured portal address, not for every connection.
  • Android fixes:
    • A fresh install no longer opens signed in as an admin.
    • Background refresh no longer throws away the session by re-signing in without a password.
    • An expired session returns you to sign-in with your username kept.
    • Fingerprint or face unlock only reopens a still-valid session.
    • The password is never stored on the phone.
  • Session errors carry a code (SESSION_EXPIRED, PASSWORD_CHANGE_REQUIRED) so apps can send people back to sign-in.

Access control (Web)

  • Deleting tasks is limited to managers and admins (project:edit) on all three delete routes, including the duplicate /studio-tasks/:id route. The delete buttons are hidden for other users.
  • Admins only: changing the AI key (the AI assistant shows non-admins a "Ask an admin" note instead), adding, removing or testing webhooks. The audit log needs admin:system_audit.
  • Default password for new accounts and Reset to default is SuamiSihat123. It can be overridden with DEFAULT_STAFF_PASSWORD in .env. The admin screen no longer hard-codes it.
  • File previews stay public, because image and video tags and client review links need them, but they are now restricted:
    • The deliverable preview, stream and download routes serve only media files.
    • The project file route refuses hidden files and data files (.json, .jsonl, .env, .lock, .tmp).
    • This closes a leak of the AI key and audit log.
  • Fixed path traversal in note deletion and frontmatter injection through the note priority.
  • Fixed a password-store read error that could wipe every user's password. It now fails safely and is logged.
  • Fixed the password minimum: 10 characters everywhere. Resets used to accept 8.

Windows app

  • Update check fixed: it now uses UpdateRepository from the tenant config (SuamiSihat edition: SuamiSihat/ss_cam). The dual-track rename had pointed it at a repo that doesn't exist.
  • Order sign-in: falls ba...
Read more

SS-CAM v4.13.0 — Split-View WhatsApp Simulator & Customizable Dashboard KPI Grid

Choose a tag to compare

@manaphassan manaphassan released this 06 Oct 03:34

SS-CAM v4.13.0 — Split-View WhatsApp Simulator & Customizable Dashboard KPI Grid

What's Changed in v4.13.0

💬 Split-View WhatsApp Simulator in Copywriting Studio (CopywritingPage.xaml, CopywritingDesktopService.cs)

  • Live Side-by-Side Mobile Preview: Real-time WhatsApp conversational preview rendering next to the copy editor with a dedicated [ Split WhatsApp ] toggle button.
  • Conversational Bubble Splitting: Parses continuous markdown copy into simulated individual message bubbles based on double newlines and logical paragraph breaks.
  • WhatsApp Markdown Engine: Formats native WhatsApp formatting syntax (*bold*, _italic_, ~strikethrough~), emoji line breaks, and interactive links.
  • Link Preview Card: Automatically extracts URLs, detects protocol/host, and renders dynamic Rich Open Graph style link preview snippets.
  • 1-Click WhatsApp Formatted Clipboard Export: Instant one-click copy button ([ 📋 Salin Teks WhatsApp ]) formatted for instant pasting into WhatsApp Desktop or Web with native WhatsApp styling intact.
  • Verified Business Profile Header: Visual mockups with SuamiSihat official green accent theme, verified badge, and clean bubble notch geometry.

📊 Customizable Dashboard KPI Grid & Real-Time Production Widgets (DashboardPage.xaml, DashboardLayoutService.cs)

  • Dynamic Layout Customization Engine: New [ ⚙ Customize ] toolbar allowing users to pin favorite cards and reorder cards using inline card header controls (📌 Pin, ▲ Up, ▼ Down).
  • Persistent Layout Storage: Card positions, order, and pinned statuses persist automatically to %APPDATA%\SS-CAM\dashboard_layout.json.
  • In-Flight Production Spotlight Widget: Real-time spotlight card filtering projects with active deadlines, featuring 3-way status filtering (All In-Flight, Needs Review, Critical SLA) with clickable project navigation directly into Project Creator.
  • Active Transcoder Live Monitoring Widget: Direct integration with the FFmpeg background transcoder engine (TranscoderBridgePage.SharedJobs), displaying live encoding jobs, progress meters, and a 1-click launcher to Transcoder Bridge.

🛡️ Core Engine, Quality Assurance & Dual-Track Compliance

  • C# 5 Language Strictness: Strict compiler compliance for MSBuild 4.0 runtime targeting .NET Framework 4.8.
  • Fluent 2 Design Consistency: Pure DynamicResource tokens for background, borders, and typography across all new widgets.
  • Source Guardian & Dual-Track Verification: 100% clean validation across all automated compliance gatekeepers.

Full Changelog: v4.12.2...v4.13.0

v4.12.2 — Discussion Vertical Stacking, Filter Button Alignment & Reviewer Anti-Overflow

Choose a tag to compare

@manaphassan manaphassan released this 01 Oct 09:51

SS-CAM v4.12.2 — Web Discussion Vertical Stacking, Filter Button Alignment & Reviewer Anti-Overflow

What's Changed in v4.12.2

💬 Project Discussion & Review Comments UI Architecture (ProjectComments.svelte)

  • Vertical Component Stacking: Eliminated horizontal clipping and button collision in comment cards. Shifted to a 4-tier vertical structure:
    1. Author Header Row (Author + Role badge + Delete button ✕)
    2. Deliverable Reference Row (🎯 [filename])
    3. Comment Body (.comment-body)
    4. Action Footer Row ([ ✓ Resolved ] / [ ↻ Reopen ] button + Timestamp)
  • Markdown Embedded Images & File Naming: Render deliverable reference links with explicit file names and support inline markdown image rendering for visual design critique attachments.
  • Segmented Filter Buttons Alignment: Re-engineered filter controls (All, Open, Resolved) into an equal-width 3-column segmented button group (flex: 1 1 0%), perfectly aligned to match the height (32px) and vertical rhythm of the search and refresh actions.

🛡️ Reviewer Dropdown & Select Anti-Overflow Geometry

  • Anti-Overflow & Tooltips: Fixed text overflow on lengthy reviewer names and role titles in Reviewer selectors. Added title tooltips, text-overflow: ellipsis, and custom SVG chevron indicators.
  • Robust Error Handling: Hardened comment submission error reporting and deliverable association against server timeouts and internal exceptions.

📦 Platform Build & Distribution Verification

  • Windows Desktop Client: Built and verified standalone single-file executable SS-CAM-v4.12.2.exe (6.20 MB).
  • Web Portal Client Bundle: Rebuilt and optimized production Vite client bundle (dist/).
  • Source Guardian & Dual-Track Gatekeeper: 100% Pass (UTF-8 BOM preserved, Fluent 2 compliance verified).

Full Changelog: v4.12.1...v4.12.2

SS-CAM v4.12.1 - Security Hardening, WCAG 2.1 AA Accessibility & Canonical Vault Hierarchy

Choose a tag to compare

@manaphassan manaphassan released this 01 Oct 07:01

[4.12.1] - 2026-09-29 (Security Hardening, WCAG 2.1 AA Accessibility & Canonical Vault Hierarchy)

Security & API Protection

  • JWT Route Authorization Enforcement:
    • Gated GET /api/projects/:id/export with mandatory authenticateToken middleware, preventing unauthorized project data exfiltration.
    • Gated POST /api/notes and DELETE /api/notes/:id with mandatory authenticateToken middleware.
    • Gated GET /api/users with mandatory authenticateToken middleware.
  • Directory Traversal Sanitization:
    • Sanitized note identifiers in POST /notes and DELETE /notes/:id using path.basename and regex alphanumeric filtering (/[^a-zA-Z0-9_-]/g), eliminating path traversal and arbitrary file deletion vectors.
  • Directory Prefix Traversal Containment:
    • Hardened DeliverableService.resolveSafePath against directory-prefix traversal by verifying path boundaries against trailing directory separators (root + path.sep), neutralizing sibling folder escape attacks (CWE-22).
  • Automated Security Test Suite:
    • Added comprehensive automated test in server/test/run-tests.js asserting unauthenticated 401 rejections and path traversal sanitization (59 passing tests).

WCAG 2.1 AA Accessibility & Brand Hierarchy (60:30:10)

  • Color Contrast Rectification:
    • Replaced low-contrast Azure text (#21A1F7, failing at 2.80:1 contrast) on white card surfaces with --text-brand (#043388), establishing 11.45:1 (AAA Pass) contrast across CopyStudioView.svelte and OrderFormView.svelte.
  • Keyboard Skip-to-Content Landmark (WCAG 2.4.1):
    • Added accessible <a href="#main-content" class="skip-link">Skip to main content</a> and <main id="main-content" class="page-body" tabindex="-1"> in App.svelte.
  • Semantic Button & Global Escape:
    • Converted user profile chip from div role="button" to semantic <button type="button" class="user-chip"> and enabled global Escape key dismissal for studio menus, drawers, and command palette.
  • WPF Desktop Status Accessibility:
    • Enabled keyboard tab stops and Enter/Space activation (Focusable="True", KeyboardNavigation.IsTabStop="True", OnFooterPanelKeyDown) for PaneFooter status panels (NAS, Focus Timer, Studio Radio, Theme Switcher), and added ToolTip and AutomationProperties.Name to the update banner dismiss button.

Canonical 5-Folder Vault Alignment & Ecosystem Sync

  • Canonical 5-Folder Standardization:
    • Standardized CreativeOrderService.cs order handover on the 5 canonical uppercase folders: 01_BRIEF_ASSETS, 02_SOURCE_FILES, 03_COPYWRITING, 04_WORK_IN_PROGRESS, 05_DELIVERABLES.
    • Attached brief assets and order files are now saved directly into 01_BRIEF_ASSETS and scripts into 03_COPYWRITING/COPY.md.
  • Preflight Validator Modernization:
    • Updated PreflightValidatorService.cs to validate and auto-repair using the 5 canonical folders with backward-compatible aliases for legacy structures.
  • Documentation & Terminology Cleanliness:
    • Purged [JobID] in FOLDER-STRUCTURE.md in favor of [ProjectID], and updated .job-id CSS to .project-id.
  • Ecosystem Version Synchronization:
    • Synchronized versions to 4.12.1 across WPF Desktop (AssemblyInfo.cs), Web Portal (package.json, config.js, App.svelte), Android Companion (build.gradle.kts), and Linux Client (SS-CAM.Linux.csproj).

SS-CAM v4.11.1 - Security Hardening, RBAC Enforcement & Repository Hygiene Remediation

Choose a tag to compare

@manaphassan manaphassan released this 28 Sep 09:19

SS-CAM v4.11.1 — Security Hardening, RBAC Enforcement & Repository Hygiene Remediation

Headline

SS-CAM v4.11.1 delivers comprehensive security hardening, salted bcrypt authentication with lazy migration, strict RBAC canonical role enforcement across all administrative endpoints, dynamic Android keystore credential resolution, and full repository hygiene remediation.


Key Security & Architectural Highlights

1. Authentication Hardening & Bcrypt Migration (Phase 1)

  • Salted Bcrypt Password Storage: Upgraded credential storage from plaintext to salted bcryptjs hashes (10 salt rounds) with automatic lazy migration for existing passwords on first successful authentication.
  • Bypass Elimination: Completely eliminated empty/whitespace password bypass and removed shared default credentials (SuamiSihat123!).
  • Emergency Bootstrap Recovery: Implemented ADMIN_BOOTSTRAP_PASSWORD fallback, strictly honored only when no admin password exists in the credential store; completely ignored once an admin password is set.
  • Production Secret Enforcement: The web portal strictly halts execution (process.exit(1)) on startup if JWT_SECRET is missing, empty, or shorter than 32 characters when NODE_ENV=production.
  • Isolated Credential Store: Relocated password store from the shared workspace (_Team/_Config/user_passwords.json) to an isolated DATA_DIR (./data/user_passwords.json) with safe automated migration and archiving.
  • Brute-Force & Enumeration Mitigation: Rate-limited POST /api/auth/login (5 attempts / 15 minutes, returning HTTP 429 on 6th attempt); normalized login error responses and added dummy bcrypt comparisons to prevent timing analysis.
  • Infrastructure Security: Integrated helmet with Content Security Policy tuned for Svelte and Mermaid diagrams, enforced 1MB JSON body limits, strict CORS allowlists, and formalized 12-hour session lifetime (JWT_EXPIRES_IN=12h).

2. Authorization & Canonical RBAC Enforcement (Phase 2)

  • 85-Route Security Audit: Audited all 85 Express routes and documented the authorization matrix in QA/ROUTE-AUTHZ-MATRIX.md.
  • Exact Canonical Role Matching: Implemented hasCanonicalRole and requireRole('admin'), eliminating loose role.includes('admin') substring checks that previously allowed bypasses (admin_assistant, subadmin).
  • Mutating Route Protection: All mutating administrative endpoints (/users, /team/roster, /companies, /system/workspace-root, /admin/restart, /projects/:id) now strictly require canonical administrator roles.
  • Last-Admin Protection: Rejects deactivation (active: false), demotion, or deletion of the sole active administrator account.
  • Anti-Escalation: Non-admin callers cannot alter their own role or roles via PUT /api/auth/profile. Dedicated POST /api/auth/change-password endpoint requires current password validation and 10-char complexity.
  • Structured Audit Logging: Every HTTP 403 access denial automatically logs SECURITY_ACCESS_DENIED or SECURITY_PERMISSION_DENIED to AuditService.

3. Repository Hygiene & Secrets Protection (Phase 3)

  • Android Dynamic Signing: Untracked release keystore sscam-release.jks from git index while preserving disk files. Rewrote Gradle build script for dynamic credential resolution (keystore.properties -> environment variables -> debug fallback). Added .gitignore patterns and authored QA/KEY-ROTATION-RUNBOOK.md.
  • Git Index Pruning: Untracked 1,038 tracked build artifacts and binaries from git index: node_modules/ (1,013 files), client/dist/ (18 files), publish/ (5 files, ~136 MB), installer/*.zip (1 archive, ~40 MB), nuget.exe (1 binary, 8 MB). All files preserved physically on disk.
  • Asset Licensing Audit: Authored docs/THIRD-PARTY-ASSETS.md cataloging bundled fonts, audio, and icons; flagged redistribution prohibitions for Font Awesome Pro with an open-source migration roadmap.
  • History Purge Runbook: Created QA/HISTORY-PURGE-RUNBOOK.md detailing the operational procedure to purge historical blobs and scrub passwords from git commit history using git-filter-repo.

4. Dependencies & Code Quality (Phase 4)

  • Safe Vulnerability Remediation: Executed safe npm audit fix in src/SS-CAM.Web, resolving high-severity js-yaml and moderate qs, body-parser, express, and devalue vulnerabilities without breaking Vite peer dependencies.
  • Zero Silent Catches: Eliminated all empty/silent catch {} blocks across WPF (3), Linux (17), and Web services (44+), replacing them with structured diagnostic logging.
  • Thread Safety: Marked synchronous FetchToday(string zone) in PrayerTimeService.cs as [Obsolete] to safeguard against UI thread freezes.
  • Svelte XSS Hardening: Sanitized dynamic HTML rendering in MermaidViewer.svelte and CopyStudioView.svelte with DOMPurify and set strict Mermaid security.
  • Project Creation Endpoint: Implemented authorized POST /api/projects with canonical 5-folder scaffolding, YAML frontmatter, audit logging, and SSE broadcast.
  • Source Guardian Web Checks: Extended QA/verify-sscam.ps1 with automated checks for production JWT secret enforcement, canonical RBAC matching, and login rate limiting (13/13 checks PASS).

Integrity & Verification

File / Component Version Hash / Details Status
SS-CAM-v4.11.1.exe 4.11.1.0 6,138,880 bytes (Native C# WPF Release Executable) VERIFIED
SS-CAM-v4.11.1-android-release.apk 4.11.1 (4111) 3,391,195 bytes (Android Companion Release APK) VERIFIED
Web Portal Test Suite (npm test) 4.11.1 56 Passed, 0 Failed (49 unit/integration + 7 admin smoketests) PASS
Source Guardian (verify-sscam.ps1) 4.11.1 13 passed / 0 warned / 0 failed (UTF-8 BOM, Fluent 2, Web Security) PASS
Dual-Track Gatekeeper 4.11.1 3/3 Stages Passed (Source Guardian, Wiki Leakage, MSBuild Release) PASS

Full changelog: CHANGELOG.md

SS-CAM v4.10.1 - Official SuamiSihat Radio Stream Upgrade & Native M3U/M3U8 Playlist Engine

Choose a tag to compare

@manaphassan manaphassan released this 25 Sep 01:55

[4.10.1] - 2026-09-15 (Official SuamiSihat Radio Stream Upgrade & Native M3U/M3U8 Playlist Engine)

Fixed & Refined — Studio Notes, Project Presets & Web Deliverables (2026-09-23)

  • Studio Notes Navigation Crash Resolution (QuickNotePage.xaml, QuickNotePage.xaml.cs):
    • Resolved TargetInvocationException / NullReferenceException when navigating to Studio Notes. Removed IsSelected="True" on CmbSort in XAML which triggered premature SelectionChanged events during BAML parsing before NotesList was instantiated. Default selection is now assigned safely during OnPageLoaded.
    • Corrected invalid symbol attribute Symbol="FullScreen24" to valid Symbol="FullScreenMaximize24" in Wpf.Ui.Controls.SymbolRegular.
    • Implemented !IsLoaded lifecycle guards across OnSortChanged, OnSearchNotesChanged, OnCategoryChanged, OnPriorityChanged, and OnNoteSelected.
    • Guarded ApplyNoteFilter() against uninitialized NotesList and TxtNoteCount.
    • Upgraded ComboBoxes to Fluent 2 standard Height="36" MinHeight="36" and replaced SubtitleBackgroundFillColorDefaultBrush with canonical CardBackgroundFillColorSecondaryBrush.
  • Project Creator Presets & Standards (ProjectCreatorPage.xaml, ProjectCreatorPage.xaml.cs):
    • Added Video Shooting category preset with standardized deliverables and production tasks.
    • Enforced ComboBox height standard (MinHeight="36") and vertical alignment across creator forms.
  • Web Portal Deliverables & File Handling (SS-CAM.Web):
    • Filtered out Synology thumbnail files (SYNOFILE_THUMB_*) and @eaDir directories from deliverables lists and previews.
    • Enabled direct image previews and download actions for deliverables and subtask attachments.
    • Calibrated team capacity calculation and workload distribution metrics.

Added & Refined — Official SuamiSihat Radio Stream Migration (RadioStreamService.cs, MainViewModel.cs, StudioRadioScreen.kt)

  • Official SuamiSihat Radio Live Stream:
    • Migrated primary stream endpoint from https://dj.suamisihat.myds.me/listen/suamisihat-radio/radio.mp3 to https://radio.suamisihat.myds.me/listen (broadcasting 192 kbps MP3 with embedded ICY real-time metadata).
    • Added automatic configuration migration in RadioStreamService.LoadStations(): existing user presets in %LOCALAPPDATA%\SuamiSihat\radio_config.json pointing to legacy links or shortcodes are seamlessly upgraded to the new endpoint on launch.
    • Synchronized stream URLs across Linux desktop client (MainViewModel.cs) and Android companion app (StudioRadioScreen.kt).
    • Streamlined Android live track title extraction in StudioRadioScreen.kt to extract directly from the live ICY stream metadata with zero network delay.

Added & Refined — Native M3U / M3U8 Playlist Engine (PlaylistHelper, RadioStreamService.cs, RadioPage.xaml)

  • Direct M3U/M3U8 Stream Playback & Resolution:
    • Implemented PlaylistHelper.ResolveStreamUrl to identify and resolve .m3u, .m3u8, and .pls links (or query parameters) to the active media stream.
    • Added on-the-fly playlist redirection in LocalAudioProxy.ProcessRequest: detects audio/x-mpegurl, application/x-mpegurl, or playlist text bodies returned by stream servers and automatically resolves and redirects to the underlying audio stream, preventing WPF MediaPlayer codec crashes.
  • Enhanced M3U / M3U8 Parsing & Relative URL Handling:
    • Comprehensive #EXTINF metadata parser supporting duration, title, tvg-name, group-title (genre categorization), and tvg-logo / logo cover image URLs.
    • Automatically resolves relative paths within playlists against the source file or base URL (PlaylistHelper.ResolveAbsoluteUri).
  • Station Playlist Export (ExportPlaylistFile, RadioPage.xaml):
    • Added ExportPlaylistFile in RadioStreamService.cs generating clean, standardized #EXTM3U playlists.
    • Added an Export button with Segoe Fluent Icon &#xE74E; in RadioPage.xaml toolbar (OnExportPlaylistClicked in RadioPage.xaml.cs) allowing designers to backup or export station collections to .m3u / .m3u8 files via a standard SaveFileDialog.
  • Online Playlist Import & Stream Testing:
    • Added ImportPlaylistUrl for fetching and importing M3U/PLS playlists directly from web URLs.
    • Enhanced TestStreamUrl to resolve M3U stream links and verify audio stream connectivity with clear UI feedback (M3U stream verified! (audio/mpeg)).

SS-CAM v4.10.0 - Smart Drag-and-Drop Vault Ingester, Myers LCS Diff Engine & AI Brief Intelligence

Choose a tag to compare

@manaphassan manaphassan released this 14 Sep 06:47

[4.10.0] - 2026-09-14 (Smart Drag-and-Drop Vault Ingester, Myers LCS Diff Engine & AI Brief Intelligence)

Added & Refined — Smart Drag-and-Drop Vault Ingester (SmartIngesterService.cs)

  • Canonical 5-Folder Classifier:
    • Automatically identifies file extensions and folder names to sort dropped assets directly into target project folders:
      • 01_BRIEF_ASSETS: Briefs, PDF guidelines, DOCX specifications, requirements text.
      • 02_SOURCE_FILES: PSD, AI, EPS, SVG, blend, raw design sources.
      • 03_COPYWRITING: Text copy, scripts, markdown, transcripts.
      • 04_WORK_IN_PROGRESS: Staged work, intermediate renderings, comps.
      • 05_DELIVERABLES: Final exports, PNG, JPG, MP4, WEBM, PDF deliverables.
    • Recursively flattens or preserves directory contents during ingestion.
    • Non-Destructive Collision Protection: Employs ResolveCollisionSafeFileName appending numeric suffixes (_1, _2) so existing project assets are never overwritten.
  • Multi-Surface Desktop Integration:
    • Project Creator (ProjectCreatorPage.xaml): Added visual drag-and-drop staging card (BorderDropZone) allowing designers to drop raw files/folders during project setup; files are staged and automatically ingested upon clicking "Create Project Folder".
    • Project Catalog & Inspector (SearchCopyPage.xaml): Project cards and detail areas act as drag-and-drop targets with visual border highlight feedback, enabling direct asset ingestion into active vaults with automatic image gallery reloading.
    • Task Manager (TaskManagerPage.xaml.cs): Kanban task cards support direct asset dropping with automatic vault ingestion and toast notification alerts.

Added & Refined — Copywriting & Brief Myers LCS Diff Engine (TextDiffService.cs, MarkdownDiffDialog.xaml)

  • Myers LCS Difference Algorithm:
    • High-performance line-by-line comparison algorithm calculating edit distance, LCS similarity percentage, and classifying line mutations into Equal, Insert, Delete, and Modify.
  • Automatic Milestone & Revision Snapshots:
    • Automatically creates timestamped immutable backups (YYYYMMDD_HHmmss_COPY.md / README.md) in archive/ or .snapshots/ subdirectories whenever copy or brief content is updated.
  • Fluent 2 Revision Comparison Dialog (MarkdownDiffDialog.xaml):
    • Modal window (<ui:FluentWindow>) comparing live working markdown against historical archive snapshots or arbitrary revisions.
    • Dual revision dropdown pickers with file size and timestamp metadata.
    • Visual summary banner showing similarity percentage badge, line insertions count (+N), and line deletions count (-N).
    • Dual viewing modes: Unified View (inline GitHub-style diff with syntax colors) and Side-by-Side View (dual-pane synchronized comparison).
    • Integrated 1-click clipboard exporter and NAS Explorer quick-launch button.
    • Wired into CopywritingPage.xaml ("Diff History" button) and SearchCopyPage.xaml ("Brief Diff" button).

Added & Refined — AI Brief Intelligence & Copy Preflight Assistant (GeminiDesktopService.cs, GeminiService.js)

  • Dual Engine Architecture (Online Cloud + Offline Resilient):
    • Queries Google Gemini 1.5 REST API using credentials securely discovered from NAS _Team/ai-config.json.
    • Seamless offline heuristic fallback when disconnected from NAS or network, guaranteeing 100% feature availability and zero UI thread hangs.
  • AI Brief Completeness & Requirements Auditor (ValidateBriefAsync):
    • Audits creative brief content against required parameters: Deliverables specified, Target Audience defined, Aspect Ratios declared, Core Hook clarity, and Brand Color Tokens included.
    • Computes an Art Director Completeness Score (0–100) with clear Pass/Revise verdict, strengths list, missing items checklist, and recommended brand tokens.
  • AI Copywriting Style & Compliance Preflight Assistant (PreflightCopyAsync):
    • Inspects copywriting scripts for hook velocity, readability, and persuasiveness.
    • Scans for prohibited medical and cosmetic claims under Malaysian KKM / LIU guidelines (e.g., "100% berkesan", "pasti sembuh", "bebas kesan sampingan", "tiada tandingan").
    • Generates hook alternatives and actionable copywriting recommendations before running live ad campaigns.
  • Web Portal Parity:
    • Extended Node.js GeminiService.js with validateBriefCompleteness and preflightCopyTone.
    • Exposed REST API endpoints POST /api/ai/validate-brief and POST /api/ai/preflight-copy.

Added & Refined — Notion & Evernote Inspired Quick Notes Studio (QuickNoteService.cs, QuickNotePage.xaml, QuickNotePage.xaml.cs)

  • Notion-Style Header & Property Matrix:
    • Interactive Page Emoji Avatar: 12 curated creative icons (📝, 💡, 🎯, 🚀, 📋, ⚡, 💬, 🎨, 📊, ☕, 🏷️, 📌) with dropdown context menu, updating note cards and header instantly.
    • Inline Borderless Title Editor: Large 20pt title text editor that synchronizes bidirectionally with note frontmatter and first markdown heading.
    • Compact Property Matrix: Inline category tag dropdown (General, Brief, Meeting, Idea, Copywriting, Tasks, Feedback), priority dropdown (Normal, Medium (P1), High (P2)), relative time badge ("Edited today, 11:42"), dynamic reading time estimator ("X min read"), word/char metrics, and auto-saving indicator (Saved ✓).
    • Distraction-Free Focus / Zen Mode: 1-click focus toggle button collapsing the notes sidebar for full-screen creative immersion.
  • Evernote-Inspired Sidebar & Note Cards:
    • Instant Search with Clear Button: Real-time substring query matching across note titles, contents, and categories, with (✕) quick-clear button.
    • Categorical Filter Chips: 6 status and category pills (All, 📌 Pin, ⚡ High, ☑️ Tasks, 💡 Ideas, 📋 Briefs) with theme-adaptive styling.
    • Multi-Factor Sort Selector: Sort by Recently Edited, Date Created, Title (A-Z), or Priority.
    • Rich Card Visual Hierarchy: Rounded emoji badge, bold title, 2-line snippet preview, category tag pill, relative timestamp, task completion counter (✓ 2/4), and priority pill (P1, P2).
  • Notion-Style Block Formatting & Callouts:
    • 4 Notion Callout Blocks: Blue Note ([!NOTE]), Green Pro-Tip ([!TIP]), Amber Regulatory Warning ([!WARNING]), Red Critical Alert ([!DANGER]).
    • 1-Click Markdown Table Inserter: Scaffolds 4-column deliverable matrix with specs, status, and ownership.
    • Expanded Markdown Tools: Headings (H1, H2, H3), inline styles (B, I, S, </>), task checklist (- [ ]), bullet lists, numbered lists, blockquotes, code blocks, horizontal rules, links, and image inserters.
    • 3-Way View Mode Switcher: Split (side-by-side live FlowDocument rendering), Edit (full-width text editor), and Preview (full-width rendered view).
    • Export & Handover: Plain clean text export (for WhatsApp/Slack broadcasting), raw Markdown copying, and native .md file saving.
  • Creative Starter Templates & Onboarding Grid:
    • 4-card interactive starter template grid on empty workspace: Creative Brief (Notion Standard), Meeting Sync, 3-Hook Ad Matrix, and Mind Drop.
    • 100% backward-compatible YAML frontmatter storage (icon:, category:, pinned:, priority:).

Tri-Platform Release Artifacts & Verification

Artifact Platform / Target Specifications Status
dist/SS-CAM-v4.10.0.exe Windows 10/11 x64 .NET Framework 4.8 WPF Single-File Binary Verified
src/SS-CAM.Web/ Web / Docker Svelte 5 + Node 20 (34/34 Unit Tests, 7/7 Smoke Tests Passed) Verified
src/SS-CAM.Android/ Android 8.0+ (API 26+) Jetpack Compose Companion App (Version 4.10.0, Code 4100) Verified

SS-CAM v4.9.0 - Visual Project Timeline & Gantt Inspector Drawer, Live Studio Pulse & Art Director Parity

Choose a tag to compare

@manaphassan manaphassan released this 11 Sep 07:18

[4.9.0] - 2026-09-11 (Visual Project Timeline & Gantt Inspector Drawer, Live Studio Workstream Telemetry, Command Palette v3.5.1 & Tri-Platform Parity)

Added & Refined — Visual Project Timeline & Interactive Gantt Inspector Drawer (CalendarPage.xaml)

  • Docked Right Inspector Drawer (ProjectDetailDrawer):
    • Added slide-in 440px inspector drawer docked to the right edge of the visual calendar view with Fluent 2 elevated glassmorphic styling.
    • Interactive launch triggers: clicking any project title or timeline bar in the Gantt chart, or clicking the "Inspect" button in day detail cards.
    • Header displays Job/Folder ID, live status badge, project name, designer path, and quick action toolbar (Save, Explorer, Working Source 02_SOURCE_FILES, Canva URL, and Handover ZIP).
  • Interactive Scheduling & Dynamic Date Calculations:
    • Dual date pickers for Start Date (DrawerStartDate) and Deadline (DrawerDeadline).
    • Automatic bidirectional sync: modifying either date automatically calculates duration in days ({N}d); modifying duration directly updates the deadline date.
    • Quick deadline extension buttons: +1d, +3d, +1w.
  • Malaysian Off-Day Conflict Alert & 1-Click Auto-Reschedule (MalaysiaHolidayService):
    • Evaluates deadline against weekend days (Saturday/Sunday) and national Malaysian public holidays.
    • Displays high-visibility alert banner when creative deliverables land on off-days, paired with a 1-click "Fix Off-Day Conflict" button that automatically advances the deadline to the next working day.
  • Deliverables & Subtask Checklist Management:
    • Integrated subtasks progress bar and counter ({Done}/{Total} Deliverables Done (X%)).
    • 1-click subtask status cycle button: Draft ➔ In Progress ➔ Done with dynamic visual styling.
    • Inline subtask form allowing creation, modification of title/weight/specs, and safe deletion.
    • Direct synchronization with README.md YAML frontmatter via FrontmatterService.WriteStatus.
  • Gantt Chart Subtask Status Indicators:
    • Desktop: Left project column displays [✓ X/Y • Z pts] badge (turns green when all subtasks are complete); timeline bars feature a ✓ X/Y pill badge; hover tooltips display complete deliverable breakdown.
    • Web Portal (ProjectGanttView.svelte): Added .subtask-pill-badge in left meta list with emerald glow on completion, plus .bar-subtask-pill on timeline schedule bars.

Added & Refined — Live Studio Telemetry & Workstream Pulse (Web, Desktop, Android)

  • Live Studio Telemetry Backend (TeamService.js, WorkspaceService.js, api.js):
    • Implemented GET /api/team/live-tasks reading <WorkspaceRoot>/_Team/live_tasks.json with UTF-8 BOM safety and 16-hour session freshness filter.
    • Connected Chokidar file watcher to broadcast real-time Server-Sent Events (live_tasks:updated) across all connected browser clients upon filesystem mutation.
    • Main Dashboard Live Workstream Card (DashboardView.svelte): Added high-visibility studio radar card above the creative pipeline funnel with real-time ticking stopwatches for each active designer workstation.
    • Header Studio Pulse Pill (App.svelte): Added ambient indicator (● {N} in Studio / ● Studio Idle) with dropdown flyout previewing active tasks, workstation machine IDs, and direct 1-click project navigation.
  • Android Companion Live Studio Telemetry (DeskCompanionMode.kt, TeamHubScreen.kt, MainActivity.kt):
    • Connected SscamApiService.getLiveTasks() to ProjectCacheManager with disk persistence and automatic polling.
    • Standby Desk Companion Mode (DeskCompanionMode.kt): Added infinite pulsing Emerald telemetry ticker (● N IN STUDIO • DESIGNER: TASK) and upgraded landscape/portrait focus cards with live workstation activity, designer initials, and elapsed stopwatch. Fixed launch conditional in MainActivity.kt.
    • Team Hub (TeamHubScreen.kt): Added elevated LIVE STUDIO WORKSTREAM card section above the capacity overview displaying real-time designer stopwatches, initials avatars, and session notes.

Added & Refined — Master Brand System v3.5.1 & Command Palette Alignment

  • Global Web Command Palette (Ctrl + K) (CommandPaletteModal.svelte):
    • Upgraded to 5 reactive category filter tabs: All Results, Projects, Brand Colors, Copywriting Hooks, and Studio Actions.
    • Expanded brand tokens to the 16 official Single-Source-of-Truth tokens (Core Blues, Luxury Golds, Canary Yellows, Canvases, Semantic Status, and Grayscale 80).
    • Added dual-action copying: Normal click copies HEX color code (#043388); Shift + Click copies official CSS token variable (var(--ss-blue)).
    • Embedded pre-scaffolded direct-response marketing hooks directory with 1-click clipboard copying.
  • Android Brand Hub Screen (BrandHubScreen.kt):
    • Embedded the full 16 official v3.5.1 color tokens with 1-tap clipboard copying.
    • Added Packaging Dieline specifications to Media Specs tab.
    • Expanded copy snippet vault to 7 categorized high-converting Malay hooks with 1-tap copying for headline, body, and CTA.

Added & Refined — Packaging Deliverables & Creative Orders Intake

  • Contextual Packaging Formats (DashboardCompanionScreen.kt, OrderFormView.svelte, Models.kt):
    • Integrated dedicated packaging dieline types: pkg_box_sleeve (Packaging Box & Sleeve) and pkg_label (Bottle / Jar / Vial Label) with 300 DPI CMYK and die-cut bleed specs.
    • Added strategic tier_0 (🗓️ Low / Pipeline) priority tier across Web and Android Order Creation modals with automatic scheduling guidance.
    • Standardized physical substrate chips (Art Card 260/310gsm, Mirrorkote Gloss, Synthetic Vinyl) and millimetre dimension inputs.

Release Artifacts & Verification

Artifact Platform / Target Specifications Status
dist/SS-CAM-v4.9.0.exe Windows 10/11 x64 .NET Framework 4.8 WPF Single-File Binary (5.99 MB) Verified
dist/SS-CAM.exe Windows 10/11 x64 Latest Production Canonical Exe (5.99 MB) Verified
dist/SS-CAM-v4.9.0-android-release.aab Android 8.0+ (API 26–36) Production Android App Bundle, RSA 2048 Signed (6.03 MB) Verified
dist/SS-CAM-v4.9.0-android-release.apk Android 8.0+ (API 26–36) Standalone Release APK (3.39 MB) Verified
src/SS-CAM.Web/client/dist/ Docker / Node.js 20 Svelte 5 + Vite Production Web Bundle Verified

SS-CAM v4.8.1 - Global Studio Command Palette Ctrl+K, Art Director 60-30-10 Polish, Live Work Session Stopwatch & Status Indicator, Creative Operations Upgrade

Choose a tag to compare

@manaphassan manaphassan released this 10 Sep 09:31

[4.8.1] - 2026-09-10 (Global Studio Command Palette Ctrl+K, Art Director 60-30-10 Polish, Live Work Session Stopwatch & Status Indicator, Creative Operations Upgrade)

Added & Refined — Creative Request Architecture, Backlog Intake & Operations

  • Low Priority / Pipeline Intake Tier (tier_0):
    • Introduced strategic backlog tier for non-urgent briefs scheduled 2–4+ weeks or next month out without near-term deadline pressure.
    • Automated +21 day minimum delivery date threshold preventing premature urgency flags.
  • Contextual Format & Custom Physical Specifications Architecture:
    • Replaced legacy flat format list with a segmented 2-step channel architecture:
      • Digital Screen: 9:16 Video, 1:1 Social Feed, 4:5 Portrait Feed, 16:9 Landscape HD, Digital Web Banners, and interactive Custom Screen Dimensions (px).
      • Print, Packaging & POSM: Medicine boxes & sleeves, bottle/jar/vial labels, POSM posters, roll-up buntings, flyers, and Custom Print Dimensions (mm, cm, inch, ft).
    • Standardized physical print substrate and lamination selector (Waterproof Synthetic Vinyl, Mirrorkote Gloss, Art Card with Gloss/Matte Lam & Spot UV, Tarpaulin, Simili Paper, Synthetic Paper, Rigid Board).
  • Full Brief Editing Capability (Option A Permission Governance):
    • Requesters and Designers/Admins can edit submitted briefs (title, entity, priority, channel, format, dimensions, material, copy, targetDate, notes).
    • Automatic locking once an order is accepted into backlog or cancelled.
  • Intake Status Refinement & Handover Cleanliness:
    • Renamed intake state from "Completed" to "Added to Backlog" across Web, Windows WPF, and Linux Avalonia clients to prevent requesters mistaking intake acceptance for artwork completion.
    • Cleaned expanded request detail view by eliminating duplicate "Lifecycle Actions" buttons, consolidating lifecycle state progression into the table row's canonical ACTIONS column.
    • Cleared all legacy demo seed orders from Synology NAS ledgers and temporary attachment storage for a pure production intake queue.
  • Cross-Platform Node.js / .NET UTF-8 BOM Safety:
    • Stripped UTF-8 BOM byte order marks (\uFEFF) in server JSONL parsers (OrderService.js, AuditService.js, CommentService.js) to guarantee flawless bidirectional interoperability with Windows .NET desktop tools.

Added & Refined — Global Studio Command Palette, 60-30-10 Polish & Live Work Session Tracker

  • Global Studio Command Palette (Ctrl + K) (CommandPaletteService.cs, MainWindow.xaml, MainWindow.xaml.cs):
    • Universal keyboard-first launcher accessible anywhere via Ctrl + K, global header spotlight button, or sidebar search trigger.
    • Multi-Category Quick Launcher:
      • Navigation Modules: 1-click jump to any of the 15 studio modules (Dashboard, Project Creator, Order Requests, Search & Copy, Copywriting Studio, Brand Assets, Task Manager, Big Calendar, Quick Notes, Creative Wellbeing, Waktu Solat, Radio Player, QR Code Studio, Workstation Health, Settings).
      • Brand Color Tokens: Instant search and 1-click copy for official Master Brand System v3.5.1 colors (Prussian Blue #022057, Brand Blue #043388, Azure #21A1F7, Malibu #6DC6EC, Lion Gold #BD9A73, Fawn #CCAC8D, Arylide Yellow #E5D15C, Banana Yellow #FCE53D, and corporate subsidiary hues) with real-time visual color swatch badges.
      • Copywriting Hooks & CTAs: Pre-scaffolded direct-response marketing hooks and high-converting CTAs copied directly to the clipboard.
      • Live NAS Project Search: Discovers and navigates directly to recent project folders on the Synology NAS / local workspace.
      • Studio Actions: Immediate execution of system commands: Start/Pause Work Timer, Toggle Application Theme, Play/Pause Radio Stream, Rescan NAS Workspace, and Open in Explorer.
    • Fluid Keyboard Interaction: Arrow keys (↑ / ↓) navigate results, Enter executes, Esc closes modal with backdrop fade.
  • Art Director 60-30-10 Color Scheme & Layout Polish (MainWindow.xaml, Fluent 2 Styling):
    • Adheres strictly to the 60:30:10 visual hierarchy rule:
      • 60% Calm Canvas: Deep neutral base (ApplicationPageBackgroundThemeBrush) providing optimal contrast and zero eye fatigue.
      • 30% Structural Hierarchy: Elevated card surfaces (CardBackgroundFillColorDefaultBrush), subtle borders (CardStrokeColorDefaultBrush), and sidebar chrome organizing dense workspace tools.
      • 10% Intentional Brand Accents: SuamiSihat Azure (FluentBrand80, #21A1F7) and Status Emerald (#10B981) reserved strictly for primary CTAs, active indicators, and focus badges.
    • Redesigned TitleBarStrip center area with an integrated spotlight search box (Ctrl + K) and live work status pill.
  • Live Designer Work Session Stopwatch & Status Indicator (WorkSessionTrackerService.cs, MainWindow.xaml, MainWindow.xaml.cs):
    • Live activity stopwatch and project status pill integrated into the header bar: pulsing status dot + active project code (0085D_SS_Rejal) + live digital clock (01:42:15) + state indicator icon.
    • Interactive Timer Popover Drawer:
      • Displays big digital elapsed timer (00 : 00 : 00).
      • Active Project Filter by Designer: Inline CmbPopoverDesignerFilter dropdown allowing instant filtering of the project picker by assigned designer, defaulting to the current user's profile for 1-click focus.
      • Project selector ComboBox dynamically populated from workspace projects.
      • Session notes scratchpad for logging active tasks.
      • Play / Pause / Reset controls and 1-click "Jump to Project in Catalog" action.
    • Synchronized with sidebar footer active work indicator and live studio team broadcaster.
    • Crash Recovery Checkpointing: Auto-saves active session state every 60 seconds and on state changes to %LOCALAPPDATA%\SS-CAM\work_session.json with 16-hour session recovery on relaunch.
  • Comprehensive Dropdown Overlap & Cropping Resolution across All Views:
    • Global <Style TargetType="{x:Type ComboBox}"> and ComboBoxItem in Styles/Fluent2Styles.xaml with MinHeight="36" and Padding="10,0".
    • Replaced native access-key text presenters with explicit <ItemTemplate> featuring <ui:TextBlock> across MainWindow.xaml (CmbPopoverProjectPicker), eliminating mnemonic underscore stripping (e.g. 202609_0017W_SS_... losing underscores and shifting baselines) and vertical text baseline cropping.
    • Standardized height (36px) and comfortable padding (10,0) across TaskManagerPage.xaml (with horizontal <ScrollViewer> to prevent filter squishing on compact displays), SearchCopyPage.xaml (batch and inspector dropdowns), CalendarPage.xaml (designer and status filters), WaktuSolatPage.xaml (zone selector), ProjectCreatorPage.xaml (template extension), OrderRequestsPage.xaml (entity and assignee selectors), and VisualDiffDialog.xaml (asset pickers).
  • Studio Real-Time Live Tasks & Work Telemetry (LiveTaskSyncService.cs):
    • Multi-workstation synchronization via shared ledger at <WorkspaceRoot>\_Team\live_tasks.json with local %LOCALAPPDATA%\SS-CAM\_Team\ fallback.
    • 4-second non-blocking background polling and 15-second active heartbeat broadcasts.
    • Instant studio desktop toast notification (NotificationService.Show("Team Designer Active", "{Designer} has started working on '{Project}'")) whenever another designer begins or resumes work on a project task.
  • Main Dashboard Real-Time Live Task Stream (DashboardPage.xaml, DashboardPage.xaml.cs):
    • Embedded "Live Studio Tasks (Real-Time Work Stream)" card container above Recent Projects.
    • Pulsing emerald active indicator badge ({N} Active).
    • Designer avatar circles with initials, formatted author and staff ID, status pills ("Working Now" in emerald, "Paused" in amber).
    • 1-second live digital stopwatch ticker updating elapsed duration (00 : 42 : 18) without blocking UI.
    • "View Project" direct navigation action into Project Catalog.
    • Clean idle workstation card fallback when all team members are inactive.
  • Release Packaging & Binary Verification:
    • Rebuilt WPF Desktop executable using MSBuild 4.8 in Release mode with Costura.Fody single-file embedding.
    • Updated dist/SS-CAM.exe (AssemblyVersion and FileVersion 4.8.1.0, 5.52 MB).
Asset / Artifact Target Platform Specification Status
dist/SS-CAM-v4.8.1.exe Windows 10/11 x64 .NET Framework 4.8 Single-File Binary Verified
dist/SS-CAM.exe Windows 10/11 x64 Canonical Latest Executable Pointer Verified

SS-CAM v4.7.0 - Velocity Navigation Engine, Canva Creative Cloud Bridge, Per-User Team Storage & Visual Timeline Alignment

Choose a tag to compare

@manaphassan manaphassan released this 08 Sep 09:47

[4.7.0] - 2026-09-09 (Velocity Navigation Engine, Canva Creative Cloud Bridge, Per-User Team Storage & Visual Timeline Alignment)

Added & Refined — Zero-Latency Navigation, Canva Cloud Bridge, Team Storage & Ecosystem Synchronization

  • High-Velocity Desktop Navigation Engine (MainWindow.xaml, WorkspaceScanner.cs, DashboardModels.cs):
    • Configured NavigationCacheMode="Required" across all 15 navigation views in the desktop application. Tab navigation is now instantaneous (0 ms), retaining active state, scroll position, search filters, and loaded view models without re-inflating XAML BAML trees or garbage-collecting active pages.
    • Completely eliminated synchronous recursive Directory.GetDirectories crawling on the UI thread in DashboardPage.xaml.cs.
    • Shifted ActiveWipProjects computation to the background thread in WorkspaceScanner.ScanAsync and surfaced directly via DashboardSnapshot.
    • Converted synchronous folder scans in CalendarPage.xaml.cs and TaskManagerPage.xaml.cs to run via non-blocking await Task.Run(...).
    • Converted directory search in OrderRequestsPage.xaml.cs to asynchronous execution to eliminate UI stutter when selecting order cards.
    • Resolved System.InvalidCastException in OrderRequestsPage.xaml by extracting ContextMenu into a statically referenced page resource (OrderCardContextMenu).
  • Canva Creative Cloud Bridge in Project Creator (ProjectCreatorPage.xaml, ProjectCreatorPage.xaml.cs):
    • Integrated dedicated Canva Creative Cloud Bridge card in the desktop Project Creator.
    • Added "Create on Canva (Auto-size)" 1-click launcher that reads selected platform preset specs (1:1 Feed 1080x1080, 9:16 Story 1080x1920, 16:9 Banner 1920x1080, A4/A3/A5 print dimensions) and launches Canva in the default browser pre-configured with exact pixel/mm dimensions (https://www.canva.com/create/?width={w}&height={h}&unit={px|mm}).
    • Added CanvaUrlInput field with "Test Link" button for pasting design URLs.
    • Added "Canva (.url)" to starter canvas extension selector.
    • Automatic scaffolding of 02_SOURCE/Open_In_Canva.url Windows Internet Shortcut file, enabling 1-click launching from Windows File Explorer or SS-CAM.
  • Project Frontmatter & Model Synchronization (FrontmatterService.cs, ProjectStatus.cs):
    • Added canva_url property parsing and persistence to README.md YAML frontmatter headers.
    • Added automatic fallback to inspect 02_SOURCE/Open_In_Canva.url if canva_url is not yet set in YAML.
    • Exposed CanvaUrl, HasCanvaUrl, and CanvaBadgeVisibility on ProjectStatusItem.
  • Task Manager & Kanban Board Canva Badges (TaskManagerPage.xaml, TaskManagerPage.xaml.cs):
    • Added prominent teal [CANVA] pill badge to Task Manager Kanban cards when a project contains Canva cloud metadata.
    • Added "Open in Canva" option to Kanban card context menus.
    • Added "Open Canva" quick launch action button in the Project Detail drawer.
  • Per-User Team Storage Architecture & Binary Avatar Streaming (TeamService.js, api.js, UserProfileModels.cs, UserProfileService.cs):
    • Transitioned from monolithic Base64 string embedding in staff_directory.json to dedicated physical binary file storage inside _Team/Users/{staffId}/avatar.jpg and profile.json.
    • Sanitized staff_directory.json into a lightweight reference index (avatarUrl: "/api/users/{staffId}/avatar"), eliminating JSON bloating.
    • Implemented high-performance binary streaming route GET /api/users/:id/avatar with MIME type detection and HTTP cache control headers.
    • Resolved C# desktop StaffDirectoryItem serialization by adding missing fields (Username, AvatarUrl, Roles, Password) with explicit [JsonProperty("...")] camelCase mappings, preventing authentication credential loss.
    • Added bi-directional auto-sync in desktop UserProfileService.LoadProfile() (automatically uploading local %LOCALAPPDATA% avatars to NAS _Team/Users/{staffId}/avatar.jpg) and SyncAvatarToNas() for instant updates.
    • Updated all Web views (ProfileView, TeamView, DashboardView, ProjectKanbanView, ProjectTableView, ProjectDetailView) to prioritize avatarUrl || avatar over browser localStorage.
  • Big Calendar Timeline Day Headers & Public Holiday Color Standard (MalaysiaHolidayService.cs, CalendarPage.xaml.cs):
    • Standardized all 7 day headers across the Gantt timeline to uniform 3-letter abbreviations: Mon, Tue, Wed, Thu, Fri, Sat, Sun (via MalaysiaHolidayService.GetDayLetter).
    • Restricted red text highlight (#DC2626) strictly to official Malaysia Public Holidays (holiday != null).
    • Styled Sunday and Saturday weekend days in clean neutral slate (#64748B), perfectly aligning with the "Weekend (Sat/Sun Off-Day)" guide.
  • Web Management Portal Sync (SS-CAM.Web):
    • Updated ProjectFrontmatter interface in types/index.ts with canva_url?: string;.
    • Added Canva Creative Cloud Project Link input and external launcher button in FrontmatterPanel.svelte.
    • Bumped src/SS-CAM.Web/package.json to version 4.7.0.
    • Rebuilt production client bundle via npm run build:client (2,253 modules transformed).
  • Android Companion App Alignment (SS-CAM.Android):
    • Updated build.gradle.kts to versionName = "4.7.0" and versionCode = 471.
    • Direct consumption of /api/users/{staffId}/avatar streaming endpoint via StaffMember.profileImageUrl.
  • Release Packaging & Binary Verification:
    • Rebuilt WPF Desktop executable using MSBuild 4.8 in Release mode with Costura.Fody single-file embedding.
    • Updated dist/SS-CAM.exe and dist/SS-CAM-v4.7.0.exe (AssemblyVersion and FileVersion 4.7.0.0, 5.70 MB).
Asset / Artifact Target Platform Specification Status
dist/SS-CAM-v4.7.0.exe Windows 10/11 x64 .NET Framework 4.8 Single-File Binary Verified
dist/SS-CAM.exe Windows 10/11 x64 Canonical Latest Executable Pointer Verified
dist/SS-CAM-Companion-v4.7.0.aab Android (Google Play) Kotlin Compose Multiplatform Bundle Verified
dist/SS-CAM-v4.7.0-android-release.apk Android Standalone Sideloadable Universal APK Verified
src/SS-CAM.Web/client/dist Web Portal / Docker Svelte 5 + Vite Production Assets Verified