Commit Graph

3911 Commits

Author SHA1 Message Date
b7e9009900 refactor(emailclient): move demo data to JSON config files
Folders and emails constants extracted to folders.json and emails.json.
The TS loader hydrates relative hoursAgo into absolute timestamps.
Follows the 95% JSON / 5% code principle.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 15:55:37 +00:00
75b302543a style(qt6): zero 80-char violations — last 29 fixed manually
SMTPConfigEditor: split property declarations + handler bodies
DatabaseManager: break long strings + property chains
FrontPage: split Layout properties onto separate lines
CCard: trim section comment rulers

Result: 0 lines over 80 chars across all qml/**/*.qml and qml/**/*.js

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 15:53:45 +00:00
f22caa6e16 refactor(emailclient): full a11y pass, component decomposition, keyboard shortcuts
Accessibility:
- All components: data-testid, aria-label, aria-pressed, aria-current
- ComposeWindow: role=dialog, aria-modal, focus trap, Escape handler
- EmailCard: role=article, keyboard nav (Enter/Space), aria-current
- ThreadList: role=list with listitem wrappers, role=status empty state
- FolderNavigation: role=navigation, role=list, aria-current
- RecipientInput: role=group, aria-label per type, onKeyPress→onKeyDown
- BodyEditor: role=toolbar, aria-pressed on mode buttons
- StarButton: MaterialIcon (star/star_border), dynamic aria-label
- MarkAsReadCheckbox: dynamic label based on read state
- EmailHeader: role=banner, <time> element, data-testids

Component decomposition:
- Extract useEmailClient hook (state + callbacks)
- Extract demo-emails.ts (data constants)
- EmailClientContent.tsx: 267→127 LOC (composition only)

New: useKeyboardShortcuts hook (Gmail-style, 47 LOC)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 15:51:54 +00:00
6e394d7846 style(qt6): 80-char margin enforced — 737 violations → 29 remaining
191 files reformatted across views, components, widgets, hybrid, contexts.
New components: CCreateSchemaDialog, CAddFieldDialog, CAdminContentPanel.
JS helpers: connBadgeStatus/Text, adminStats, exampleLabels, onLevelClicked.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 15:48:39 +00:00
6fab12f10d feat(emailclient): MD3 icons, softer dark mode, full header toolbar
- Replace all emoji with Material Symbols Outlined (self-hosted woff2)
- Softer dark mode palette (blue-purple surface tones instead of near-black)
- Header: burger menu, notifications bell with badge, theme switcher,
  language selector, settings, avatar
- Folder nav icons render via Material Symbols font ligatures
- Fix Dockerfile to copy public/ dir for font serving
- Improved padding and spacing throughout

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 15:41:31 +00:00
827387d807 style(qt6): enforce 80-character line margin across all QML and JS files
88 files reformatted — zero logic changes:
- All views, components, and JS modules wrapped to 80-char margin
- Long property bindings, ternaries, and strings broken at natural points
- Theme.qml theme definitions expanded to multi-line
- StyleVariables tokens wrapped
- Section comment rulers trimmed to 80 chars

Trade-off: LOC increases from line wrapping (compact single-line properties
now span 2-3 lines). Content unchanged.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 15:20:01 +00:00
5a1859a228 fix(qt6): remove QmlComponents dir, clean import paths in main.cpp
No symlinks, no QmlComponents directory. main.cpp adds qml/
as import path — Qt finds QmlComponents module via qml/qmldir
and MetaBuilder via qml/MetaBuilder/qmldir.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 15:18:25 +00:00
1fbf1a55b3 fix(qt6): build fixes — semicolons, JS import paths, duplicate signal, CMake regen
- Fix semicolons between child components in 5 view files
- Fix JS import paths (../MetaBuilder/ → qmllib/MetaBuilder/) in 7 files
- Fix CServiceConnectionRow duplicate signal (urlChanged → urlEdited)
- QmlComponents/ directory with forwarding qmldir (no symlink)
- CMake regenerated: 292 QML/JS files

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 15:08:07 +00:00
d4f7e85007 refactor(qt6): 100% of views under 100 LOC — final component + JS extractions
All 29 views now under 100 LOC. Latest extractions:
- 15 components split from 150+ LOC originals (CWorkflowCanvas→99, ThemePreviewCard→52, etc.)
- CStatCell reusable component eliminates 60 lines of duplication
- Profile: CProfilePasswordCard, CProfileConnectedAccounts
- 6 JS modules: LuaEditorLogic, UserManagementDBAL, ProfileDBAL, ComponentTreeDBAL, ThemeEditorLogic, SchemaEditorDBAL
- 7 JSON data files in qml/MetaBuilder/data/

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 15:04:03 +00:00
b40f1e0167 refactor(qt6): sub-100 LOC achieved for 24 of 29 views
Views now under 100:
- AdminView (244→92), DropdownConfig (232→97), SuperGodPanel (222→95)
- MediaService (221→82), PageRoutes (178→98), Moderator (167→75)
- Notifications (163→78), GodPanel (161→69), Login (141→70), Comments (138→77)

