@timbenniks/contentstack-platform-app-scaffold 0.1.5 → 0.1.6

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/README.md ADDED
@@ -0,0 +1,141 @@
1
+ # @timbenniks/contentstack-platform-app-scaffold
2
+
3
+ CLI tool to scaffold full-stack Contentstack apps using the [Platform SDK](https://www.npmjs.com/package/@timbenniks/contentstack-platform-sdk). It creates a production-ready Next.js project with shadcn/ui, Tailwind v4, and Contentstack design tokens — wired up with CMA proxies, OAuth, Launch, and Brand Kit support.
4
+
5
+ ## What it does
6
+
7
+ 1. Runs `create-next-app@latest` with TypeScript, Tailwind v4, and App Router
8
+ 2. Initializes [shadcn/ui](https://ui.shadcn.com) with Button and Card components
9
+ 3. Adds `@timbenniks/contentstack-platform-sdk` as a dependency
10
+ 4. Overlays Contentstack-specific files based on the features you select:
11
+ - **CMA** — Server proxy at `/api/cma`, entries and assets pages with React hooks
12
+ - **OAuth** — Auth.js v5 integration with `createContentstackAuth`, sign-in/sign-out UI
13
+ - **Launch** — Server proxy at `/api/launch`, projects page
14
+ - **Brand Kit** — Server proxy at `/api/brandkit`, brand kits page
15
+ 5. Maps the SDK's Venus Design System tokens to shadcn CSS variables via `tokens.css`
16
+
17
+ ## Installation
18
+
19
+ ### As a Contentstack CLI plugin
20
+
21
+ ```bash
22
+ csdx plugins:install @timbenniks/contentstack-platform-app-scaffold
23
+ ```
24
+
25
+ Then run:
26
+
27
+ ```bash
28
+ csdx scaffold my-app
29
+ ```
30
+
31
+ ### Standalone with npx
32
+
33
+ ```bash
34
+ npx @timbenniks/contentstack-platform-app-scaffold scaffold my-app
35
+ ```
36
+
37
+ ### Global install
38
+
39
+ ```bash
40
+ npm install -g @timbenniks/contentstack-platform-app-scaffold
41
+ ```
42
+
43
+ ## Usage
44
+
45
+ ### Interactive mode
46
+
47
+ ```bash
48
+ csdx scaffold my-app
49
+ ```
50
+
51
+ The CLI will prompt you for:
52
+ - **Framework** — Next.js (more coming soon)
53
+ - **Region** — `us`, `eu`, `au`, `azure-na`, `azure-eu`, `gcp-na`, `gcp-eu`
54
+ - **Features** — CMA, OAuth, Launch, Brand Kit
55
+ - **OAuth scopes** — if OAuth is selected
56
+ - **Package manager** — npm, yarn, or pnpm
57
+
58
+ ### Non-interactive mode
59
+
60
+ Pass all options as flags to skip prompts:
61
+
62
+ ```bash
63
+ csdx scaffold my-app \
64
+ --framework nextjs \
65
+ --region eu \
66
+ --features cma,oauth \
67
+ --scopes "user:read,cm.entries.management:read,cm.assets.management:read" \
68
+ --package-manager pnpm
69
+ ```
70
+
71
+ ### Flags
72
+
73
+ | Flag | Description | Default |
74
+ |------|-------------|---------|
75
+ | `--framework` | Framework (`nextjs`) | prompted |
76
+ | `--region` | Contentstack region | prompted |
77
+ | `--features` | Comma-separated: `cma`, `oauth`, `launch`, `brandkit` | prompted |
78
+ | `--scopes` | Comma-separated OAuth scopes | prompted if oauth selected |
79
+ | `--package-manager` | `npm`, `yarn`, or `pnpm` | prompted |
80
+ | `--no-install` | Skip dependency installation | `false` |
81
+
82
+ ## Generated project structure
83
+
84
+ With all features enabled (`cma,oauth,launch,brandkit`):
85
+
86
+ ```
87
+ my-app/
88
+ ├── app/
89
+ │ ├── api/
90
+ │ │ ├── auth/[...nextauth]/route.ts # OAuth handlers
91
+ │ │ ├── cma/[...path]/route.ts # CMA proxy
92
+ │ │ ├── launch/[...path]/route.ts # Launch proxy
93
+ │ │ └── brandkit/[...path]/route.ts # Brand Kit proxy
94
+ │ ├── entries/page.tsx # Entries page (useEntries hook)
95
+ │ ├── assets/page.tsx # Assets page (useAssets hook)
96
+ │ ├── launch/page.tsx # Launch projects page
97
+ │ ├── brandkit/page.tsx # Brand Kits page
98
+ │ ├── globals.css # shadcn + Venus Design System tokens
99
+ │ ├── layout.tsx # Root layout with Providers
100
+ │ ├── page.tsx # Home with sign-in/sign-out
101
+ │ └── providers.tsx # ContentstackProvider wrapper
102
+ ├── lib/
103
+ │ └── auth.ts # createContentstackAuth config
104
+ ├── types/
105
+ │ └── next-auth.d.ts # Session type augmentation
106
+ ├── .env.example # All required env vars
107
+ ├── next.config.ts # SDK transpile config
108
+ └── package.json
109
+ ```
110
+
111
+ ## Environment variables
112
+
113
+ After scaffolding, copy `.env.example` to `.env.local` and fill in your credentials:
114
+
115
+ ```bash
116
+ cp .env.example .env.local
117
+ ```
118
+
119
+ The required variables depend on your feature selection:
120
+
121
+ | Variable | Required when |
122
+ |----------|--------------|
123
+ | `CONTENTSTACK_REGION` | Always |
124
+ | `CONTENTSTACK_API_KEY` | Always |
125
+ | `CONTENTSTACK_MANAGEMENT_TOKEN` | CMA without OAuth |
126
+ | `CONTENTSTACK_APP_ID` | OAuth |
127
+ | `CONTENTSTACK_CLIENT_ID` | OAuth |
128
+ | `CONTENTSTACK_CLIENT_SECRET` | OAuth |
129
+ | `AUTH_SECRET` | OAuth |
130
+ | `CONTENTSTACK_ORGANIZATION_UID` | Launch or Brand Kit |
131
+ | `CONTENTSTACK_AUTHTOKEN` | Launch/Brand Kit without OAuth |
132
+ | `CONTENTSTACK_BRAND_KIT_UID` | Brand Kit |
133
+
134
+ ## Requirements
135
+
136
+ - Node.js >= 18
137
+ - npm, yarn, or pnpm
138
+
139
+ ## License
140
+
141
+ MIT
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/services/prompts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EAKV,eAAe,EAChB,MAAM,UAAU,CAAA;AAyCjB,wBAAsB,UAAU,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,CAyFjF"}
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/services/prompts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EAKV,eAAe,EAChB,MAAM,UAAU,CAAA;AAiIjB,wBAAsB,UAAU,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,CAyFjF"}
@@ -52,23 +52,111 @@ const FEATURE_LABELS = {
52
52
  brandkit: "Brand Kit AI",
53
53
  };
54
54
  const OAUTH_SCOPES = [
55
- { value: "user:read", label: "user:read", hint: "Read user profile" },
56
- { value: "cm.content-types:read", label: "cm.content-types:read", hint: "Read content types" },
55
+ // User
56
+ { value: "user:read", label: "user:read", hint: "View user details (required)" },
57
+ // Content types
58
+ {
59
+ value: "cm.content-types.management:read",
60
+ label: "cm.content-types.management:read",
61
+ hint: "View all content types",
62
+ },
63
+ {
64
+ value: "cm.content-types.management:write",
65
+ label: "cm.content-types.management:write",
66
+ hint: "Create, update, remove content types",
67
+ },
68
+ // Entries
57
69
  {
58
70
  value: "cm.entries.management:read",
59
71
  label: "cm.entries.management:read",
60
- hint: "Read entries",
72
+ hint: "View all entries",
61
73
  },
62
74
  {
63
75
  value: "cm.entries.management:write",
64
76
  label: "cm.entries.management:write",
65
- hint: "Write entries",
77
+ hint: "Create, update, remove entries",
78
+ },
79
+ { value: "cm.entry:publish", label: "cm.entry:publish", hint: "Publish an entry" },
80
+ { value: "cm.entry:unpublish", label: "cm.entry:unpublish", hint: "Unpublish an entry" },
81
+ // Assets
82
+ {
83
+ value: "cm.assets.management:read",
84
+ label: "cm.assets.management:read",
85
+ hint: "View all assets",
66
86
  },
67
- { value: "cm.assets.management:read", label: "cm.assets.management:read", hint: "Read assets" },
68
87
  {
69
88
  value: "cm.assets.management:write",
70
89
  label: "cm.assets.management:write",
71
- hint: "Write assets",
90
+ hint: "Create, update, remove assets",
91
+ },
92
+ { value: "cm.asset:publish", label: "cm.asset:publish", hint: "Publish an asset" },
93
+ { value: "cm.asset:unpublish", label: "cm.asset:unpublish", hint: "Unpublish an asset" },
94
+ // Taxonomies
95
+ {
96
+ value: "cm.taxonomies.management:read",
97
+ label: "cm.taxonomies.management:read",
98
+ hint: "View all taxonomies",
99
+ },
100
+ {
101
+ value: "cm.taxonomies.management:write",
102
+ label: "cm.taxonomies.management:write",
103
+ hint: "Create, update, delete taxonomies",
104
+ },
105
+ { value: "cm.taxonomy.terms:read", label: "cm.taxonomy.terms:read", hint: "View taxonomy terms" },
106
+ {
107
+ value: "cm.taxonomy.terms:write",
108
+ label: "cm.taxonomy.terms:write",
109
+ hint: "Create, update, delete taxonomy terms",
110
+ },
111
+ // Environments & languages
112
+ {
113
+ value: "cm.environments.management:read",
114
+ label: "cm.environments.management:read",
115
+ hint: "View all environments",
116
+ },
117
+ {
118
+ value: "cm.languages.management:read",
119
+ label: "cm.languages.management:read",
120
+ hint: "View all languages",
121
+ },
122
+ // Workflows & releases
123
+ {
124
+ value: "cm.workflows.management:read",
125
+ label: "cm.workflows.management:read",
126
+ hint: "View all workflows",
127
+ },
128
+ {
129
+ value: "cm.releases.management:read",
130
+ label: "cm.releases.management:read",
131
+ hint: "View all releases",
132
+ },
133
+ {
134
+ value: "cm.releases.management:write",
135
+ label: "cm.releases.management:write",
136
+ hint: "Create, update, remove releases",
137
+ },
138
+ // Brand Kit
139
+ {
140
+ value: "brand-kits:read",
141
+ label: "brand-kits:read",
142
+ hint: "View Brand Kits and Voice Profiles",
143
+ },
144
+ {
145
+ value: "brand-kits:manage",
146
+ label: "brand-kits:manage",
147
+ hint: "Manage Brand Kits and Knowledge Vault",
148
+ },
149
+ // Launch
150
+ { value: "launch.projects:read", label: "launch.projects:read", hint: "Read Launch projects" },
151
+ {
152
+ value: "launch.projects:write",
153
+ label: "launch.projects:write",
154
+ hint: "Create, update Launch projects",
155
+ },
156
+ {
157
+ value: "launch.projects:delete",
158
+ label: "launch.projects:delete",
159
+ hint: "Delete Launch projects",
72
160
  },
73
161
  ];
74
162
  async function runPrompts(cliOptions) {
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/services/prompts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/services/prompts.ts"],"names":[],"mappings":"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"}
@@ -21,9 +21,7 @@
21
21
  "name": "framework",
22
22
  "hasDynamicHelp": false,
23
23
  "multiple": false,
24
- "options": [
25
- "nextjs"
26
- ],
24
+ "options": ["nextjs"],
27
25
  "type": "option"
28
26
  },
29
27
  "region": {
@@ -61,11 +59,7 @@
61
59
  "name": "package-manager",
62
60
  "hasDynamicHelp": false,
63
61
  "multiple": false,
64
- "options": [
65
- "npm",
66
- "yarn",
67
- "pnpm"
68
- ],
62
+ "options": ["npm", "yarn", "pnpm"],
69
63
  "type": "option"
70
64
  },
71
65
  "no-install": {
@@ -84,12 +78,8 @@
84
78
  "strict": true,
85
79
  "enableJsonFlag": false,
86
80
  "isESM": false,
87
- "relativePath": [
88
- "dist",
89
- "commands",
90
- "scaffold.js"
91
- ]
81
+ "relativePath": ["dist", "commands", "scaffold.js"]
92
82
  }
93
83
  },
94
- "version": "0.1.0"
95
- }
84
+ "version": "0.1.6"
85
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@timbenniks/contentstack-platform-app-scaffold",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "description": "Contentstack CLI plugin to scaffold apps using the Platform SDK",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -2,8 +2,10 @@
2
2
  @import "tw-animate-css";
