Commit Graph

3925 Commits

Author SHA1 Message Date
rw
edf215a870 refactor(deployment): move compose.yml into metabuilder/ subfolder
Gives the stack a clean name in Portainer ("metabuilder") instead of
the directory name. Updated all relative paths inside compose.yml and
COMPOSE_FILE references in CLI helpers.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-20 19:57:44 +00:00
rw
504e4ecd2a refactor(deployment): consolidate compose files into single compose.yml
- Merge docker-compose.nexus.yml into compose.yml as --profile registry
- Drop docker-compose.smoke.yml, docker-compose.test.yml (deprecated), and docker-compose.stack.yml
- Rename to compose.yml (Docker Compose default; no -f flag needed)
- build apps / deploy now derive buildable services from compose.yml directly instead of hardcoded all_apps/service_map in commands.json — covers all 29 buildable services automatically

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-20 19:56:11 +00:00
rw
97a32487f7 fix(deployment): derive nexus_push image list from compose + base-images
Replaced hardcoded base_images/app_images lists with dynamic parsing:
- Base images scanned from base-images/Dockerfile.* filenames
- App images parsed from docker-compose.stack.yml build services
Also fixed run() shadowing bug (same issue as nexus_populate).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-20 11:02:41 +00:00
rw
e327263216 fix(deployment): resolve run() shadowing in nexus_populate
run = run_cmd alias at module level shadowed the imported subprocess
helper, causing recursive calls and TypeError on input kwarg.
Renamed import to run_proc to match the pattern used in deploy.py.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-20 10:55:35 +00:00
rw
ef89519052 fix(storybook): remove package-lock.json from Dockerfile COPY
package-lock.json is gitignored (**/package-lock.json) so it never
exists in the build context. npm install on line 41 handles deps fine.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-20 10:08:51 +00:00
2c354ad927 build(qt6): rename binary from dbal-qml to metabuilder-qt6
Update cmake_config.json project.executable + project.name and
regenerate CMakeLists.txt.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 21:55:58 +00:00
4ae463f41a fix(qt6): build errors from a11y pass + AUTOMOC hpp fix
Three QML syntax errors introduced by the a11y agents:
- CommentsDBAL.js:25 — string literal split across lines by line-wrapper
- LuaEditor.qml:50 — semicolon between sibling QML elements (invalid)
- SMTPConfigEditor.qml:48 — same semicolon issue

generate_cmake.py: list .hpp files in qt_add_executable so AUTOMOC
scans them for Q_OBJECT — required for header-only Qt classes to link
(signals/vtable are generated by moc, not the compiler).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 21:26:31 +00:00
6a0a5fee41 build(qt6): update cmake generator to scan .hpp headers
generate_cmake.py now includes *.hpp alongside *.h when building
the header list. CMakeLists.txt regenerated — src/ now has 2 .cpp
sources (DBALClient, PackageLoader) after ModPlayer, NodeRegistry,
and PackageRegistry were converted to header-only .hpp files.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 21:03:43 +00:00
296de30836 refactor(qt6): migrate C++ sources to .hpp header-only style
Move ModPlayer, NodeRegistry, PackageRegistry from .cpp/.h pairs to
single .hpp files. Add DBALRequest.hpp and DBALTypes.hpp. Update
DBALClient and main.cpp for new structure.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 21:02:41 +00:00
33be8aa9db fix(emailclient): 10-issue polish pass — visual feedback, state sync, UX
- Selected email card: add secondary-container bg + left accent border
- Unread email cards: add primary left border accent
- StarButton: sync local state with parent via useEffect([isStarred])
- Initial dark mode: useEffect applies data-theme on mount
- Star active color: amber #f9a825 via .star-button--active CSS rule
- Unread count badge: styled as pill with primary-container background
- Empty state: add inbox/folder_open material icon
- Folder toolbar label: capitalize + replace underscores with spaces
- ComposeWindow: CC/BCC hidden by default, revealed via Cc/Bcc button
- Email header: flex layout for .header-top, column gap for .header-details

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 21:02:32 +00:00
a50cc947fe style(qt6): fix 80-char violations in main.cpp
Extract ctx alias for rootContext() calls and wrap long string
literals to stay within the 80-character line margin.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 20:58:11 +00:00
d9ca84628b feat(a11y): deep keyboard accessibility pass across all QML components
Second-pass a11y work across all 12 component groups. Every interactive
element now has activeFocusOnTab, Keys.onReturnPressed/SpacePressed, and
context-aware Accessible.name/description bindings.

Highlights:
- Dialogs: keyboard handlers with enabled-guard on confirm buttons
- CDropdownMenu: full keyboard nav (Up/Down/Enter/Escape)
- CLoginForm: explicit KeyNavigation.tab chain (username→password→submit)
- CNotificationBell: dynamic "3 notifications"/"No notifications" name
- CJobProgressBar: Accessible.minimumValue/maximumValue/currentValue
- CExecutionStatusDot: "Execution status: Running/Passed/Failed" binding
- CKeyboardShortcuts: invisible Repeater exposes all shortcuts to a11y tree
- CDataTable rows: "Row N of M" descriptions
- Canvas elements: Accessible.Canvas role + keyboard zoom (+/- keys)
- DropdownExpandedList: focus-highlight extended to :activeFocus
- Dynamic names reflect loading state (e.g. "Signing in, please wait")

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 20:53:53 +00:00
7ce9667c58 feat(a11y): extend Accessible annotations to all widget + view QML files
Continues the a11y pass from the previous commit — adds objectName,
Accessible.role, Accessible.name to all remaining qml/MetaBuilder/,
qml/qt6/, and qml/widgets/ files. Widget files also get activeFocusOnTab
on interactive elements and dynamic Accessible.name bindings.

Cleans up redundant addImportPath(projectRoot) call in main.cpp.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 20:47:28 +00:00
5456f7eb4c feat(a11y): add Accessible roles, names, objectNames to all core QML components
Core: CButton, CIconButton, CFab, CChip, CListItem — Button roles, activeFocusOnTab
Forms: CTextField, CSelect, CCheckbox, CSwitch, CRadio, CRating — EditableText, CheckBox, ComboBox, Slider
Feedback: CAlert, CDialog, CSnackbar — AlertMessage, Dialog roles
Navigation: CTabBar — PageTabList + PageTab on delegates
Data: CAvatar, CBadge, CTable, CStatBadge, CStatusBadge — Graphic, StaticText, Table, Row
Surfaces: CCard (Pane), CAccordionItem (Button + expanded), CAppBar (ToolBar)
Progress: CProgress (ProgressBar + value), CSpinner (Animation)
Divider: CDivider (Separator)

28 files, 157 lines of a11y properties added. Zero to full coverage on core library.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 16:00:55 +00:00
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