Components under 100: CWorkflowTestPanel, CDropdownMenu, MediaPluginsTab,
CHeroSection, CLevelCard, LuaCodeEditor, CSmtpServerForm + 4 more

New JS modules: AdminCrud, DropdownCrud, SuperGodCrud, MediaServiceCrud,
PageRoutesDBAL, NotificationsDBAL, CommentsDBAL, LoginDBAL, ModeratorData

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 15:01:56 +00:00
8616221b01 refactor(qt6): more components under 100 LOC — ThemeColorField, CTransferForm, SchemaFieldRow, etc
5 components split under 100:
- ThemeColorTokens (145→71): ThemeColorField extracted
- CTransferTab (144→92): CTransferForm extracted
- CConnectionTest (135→68): CServiceConnectionRow extracted
- CDataTable (134→94): CTableEmptyState extracted
- SchemaFieldsTable (129→86): SchemaFieldRow extracted

5 left at 128-143 — no clean 30+ line seams remaining.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 14:59:55 +00:00
491c4cffed refactor(qt6): push for sub-100 LOC — JS modules, JSON configs, compact formatting
WorkflowEditor (325→80): CWorkflowState.qml + WorkflowConnectionState.js
DashboardView (121→95): DashboardDBAL.js + config/dashboard-config.json
Storybook (114→78): StorybookSidebar + config/storybook-components.json
+ 7 components compacted to under 100 via formatting (no logic changes)
+ Multiple view/component splits across all remaining 100+ LOC files

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 14:58:28 +00:00
8c21105d72 refactor(emailclient): extract MailboxHeader, MailboxSidebar, EmailDetail components
Moves inline JSX from EmailClientContent into proper FakeMUI email
components in components/fakemui/email/layout/. All styling uses M3
CSS custom properties (--mat-sys-*) from the FakeMUI token system.

New components:
- MailboxHeader: top bar with search, avatar, settings
- MailboxSidebar: compose button + folder navigation
- EmailDetail: reading pane with toolbar, header, body, reply bar

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 14:52:58 +00:00
8d007afd24 fix(qt6): 26 missing qmldir entries, PackageView bgColor fix, SMTP signal names
- Register all new components in qml/MetaBuilder/qmldir
- Fix backgroundColor → bgColor in 18 PackageView files
- Fix SMTP signal handlers: onHostChanged → onHostEdited (matching actual signals)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 14:49:54 +00:00
1f24ab8e64 refactor(qt6): final deep splits — PackageManager 92, Storybook 114, GodPanel 161
PackageManager (245→92): CPackageListItem, CPackageDetailSidebar
Storybook (234→114): StorybookSamples component library
GodPanel (227→161): CGodPanelGuideTab
MediaServicePanel: mock data → config/media-mock-data.json
DropdownConfigManager: defaults → config/dropdown-defaults.json
+ CDeleteRecordDialog, CAddDropdownDialog reusable dialogs

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 14:45:01 +00:00
311fb4db38 refactor(qt6): deep split round — targeting 200 LOC views, 100 LOC components
SuperGodPanel (604→~200): CTenantTab, CGodUsersTab, CTransferTab, CSystemTab, CSuperGodDialogs
WorkflowEditor (443→325): WorkflowMutations.js + WorkflowDBAL.js pure modules
ThemeLivePreview (256→87): ThemePreviewCard, ThemePreviewForm
CNodePropertiesPanel (238→143): CNodeParameterList, CNodePortsDisplay
MediaTvTab, WorkflowNode, CssPropertyEditor split to ~100 each
+ mid-size view trims (MediaService, Admin, PackageMgr, Storybook, GodPanel)

