cabloy 5.1.51 → 5.1.53

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/.claude/skills/cabloy-contract-loop/SKILL.md +1 -1
  2. package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +11 -1
  3. package/.claude/skills/cabloy-workflow/SKILL.md +8 -4
  4. package/.claude/skills/cabloy-workflow/references/edition-detection.md +3 -2
  5. package/.github/workflows/docs-pages.yml +2 -0
  6. package/CHANGELOG.md +42 -0
  7. package/CLAUDE.md +7 -4
  8. package/README.md +36 -21
  9. package/cabloy-docs/.vitepress/config.mjs +171 -44
  10. package/cabloy-docs/ai/class-placement-rule.md +1 -0
  11. package/cabloy-docs/ai/cli-for-agents.md +1 -1
  12. package/cabloy-docs/ai/docs-skills-rules-mapping.md +1 -0
  13. package/cabloy-docs/ai/edition-consistency-checklist.md +150 -0
  14. package/cabloy-docs/ai/edition-detection.md +3 -3
  15. package/cabloy-docs/ai/global-bean-lookup.md +1 -0
  16. package/cabloy-docs/ai/introduction.md +47 -3
  17. package/cabloy-docs/ai/repo-guidance.md +2 -2
  18. package/cabloy-docs/ai/rules-and-config.md +1 -1
  19. package/cabloy-docs/ai/skills.md +2 -0
  20. package/cabloy-docs/ai/verification.md +1 -0
  21. package/cabloy-docs/ai/virtual-decorator-guidance.md +206 -0
  22. package/cabloy-docs/backend/introduction.md +2 -2
  23. package/cabloy-docs/backend/logger-guide.md +1 -1
  24. package/cabloy-docs/backend/quickstart.md +3 -3
  25. package/cabloy-docs/editions/cabloy-basic.md +4 -3
  26. package/cabloy-docs/editions/cabloy-start.md +34 -3
  27. package/cabloy-docs/editions/choosing-between-basic-and-start.md +84 -0
  28. package/cabloy-docs/editions/overview.md +114 -20
  29. package/cabloy-docs/frontend/css-in-js-guide.md +1 -1
  30. package/cabloy-docs/frontend/environment-config-guide.md +28 -0
  31. package/cabloy-docs/frontend/foundation.md +3 -2
  32. package/cabloy-docs/frontend/introduction.md +73 -4
  33. package/cabloy-docs/frontend/navigation-guards-guide.md +1 -1
  34. package/cabloy-docs/frontend/quickstart.md +4 -2
  35. package/cabloy-docs/frontend/scripts.md +2 -2
  36. package/cabloy-docs/frontend/ssr-env.md +23 -0
  37. package/cabloy-docs/frontend/theme-guide.md +140 -7
  38. package/cabloy-docs/fullstack/cli.md +118 -0
  39. package/cabloy-docs/fullstack/comparison-with-other-frameworks.md +117 -0
  40. package/cabloy-docs/fullstack/edition-collaboration-differences.md +3 -2
  41. package/cabloy-docs/fullstack/introduction.md +84 -34
  42. package/cabloy-docs/fullstack/quickstart.md +7 -4
  43. package/cabloy-docs/fullstack/vona-zova-integration.md +2 -2
  44. package/cabloy-docs/fullstack/vscode-extensions.md +126 -0
  45. package/cabloy-docs/index.md +39 -40
  46. package/cabloy-docs/reference/frontend-directory-structure.md +125 -0
  47. package/cabloy-docs/reference/glossary.md +2 -2
  48. package/cabloy-docs/reference/introduction.md +47 -0
  49. package/cabloy-docs/reference/package-map.md +2 -0
  50. package/cabloy-docs/reference/repo-scripts.md +5 -3
  51. package/package.json +1 -1
  52. package/vona/README.md +1 -1
  53. package/vona/pnpm-lock.yaml +383 -38
  54. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/package.json +1 -1
  55. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/.metadata/index.ts +49 -1
  56. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/controller/memoryDiag.ts +97 -0
  57. package/vona/src/suite-vendor/a-cabloy/package.json +1 -1
  58. package/zova/README.md +1 -1
  59. package/zova/package.original.json +4 -4
  60. package/zova/packages-cli/cli/package.json +2 -2
  61. package/zova/packages-cli/cli-set-front/package.json +2 -2
  62. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.tools.metadata.ts +1 -1
  63. package/zova/packages-cli/cli-set-front/src/lib/bean/toolsMetadata/generateConfig.ts +2 -12
  64. package/zova/packages-utils/zova-jsx/package.json +2 -2
  65. package/zova/packages-utils/zova-vite/package.json +2 -2
  66. package/zova/packages-utils/zova-vite/templates/app/controller.tsx_ +3 -3
  67. package/zova/packages-zova/zova/package.json +3 -3
  68. package/zova/packages-zova/zova-core/package.json +2 -2
  69. package/zova/packages-zova/zova-core/src/bean/beanContainer.ts +3 -3
  70. package/zova/packages-zova/zova-core/src/bean/beanControllerPageBase.ts +1 -0
  71. package/zova/packages-zova/zova-core/src/core/component/module.ts +16 -16
  72. package/zova/packages-zova/zova-core/src/core/context/component.ts +35 -3
  73. package/zova/packages-zova/zova-core/src/core/context/util.ts +15 -11
  74. package/zova/packages-zova/zova-core/src/core/sys/config.ts +1 -1
  75. package/zova/pnpm-lock.yaml +1607 -1690
  76. package/zova/src/front/config/config/config.ts +1 -1
  77. package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/index.ts +11 -0
  78. package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/locales.ts +0 -15
  79. package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/page/toolMinimal.ts +9 -0
  80. package/zova/src/suite/a-demo/modules/demo-basic/src/page/toolMinimal/controller.tsx +11 -0
  81. package/zova/src/suite/a-demo/modules/demo-basic/src/routes.ts +10 -0
  82. package/zova/src/suite/a-devui/modules/devui-adapter/src/bean/meta.themeHandler.ts +1 -0
  83. package/zova/src/suite/a-home/modules/home-base/src/.metadata/locales.ts +0 -15
  84. package/zova/src/suite/a-home/modules/home-base/src/service/routerGuards.ts +1 -1
  85. package/zova/src/suite/a-home/modules/home-base/src/service/ssrLayout.ts +1 -0
  86. package/zova/src/suite/a-home/modules/home-layoutadmin/src/.metadata/locales.ts +0 -15
  87. package/zova/src/suite/a-home/modules/home-layoutweb/src/.metadata/locales.ts +0 -15
  88. package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/controller.tsx +2 -2
  89. package/zova/src/suite/a-home/modules/home-login/src/.metadata/locales.ts +0 -15
  90. package/zova/src/suite/a-home/modules/home-passport/src/model/passport.ts +2 -2
  91. package/zova/src/suite/cabloy-basic/modules/basic-captcha/src/.metadata/locales.ts +0 -15
  92. package/zova/src/suite/cabloy-basic/modules/basic-form/src/.metadata/locales.ts +0 -15
  93. package/zova/src/suite/cabloy-basic/modules/basic-page/src/.metadata/locales.ts +0 -15
  94. package/zova/src/suite/cabloy-basic/modules/basic-pageentry/src/.metadata/locales.ts +0 -15
  95. package/zova/src/suite/cabloy-basic/modules/basic-table/src/.metadata/locales.ts +0 -15
  96. package/zova/src/suite-vendor/a-zova/modules/a-interceptor/package.json +1 -1
  97. package/zova/src/suite-vendor/a-zova/modules/a-interceptor/src/bean/interceptor.jwt.ts +1 -1
  98. package/zova/src/suite-vendor/a-zova/modules/a-model/package.json +1 -1
  99. package/zova/src/suite-vendor/a-zova/modules/a-model/src/service/storage.ts +4 -5
  100. package/zova/src/suite-vendor/a-zova/modules/a-openapi/package.json +1 -1
  101. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/monkey.ts +1 -1
  102. package/zova/src/suite-vendor/a-zova/modules/a-ssr/package.json +1 -1
  103. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssr.ts +36 -1
  104. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssrMetaStore.ts +8 -2
  105. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/monkey.ts +3 -0
  106. package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/package.json +1 -1
  107. package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/src/service/ssrHandler.ts +70 -29
  108. package/zova/src/suite-vendor/a-zova/modules/a-style/package.json +1 -1
  109. package/zova/src/suite-vendor/a-zova/modules/a-style/src/bean/bean.theme.ts +6 -3
  110. package/zova/src/suite-vendor/a-zova/modules/a-zod/package.json +1 -1
  111. package/zova/src/suite-vendor/a-zova/modules/a-zod/src/.metadata/locales.ts +0 -15
  112. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
  113. package/zova/src/suite-vendor/a-zova/package.json +9 -9
