@@ -44,6 +44,9 @@ type OptionKey =
4444 | "githubActions"
4545 | "formattingPreCommitHook"
4646 | "reactQuery"
47+ | "plausible"
48+ | "vercel"
49+ | "netlify"
4750
4851const options = {
4952 pnpm : { key : "pnpm" , value : "pnpm" , label : "pnpm" } ,
@@ -106,6 +109,21 @@ const options = {
106109 value : "react-query" ,
107110 label : "React Query" ,
108111 } ,
112+ plausible : {
113+ key : "plausible" ,
114+ value : "plausible" ,
115+ label : "Plausible" ,
116+ } ,
117+ vercel : {
118+ key : "vercel" ,
119+ value : "vercel" ,
120+ label : "Vercel" ,
121+ } ,
122+ netlify : {
123+ key : "netlify" ,
124+ value : "netlify" ,
125+ label : "Netlify" ,
126+ } ,
109127} satisfies {
110128 [ Key in OptionKey ] : {
111129 key : Key
@@ -150,6 +168,11 @@ const continuousIntegrationOptionKeys = [
150168const serverStateManagementLibraryOptionKeys = [
151169 optionKeys . reactQuery ,
152170] satisfies OptionKey [ ]
171+ const analyticsOptionKeys = [ optionKeys . plausible ] satisfies OptionKey [ ]
172+ const deploymentOptionKeys = [
173+ optionKeys . vercel ,
174+ optionKeys . netlify ,
175+ ] satisfies OptionKey [ ]
153176
154177type ProjectName = string
155178type PackageManager = ( typeof packageManagerOptionKeys ) [ number ]
@@ -162,6 +185,9 @@ type Animation = (typeof animationOptionKeys)[number]
162185type ContinuousIntegration = ( typeof continuousIntegrationOptionKeys ) [ number ]
163186type ServerStateManagementLibrary =
164187 ( typeof serverStateManagementLibraryOptionKeys ) [ number ]
188+ type Analytics = ( typeof analyticsOptionKeys ) [ number ]
189+ type Deployment = ( typeof deploymentOptionKeys ) [ number ]
190+
165191type TechnologiesFormData = {
166192 projectName : ProjectName
167193 packageManager : PackageManager
@@ -173,6 +199,8 @@ type TechnologiesFormData = {
173199 animation : Animation [ ]
174200 continuousIntegration : ContinuousIntegration [ ]
175201 serverStateManagementLibraries : ServerStateManagementLibrary [ ]
202+ analytics : Analytics [ ]
203+ deployment : Deployment [ ]
176204}
177205const defaultFormData : TechnologiesFormData = {
178206 projectName : "my-app" ,
@@ -185,6 +213,8 @@ const defaultFormData: TechnologiesFormData = {
185213 animation : [ optionKeys . framerMotion ] ,
186214 continuousIntegration : [ optionKeys . githubActions ] ,
187215 serverStateManagementLibraries : [ optionKeys . reactQuery ] ,
216+ analytics : [ ] ,
217+ deployment : [ optionKeys . vercel ] ,
188218}
189219const formDataKeys = objectToKeyToKeyMap ( defaultFormData )
190220
@@ -201,6 +231,8 @@ const categoryLabels = {
201231 animation : "Animation" ,
202232 continuousIntegration : "Continuous Integration" ,
203233 serverStateManagementLibraries : "Server State Management" ,
234+ analytics : "Analytics" ,
235+ deployment : "Deployment" ,
204236} as const
205237
206238export const TechnologiesForm : React . FC = ( ) => {
@@ -220,7 +252,7 @@ export const TechnologiesForm: React.FC = () => {
220252 formData
221253 ) => {
222254 const calculateCommand = ( formData : TechnologiesFormData ) => {
223- const args = [ "npx" , "create-next-stack@0.2.7 " ]
255+ const args = [ "npx" , "create-next-stack@0.2.8 " ]
224256
225257 args . push ( `--package-manager=${ options [ formData . packageManager ] . value } ` )
226258 args . push ( `--styling=${ options [ formData . styling ] . value } ` )
@@ -237,6 +269,8 @@ export const TechnologiesForm: React.FC = () => {
237269 pushArgs ( formData . animation )
238270 pushArgs ( formData . continuousIntegration )
239271 pushArgs ( formData . serverStateManagementLibraries )
272+ pushArgs ( formData . analytics )
273+ pushArgs ( formData . deployment )
240274
241275 const projectNameSegments = formData . projectName . split ( "/" )
242276 const lastPartOfProjectName = projectNameSegments . pop ( ) !
@@ -257,7 +291,9 @@ export const TechnologiesForm: React.FC = () => {
257291 | "iconLibraries"
258292 | "animation"
259293 | "continuousIntegration"
260- | "serverStateManagementLibraries" ,
294+ | "serverStateManagementLibraries"
295+ | "analytics"
296+ | "deployment" ,
261297 optionKeys : Array < keyof typeof options > ,
262298 validators ?: {
263299 [ key in keyof typeof options ] ?: Array < {
@@ -409,6 +445,16 @@ export const TechnologiesForm: React.FC = () => {
409445 serverStateManagementLibraryOptionKeys
410446 ) }
411447 </ Flex >
448+
449+ < Flex direction = "column" gap = "4" >
450+ < Heading as = "h3" size = "md" >
451+ { categoryLabels . analytics }
452+ </ Heading >
453+ { CheckboxesOfOptionKeys (
454+ formDataKeys . analytics ,
455+ analyticsOptionKeys
456+ ) }
457+ </ Flex >
412458 </ Flex >
413459
414460 < Flex direction = "column" gap = "8" flexBasis = "100%" >
@@ -543,6 +589,16 @@ export const TechnologiesForm: React.FC = () => {
543589 continuousIntegrationOptionKeys
544590 ) }
545591 </ Flex >
592+
593+ < Flex direction = "column" gap = "4" >
594+ < Heading as = "h3" size = "md" >
595+ { categoryLabels . deployment }
596+ </ Heading >
597+ { CheckboxesOfOptionKeys (
598+ formDataKeys . deployment ,
599+ deploymentOptionKeys
600+ ) }
601+ </ Flex >
546602 </ Flex >
547603 </ Flex >
548604
0 commit comments