3
3
  @import "shadcn/tailwind.css";
4
4
  @import "@timbenniks/contentstack-platform-sdk/ui/tokens.css";
5
+ {{#if isSystemTheme}}
5
6
 
6
7
  @custom-variant dark (&:is(.dark *));
8
+ {{/if}}
7
9
 
8
10
  @theme inline {
9
11
  --color-background: var(--background);
@@ -53,6 +55,42 @@
53
55
  * Token values come from @timbenniks/contentstack-platform-sdk/ui/tokens.css
54
56
  * See: https://github.com/timbenniks/contentstack-platform-sdk
55
57
  */
58
+ {{#if isDarkTheme}}
59
+ :root {
60
+ --radius: 0.5rem;
61
+ --background: var(--cs-color-brand-secondary-dark);
62
+ --foreground: var(--cs-color-base-white-5);
63
+ --card: var(--cs-color-brand-secondary-darker);
64
+ --card-foreground: var(--cs-color-base-white-5);
65
+ --popover: var(--cs-color-brand-secondary-darker);
66
+ --popover-foreground: var(--cs-color-base-white-5);
67
+ --primary: var(--cs-color-brand-primary-base);
68
+ --primary-foreground: var(--cs-color-base-white-5);
69
+ --secondary: var(--cs-color-brand-secondary-darker);
70
+ --secondary-foreground: var(--cs-color-base-white-10);
71
+ --muted: var(--cs-color-brand-secondary-darker);
72
+ --muted-foreground: var(--cs-color-brand-secondary-lighter);
73
+ --accent: var(--cs-color-brand-primary-dark);
74
+ --accent-foreground: var(--cs-color-brand-primary-light);
75
+ --destructive: var(--cs-color-brand-warning-base);
76
+ --border: var(--cs-color-brand-secondary-base);
77
+ --input: var(--cs-color-brand-secondary-base);
78
+ --ring: var(--cs-color-brand-primary-base);
79
+ --chart-1: var(--cs-color-brand-primary-light);
80
+ --chart-2: var(--cs-color-brand-success-base);
81
+ --chart-3: var(--cs-color-brand-info-base);
82
+ --chart-4: var(--cs-color-brand-attention-base);
83
+ --chart-5: var(--cs-color-accent-medium-orchid);
84
+ --sidebar: var(--cs-color-brand-secondary-darker);
85
+ --sidebar-foreground: var(--cs-color-base-white-5);
86
+ --sidebar-primary: var(--cs-color-brand-primary-base);
87
+ --sidebar-primary-foreground: var(--cs-color-base-white-5);
88
+ --sidebar-accent: var(--cs-color-brand-primary-dark);
89
+ --sidebar-accent-foreground: var(--cs-color-brand-primary-light);
90
+ --sidebar-border: var(--cs-color-brand-secondary-base);
91
+ --sidebar-ring: var(--cs-color-brand-primary-base);
92
+ }
93
+ {{else}}
56
94
  :root {
57
95
  --radius: 0.5rem;
58
96
  --background: var(--cs-color-base-white-5);
@@ -87,6 +125,45 @@
87
125
  --sidebar-border: var(--cs-color-brand-secondary-lightest);
88
126
  --sidebar-ring: var(--cs-color-brand-primary-base);
89
127
  }
128
+ {{#if isSystemTheme}}
129
+
130
+ @media (prefers-color-scheme: dark) {
131
+ :root {
132
+ --background: var(--cs-color-brand-secondary-dark);
133
+ --foreground: var(--cs-color-base-white-5);
134
+ --card: var(--cs-color-brand-secondary-darker);
135
+ --card-foreground: var(--cs-color-base-white-5);
136
+ --popover: var(--cs-color-brand-secondary-darker);
137
+ --popover-foreground: var(--cs-color-base-white-5);
138
+ --primary: var(--cs-color-brand-primary-base);
139
+ --primary-foreground: var(--cs-color-base-white-5);
140
+ --secondary: var(--cs-color-brand-secondary-darker);
141
+ --secondary-foreground: var(--cs-color-base-white-10);
142
+ --muted: var(--cs-color-brand-secondary-darker);
143
+ --muted-foreground: var(--cs-color-brand-secondary-lighter);
144
+ --accent: var(--cs-color-brand-primary-dark);
145
+ --accent-foreground: var(--cs-color-brand-primary-light);
146
+ --destructive: var(--cs-color-brand-warning-base);
147
+ --border: var(--cs-color-brand-secondary-base);
148
+ --input: var(--cs-color-brand-secondary-base);
149
+ --ring: var(--cs-color-brand-primary-base);
150
+ --chart-1: var(--cs-color-brand-primary-light);
151
+ --chart-2: var(--cs-color-brand-success-base);
152
+ --chart-3: var(--cs-color-brand-info-base);
153
+ --chart-4: var(--cs-color-brand-attention-base);
154
+ --chart-5: var(--cs-color-accent-medium-orchid);
155
+ --sidebar: var(--cs-color-brand-secondary-darker);
156
+ --sidebar-foreground: var(--cs-color-base-white-5);
157
+ --sidebar-primary: var(--cs-color-brand-primary-base);
158
+ --sidebar-primary-foreground: var(--cs-color-base-white-5);
159
+ --sidebar-accent: var(--cs-color-brand-primary-dark);
160
+ --sidebar-accent-foreground: var(--cs-color-brand-primary-light);
161
+ --sidebar-border: var(--cs-color-brand-secondary-base);
162
+ --sidebar-ring: var(--cs-color-brand-primary-base);
163
+ }
164
+ }
165
+ {{/if}}
166
+ {{/if}}
90
167
 
91
168
  @layer base {
92
169
  * {
@@ -26,7 +26,7 @@ export default function RootLayout({
26
26
  children: React.ReactNode
27
27
  }>) {
28
28
  return (
29
- <html lang="en">
29
+ <html lang="en"{{#if themeClass}} className="{{themeClass}}"{{/if}}>
30
30
  <body className={`${geistSans.variable} ${geistMono.variable} antialiased`}>
31
31
  {{#if hasClientFeatures}}<Providers>{children}</Providers>{{else}}{children}{{/if}}
32
32
  </body>