@@ -0,0 +1,84 @@
1
+ # Choosing Between Cabloy Basic and Cabloy Start
2
+
3
+ This guide helps you choose the right Cabloy edition before you start a new project, adopt a frontend UI strategy, or prepare AI workflow guidance.
4
+
5
+ ## Short answer
6
+
7
+ Choose **Cabloy Basic** when you want the public framework/reference edition, the default `npm create cabloy` project route, and a faster path for open, community-oriented, or small-to-medium system development.
8
+
9
+ Choose **Cabloy Start** when you want the private commercial edition, purchase-based access to the licensed private repository source, and a stronger baseline for more complex business systems built around Start-oriented SSR sites, project assets, and a Vuetify-aligned UI layer.
10
+
11
+ ## What stays the same in both editions
12
+
13
+ Both editions share the same Cabloy fullstack core:
14
+
15
+ - **Vona** as the backend framework
16
+ - **Zova** as the frontend framework
17
+ - suite-based modular architecture
18
+ - CLI-first workflows
19
+ - shared frontend engineering direction built around Vue, Vite, Quasar tooling, and related libraries
20
+
21
+ So the decision is not about choosing two unrelated products. It is about choosing the edition baseline that fits your delivery goals best.
22
+
23
+ ## Choose Cabloy Basic when
24
+
25
+ Cabloy Basic is usually the better fit when you want:
26
+
27
+ - the public framework/reference edition
28
+ - the default project route created by `npm create cabloy`
29
+ - open-source visibility and community-friendly workflows
30
+ - public examples and docs that match your repo directly
31
+ - a UI layer aligned with DaisyUI + Tailwind CSS
32
+ - a faster path for small-to-medium system development
33
+
34
+ ## Choose Cabloy Start when
35
+
36
+ Cabloy Start is usually the better fit when you want:
37
+
38
+ - the private commercial edition
39
+ - purchase-based access to the licensed private repository source
40
+ - direct cloning of the Start repository after authorization
41
+ - Start-specific flavors, SSR site baselines, and project assets
42
+ - a UI layer aligned with Vuetify
43
+ - a stronger starting point for more complex business systems
44
+ - edition-specific rules, skills, and docs optimized for the Start repo assumptions
45
+
46
+ ## The most practical decision factors
47
+
48
+ ### Project creation path
49
+
50
+ - **Cabloy Basic**: create the project with `npm create cabloy`
51
+ - **Cabloy Start**: purchase access, clone the licensed private repository source directly, then run `npm run init`
52
+
53
+ ### UI strategy
54
+
55
+ - **Cabloy Basic**: DaisyUI + Tailwind CSS
56
+ - **Cabloy Start**: Vuetify
57
+
58
+ ### Repo and asset model
59
+
60
+ - **Cabloy Basic**: public repository and public reference materials
61
+ - **Cabloy Start**: private repository with edition-specific SSR sites and project assets
62
+
63
+ ### AI workflow assumptions
64
+
65
+ - **Cabloy Basic**: use Basic-specific examples, flavors, modules, and UI assumptions
66
+ - **Cabloy Start**: use Start-specific examples, flavors, SSR site baselines, and UI assumptions
67
+
68
+ This is why edition detection matters so much for AI vibe coding.
69
+
70
+ ## A simple recommendation rule
71
+
72
+ Use this rule when you need a fast decision:
73
+
74
+ 1. If you want the public, default, `npm create cabloy` path, choose **Cabloy Basic**.
75
+ 2. If you want the licensed private repo with Start-oriented assets, a Vuetify-based business-system baseline, and a clone-plus-`npm run init` onboarding path, choose **Cabloy Start**.
76
+ 3. If AI workflow accuracy matters for UI generation, SSR site assumptions, or flavor-specific commands, confirm the edition before writing prompts, rules, skills, or docs.
77
+
78
+ ## Read together with
79
+
80
+ - [Editions Overview](/editions/overview)
81
+ - [Cabloy Basic](/editions/cabloy-basic)
82
+ - [Cabloy Start](/editions/cabloy-start)
83
+ - [Edition Detection](/editions/detection)
84
+ - [Fullstack Quickstart](/fullstack/quickstart)
@@ -1,44 +1,138 @@
1
1
  # Editions Overview