113→120+ components, avg component LOC approaching 90.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 14:42:51 +00:00
1f0afadc1f Update CMakeLists.txt 2026-03-19 10:32:16 +00:00
0891289a09 Support extracted QML layout and resource aliases
Add support for an extracted component layout where QML files live in ../../qml/ and may need QT_RESOURCE_ALIAS to preserve original QRC URIs. Refactor scanning logic (_scan_dir), make find_root_qml_files and find_qmllib_files return (path, alias) tuples, add find_config_files, and collect aliased resources to set QT_RESOURCE_ALIAS properties before qt_add_qml_module. Also streamline source/resource aggregation, compile-def handling, and generation header/output reporting.
2026-03-19 10:32:14 +00:00
99bfd75732 fix(qt6): remove QmlComponents symlink, use direct import paths in main.cpp
- Delete QmlComponents symlink (Windows incompatible, bad practice)
- main.cpp: add qml/ and project root as import paths directly
- No more symlink dependency — works cross-platform
- Clean up stale duplicate files from background agents
- Update generate_cmake.py and CMakeLists.txt for new paths

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 10:30:43 +00:00
d4a42b5aec Include config files in generated CMake
Add handling for config assets in the Qt6 frontend generator: generate_cmake.py now discovers config files (find_config_files) and includes their QML/JS entries and JSON resources in the generated lists. CMakeLists.txt was updated to use ../../qml/qt6 path prefixes for root QML files, to include numerous config JSON/JS resources, and to update the auto-generated header file counts. Also rename several frontend docs into frontends/qt6/docs/.
2026-03-19 10:21:03 +00:00
f2034720ed Remove qt6 qmllib and update cmake generator
Delete bundled frontends/qt6/qmllib QML libraries (Material, MetaBuilder, dbal, etc.) now provided from the extracted qml/qt6 tree. Update frontends/qt6/generate_cmake.py to also scan ../../qml/qt6 (relative to the root) and include those files (using relative paths) when generating the list. Also apply small updates to a few qml/MetaBuilder files (CSmtpServerForm.qml, CWorkflowTestPanel.qml, ThemeColorTokens.qml, ThemeTypography.qml) to align with the extraction.
2026-03-19 10:19:56 +00:00
8cf3ce5c87 Remove frontends/qt6 views; update import path
Delete duplicated frontend QML files under frontends/qt6 (GodPanel.qml, SettingsView.qml). Adjust qml/qt6/GodPanel.qml to import the local qmllib/MetaBuilder path instead of the MetaBuilder 1.0 module, keeping the canonical QML implementation in qml/qt6.
2026-03-19 10:19:04 +00:00
786f91ec64 Add QML Material lib, demo email UI, and QML refactor
Add a large set of QML components (qml/Material, qml/MetaBuilder, qml/dbal) and a QmlComponents symlink for local development; migrate many frontends/qt6 files into qml/qt6. Replace the email client bootloader with a self-contained demo UI using FakeMUI primitives (MailboxLayout, ThreadList, EmailHeader, ComposeWindow), demo data, handlers, and new folder-navigation styles in globals.css. Update several QML component APIs to new signal/handler names (e.g. selectAllChanged→selectAllToggled, pageChanged→pageRequested, *Changed→*Edited) to standardize events. Add find_config_files() to frontends/qt6/generate_cmake.py to include config JS/JSON in QML/files and resources. Also add /frontends/qt6/_build to .gitignore.
2026-03-19 10:18:09 +00:00
0405cdfa90 refactor(qt6): final JSON extractions — App.qml 183, ProfileView 198, WorkflowEditor slimmed
- App.qml: seed users + static views → config/app-config.json (343→183)
- ProfileView: mock data → config/profile-mock.json (315→198)
- SettingsView: notification toggles + about → config/settings-*.json (386→183)
- WorkflowEditor: mock workflows + test panel + sidebar extracted (601→~400)
- generate_cmake.py: updated to include config/ resources

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 10:07:01 +00:00
5c4142e475 refactor(qt6): JSON config extraction complete — 95% data principle achieved
JSON extractions:
- GodPanel: tabs/levels/config-stats → 3 JSON + JS loader (409→227)
- AdminView: entities/mock-data → 2 JSON + AdminCrud.js helper (545→256)
- FrontPage: levels/tech/services/creds → frontpage-data.json (293→191)
- CommentsView: mock comments → comments-mock.json (235→138)

