Repository navigation
Releases: SuamiSihat/ss_cam
Releases · SuamiSihat/ss_cam
Release list
SS-CAM v5.2.1 - Enterprise Web Portal Overhaul, Security Hardening & Desktop Sync
[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 explicitroleKeystorage and automatic start-up migration; dynamiccapabilitiesderivation from/api/auth/me; centralizedroutes.tsdefining 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#FCE53DCTA); complete elimination of all 129 legacy occurrences of#0078D4; global:focus-visiblering; 44px minimum target heights; standardizedFluentButton,FluentCard,FluentInput,FluentSelect,FluentDialog, andFluentBadge; offline vectorFluentIcons.sveltereplacing remote iconify dependencies and emoji glyphs; and unified brand titleSS-CAM Creative Portal. - Plain-Language Copywriting & Brand Voice (Phase 4): Published
QA/copy-guide.mdandclient/src/lib/copy.ts; sanitized user notifications usinggetErrorMessage()(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
FluentDialogconfirmations replacing native browserconfirm()/alert(); inlineFluentErrorBannerwith 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 draweraria-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
/deliverablesscanning across project folders; resolved empty-state$derivedfilter 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, AssemblyVersion5.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).
- Verified clean Release build (
- One Project Format on Every App:
- Standardized folder hierarchy across Windows, Web, Linux, and Android:
<YYYY>/<YYYYMM>_<Month>/<YYYYMM>_<NNNN>D_<BRAND>_<Title>/with01_BRIEF_ASSETSthrough05_DELIVERABLES. - Canonical project statuses:
backlog,in-progress,review,revision,approved,on-hold.
- Standardized folder hierarchy across Windows, Web, Linux, and Android:
- 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>/with01_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_EXPORTSfolders and theSS-2026year folder. The month name is always English. COPY.md moved to03_COPYWRITING; old Linux projects are still read. Linux no longer writesproject.yaml.
- 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 (
- Same status values everywhere:
backlog,in-progress,review,revision,approved,on-hold.- New projects start as
backlog, prioritymedium, revision 0 on every app. - Approving a project now writes
approvedon Windows, Linux and Android. Windows and Linux used to writedone, which the web dashboard counts as Archived. - Android now sends canonical values. It used to send
in-review,stuckandqueued. - Web and Linux read older spellings (
in_progress,on_hold,normal) correctly. The Linux task board no longer hides projects saved with those spellings.
- New projects start as
- Android: new projects get a deadline one week ahead. They used to get a fixed 15 Sep 2026.
- New check:
QA/verify-format-sync.ps1confirms all four apps agree. It is now step 3 ofQA/verify-dual-track.ps1. It replacesQA/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/rosterroute is removed. - The staff list that was built into the web page's code is removed.
/api/team/rosterand Quick Notes now require sign-in.
- The public
- 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
mustChangePasswordand 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/:idroute. 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 withDEFAULT_STAFF_PASSWORDin.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
UpdateRepositoryfrom 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...
SS-CAM v4.13.0 — Split-View WhatsApp Simulator & Customizable Dashboard KPI Grid
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
DynamicResourcetokens 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
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:
- Author Header Row (Author + Role badge + Delete button
✕) - Deliverable Reference Row (
🎯 [filename]) - Comment Body (
.comment-body) - Action Footer Row (
[ ✓ Resolved ]/[ ↻ Reopen ]button + Timestamp)
- Author Header Row (Author + Role badge + Delete button
- 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
Reviewerselectors. Addedtitletooltips,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
[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/exportwith mandatoryauthenticateTokenmiddleware, preventing unauthorized project data exfiltration. - Gated
POST /api/notesandDELETE /api/notes/:idwith mandatoryauthenticateTokenmiddleware. - Gated
GET /api/userswith mandatoryauthenticateTokenmiddleware.
- Gated
- Directory Traversal Sanitization:
- Sanitized note identifiers in
POST /notesandDELETE /notes/:idusingpath.basenameand regex alphanumeric filtering (/[^a-zA-Z0-9_-]/g), eliminating path traversal and arbitrary file deletion vectors.
- Sanitized note identifiers in
- Directory Prefix Traversal Containment:
- Hardened
DeliverableService.resolveSafePathagainst directory-prefix traversal by verifying path boundaries against trailing directory separators (root + path.sep), neutralizing sibling folder escape attacks (CWE-22).
- Hardened
- Automated Security Test Suite:
- Added comprehensive automated test in
server/test/run-tests.jsasserting unauthenticated 401 rejections and path traversal sanitization (59 passing tests).
- Added comprehensive automated test in
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 acrossCopyStudioView.svelteandOrderFormView.svelte.
- Replaced low-contrast Azure text (
- 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">inApp.svelte.
- Added accessible
- Semantic Button & Global Escape:
- Converted user profile chip from
div role="button"to semantic<button type="button" class="user-chip">and enabled globalEscapekey dismissal for studio menus, drawers, and command palette.
- Converted user profile chip from
- 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 addedToolTipandAutomationProperties.Nameto the update banner dismiss button.
- Enabled keyboard tab stops and Enter/Space activation (
Canonical 5-Folder Vault Alignment & Ecosystem Sync
- Canonical 5-Folder Standardization:
- Standardized
CreativeOrderService.csorder 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_ASSETSand scripts into03_COPYWRITING/COPY.md.
- Standardized
- Preflight Validator Modernization:
- Updated
PreflightValidatorService.csto validate and auto-repair using the 5 canonical folders with backward-compatible aliases for legacy structures.
- Updated
- Documentation & Terminology Cleanliness:
- Purged
[JobID]inFOLDER-STRUCTURE.mdin favor of[ProjectID], and updated.job-idCSS to.project-id.
- Purged
- Ecosystem Version Synchronization:
- Synchronized versions to
4.12.1across WPF Desktop (AssemblyInfo.cs), Web Portal (package.json,config.js,App.svelte), Android Companion (build.gradle.kts), and Linux Client (SS-CAM.Linux.csproj).
- Synchronized versions to
SS-CAM v4.11.1 - Security Hardening, RBAC Enforcement & Repository Hygiene Remediation
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
bcryptjshashes (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_PASSWORDfallback, 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 ifJWT_SECRETis missing, empty, or shorter than 32 characters whenNODE_ENV=production. - Isolated Credential Store: Relocated password store from the shared workspace (
_Team/_Config/user_passwords.json) to an isolatedDATA_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
helmetwith 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
hasCanonicalRoleandrequireRole('admin'), eliminating looserole.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
roleorrolesviaPUT /api/auth/profile. DedicatedPOST /api/auth/change-passwordendpoint requires current password validation and 10-char complexity. - Structured Audit Logging: Every HTTP 403 access denial automatically logs
SECURITY_ACCESS_DENIEDorSECURITY_PERMISSION_DENIEDtoAuditService.
3. Repository Hygiene & Secrets Protection (Phase 3)
- Android Dynamic Signing: Untracked release keystore
sscam-release.jksfrom git index while preserving disk files. Rewrote Gradle build script for dynamic credential resolution (keystore.properties-> environment variables -> debug fallback). Added.gitignorepatterns and authoredQA/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.mdcataloging 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.mddetailing the operational procedure to purge historical blobs and scrub passwords from git commit history usinggit-filter-repo.
4. Dependencies & Code Quality (Phase 4)
- Safe Vulnerability Remediation: Executed safe
npm audit fixinsrc/SS-CAM.Web, resolving high-severityjs-yamland moderateqs,body-parser,express, anddevaluevulnerabilities 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)inPrayerTimeService.csas[Obsolete]to safeguard against UI thread freezes. - Svelte XSS Hardening: Sanitized dynamic HTML rendering in
MermaidViewer.svelteandCopyStudioView.sveltewithDOMPurifyand set strict Mermaid security. - Project Creation Endpoint: Implemented authorized
POST /api/projectswith canonical 5-folder scaffolding, YAML frontmatter, audit logging, and SSE broadcast. - Source Guardian Web Checks: Extended
QA/verify-sscam.ps1with 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
[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/NullReferenceExceptionwhen navigating to Studio Notes. RemovedIsSelected="True"onCmbSortin XAML which triggered prematureSelectionChangedevents during BAML parsing beforeNotesListwas instantiated. Default selection is now assigned safely duringOnPageLoaded. - Corrected invalid symbol attribute
Symbol="FullScreen24"to validSymbol="FullScreenMaximize24"inWpf.Ui.Controls.SymbolRegular. - Implemented
!IsLoadedlifecycle guards acrossOnSortChanged,OnSearchNotesChanged,OnCategoryChanged,OnPriorityChanged, andOnNoteSelected. - Guarded
ApplyNoteFilter()against uninitializedNotesListandTxtNoteCount. - Upgraded ComboBoxes to Fluent 2 standard
Height="36" MinHeight="36"and replacedSubtitleBackgroundFillColorDefaultBrushwith canonicalCardBackgroundFillColorSecondaryBrush.
- Resolved
- Project Creator Presets & Standards (
ProjectCreatorPage.xaml,ProjectCreatorPage.xaml.cs):- Added
Video Shootingcategory preset with standardized deliverables and production tasks. - Enforced ComboBox height standard (
MinHeight="36") and vertical alignment across creator forms.
- Added
- Web Portal Deliverables & File Handling (
SS-CAM.Web):- Filtered out Synology thumbnail files (
SYNOFILE_THUMB_*) and@eaDirdirectories 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.
- Filtered out Synology thumbnail files (
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.mp3tohttps://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.jsonpointing 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.ktto extract directly from the live ICY stream metadata with zero network delay.
- Migrated primary stream endpoint from
Added & Refined — Native M3U / M3U8 Playlist Engine (PlaylistHelper, RadioStreamService.cs, RadioPage.xaml)
- Direct M3U/M3U8 Stream Playback & Resolution:
- Implemented
PlaylistHelper.ResolveStreamUrlto identify and resolve.m3u,.m3u8, and.plslinks (or query parameters) to the active media stream. - Added on-the-fly playlist redirection in
LocalAudioProxy.ProcessRequest: detectsaudio/x-mpegurl,application/x-mpegurl, or playlist text bodies returned by stream servers and automatically resolves and redirects to the underlying audio stream, preventing WPFMediaPlayercodec crashes.
- Implemented
- Enhanced M3U / M3U8 Parsing & Relative URL Handling:
- Comprehensive
#EXTINFmetadata parser supporting duration, title,tvg-name,group-title(genre categorization), andtvg-logo/logocover image URLs. - Automatically resolves relative paths within playlists against the source file or base URL (
PlaylistHelper.ResolveAbsoluteUri).
- Comprehensive
- Station Playlist Export (
ExportPlaylistFile,RadioPage.xaml):- Added
ExportPlaylistFileinRadioStreamService.csgenerating clean, standardized#EXTM3Uplaylists. - Added an Export button with Segoe Fluent Icon
inRadioPage.xamltoolbar (OnExportPlaylistClickedinRadioPage.xaml.cs) allowing designers to backup or export station collections to.m3u/.m3u8files via a standardSaveFileDialog.
- Added
- Online Playlist Import & Stream Testing:
- Added
ImportPlaylistUrlfor fetching and importing M3U/PLS playlists directly from web URLs. - Enhanced
TestStreamUrlto resolve M3U stream links and verify audio stream connectivity with clear UI feedback (M3U stream verified! (audio/mpeg)).
- Added
SS-CAM v4.10.0 - Smart Drag-and-Drop Vault Ingester, Myers LCS Diff Engine & AI Brief Intelligence
[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
ResolveCollisionSafeFileNameappending numeric suffixes (_1,_2) so existing project assets are never overwritten.
- Automatically identifies file extensions and folder names to sort dropped assets directly into target project folders:
- 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.
- Project Creator (
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, andModify.
- High-performance line-by-line comparison algorithm calculating edit distance, LCS similarity percentage, and classifying line mutations into
- Automatic Milestone & Revision Snapshots:
- Automatically creates timestamped immutable backups (
YYYYMMDD_HHmmss_COPY.md/README.md) inarchive/or.snapshots/subdirectories whenever copy or brief content is updated.
- Automatically creates timestamped immutable backups (
- 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) andSearchCopyPage.xaml("Brief Diff" button).
- Modal window (
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.
- Queries Google Gemini 1.5 REST API using credentials securely discovered from NAS
- 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.jswithvalidateBriefCompletenessandpreflightCopyTone. - Exposed REST API endpoints
POST /api/ai/validate-briefandPOST /api/ai/preflight-copy.
- Extended Node.js
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.
- Interactive Page Emoji Avatar: 12 curated creative icons (
- 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), orPriority. - 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).
- Instant Search with Clear Button: Real-time substring query matching across note titles, contents, and categories, with
- 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), andPreview(full-width rendered view). - Export & Handover: Plain clean text export (for WhatsApp/Slack broadcasting), raw Markdown copying, and native
.mdfile saving.
- 4 Notion Callout Blocks: Blue Note (
- 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
[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.
- Dual date pickers for Start Date (
- 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➔Donewith dynamic visual styling. - Inline subtask form allowing creation, modification of title/weight/specs, and safe deletion.
- Direct synchronization with
README.mdYAML frontmatter viaFrontmatterService.WriteStatus.
- Integrated subtasks progress bar and counter (
- 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/Ypill badge; hover tooltips display complete deliverable breakdown. - Web Portal (
ProjectGanttView.svelte): Added.subtask-pill-badgein left meta list with emerald glow on completion, plus.bar-subtask-pillon timeline schedule bars.
- Desktop: Left project column displays
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-tasksreading<WorkspaceRoot>/_Team/live_tasks.jsonwith 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.
- Implemented
- Android Companion Live Studio Telemetry (
DeskCompanionMode.kt,TeamHubScreen.kt,MainActivity.kt):- Connected
SscamApiService.getLiveTasks()toProjectCacheManagerwith 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 inMainActivity.kt. - Team Hub (
TeamHubScreen.kt): Added elevatedLIVE STUDIO WORKSTREAMcard section above the capacity overview displaying real-time designer stopwatches, initials avatars, and session notes.
- Connected
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, andStudio 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.
- Upgraded to 5 reactive category filter tabs:
- 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) andpkg_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.
- Integrated dedicated packaging dieline types:
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
[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).
- 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 (
- 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).
- Replaced legacy flat format list with a segmented 2-step channel architecture:
- 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.
- Requesters and Designers/Admins can edit submitted briefs (
- 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
ACTIONScolumn. - 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.
- Stripped UTF-8 BOM byte order marks (
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.
- Navigation Modules: 1-click jump to any of the 15 studio modules (
- 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.
- 60% Calm Canvas: Deep neutral base (
- Redesigned
TitleBarStripcenter area with an integrated spotlight search box (Ctrl + K) and live work status pill.
- Adheres strictly to the 60:30:10 visual hierarchy rule:
- 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
CmbPopoverDesignerFilterdropdown 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.
- Displays big digital elapsed timer (
- 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.jsonwith 16-hour session recovery on relaunch.
- Live activity stopwatch and project status pill integrated into the header bar: pulsing status dot + active project code (
- Comprehensive Dropdown Overlap & Cropping Resolution across All Views:
- Global
<Style TargetType="{x:Type ComboBox}">andComboBoxIteminStyles/Fluent2Styles.xamlwithMinHeight="36"andPadding="10,0". - Replaced native access-key text presenters with explicit
<ItemTemplate>featuring<ui:TextBlock>acrossMainWindow.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) acrossTaskManagerPage.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), andVisualDiffDialog.xaml(asset pickers).
- Global
- Studio Real-Time Live Tasks & Work Telemetry (
LiveTaskSyncService.cs):- Multi-workstation synchronization via shared ledger at
<WorkspaceRoot>\_Team\live_tasks.jsonwith 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.
- Multi-workstation synchronization via shared ledger at
- 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 FileVersion4.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
[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.GetDirectoriescrawling on the UI thread inDashboardPage.xaml.cs. - Shifted
ActiveWipProjectscomputation to the background thread inWorkspaceScanner.ScanAsyncand surfaced directly viaDashboardSnapshot. - Converted synchronous folder scans in
CalendarPage.xaml.csandTaskManagerPage.xaml.csto run via non-blockingawait Task.Run(...). - Converted directory search in
OrderRequestsPage.xaml.csto asynchronous execution to eliminate UI stutter when selecting order cards. - Resolved
System.InvalidCastExceptioninOrderRequestsPage.xamlby extractingContextMenuinto a statically referenced page resource (OrderCardContextMenu).
- Configured
- 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
CanvaUrlInputfield with "Test Link" button for pasting design URLs. - Added
"Canva (.url)"to starter canvas extension selector. - Automatic scaffolding of
02_SOURCE/Open_In_Canva.urlWindows Internet Shortcut file, enabling 1-click launching from Windows File Explorer or SS-CAM.
- Project Frontmatter & Model Synchronization (
FrontmatterService.cs,ProjectStatus.cs):- Added
canva_urlproperty parsing and persistence toREADME.mdYAML frontmatter headers. - Added automatic fallback to inspect
02_SOURCE/Open_In_Canva.urlifcanva_urlis not yet set in YAML. - Exposed
CanvaUrl,HasCanvaUrl, andCanvaBadgeVisibilityonProjectStatusItem.
- Added
- 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.
- Added prominent teal
- 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.jsonto dedicated physical binary file storage inside_Team/Users/{staffId}/avatar.jpgandprofile.json. - Sanitized
staff_directory.jsoninto a lightweight reference index (avatarUrl: "/api/users/{staffId}/avatar"), eliminating JSON bloating. - Implemented high-performance binary streaming route
GET /api/users/:id/avatarwith MIME type detection and HTTP cache control headers. - Resolved C# desktop
StaffDirectoryItemserialization 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) andSyncAvatarToNas()for instant updates. - Updated all Web views (
ProfileView,TeamView,DashboardView,ProjectKanbanView,ProjectTableView,ProjectDetailView) to prioritizeavatarUrl || avatarover browserlocalStorage.
- Transitioned from monolithic Base64 string embedding in
- 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(viaMalaysiaHolidayService.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.
- Standardized all 7 day headers across the Gantt timeline to uniform 3-letter abbreviations:
- Web Management Portal Sync (
SS-CAM.Web):- Updated
ProjectFrontmatterinterface intypes/index.tswithcanva_url?: string;. - Added Canva Creative Cloud Project Link input and external launcher button in
FrontmatterPanel.svelte. - Bumped
src/SS-CAM.Web/package.jsonto version4.7.0. - Rebuilt production client bundle via
npm run build:client(2,253 modules transformed).
- Updated
- Android Companion App Alignment (
SS-CAM.Android):- Updated
build.gradle.ktstoversionName = "4.7.0"andversionCode = 471. - Direct consumption of
/api/users/{staffId}/avatarstreaming endpoint viaStaffMember.profileImageUrl.
- Updated
- 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.exeanddist/SS-CAM-v4.7.0.exe(AssemblyVersion and FileVersion4.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 |