2
2
 
3
- Cabloy currently needs to support two related but distinct repositories:
3
+ This page is the editions hub for deciding which Cabloy baseline you are working with and which assumptions should follow from that choice.
4
+
5
+ Cabloy currently supports two related but distinct editions:
4
6
 
5
7
  - **Cabloy Basic**
6
8
  - **Cabloy Start**
7
9
 
8
- They share the same core architectural direction, but they are not interchangeable.
10
+ They share one Cabloy fullstack architecture, but they are distributed, composed, and optimized differently.
11
+
12
+ If you need a recommendation path, start with [Choosing Between Cabloy Basic and Cabloy Start](/editions/choosing-between-basic-and-start).
13
+
14
+ ## How to approach editions work
15
+
16
+ For contributor and automation workflows in this repository, prefer this order:
17
+
18
+ 1. identify the active edition before making UI-sensitive, flavor-sensitive, module-sensitive, or asset-sensitive assumptions
19
+ 2. explain the shared Cabloy architecture once before branching into edition-specific notes
20
+ 3. split documentation or workflow guidance only where the editions intentionally diverge
21
+ 4. use explicit edition markers and flavor names instead of treating the editions as interchangeable
22
+
23
+ ## Editions reading paths
24
+
25
+ Use this page as the main editions hub, then choose the path that matches your task.
26
+
27
+ ### Selection path
28
+
29
+ Start here when the task is about choosing the right edition baseline or understanding distribution differences:
30
+
31
+ - [Choosing Basic vs Start](/editions/choosing-between-basic-and-start)
32
+ - [Cabloy Basic](/editions/cabloy-basic)
33
+ - [Cabloy Start](/editions/cabloy-start)
9
34
 
10
- ## Shared core
35
+ ### Detection and workflow path
11
36
 
12
- Both editions use the Cabloy fullstack model built around:
37
+ Use this path when the task is about repo-aware automation, flavor assumptions, or edition-safe workflow choices:
13
38
 
14
- - Vona as the backend framework
15
- - Zova as the frontend framework
39
+ - [Edition Detection](/editions/detection)
40
+ - [Fullstack Introduction](/fullstack/introduction)
41
+ - [AI Development Introduction](/ai/introduction)
42
+
43
+ ## Shared fullstack core
44
+
45
+ Both editions are built around the same core direction:
46
+
47
+ - **Vona** as the backend framework
48
+ - **Zova** as the frontend framework
49
+ - suite-based modules across the stack
16
50
  - root-level `npm run vona` and `npm run zova` entrypoints
17
51
  - CLI-backed workflows for generation, refactoring, metadata, and verification
18
52
 