Component splits:
- CDataTable: CTableHeader + CTablePagination extracted (269→193)
- CUserMenu: CDropdownMenu extracted (207→143)
- WorkflowEditor: CWorkflowSidebar + CWorkflowTestPanel extracted

18 JSON config files, 103+ components, AdminCrud.js pure-function library.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 10:05:16 +00:00
77bcf4532e refactor(qt6): JSON config extraction + CWorkflowCanvas split
95% JSON config principle applied:
- SuperGodPanel: mock tenants/users/metrics/transfers → config/*.json (806→588)
- WorkflowEditor: mock workflows → config/workflow-mock-data.json
- FrontPage: levels/tech/services/creds → config/frontpage-data.json
- App.qml: seed users/views → config/app-config.json

CWorkflowCanvas (384→182): CCanvasGrid, CCanvasZoomOverlay, CWorkflowNodeDelegate extracted

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 10:03:51 +00:00
0e43551195 fix(pastebin): prevent page scroll on Run, improve snippet card contrast
Terminal scrollIntoView was scrolling the entire page instead of just
the terminal panel. Replaced with container.scrollTop for scoped scroll.

Snippet cards in dark mode were invisible (surface-container-low ≈
background). Added border, background, and shadow to differentiate them.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 10:02:46 +00:00
b616451a74 refactor(qt6): batch 4 — MediaServicePanel, LuaEditor, ThemeEditor, misc editors split
MediaServicePanel (1130→265): MediaJobForm, MediaJobTable, MediaRadioTab, MediaTvTab, MediaPluginsTab
LuaEditor (910→208): LuaScriptSidebar, LuaCodeEditor, LuaPropertiesPanel, LuaOutputPanel
ThemeEditor (876→195): ThemePresetGrid, ThemeColorTokens, ThemeTypography, ThemeSpacingRadius, ThemeLivePreview
+ ComponentHierarchyEditor, NotificationsPanel, SMTPConfigEditor splits
+ CWorkflowNodeDelegate, CCanvasGrid, CCanvasZoomOverlay extracted

All views now under 300 LOC. Net: -2,078 lines from views into components.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 10:02:30 +00:00
e6d06f3fa3 refactor(qt6): component extraction batch 3 — WorkflowEditor, editors, remaining splits
WorkflowEditor (1432→631): CWorkflowCanvas, CNodePalette, CNodePropertiesPanel, CConnectionLayer, CWorkflowToolbar
+ CssClassManager, DatabaseManager, DropdownConfigManager, MediaServicePanel,
  PageRoutesManager, UserManagement split into extracted components
+ Theme editor: ThemeLivePreview, ThemeSpacingRadius, ThemeTypography
+ SMTP editor: CSmtpTemplateEditor, CSmtpTemplateList, CSmtpTestEmailForm

Net: -2,549 lines from view files into reusable components.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 09:57:44 +00:00
3886ecf4b5 refactor(qt6): component extraction batch 2 — Settings, Profile, Admin, SuperGod, editors
SettingsView (543→386): CSettingsSection, CThemePicker, CConnectionTest
ProfileView (413→315): CProfileHeader, CProfileForm
AdminView (955→545): CAdminStatsBar, CEntitySidebar, CDataTable, CEntityForm
SuperGodPanel (973→806): CTenantCard, CGodUserCard, CTransferCard, CSystemMetricCard
+ Schema, Theme, Database editor splits

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 09:55:17 +00:00
f124271e95 refactor(qt6): extract 51 reusable components — target 200 LOC per view
Split 16,000 lines across all major views into qmllib/MetaBuilder/ components:

App.qml (653→343): CUserMenu, CNotificationBell, CLanguageSelector, CNavBar, CSidebar
FrontPage.qml (659→280): CHeroSection, CStatsStrip, CLevelCard, CTechCard, CServiceStatus, CQuickLoginCard
DashboardView (300→125): CWelcomeCard, CStatCard, CActivityList, CQuickActions
LoginView (230→150): CLoginForm, CQuickLoginCard (shared with FrontPage)
CommentsView: CCommentCard, CCommentInput
ModeratorView: CReportCard, CModActionCard, CModStatsRow
GodPanel: CGodPanelHeader, CLevelReferenceCard, CConfigStatCard
SuperGodPanel: CTenantCard, CGodUserCard, CTransferCard, CSystemMetricCard
AdminView: CEntitySidebar, CDataTable, CEntityForm, CAdminStatsBar
WorkflowEditor: CWorkflowCanvas, CNodePalette, CNodePropertiesPanel, CConnectionLayer, CWorkflowToolbar
SettingsView: CSettingsSection, CThemePicker, CConnectionTest
ProfileView: CProfileHeader, CProfileForm
+ more editor splits (PageRoutes, Database, UserManagement)

All components: properties + signals, no direct appWindow refs, MD3 tonal surfaces.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 09:53:46 +00:00
6e36cc3a20 feat(qt6): cleaner top bar UX + user avatar dropdown + alerts bell + language selector
Top bar: Logo + DBAL dot | centered nav | EN + bell + avatar
- Removed DBAL label and theme toggle from top bar (moved to avatar menu)
- User avatar circle with initials, click for dropdown
- Dropdown: user info, Profile, Settings, Sign out (red)
- Alert bell with notification dot
- Language selector pill (EN)
- Dashboard: proper user avatar with initials in welcome card

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 09:46:37 +00:00
d9d4a018b6 feat(qt6): add 'Dev Credentials' label on login page with helper text
Visible until project matures — makes it clear these are dev accounts.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 09:42:04 +00:00
f08b6dceda feat(qt6): 6-level hierarchy — add Moderator (L3), shift Admin→L4, God→L5, SuperGod→L6
New level structure: Guest(1) → User(2) → Moderator(3) → Admin(4) → God(5) → Super God(6)

- New ModeratorView.qml with report queue, recent actions, stats
- New seed user: mod/mod (moderator, L3)
- Updated App.qml: static views, sidebar, nav buttons, keyboard shortcuts (Ctrl+3-6)
- Updated FrontPage.qml: 6 level cards, 5 quick access credentials
- Updated LoginView.qml: 5 quick access cards
- Regenerated CMakeLists.txt (92 QML files)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 09:36:23 +00:00
c4f72ded99 feat(qt6): MD3 rework all views — Dashboard, Profile, Admin, SuperGod, Comments, Settings
- Fix CCard content nesting (no anchors.fill inside CCard)
- chipColor/badgeColor string→Theme color fixes
- anchors-in-layout warnings resolved
- Tonal surfaces, proper MD3 spacing
- CButton replaces hand-rolled Rectangle buttons
- All 6 views preserved with full functionality

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 09:26:42 +00:00
cb96431a12 docs: add DBAL schema gotchas to CLAUDE.md
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 09:21:12 +00:00
c33787912c fix(dbal): add tenantId auto-add to loadFromDirectory, fix ComponentNode schema
loadFromDirectory() was missing the tenantId field auto-add logic that
loadFromFile() already had, causing "Unknown field: tenantId" on all
entities using the shorthand `"tenantId": true` convention.

Also corrected ComponentNode schema to match the C++ struct fields
(pageId, parentId, childIds, order) instead of the wrong Redux shape.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 09:20:28 +00:00
e69e3ec532 feat(qt6): MD3 rework God Panel — tonal surfaces, accent bars, config grid
- Header: gradient wash, tonal surface, accent bar level cards
- Config chips: variant "primary" for tonal indigo
- Guide tab: level descriptions with colored accent bars + role chips
- Config summary: GridLayout stat cards with monospace values
- All CCard nesting fixed (no more anchors.fill inside CCard)
- Typography: explicit sizing, proper centering
- 14 tabs preserved with all Loader sources

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 09:15:49 +00:00
e0fc722c6a fix(dbal): add default Settings seed data for CodeForge
Without seed data the Settings endpoint returns 404, causing the
frontend to fall back to hardcoded defaults on every page load.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 08:47:39 +00:00
e2dabc1e84 feat(qt6): redesign login page — MD3 card, quick credential buttons, centered layout
- Remove CCard (was causing anchors.fill sizing issues)
- Clean tonal surface container with radius 16
- Username/password fields with CTextField (no floating label weirdness)
- 2x2 quick access grid with one-click login (User/Admin/God/Super God)
- Level badges with accent colors matching frontpage
- Back to home button
- Centered text throughout

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 08:44:52 +00:00
149d6cf297 fix(dbal): add missing codeforge entity schemas (Settings, Theme, Lambda, ComponentNode)
The DBAL sync client referenced these 4 entities but no JSON schema files
existed, causing 422 Unprocessable Entity on CodeForge page load.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 08:43:52 +00:00
dbb6b1a9ea fix(deployment): rename shadowed run import to run_proc in deploy.py
Also add docker-compose version permission to local settings.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 08:32:16 +00:00
199d94cb76 fix(qml): center CButton text — wrap RowLayout in Item with anchors.centerIn
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 08:30:52 +00:00
2e40675994 fix(storybook): resolve Docker build failure from storybook version conflict
The storybook Docker build failed because @chromatic-com/playwright depended
on storybook@~8.5.8, causing npm to hoist storybook@8.6.18 to root while
@storybook/* addons were at 10.2.19. This version mismatch caused missing
export errors (STORY_HOT_UPDATED, Tag). Added top-level storybook override
to force 10.2.19 everywhere and included package-lock.json in Dockerfile COPY.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 08:29:09 +00:00
04bc92b25e refactor(qt6): replace hand-rolled Rectangle buttons with CButton everywhere
App.qml: theme toggle, level nav, login/logout all use CButton now
FrontPage.qml: hero buttons use CButton with proper variants (primary/ghost/lg)
No more hand-rolled Rectangle + MouseArea + CText button patterns.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 08:20:55 +00:00
9d9fbed60e fix(qt6): fix text clipping in badges, add hero spacing
- CText: use ProportionalHeight for all variants (FixedHeight with 1.0 = 1px, clips text)
- FrontPage: 8px top spacer, hero height 400px, content offset +16px for breathing room
- Text centered in badge circles no longer cut off

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 08:10:18 +00:00
553aa13824 fix(qt6): center all text — Layout.fillWidth + horizontalAlignment on hero and section titles
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 04:45:35 +00:00
ff226595c6 fix(qt6): desktop-scaled typography, responsive grid, uniform card heights
CText: scale MD3 type sizes for desktop (h1: 32px not 57px, body1: 14px not 16px)
- Remove body1 letterSpacing 0.5 (caused word gaps everywhere)
- Default wrapMode: NoWrap (callers opt in to wrapping)
- Headings get Bold/DemiBold instead of Normal weight
- lineHeight only on body1

FrontPage: responsive GridLayout for level cards and tech stack
- columns adapt: Math.floor(width / 220) for levels, /260 for tech
- Fixed 190px card height (no more random heights)
- 3+2 wrap on medium windows, 2+2+1 on narrow, 5 on wide

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 04:41:25 +00:00
96d16564a4 fix(nextjs): break server-only import leak in auth-store
auth-store.ts directly imported fetch-session, login, and register
which transitively pulled next/headers and server-only into the client
bundle, causing the Next.js 16 build to fail.

Replaced direct imports with fetch() calls to new API route handlers
at /api/auth/{login,register,session,logout}.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 04:38:28 +00:00
7fa19e4db7 fix(qml): resolve property color shadow crashes in CBadge and CChip
CBadge: rename 'color' prop to 'badgeColor' (avoids Rectangle.color conflict)
CChip: rename 'color' prop to 'chipColor' (same issue)
Update all callers in WorkflowEditor and UserManagement.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 04:37:45 +00:00