cabloy 5.1.52 → 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.
- package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +10 -0
- package/CHANGELOG.md +17 -0
- package/CLAUDE.md +3 -0
- package/cabloy-docs/.vitepress/config.mjs +144 -50
- package/cabloy-docs/ai/introduction.md +44 -0
- package/cabloy-docs/backend/quickstart.md +1 -1
- package/cabloy-docs/editions/cabloy-start.md +3 -3
- package/cabloy-docs/editions/choosing-between-basic-and-start.md +5 -5
- package/cabloy-docs/editions/overview.md +34 -3
- package/cabloy-docs/frontend/css-in-js-guide.md +1 -1
- package/cabloy-docs/frontend/environment-config-guide.md +28 -0
- package/cabloy-docs/frontend/foundation.md +1 -1
- package/cabloy-docs/frontend/introduction.md +69 -1
- package/cabloy-docs/frontend/navigation-guards-guide.md +1 -1
- package/cabloy-docs/frontend/quickstart.md +1 -0
- package/cabloy-docs/frontend/scripts.md +1 -1
- package/cabloy-docs/frontend/ssr-env.md +23 -0
- package/cabloy-docs/frontend/theme-guide.md +140 -7
- package/cabloy-docs/fullstack/cli.md +6 -6
- package/cabloy-docs/fullstack/edition-collaboration-differences.md +1 -1
- package/cabloy-docs/fullstack/introduction.md +39 -1
- package/cabloy-docs/fullstack/vona-zova-integration.md +1 -1
- package/cabloy-docs/index.md +1 -1
- package/cabloy-docs/reference/frontend-directory-structure.md +125 -0
- package/cabloy-docs/reference/introduction.md +47 -0
- package/cabloy-docs/reference/package-map.md +2 -0
- package/cabloy-docs/reference/repo-scripts.md +5 -3
- package/package.json +1 -1
- package/zova/package.original.json +1 -1
- package/zova/packages-cli/cli/package.json +2 -2
- package/zova/packages-cli/cli-set-front/package.json +2 -2
- package/zova/packages-cli/cli-set-front/src/lib/bean/cli.tools.metadata.ts +1 -1
- package/zova/packages-cli/cli-set-front/src/lib/bean/toolsMetadata/generateConfig.ts +2 -12
- package/zova/packages-utils/zova-jsx/package.json +2 -2
- package/zova/packages-utils/zova-vite/package.json +2 -2
- package/zova/packages-zova/zova/package.json +3 -3
- package/zova/packages-zova/zova-core/package.json +2 -2
- package/zova/packages-zova/zova-core/src/core/sys/config.ts +1 -1
- package/zova/pnpm-lock.yaml +270 -270
- package/zova/src/front/config/config/config.ts +1 -1
- package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/a-devui/modules/devui-adapter/src/bean/meta.themeHandler.ts +1 -0
- package/zova/src/suite/a-home/modules/home-base/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/a-home/modules/home-base/src/service/routerGuards.ts +1 -1
- package/zova/src/suite/a-home/modules/home-base/src/service/ssrLayout.ts +1 -0
- package/zova/src/suite/a-home/modules/home-layoutadmin/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/a-home/modules/home-layoutweb/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/controller.tsx +2 -2
- package/zova/src/suite/a-home/modules/home-login/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/a-home/modules/home-passport/src/model/passport.ts +2 -2
- package/zova/src/suite/cabloy-basic/modules/basic-captcha/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/cabloy-basic/modules/basic-form/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/cabloy-basic/modules/basic-page/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/cabloy-basic/modules/basic-pageentry/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/cabloy-basic/modules/basic-table/src/.metadata/locales.ts +0 -15
- package/zova/src/suite-vendor/a-zova/modules/a-interceptor/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-interceptor/src/bean/interceptor.jwt.ts +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-ssr/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssrMetaStore.ts +1 -0
- package/zova/src/suite-vendor/a-zova/modules/a-style/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-style/src/bean/bean.theme.ts +6 -3
- package/zova/src/suite-vendor/a-zova/modules/a-zod/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-zod/src/.metadata/locales.ts +0 -15
- package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/package.json +6 -6
|
@@ -156,6 +156,16 @@ Check whether the feature needs:
|
|
|
156
156
|
- SSR or route-path verification
|
|
157
157
|
- edition-specific flavor, SSR site baseline, and project-asset verification
|
|
158
158
|
|
|
159
|
+
### SSR theme review reminder
|
|
160
|
+
|
|
161
|
+
If the frontend change is SSR theme-sensitive, apply this short review before finishing:
|
|
162
|
+
|
|
163
|
+
- detect the active edition marker and UI library before assuming SSR theme behavior
|
|
164
|
+
- do not assume Cabloy Basic and Cabloy Start use the same adapter-level SSR theme handoff
|
|
165
|
+
- in Web SSR without cookie-backed theme resolution, do not treat server reads of `$theme.dark`, `$theme.darkMode`, or `$token` as final browser truth
|
|
166
|
+
- keep theme-finalization logic inside the active theme handler or client boot path instead of duplicating it in page or component code
|
|
167
|
+
- verify both server handoff and client hydration behavior for the active adapter
|
|
168
|
+
|
|
159
169
|
### Optional backend-contract reminder
|
|
160
170
|
|
|
161
171
|
Stay frontend-first, but if the frontend task clearly depends on backend contract output, add a reminder such as:
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 5.1.53
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- Update application functionality across core feature areas.
|
|
8
|
+
- Update configuration behavior and related integration points.
|
|
9
|
+
- Update theme configuration and controller handling.
|
|
10
|
+
|
|
11
|
+
### Improvements
|
|
12
|
+
|
|
13
|
+
- Remove the generated `$useLocale` helper.
|
|
14
|
+
- Refresh project configuration files and internal implementation details.
|
|
15
|
+
|
|
16
|
+
### Breaking Changes
|
|
17
|
+
|
|
18
|
+
- Rename the SSR cookie-disabled server flag and update related documentation.
|
|
19
|
+
|
|
3
20
|
## 5.1.52
|
|
4
21
|
|
|
5
22
|
### Features
|
package/CLAUDE.md
CHANGED
|
@@ -44,6 +44,9 @@ Before inventing a custom implementation path:
|
|
|
44
44
|
- Prefer CLI-backed workflows over manual scaffolding whenever Vona or Zova already provides a generator, refactor, metadata, or verification command.
|
|
45
45
|
- Treat legacy docs as input material, not as unquestioned truth. When docs conflict with source code, prefer current source code.
|
|
46
46
|
- For frontend work, assume Cabloy Basic and Cabloy Start share a frontend engineering layer but may diverge in UI layer, frontend flavors, suite/module availability, SSR site baselines, project assets, and generated outputs.
|
|
47
|
+
- For SSR theme-sensitive frontend work, detect the active edition marker and UI library before making assumptions. Cabloy Basic currently means DaisyUI + Tailwind CSS assumptions; Cabloy Start currently means Vuetify assumptions.
|
|
48
|
+
- In Web SSR without cookie-backed theme resolution, do not treat server reads of `$theme.dark`, `$theme.darkMode`, or `$token` as final browser truth. Keep theme-sensitive SSR branching hydration-tolerant or defer final theme-sensitive decisions to the client.
|
|
49
|
+
- Do not assume Cabloy Basic and Cabloy Start use the same adapter-level SSR theme handoff. Verify the active theme handler and client hydration path before changing SSR theme behavior.
|
|
47
50
|
- Reuse existing repo terminology: Cabloy, Vona, Zova, suite, module, bean, SSR, SPA, Web, Admin.
|
|
48
51
|
- For backend base-class placement, use the A / B1 / B2 rule from `cabloy-docs/ai/class-placement-rule.md`.
|
|
49
52
|
- Pure helper bases belong in `src/lib`; subclass-only bases should be evaluated case by case and often belong in `src/lib`.
|
|
@@ -31,12 +31,60 @@ const aiItems = [
|
|
|
31
31
|
{ text: 'Verification', link: '/ai/verification' },
|
|
32
32
|
];
|
|
33
33
|
|
|
34
|
-
const
|
|
35
|
-
{
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
34
|
+
const fullstackGroups = [
|
|
35
|
+
{
|
|
36
|
+
text: 'Fullstack / Getting Started',
|
|
37
|
+
items: [
|
|
38
|
+
{ text: 'Introduction', link: '/fullstack/introduction' },
|
|
39
|
+
{ text: 'Quickstart', link: '/fullstack/quickstart' },
|
|
40
|
+
],
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
text: 'Tooling & Workflow',
|
|
44
|
+
items: [
|
|
45
|
+
{ text: 'CLI', link: '/fullstack/cli' },
|
|
46
|
+
{ text: 'VS Code Extensions', link: '/fullstack/vscode-extensions' },
|
|
47
|
+
],
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
text: 'Architecture & Integration',
|
|
51
|
+
items: [
|
|
52
|
+
{
|
|
53
|
+
text: 'Comparison with Other Frameworks',
|
|
54
|
+
link: '/fullstack/comparison-with-other-frameworks',
|
|
55
|
+
},
|
|
56
|
+
{ text: 'Vona + Zova Integration', link: '/fullstack/vona-zova-integration' },
|
|
57
|
+
{ text: 'Backend OpenAPI to Frontend SDK', link: '/fullstack/openapi-to-sdk' },
|
|
58
|
+
{
|
|
59
|
+
text: 'Frontend Metadata Back to Backend',
|
|
60
|
+
link: '/fullstack/frontend-metadata-to-backend',
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
text: 'Edition Collaboration Differences',
|
|
64
|
+
link: '/fullstack/edition-collaboration-differences',
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
|
|
70
|
+
const referenceGroups = [
|
|
71
|
+
{
|
|
72
|
+
text: 'Reference / Workflow Entry',
|
|
73
|
+
items: [
|
|
74
|
+
{ text: 'Introduction', link: '/reference/introduction' },
|
|
75
|
+
{ text: 'Repo Scripts', link: '/reference/repo-scripts' },
|
|
76
|
+
{ text: 'CLI Reference', link: '/reference/cli-reference' },
|
|
77
|
+
],
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
text: 'Structure & Lookup',
|
|
81
|
+
items: [
|
|
82
|
+
{ text: 'Package Map', link: '/reference/package-map' },
|
|
83
|
+
{ text: 'Backend Directory Structure', link: '/reference/backend-directory-structure' },
|
|
84
|
+
{ text: 'Frontend Directory Structure', link: '/reference/frontend-directory-structure' },
|
|
85
|
+
{ text: 'Glossary', link: '/reference/glossary' },
|
|
86
|
+
],
|
|
87
|
+
},
|
|
40
88
|
];
|
|
41
89
|
|
|
42
90
|
const GA_MEASUREMENT_ID = process.env.GA_MEASUREMENT_ID;
|
|
@@ -74,46 +122,27 @@ export default defineConfig({
|
|
|
74
122
|
nav: [
|
|
75
123
|
{ text: 'Home', link: '/' },
|
|
76
124
|
{ text: 'Fullstack', link: '/fullstack/introduction', activeMatch: '^/fullstack/' },
|
|
77
|
-
{ text: 'Backend', link: '/backend/introduction', activeMatch: '^/backend/' },
|
|
78
|
-
{ text: 'Frontend', link: '/frontend/introduction', activeMatch: '^/frontend/' },
|
|
125
|
+
{ text: 'Backend (Vona)', link: '/backend/introduction', activeMatch: '^/backend/' },
|
|
126
|
+
{ text: 'Frontend (Zova)', link: '/frontend/introduction', activeMatch: '^/frontend/' },
|
|
79
127
|
{ text: 'Editions', link: '/editions/overview', activeMatch: '^/editions/' },
|
|
80
128
|
{ text: 'AI Development', link: '/ai/introduction', activeMatch: '^/ai/' },
|
|
81
|
-
{ text: 'Reference', link: '/reference/
|
|
129
|
+
{ text: 'Reference', link: '/reference/introduction', activeMatch: '^/reference/' },
|
|
82
130
|
],
|
|
83
131
|
sidebar: {
|
|
84
|
-
'/fullstack/':
|
|
85
|
-
{
|
|
86
|
-
text: 'Fullstack',
|
|
87
|
-
items: [
|
|
88
|
-
{ text: 'Introduction', link: '/fullstack/introduction' },
|
|
89
|
-
{
|
|
90
|
-
text: 'Comparison with Other Frameworks',
|
|
91
|
-
link: '/fullstack/comparison-with-other-frameworks',
|
|
92
|
-
},
|
|
93
|
-
{ text: 'Quickstart', link: '/fullstack/quickstart' },
|
|
94
|
-
{ text: 'CLI', link: '/fullstack/cli' },
|
|
95
|
-
{ text: 'VS Code Extensions', link: '/fullstack/vscode-extensions' },
|
|
96
|
-
{ text: 'Vona + Zova Integration', link: '/fullstack/vona-zova-integration' },
|
|
97
|
-
{ text: 'Backend OpenAPI to Frontend SDK', link: '/fullstack/openapi-to-sdk' },
|
|
98
|
-
{
|
|
99
|
-
text: 'Frontend Metadata Back to Backend',
|
|
100
|
-
link: '/fullstack/frontend-metadata-to-backend',
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
text: 'Edition Collaboration Differences',
|
|
104
|
-
link: '/fullstack/edition-collaboration-differences',
|
|
105
|
-
},
|
|
106
|
-
],
|
|
107
|
-
},
|
|
108
|
-
],
|
|
132
|
+
'/fullstack/': fullstackGroups,
|
|
109
133
|
'/backend/': [
|
|
110
134
|
{
|
|
111
|
-
text: 'Backend (Vona)',
|
|
135
|
+
text: 'Backend (Vona) / Getting Started',
|
|
112
136
|
items: [
|
|
113
137
|
{ text: 'Introduction', link: '/backend/introduction' },
|
|
114
138
|
{ text: 'Foundation', link: '/backend/foundation' },
|
|
115
139
|
{ text: 'Backend Essentials', link: '/backend/backend-essentials' },
|
|
116
140
|
{ text: 'Quickstart', link: '/backend/quickstart' },
|
|
141
|
+
],
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
text: 'Tooling & Runtime',
|
|
145
|
+
items: [
|
|
117
146
|
{ text: 'CLI', link: '/backend/cli' },
|
|
118
147
|
{ text: 'Scripts', link: '/backend/scripts' },
|
|
119
148
|
{ text: 'Runtime and Flavors', link: '/backend/runtime-and-flavors' },
|
|
@@ -123,18 +152,34 @@ export default defineConfig({
|
|
|
123
152
|
text: 'Multi-Instance and Instance Resolution',
|
|
124
153
|
link: '/backend/multi-instance-and-instance-resolution',
|
|
125
154
|
},
|
|
155
|
+
],
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
text: 'Security & Access',
|
|
159
|
+
items: [
|
|
126
160
|
{ text: 'Auth Guide', link: '/backend/auth-guide' },
|
|
127
161
|
{ text: 'Captcha Guide', link: '/backend/captcha-guide' },
|
|
128
162
|
{ text: 'User Access Guide', link: '/backend/user-access-guide' },
|
|
163
|
+
{ text: 'JWT Guide', link: '/backend/jwt-guide' },
|
|
164
|
+
{ text: 'Validation Guide', link: '/backend/validation-guide' },
|
|
165
|
+
],
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
text: 'Application Basics',
|
|
169
|
+
items: [
|
|
129
170
|
{ text: 'Menu Guide', link: '/backend/menu-guide' },
|
|
130
171
|
{ text: 'I18n Guide', link: '/backend/i18n-guide' },
|
|
131
172
|
{ text: 'Error Guide', link: '/backend/error-guide' },
|
|
132
|
-
{ text: 'JWT Guide', link: '/backend/jwt-guide' },
|
|
133
173
|
{ text: 'Event Guide', link: '/backend/event-guide' },
|
|
134
174
|
{ text: 'Logger Guide', link: '/backend/logger-guide' },
|
|
135
175
|
{ text: 'Upload Guide', link: '/backend/upload-guide' },
|
|
136
176
|
{ text: 'Mail Guide', link: '/backend/mail-guide' },
|
|
137
177
|
{ text: 'Serialization Guide', link: '/backend/serialization-guide' },
|
|
178
|
+
],
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
text: 'Core Programming Model',
|
|
182
|
+
items: [
|
|
138
183
|
{ text: 'AOP Overview', link: '/backend/aop-overview' },
|
|
139
184
|
{ text: 'Controller Guide', link: '/backend/controller-guide' },
|
|
140
185
|
{ text: 'Controller AOP Guide', link: '/backend/controller-aop-guide' },
|
|
@@ -144,10 +189,14 @@ export default defineConfig({
|
|
|
144
189
|
{ text: 'Model Guide', link: '/backend/model-guide' },
|
|
145
190
|
{ text: 'Entity Guide', link: '/backend/entity-guide' },
|
|
146
191
|
{ text: 'DTO Guide', link: '/backend/dto-guide' },
|
|
192
|
+
],
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
text: 'Data & CRUD',
|
|
196
|
+
items: [
|
|
147
197
|
{ text: 'CRUD Workflow', link: '/backend/crud-workflow' },
|
|
148
198
|
{ text: 'Migration and Changes', link: '/backend/migration-and-changes' },
|
|
149
199
|
{ text: 'Field Indexes', link: '/backend/field-indexes' },
|
|
150
|
-
{ text: 'Unit Testing', link: '/backend/unit-testing' },
|
|
151
200
|
{ text: 'ORM Guide', link: '/backend/orm-guide' },
|
|
152
201
|
{ text: 'ORM Configuration Guide', link: '/backend/orm-configuration-guide' },
|
|
153
202
|
{ text: 'ORM Select Guide', link: '/backend/orm-select-guide' },
|
|
@@ -155,6 +204,11 @@ export default defineConfig({
|
|
|
155
204
|
{ text: 'ORM Aggregate and Group Guide', link: '/backend/orm-aggregate-group-guide' },
|
|
156
205
|
{ text: 'Relations Guide', link: '/backend/relations-guide' },
|
|
157
206
|
{ text: 'Transaction Guide', link: '/backend/transaction-guide' },
|
|
207
|
+
],
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
text: 'Infrastructure & Distributed',
|
|
211
|
+
items: [
|
|
158
212
|
{ text: 'Cache Guide', link: '/backend/cache-guide' },
|
|
159
213
|
{
|
|
160
214
|
text: 'Multi-Database and Datasource Guide',
|
|
@@ -169,55 +223,100 @@ export default defineConfig({
|
|
|
169
223
|
{ text: 'Worker Guide', link: '/backend/worker-guide' },
|
|
170
224
|
{ text: 'Broadcast Guide', link: '/backend/broadcast-guide' },
|
|
171
225
|
{ text: 'Redlock Guide', link: '/backend/redlock-guide' },
|
|
172
|
-
|
|
226
|
+
],
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
text: 'API & Testing',
|
|
230
|
+
items: [
|
|
173
231
|
{ text: 'OpenAPI Guide', link: '/backend/openapi-guide' },
|
|
174
232
|
{ text: 'DTO Infer and Generation', link: '/backend/dto-infer-generation' },
|
|
233
|
+
{ text: 'Unit Testing', link: '/backend/unit-testing' },
|
|
175
234
|
],
|
|
176
235
|
},
|
|
177
236
|
],
|
|
178
237
|
'/frontend/': [
|
|
179
238
|
{
|
|
180
|
-
text: 'Frontend (Zova)',
|
|
239
|
+
text: 'Frontend (Zova) / Getting Started',
|
|
181
240
|
items: [
|
|
182
241
|
{ text: 'Introduction', link: '/frontend/introduction' },
|
|
183
242
|
{ text: 'Quickstart', link: '/frontend/quickstart' },
|
|
184
243
|
{ text: 'Foundation', link: '/frontend/foundation' },
|
|
244
|
+
],
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
text: 'Architecture & Modules',
|
|
248
|
+
items: [
|
|
185
249
|
{ text: 'IoC and Beans', link: '/frontend/ioc-and-beans' },
|
|
186
250
|
{ text: 'Modules and Suites', link: '/frontend/modules-and-suites' },
|
|
187
251
|
{ text: 'Module Scope', link: '/frontend/module-scope' },
|
|
252
|
+
{ text: 'Design Principles', link: '/frontend/design-principles' },
|
|
253
|
+
],
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
text: 'Environment & Startup',
|
|
257
|
+
items: [
|
|
188
258
|
{ text: 'Environment and Config Guide', link: '/frontend/environment-config-guide' },
|
|
189
259
|
{ text: 'App Startup Guide', link: '/frontend/app-startup-guide' },
|
|
190
260
|
{ text: 'System Startup Guide', link: '/frontend/system-startup-guide' },
|
|
261
|
+
],
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
text: 'Tooling',
|
|
265
|
+
items: [
|
|
266
|
+
{ text: 'CLI', link: '/frontend/cli' },
|
|
267
|
+
{ text: 'Scripts', link: '/frontend/scripts' },
|
|
268
|
+
{ text: 'Mock Guide', link: '/frontend/mock-guide' },
|
|
269
|
+
],
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
text: 'Pages & Routing',
|
|
273
|
+
items: [
|
|
191
274
|
{ text: 'Page Guide', link: '/frontend/page-guide' },
|
|
192
275
|
{ text: 'Page Query Guide', link: '/frontend/page-query-guide' },
|
|
193
276
|
{ text: 'Page Params Guide', link: '/frontend/page-params-guide' },
|
|
194
|
-
{ text: 'Page Route Guide', link: '/frontend/page-route-guide' },
|
|
195
277
|
{ text: 'Zod Guide', link: '/frontend/zod-guide' },
|
|
278
|
+
{ text: 'Page Route Guide', link: '/frontend/page-route-guide' },
|
|
196
279
|
{ text: 'Route Alias Guide', link: '/frontend/route-alias-guide' },
|
|
197
280
|
{ text: 'Navigation Guards Guide', link: '/frontend/navigation-guards-guide' },
|
|
281
|
+
],
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
text: 'Components & UI',
|
|
285
|
+
items: [
|
|
198
286
|
{ text: 'Component Guide', link: '/frontend/component-guide' },
|
|
199
287
|
{ text: 'Component Props Guide', link: '/frontend/component-props-guide' },
|
|
200
288
|
{ text: 'Component v-model Guide', link: '/frontend/component-v-model-guide' },
|
|
201
289
|
{ text: 'Generic Component Guide', link: '/frontend/generic-component-guide' },
|
|
202
|
-
{ text: 'CLI', link: '/frontend/cli' },
|
|
203
|
-
{ text: 'Scripts', link: '/frontend/scripts' },
|
|
204
|
-
{ text: 'Mock Guide', link: '/frontend/mock-guide' },
|
|
205
290
|
{ text: 'CSS-in-JS Guide', link: '/frontend/css-in-js-guide' },
|
|
206
291
|
{ text: 'Theme Guide', link: '/frontend/theme-guide' },
|
|
207
292
|
{ text: 'Icon Engine Guide', link: '/frontend/icon-engine-guide' },
|
|
293
|
+
],
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
text: 'Data & State',
|
|
297
|
+
items: [
|
|
208
298
|
{ text: 'Server Data', link: '/frontend/server-data' },
|
|
209
299
|
{ text: 'API Guide', link: '/frontend/api-guide' },
|
|
210
300
|
{ text: 'Model Architecture', link: '/frontend/model-architecture' },
|
|
211
301
|
{ text: 'Model State Guide', link: '/frontend/model-state-guide' },
|
|
302
|
+
],
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
text: 'API Contract & SDK',
|
|
306
|
+
items: [
|
|
212
307
|
{ text: 'OpenAPI SDK Guide', link: '/frontend/openapi-sdk-guide' },
|
|
213
308
|
{ text: 'API Schema Guide', link: '/frontend/api-schema-guide' },
|
|
214
309
|
{ text: 'SDK Guide', link: '/frontend/sdk-guide' },
|
|
310
|
+
],
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
text: 'SSR',
|
|
314
|
+
items: [
|
|
215
315
|
{ text: 'SSR Overview', link: '/frontend/ssr-overview' },
|
|
216
316
|
{ text: 'SSR Init Data', link: '/frontend/ssr-init-data' },
|
|
217
317
|
{ text: 'SSR ClientOnly', link: '/frontend/ssr-client-only' },
|
|
218
318
|
{ text: 'SSR SEO Meta', link: '/frontend/ssr-seo-meta' },
|
|
219
319
|
{ text: 'SSR Env', link: '/frontend/ssr-env' },
|
|
220
|
-
{ text: 'Design Principles', link: '/frontend/design-principles' },
|
|
221
320
|
],
|
|
222
321
|
},
|
|
223
322
|
],
|
|
@@ -233,12 +332,7 @@ export default defineConfig({
|
|
|
233
332
|
items: aiItems,
|
|
234
333
|
},
|
|
235
334
|
],
|
|
236
|
-
'/reference/':
|
|
237
|
-
{
|
|
238
|
-
text: 'Reference',
|
|
239
|
-
items: referenceItems,
|
|
240
|
-
},
|
|
241
|
-
],
|
|
335
|
+
'/reference/': referenceGroups,
|
|
242
336
|
},
|
|
243
337
|
socialLinks: [{ icon: 'github', link: 'https://github.com/cabloy/cabloy' }],
|
|
244
338
|
search: {
|
|
@@ -23,6 +23,15 @@ The goal is to make AI **reuse the repo’s existing conventions directly**, esp
|
|
|
23
23
|
- internal architecture notes
|
|
24
24
|
- shared public documentation
|
|
25
25
|
|
|
26
|
+
## How to approach AI work
|
|
27
|
+
|
|
28
|
+
For contributor and automation workflows in this repository, prefer this order:
|
|
29
|
+
|
|
30
|
+
1. inspect the active edition and repo markers before making UI-sensitive or workflow-sensitive assumptions
|
|
31
|
+
2. inspect root scripts, Vona CLI, and Zova CLI before inventing manual scaffolding or custom workflow steps
|
|
32
|
+
3. use public docs for durable user-facing guidance and `.docs-internal/` for maintainer rationale
|
|
33
|
+
4. encode repeatable behavior in Claude rules, commands, or skills instead of relying on unstated habits
|
|
34
|
+
|
|
26
35
|
## The knowledge layers
|
|
27
36
|
|
|
28
37
|
### Public docs
|
|
@@ -43,6 +52,41 @@ Use root `CLAUDE.md` and `.claude/commands/` for concise operational behavior an
|
|
|
43
52
|
|
|
44
53
|
Use `.claude/skills/` for procedural workflows that benefit from reusable instructions, bundled references, or future deterministic scripts.
|
|
45
54
|
|
|
55
|
+
## AI reading paths
|
|
56
|
+
|
|
57
|
+
Use this page as the main AI-development hub, then choose the path that matches your task.
|
|
58
|
+
|
|
59
|
+
### Repo workflow path
|
|
60
|
+
|
|
61
|
+
Start here when the task is about choosing the right repo surface, docs location, or automation boundary:
|
|
62
|
+
|
|
63
|
+
- [Repo Guidance](/ai/repo-guidance)
|
|
64
|
+
- [Docs / Skills Mapping](/ai/docs-skills-rules-mapping)
|
|
65
|
+
- [CLI to Skill Map](/ai/cli-to-skill-map)
|
|
66
|
+
- [Skills](/ai/skills)
|
|
67
|
+
- [Rules and Config](/ai/rules-and-config)
|
|
68
|
+
|
|
69
|
+
### Framework implementation path
|
|
70
|
+
|
|
71
|
+
Use this path when the task is about implementing or reviewing Cabloy code with repo-aware rules:
|
|
72
|
+
|
|
73
|
+
- [Class Placement Rule](/ai/class-placement-rule)
|
|
74
|
+
- [Global Bean Lookup](/ai/global-bean-lookup)
|
|
75
|
+
- [Playbook: Backend Module](/ai/playbook-backend-module)
|
|
76
|
+
- [Playbook: Frontend Page](/ai/playbook-frontend-page)
|
|
77
|
+
- [Playbook: Contract Regeneration](/ai/playbook-contract-regeneration)
|
|
78
|
+
- [Playbook: Metadata Refresh](/ai/playbook-metadata-refresh)
|
|
79
|
+
|
|
80
|
+
### Verification and roadmap path
|
|
81
|
+
|
|
82
|
+
Use this path when the task is about consistency checks, verification, or future workflow planning:
|
|
83
|
+
|
|
84
|
+
- [Edition Detection](/ai/edition-detection)
|
|
85
|
+
- [Edition Consistency Checklist](/ai/edition-consistency-checklist)
|
|
86
|
+
- [Verification](/ai/verification)
|
|
87
|
+
- [Future Skill Roadmap](/ai/future-skill-roadmap)
|
|
88
|
+
- [CLI for Agents](/ai/cli-for-agents)
|
|
89
|
+
|
|
46
90
|
## Recommended AI lookup rules
|
|
47
91
|
|
|
48
92
|
For backend shorthand lookup, prefer these surfaces in order:
|
|
@@ -87,7 +87,7 @@ Legacy Vona docs described creating projects from templates such as `cabloy-basi
|
|
|
87
87
|
That history still matters, because it explains why the Cabloy ecosystem now supports two editions:
|
|
88
88
|
|
|
89
89
|
- **Cabloy Basic**: the public framework/reference edition, including the project route created by `npm create cabloy`, with a shared frontend engineering layer and a DaisyUI + Tailwind CSS oriented UI layer in the current public examples
|
|
90
|
-
- **Cabloy Start**: the private commercial edition, accessed by cloning the licensed private repository source, with Vuetify-oriented
|
|
90
|
+
- **Cabloy Start**: the private commercial edition, accessed by cloning the licensed private repository source, with a Vuetify-oriented UI layer plus edition-specific SSR site baselines and project assets
|
|
91
91
|
|
|
92
92
|
In the current monorepo docs, do not treat these as just template names. Treat them as edition boundaries that affect frontend integration, scripts, UI assumptions, and examples.
|
|
93
93
|
|
|
@@ -17,9 +17,9 @@ Use Cabloy Start as the edition-aware target when work depends on:
|
|
|
17
17
|
- direct use of the licensed private repository source
|
|
18
18
|
- Vuetify-specific frontend workflows
|
|
19
19
|
- Cabloy Start flavor names in frontend scripts
|
|
20
|
-
-
|
|
21
|
-
- licensed private-repo structure and
|
|
22
|
-
-
|
|
20
|
+
- edition-specific module composition in the licensed Start repository
|
|
21
|
+
- licensed private-repo structure and edition-specific project composition
|
|
22
|
+
- edition-specific SSR site baselines and project assets
|
|
23
23
|
|
|
24
24
|
## Get access and initialize
|
|
25
25
|
|
|
@@ -6,7 +6,7 @@ This guide helps you choose the right Cabloy edition before you start a new proj
|
|
|
6
6
|
|
|
7
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
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
|
|
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
10
|
|
|
11
11
|
## What stays the same in both editions
|
|
12
12
|
|
|
@@ -38,7 +38,7 @@ Cabloy Start is usually the better fit when you want:
|
|
|
38
38
|
- the private commercial edition
|
|
39
39
|
- purchase-based access to the licensed private repository source
|
|
40
40
|
- direct cloning of the Start repository after authorization
|
|
41
|
-
- Start-specific
|
|
41
|
+
- Start-specific flavors, SSR site baselines, and project assets
|
|
42
42
|
- a UI layer aligned with Vuetify
|
|
43
43
|
- a stronger starting point for more complex business systems
|
|
44
44
|
- edition-specific rules, skills, and docs optimized for the Start repo assumptions
|
|
@@ -58,12 +58,12 @@ Cabloy Start is usually the better fit when you want:
|
|
|
58
58
|
### Repo and asset model
|
|
59
59
|
|
|
60
60
|
- **Cabloy Basic**: public repository and public reference materials
|
|
61
|
-
- **Cabloy Start**: private repository with
|
|
61
|
+
- **Cabloy Start**: private repository with edition-specific SSR sites and project assets
|
|
62
62
|
|
|
63
63
|
### AI workflow assumptions
|
|
64
64
|
|
|
65
65
|
- **Cabloy Basic**: use Basic-specific examples, flavors, modules, and UI assumptions
|
|
66
|
-
- **Cabloy Start**: use Start-specific examples, flavors,
|
|
66
|
+
- **Cabloy Start**: use Start-specific examples, flavors, SSR site baselines, and UI assumptions
|
|
67
67
|
|
|
68
68
|
This is why edition detection matters so much for AI vibe coding.
|
|
69
69
|
|
|
@@ -72,7 +72,7 @@ This is why edition detection matters so much for AI vibe coding.
|
|
|
72
72
|
Use this rule when you need a fast decision:
|
|
73
73
|
|
|
74
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-
|
|
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
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
77
|
|
|
78
78
|
## Read together with
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Editions Overview
|
|
2
2
|
|
|
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
|
+
|
|
3
5
|
Cabloy currently supports two related but distinct editions:
|
|
4
6
|
|
|
5
7
|
- **Cabloy Basic**
|
|
@@ -9,6 +11,35 @@ They share one Cabloy fullstack architecture, but they are distributed, composed
|
|
|
9
11
|
|
|
10
12
|
If you need a recommendation path, start with [Choosing Between Cabloy Basic and Cabloy Start](/editions/choosing-between-basic-and-start).
|
|
11
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)
|
|
34
|
+
|
|
35
|
+
### Detection and workflow path
|
|
36
|
+
|
|
37
|
+
Use this path when the task is about repo-aware automation, flavor assumptions, or edition-safe workflow choices:
|
|
38
|
+
|
|
39
|
+
- [Edition Detection](/editions/detection)
|
|
40
|
+
- [Fullstack Introduction](/fullstack/introduction)
|
|
41
|
+
- [AI Development Introduction](/ai/introduction)
|
|
42
|
+
|
|
12
43
|
## Shared fullstack core
|
|
13
44
|
|
|
14
45
|
Both editions are built around the same core direction:
|
|
@@ -38,7 +69,7 @@ Cabloy Start is the private commercial edition.
|
|
|
38
69
|
- the private repository is marked with `__CABLOY_START__`
|
|
39
70
|
- users first purchase a license and obtain repository access, then clone the private repository source directly
|
|
40
71
|
- after cloning, the project is initialized through the Start edition workflow
|
|
41
|
-
- Start
|
|
72
|
+
- Start uses its own edition-specific flavors, SSR site baselines, and project assets for that edition
|
|
42
73
|
|
|
43
74
|
Cabloy Start is optimized as a commercial baseline for more complex business systems while staying on the same Cabloy fullstack direction.
|
|
44
75
|
|
|
@@ -74,13 +105,13 @@ The editions intentionally diverge in several surfaces:
|
|
|
74
105
|
- frontend flavor names
|
|
75
106
|
- suite and module composition
|
|
76
107
|
- admin/web SSR site baselines
|
|
77
|
-
- licensed private-repo structure and
|
|
108
|
+
- licensed private-repo structure and edition-specific project assets
|
|
78
109
|
- rules, skills, and docs used for AI vibe coding
|
|
79
110
|
|
|
80
111
|
For example:
|
|
81
112
|
|
|
82
113
|
- **Cabloy Basic** provides the `cabloy-basic` suites and the `cabloyBasicAdmin` / `cabloyBasicWeb` Zova flavors
|
|
83
|
-
- **Cabloy Start**
|
|
114
|
+
- **Cabloy Start** uses public flavors such as `cabloyStartAdmin` and `cabloyStartWeb`
|
|
84
115
|
|
|
85
116
|
## Why the repo markers matter
|
|
86
117
|
|
|
@@ -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
|
|
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.
|
|
@@ -28,7 +28,7 @@ That flexibility matters directly for Cabloy’s edition model:
|
|
|
28
28
|
|
|
29
29
|
- **Shared frontend engineering layer**: both editions follow the same Zova-centered frontend direction, with Vue, Vite, Quasar tooling, and related libraries
|
|
30
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
|
|
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
|
|
32
32
|
|
|
33
33
|
So docs and skills must separate shared Zova principles from edition-specific UI assumptions.
|
|
34
34
|
|