19
- ## Why the editions differ
53
+ This means the editions are related fullstack baselines, not unrelated products.
54
+
55
+ ## What "Basic" means
56
+
57
+ Cabloy Basic is the public framework/reference edition.
58
+
59
+ - this public repository is marked with `__CABLOY_BASIC__`
60
+ - projects created with `npm create cabloy` follow the Cabloy Basic route
61
+ - the public docs and examples in this repo use Cabloy Basic as the default baseline
62
+
63
+ Cabloy Basic is the open-source community edition and is optimized for public reference, learning, and fast development workflows.
64
+
65
+ ## What "Start" means
66
+
67
+ Cabloy Start is the private commercial edition.
68
+
69
+ - the private repository is marked with `__CABLOY_START__`
70
+ - users first purchase a license and obtain repository access, then clone the private repository source directly
71
+ - after cloning, the project is initialized through the Start edition workflow
72
+ - Start uses its own edition-specific flavors, SSR site baselines, and project assets for that edition
73
+
74
+ Cabloy Start is optimized as a commercial baseline for more complex business systems while staying on the same Cabloy fullstack direction.
75
+
76
+ ## Architecture layering
77
+
78
+ Most of the frontend engineering layer is shared, while the edition-specific UI layer differs.
79
+
80
+ ### Shared frontend engineering layer
81
+
82
+ Across editions, Zova uses the same frontend framework direction and engineering tooling, including:
83
+
84
+ - Vue
85
+ - Vite
86
+ - Quasar tooling such as `quasar dev` and `quasar build`
87
+ - TanStack libraries where applicable
88
+
89
+ Here, Quasar is used for engineering tooling rather than as the edition UI component library.
90
+
91
+ ### Edition-specific UI layer
92
+
93
+ The UI component strategy diverges by edition:
94
+
95
+ - **Cabloy Basic**: DaisyUI + Tailwind CSS
96
+ - **Cabloy Start**: Vuetify
97
+
98
+ This difference affects not only UI code, but also module composition, frontend flavor assumptions, SSR site baselines, examples, and AI workflow guidance.
99
+
100
+ ## Edition-specific assets
101
+
102
+ The editions intentionally diverge in several surfaces:
103
+
104
+ - UI layer assumptions
105
+ - frontend flavor names
106
+ - suite and module composition
107
+ - admin/web SSR site baselines
108
+ - licensed private-repo structure and edition-specific project assets
109
+ - rules, skills, and docs used for AI vibe coding
110
+
111
+ For example:
112
+
113
+ - **Cabloy Basic** provides the `cabloy-basic` suites and the `cabloyBasicAdmin` / `cabloyBasicWeb` Zova flavors
114
+ - **Cabloy Start** uses public flavors such as `cabloyStartAdmin` and `cabloyStartWeb`
20
115
 
21
- The editions exist to support different product and distribution goals.
116
+ ## Why the repo markers matter
22
117
 
23
- ### Cabloy Basic
118
+ The edition markers are not just labels for humans.
24
119
 
25
- - public repository
26
- - baseline fullstack reference implementation
27
- - current default examples in this public monorepo
120
+ `__CABLOY_BASIC__` and `__CABLOY_START__` help tools, docs, and AI workflows choose the correct assumptions for:
28
121
 
29
- ### Cabloy Start
122
+ - UI component usage
123
+ - flavor selection
124
+ - module availability
125
+ - SSR site expectations
126
+ - rules, skills, and verification guidance
30
127
 
31
- - sibling private repository
32
- - created from `npm create cabloy`
33
- - uses a different UI strategy centered on Vuetify
34
- - contains different Vona/Zova modules and value-add project structure
128
+ This is why the two editions should be identified explicitly instead of being treated as interchangeable.
35
129
 
36
130
  ## Documentation rule
37
131
 
38
- Write shared explanations once. Only split or annotate when a workflow changes because of:
132
+ Write shared explanations once. Split or annotate only when a workflow changes because of:
39
133
 
40
134
  - UI library assumptions
41
135
  - frontend flavor names
42
136
  - different modules or assets
43
- - private-value product boundaries
44
- - edition-specific scripts or generated outputs
137
+ - distribution and authorization model
138
+ - edition-specific scripts, generated outputs, or AI workflow guidance
@@ -109,7 +109,7 @@ A practical rule is:
109
109
  This is especially important in Cabloy because the two editions diverge in frontend stack choices:
110
110
 
111
111
  - **Cabloy Basic** aligns with DaisyUI + TailwindCSS oriented examples
112
- - **Cabloy Start** aligns with Vuetify-oriented modules
112
+ - **Cabloy Start** aligns with Vuetify-oriented frontend workflows
113
113
 
114
114
  A UI-library-independent styling layer makes it easier for the same architectural ideas to survive across both editions.
115
115
 
@@ -99,6 +99,34 @@ A representative SSR admin development stack looks like:
99
99
 
100
100
  The config side follows the same merge pattern with `config.ts`, `config.[meta].ts`, and `.local` variants.
101
101
 
102
+ ## Flavor-aware capability differences
103
+
104
+ Different SSR flavors can intentionally expose different runtime capabilities rather than behaving identically.
105
+
106
+ A concrete example in the current Cabloy Basic frontend setup is SSR theme resolution:
107
+
108
+ - Web SSR uses a cookie-disabled path
109
+ - Admin SSR uses a cookie-capable path
110
+
111
+ That means the two flavors should not be treated as providing the same guarantee for theme-sensitive SSR output.
112
+
113
+ In practice:
114
+
115
+ - Web SSR is the stricter path and should treat theme-sensitive SSR reads as lower-authority
116
+ - Admin SSR can provide a stronger server/client theme match guarantee
117
+
118
+ This is exactly why flavor selection is not only a packaging choice. It can also define the supported capability boundary for runtime-sensitive behavior.
119
+
120
+ A second practical rule is that flavor alone is not the full story. Contributors should combine:
121
+
122
+ - flavor and `SSR_COOKIE` capability
123
+ - edition marker
124
+ - active UI-library adapter
125
+
126
+ before assuming how SSR theme state is handed off and finalized.
127
+
128
+ For the theme-side contract and edition-aware checklist, see [Theme Guide](/frontend/theme-guide). For the env-side explanation of `SSR_COOKIE`, see [SSR Environment Variables](/frontend/ssr-env).
129
+
102
130
  ## Scripts and runtime variants
103
131
 
104
132
  Frontend scripts map directly onto the same runtime dimensions.
@@ -26,8 +26,9 @@ Zova is not tied to one UI library.
26
26
 
27
27
  That flexibility matters directly for Cabloy’s edition model:
28
28
 
29
- - **Cabloy Basic** currently aligns with DaisyUI + TailwindCSS oriented examples
30
- - **Cabloy Start** aligns with Vuetify-oriented frontend modules and workflows
29
+ - **Shared frontend engineering layer**: both editions follow the same Zova-centered frontend direction, with Vue, Vite, Quasar tooling, and related libraries
30
+ - **Cabloy Basic UI layer**: current public docs and examples align with DaisyUI + Tailwind CSS
31
+ - **Cabloy Start UI layer**: the private commercial edition aligns with Vuetify-oriented frontend workflows and may use different module composition and SSR site baselines
31
32
 
32
33
  So docs and skills must separate shared Zova principles from edition-specific UI assumptions.
33
34
 
@@ -1,8 +1,8 @@
1
1
  # Frontend (Zova)
2
2
 
3
- This page is the frontend hub for contributors who are documenting, designing, or extending frontend work in the Cabloy repository.
3
+ This page is the frontend hub for Cabloy users, contributors, and AI vibe coding workflows that need the frontend side of the framework.
4
4
 
5
- Zova is the frontend half of the Cabloy fullstack architecture.
5
+ Zova is the frontend half of Cabloy’s one-framework-system fullstack architecture.
6
6
 
7
7
  ## What Zova is responsible for
8
8
 
@@ -22,11 +22,80 @@ For contributor and automation workflows in this repository, prefer this order:
22
22
  3. inspect the active edition before assuming a UI stack
23
23
  4. document shared concepts once, then isolate edition-specific notes where the module set or UI library differs
24
24
 
25
+ ## Frontend reading paths
26
+
27
+ Use this page as the main frontend hub, then choose the path that matches your task.
28
+
29
+ ### Getting started and architecture spine
30
+
31
+ Start here when you need the shortest route to the frontend mental model and startup context:
32
+
33
+ - [Quickstart](/frontend/quickstart)
34
+ - [Foundation](/frontend/foundation)
35
+ - [IoC and Beans](/frontend/ioc-and-beans)
36
+ - [Modules and Suites](/frontend/modules-and-suites)
37
+ - [Module Scope](/frontend/module-scope)
38
+ - [Design Principles](/frontend/design-principles)
39
+ - [Environment and Config Guide](/frontend/environment-config-guide)
40
+ - [App Startup Guide](/frontend/app-startup-guide)
41
+ - [System Startup Guide](/frontend/system-startup-guide)
42
+ - [Frontend Directory Structure](/reference/frontend-directory-structure)
43
+
44
+ ### Page and routing flow
45
+
46
+ Use this path when the task is page-oriented, route-oriented, or the first time you need Zod in frontend params and query work:
47
+
48
+ - [Page Guide](/frontend/page-guide)
49
+ - [Page Query Guide](/frontend/page-query-guide)
50
+ - [Page Params Guide](/frontend/page-params-guide)
51
+ - [Zod Guide](/frontend/zod-guide)
52
+ - [Page Route Guide](/frontend/page-route-guide)
53
+ - [Route Alias Guide](/frontend/route-alias-guide)
54
+ - [Navigation Guards Guide](/frontend/navigation-guards-guide)
55
+
56
+ ### Components and UI flow
57
+
58
+ Use this path when the task is about UI composition, component contracts, or theme work:
59
+
60
+ - [Component Guide](/frontend/component-guide)
61
+ - [Component Props Guide](/frontend/component-props-guide)
62
+ - [Component v-model Guide](/frontend/component-v-model-guide)
63
+ - [Generic Component Guide](/frontend/generic-component-guide)
64
+ - [CSS-in-JS Guide](/frontend/css-in-js-guide)
65
+ - [Theme Guide](/frontend/theme-guide)
66
+ - [Icon Engine Guide](/frontend/icon-engine-guide)
67
+
68
+ ### Data, contract, and SSR flow
69
+
70
+ Use this path when the task is about data loading, API contracts, generated SDKs, or SSR behavior:
71
+
72
+ - [Server Data](/frontend/server-data)
73
+ - [API Guide](/frontend/api-guide)
74
+ - [Model Architecture](/frontend/model-architecture)
75
+ - [Model State Guide](/frontend/model-state-guide)
76
+ - [OpenAPI SDK Guide](/frontend/openapi-sdk-guide)
77
+ - [API Schema Guide](/frontend/api-schema-guide)
78
+ - [SDK Guide](/frontend/sdk-guide)
79
+ - [SSR Overview](/frontend/ssr-overview)
80
+ - [SSR Init Data](/frontend/ssr-init-data)
81
+ - [SSR ClientOnly](/frontend/ssr-client-only)
82
+ - [SSR SEO Meta](/frontend/ssr-seo-meta)
83
+ - [SSR Env](/frontend/ssr-env)
84
+
85
+ ### Tooling support
86
+
87
+ Use these pages when the work is about commands, scripts, or mock-driven iteration:
88
+
89
+ - [CLI](/frontend/cli)
90
+ - [Scripts](/frontend/scripts)
91
+ - [Mock Guide](/frontend/mock-guide)
92
+
25
93
  ## Edition impact
26
94
 
27
95
  Frontend work is where Cabloy Basic and Cabloy Start differ most clearly.
28
96
 
29
- - **Cabloy Basic** uses a frontend stack centered on DaisyUI and TailwindCSS in the current docs and examples.
30
- - **Cabloy Start** uses Vuetify and ships different frontend modules as a private value-add project.
97
+ - **Shared frontend engineering layer**: both editions follow the same Zova-centered frontend direction, with Vue, Vite, Quasar tooling, and related libraries.
98
+ - **Cabloy Basic UI layer**: current public docs and examples align with DaisyUI + Tailwind CSS.
99
+ - **Cabloy Start UI layer**: the private commercial edition aligns with Vuetify and may use different frontend modules, SSR site baselines, and project assets.
31
100
 
32
101
  Because of this, automation and docs should always detect the active edition before recommending page-level, component-level, or UI-library-specific work.
@@ -23,7 +23,7 @@ class ServiceRouterGuards {
23
23
  protected onRouterGuards(router: BeanRouter) {
24
24
  router.beforeEach(async to => {
25
25
  if (
26
- !this.sys.config.ssr.ignoreCookieOnServer &&
26
+ !this.sys.config.ssr.cookieDisabledOnServer &&
27
27
  to.meta.requiresAuth !== false &&
28
28
  !this.$passport.isAuthenticated
29
29
  ) {
@@ -28,8 +28,9 @@ When working in this framework repository, the active edition is **Cabloy Basic*
28
28
  That matters because edition choice affects:
29
29
 
30
30
  - frontend flavor names
31
- - UI-library assumptions
32
- - available modules and layouts
31
+ - UI-layer assumptions
32
+ - available modules, layouts, and SSR site baselines
33
+ - project assets and examples
33
34
  - which examples in the docs match the current repo directly
34
35
 
35
36
  Read together with:
@@ -72,6 +73,7 @@ Use the root wrappers as the normal entrypoint for this framework repository, th
72
73
 
73
74
  Read together with:
74
75
 
76
+ - [Reference Introduction](/reference/introduction)
75
77
  - [Repo Scripts](/reference/repo-scripts)
76
78
  - [Frontend Scripts](/frontend/scripts)
77
79
 
@@ -66,12 +66,12 @@ cd zova && npm run build:rest:cabloyBasicAdmin
66
66
 
67
67
  ## Cabloy Start
68
68
 
69
- The sibling `cabloy-start` repository uses Start-specific flavors such as:
69
+ The sibling `cabloy-start` repository is the private commercial edition and uses Start-specific flavors such as:
70
70
 
71
71
  - `cabloyStartAdmin`
72
72
  - `cabloyStartWeb`
73
73
 
74
- Those commands are not driven by the current Basic repo root wrappers, so verify the Start repo’s `package.json` before documenting or automating them.
74
+ Those commands are not driven by the current Basic repo root wrappers, so verify the Start repo’s `package.json`, flavor names, SSR site baselines, and project assets before documenting or automating them.
75
75
 
76
76
  ## Workflow guidance
77
77
 
@@ -20,6 +20,29 @@ Representative variables include:
20
20
 
21
21
  These affect areas such as cookie-driven SSR behavior, theme defaults, body-load observation, server-side API targeting, and SSR production port behavior.
22
22
 
23
+ ## Theme implications of `SSR_COOKIE`
24
+
25
+ `SSR_COOKIE` is not only a storage choice. It also changes what SSR can guarantee about theme-sensitive output.
26
+
27
+ A practical split is:
28
+
29
+ - `SSR_COOKIE=true`: the server can resolve theme state from cookies during SSR
30
+ - `SSR_COOKIE=false`: the server cannot guarantee that theme-sensitive SSR reads match the browser's eventual selected theme
31
+
32
+ In practice, this means Web SSR and Admin SSR can intentionally expose different theme capabilities.
33
+
34
+ - In a cookie-capable SSR path, theme-sensitive server rendering can rely on a stronger server/client match guarantee.
35
+ - In a cookie-disabled SSR path, SSR should treat theme-sensitive reads as non-authoritative for the browser's final theme and prefer hydration-tolerant or client-finalized decisions when exact matching matters.
36
+
37
+ A practical development rule is:
38
+
39
+ - use `SSR_COOKIE` to determine the capability level
40
+ - use the active edition and UI library to determine how that capability is implemented
41
+
42
+ That matters because Cabloy Basic and Cabloy Start share the same theme architecture but do not use the same adapter-level SSR handoff strategy.
43
+
44
+ For the broader theme usage contract and edition-aware checklist, see [Theme Guide](/frontend/theme-guide). For the runtime/flavor selection model behind these env choices, see [Environment and Config Guide](/frontend/environment-config-guide).
45
+
23
46
  ## Dynamic environment variables
24
47
 
25
48
  The runtime also exposes environment variables that describe the current execution context, such as:
@@ -127,6 +127,19 @@ A useful distinction is:
127
127
  - brand-theme switching changes which named theme provides the token set
128
128
  - both still work through the same `$theme` and token architecture
129
129
 
130
+ ## Edition and UI-library decision gate
131
+
132
+ Before applying SSR theme rules, identify the active edition and UI library first.
133
+
134
+ In the current Cabloy monorepo context:
135
+
136
+ - Cabloy Basic currently means DaisyUI + Tailwind CSS assumptions
137
+ - Cabloy Start currently means Vuetify assumptions
138
+
139
+ The shared Zova theme architecture stays the same, but token shape, SSR output strategy, and hydration integration can vary by adapter.
140
+
141
+ That means a rule that is safe for one edition or UI library is not automatically portable to another.
142
+
130
143
  ## What stays shared across editions
131
144
 
132
145
  Across Cabloy Basic and Cabloy Start, the core theme architecture remains shared:
@@ -140,15 +153,135 @@ What may still vary by edition or UI library is:
140
153
 
141
154
  - the exact token shape
142
155
  - concrete default token values
156
+ - SSR server output strategy
157
+ - client hydration and theme-finalization behavior
143
158
  - integration details for a specific component library or visual system
144
159
 
145
- ## Implementation checks for theme-related changes
160
+ ## SSR flavor capability gate
161
+
162
+ After identifying the edition and UI library, identify the SSR flavor capability level.
163
+
164
+ A practical split is:
165
+
166
+ - Web SSR is usually the lower-authority path for final browser theme when cookie-backed SSR resolution is unavailable
167
+ - Admin SSR is the stronger path for SSR-stable theme-sensitive rendering when cookie-backed SSR resolution is available
168
+
169
+ In practice, always check `SSR_COOKIE` and the active adapter behavior before assuming that server-rendered theme-sensitive output can exactly match the hydrated client state.
170
+
171
+ With `SSR_COOKIE=false`, server reads of `$theme.dark`, `$theme.darkMode`, and `$token` should be treated as non-authoritative for the browser's final theme unless the active adapter explicitly documents a stronger guarantee.
172
+
173
+ With `SSR_COOKIE=true`, SSR theme-sensitive branching can rely on a stronger server/client match guarantee, but should still stay inside the established theme handler and hydration pipeline.
174
+
175
+ For the env-side explanation of `SSR_COOKIE`, see [SSR Environment Variables](/frontend/ssr-env). For the flavor/runtime selection model, see [Environment and Config Guide](/frontend/environment-config-guide).
176
+
177
+ ## Shared development rules
178
+
179
+ Apply these rules before writing adapter-specific logic:
180
+
181
+ 1. keep concrete theme values in theme beans instead of scattering them across pages or components
182
+ 2. use `$token` when code consumes theme-defined design values
183
+ 3. use `$theme` when code needs to inspect or switch theme state itself
184
+ 4. keep adapter-specific DOM/theme application inside the active theme handler or client boot path rather than duplicating it in feature code
185
+ 5. do not assume token fields are portable across UI libraries without checking the active adapter contract
186
+
187
+ ## Cabloy Basic checklist: DaisyUI + Tailwind CSS
188
+
189
+ In the current `__CABLOY_BASIC__` frontend setup:
190
+
191
+ - DaisyUI + Tailwind CSS is the active UI layer
192
+ - theme beans and `$token` remain the shared architectural contract
193
+ - Web SSR emits dual dark/light SSR markers and the browser selects the final theme during bootstrap
194
+ - the active theme handler owns `data-theme` and CSS variable application
195
+
196
+ Apply these rules:
197
+
198
+ - In Web SSR, treat server-rendered reads of `$theme.dark`, `$theme.darkMode`, and theme-derived `$token` values as non-authoritative for the browser's final theme.
199
+ - Keep theme-sensitive SSR output fallback-safe or hydration-tolerant when exact browser theme matching matters.
200
+ - Defer final theme-sensitive decisions to the client when an exact browser theme match is required.
201
+ - Let the theme handler own `data-theme` and CSS variable application instead of duplicating that logic in pages or components.
202
+ - In Admin SSR, cookie-backed theme resolution is the stronger path for SSR-stable theme-sensitive branching.
203
+
204
+ ## Cabloy Start comparison checklist: Vuetify
205
+
206
+ In `__CABLOY_START__`, the theme architecture is still shared, but the adapter behavior is deeper:
207
+
208
+ - Vuetify-oriented token payloads are part of the active theme contract
209
+ - the SSR adapter writes theme name, dark-variant theme data, and token payloads for hydration
210
+ - client boot reconstructs the active Vuetify theme from SSR state
211
+
212
+ Apply these comparison rules:
213
+
214
+ - Do not collapse Cabloy Start behavior into the simpler Cabloy Basic `data-theme` mental model.
215
+ - Treat Vuetify adapter state handoff and client boot hydration as part of the theme contract.
216
+ - When documenting or changing SSR theme rules, verify both the server handoff payload and the client reconstruction path.
217
+ - Web SSR still needs lower-authority assumptions when cookie-backed SSR resolution is unavailable, even though the adapter handoff is richer than in Cabloy Basic.
218
+
219
+ ## Quick comparison table
220
+
221
+ | Edition | UI library | SSR server handoff | Client hydration/finalization | Safe Web SSR rule |
222
+ | ------------ | ---------------------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
223
+ | Cabloy Basic | DaisyUI + Tailwind CSS | Dual dark/light SSR markers plus handler-owned DOM theme output | Browser bootstrap resolves the final theme and applies `data-theme` | Do not treat server theme-sensitive reads as final browser truth |
224
+ | Cabloy Start | Vuetify | Adapter-driven SSR state including theme name, dark variant data, and token payloads | Client boot reconstructs the active Vuetify theme from SSR state | Do not reduce Start to a Basic-style `data-theme`-only model; still treat Web SSR as lower-authority without cookie-backed resolution |
225
+
226
+ ## SSR theme review checklist
227
+
228
+ Use this short review checklist when editing SSR theme behavior or reviewing AI-generated changes.
229
+
230
+ Do:
231
+
232
+ - identify the active edition marker before applying SSR theme rules
233
+ - identify the active UI library before assuming token shape or hydration behavior
234
+ - keep concrete theme values in theme beans and consume them through `$token`
235
+ - use `$theme` for theme-state control and `$token` for theme-value consumption
236
+ - verify whether the active flavor provides cookie-backed SSR theme resolution before trusting server theme reads
237
+ - keep adapter-specific theme finalization inside the existing theme handler or client boot path
238
+ - verify both server handoff and client hydration behavior when documenting or changing adapter-specific SSR theme logic
239
+ - treat Web SSR as the stricter path unless the active adapter and cookie capability clearly provide a stronger guarantee
240
+
241
+ Don't:
242
+
243
+ - do not assume Cabloy Basic and Cabloy Start use the same adapter-level SSR theme handoff
244
+ - do not assume a Basic `data-theme` pattern fully describes Vuetify-based Start behavior
245
+ - do not treat server reads of `$theme.dark`, `$theme.darkMode`, or `$token` as final browser truth in cookie-disabled Web SSR
246
+ - do not duplicate theme-finalization logic in pages or components when the active adapter already owns that responsibility
247
+
248
+ ## Reviewer template
249
+
250
+ Use this short template in PR review, code review, or AI review when a change touches SSR theme behavior.
251
+
252
+ - [ ] I identified the active edition marker before reviewing SSR theme behavior.
253
+ - [ ] I identified the active UI library before assuming token shape or hydration behavior.
254
+ - [ ] I verified whether the active flavor provides cookie-backed SSR theme resolution.
255
+ - [ ] I checked whether the change treats server reads of `$theme.dark`, `$theme.darkMode`, or `$token` as lower-authority in cookie-disabled Web SSR.
256
+ - [ ] I verified that adapter-specific theme finalization stays inside the existing theme handler or client boot path.
257
+ - [ ] I checked whether the rule or behavior is shared across editions or adapter-specific.
258
+ - [ ] For Cabloy Basic, I verified the change does not over-assume a final browser theme from server-side theme-sensitive reads.
259
+ - [ ] For Cabloy Start, I verified the change respects Vuetify SSR state handoff and client reconstruction rather than reducing it to a Basic-style `data-theme`-only model.
260
+ - [ ] I verified both server handoff and client hydration behavior for the active adapter.
261
+
262
+ ## Prompt-ready reviewer snippet
263
+
264
+ Use this block directly in a reviewer-agent or code-review prompt when a change touches SSR theme behavior:
265
+
266
+ ```text
267
+ Review this change with the Cabloy SSR theme rules in mind.
268
+
269
+ 1. Detect the active edition marker and UI library before assuming SSR theme behavior.
270
+ 2. Do not assume Cabloy Basic and Cabloy Start use the same adapter-level SSR theme handoff.
271
+ 3. In cookie-disabled Web SSR, do not treat server reads of $theme.dark, $theme.darkMode, or $token as final browser truth.
272
+ 4. Verify that adapter-specific theme finalization stays inside the existing theme handler or client boot path.
273
+ 5. Verify both server handoff and client hydration behavior for the active adapter.
274
+ 6. Flag any change that collapses Vuetify-based Start behavior into a Basic-style data-theme-only mental model.
275
+ ```
276
+
277
+ ## Verification checklist
146
278
 
147
- When changing theme behavior, ask:
279
+ When changing theme behavior or writing theme-sensitive SSR code, ask:
148
280
 
149
- 1. should this change live in a theme bean instead of inlining colors into components?
150
- 2. is the change about dark mode, brand style, or both?
151
- 3. should the change be token-driven instead of component-specific?
152
- 4. does the active edition change the UI component library while preserving the same theme architecture?
281
+ 1. which edition marker is active, and which UI library contract does that imply?
282
+ 2. is the change about token design, theme state control, SSR output, or client hydration?
283
+ 3. does the active flavor provide cookie-backed SSR theme resolution?
284
+ 4. is this rule shared across editions, or adapter-specific?
285
+ 5. does the implementation follow the existing handler and hydration path for the active UI library?
153
286
 
154
- That helps keep theme work scalable and edition-aware.
287
+ That keeps theme work scalable, edition-aware, and aligned with the real SSR capability boundary.