@shivasankaran18/stackd 1.1.0

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 (109) hide show
  1. package/.github/workflows/ci.yml +30 -0
  2. package/LICENSE +21 -0
  3. package/README.md +115 -0
  4. package/apps/cli/package.json +32 -0
  5. package/apps/cli/src/cli.ts +271 -0
  6. package/apps/cli/src/commands/create.ts +162 -0
  7. package/apps/cli/src/scripts/Auth/jwt.ts +83 -0
  8. package/apps/cli/src/scripts/Auth/nextAuth.ts +146 -0
  9. package/apps/cli/src/scripts/Auth/passport.ts +234 -0
  10. package/apps/cli/src/scripts/backend/django.ts +30 -0
  11. package/apps/cli/src/scripts/backend/expressjs.ts +72 -0
  12. package/apps/cli/src/scripts/backend/expressts.ts +95 -0
  13. package/apps/cli/src/scripts/frontend/angularjs.ts +0 -0
  14. package/apps/cli/src/scripts/frontend/angularts.ts +29 -0
  15. package/apps/cli/src/scripts/frontend/nextjs.ts +72 -0
  16. package/apps/cli/src/scripts/frontend/reactjs.ts +36 -0
  17. package/apps/cli/src/scripts/frontend/reactts.ts +34 -0
  18. package/apps/cli/src/scripts/frontend/vuejs.ts +43 -0
  19. package/apps/cli/src/scripts/frontend/vuets.ts +53 -0
  20. package/apps/cli/src/scripts/orms/drizzleSetup.ts +102 -0
  21. package/apps/cli/src/scripts/orms/mongoSetup.ts +68 -0
  22. package/apps/cli/src/scripts/orms/prismaSetup.ts +14 -0
  23. package/apps/cli/src/scripts/ui/shadcn.ts +228 -0
  24. package/apps/cli/src/scripts/ui/tailwindcss.ts +126 -0
  25. package/apps/cli/tsconfig.json +111 -0
  26. package/apps/web/app/api/auth/[...nextauth]/route.ts +7 -0
  27. package/apps/web/app/api/scaffold/route.ts +274 -0
  28. package/apps/web/app/favicon.ico +0 -0
  29. package/apps/web/app/fonts/GeistMonoVF.woff +0 -0
  30. package/apps/web/app/fonts/GeistVF.woff +0 -0
  31. package/apps/web/app/globals.css +158 -0
  32. package/apps/web/app/home/page.tsx +22 -0
  33. package/apps/web/app/layout.tsx +35 -0
  34. package/apps/web/app/page.module.css +188 -0
  35. package/apps/web/app/page.tsx +1 -0
  36. package/apps/web/app/providers.tsx +9 -0
  37. package/apps/web/app/scaffold/page.tsx +472 -0
  38. package/apps/web/components/Sidebar.tsx +108 -0
  39. package/apps/web/components/theme-provider.tsx +9 -0
  40. package/apps/web/components/ui/button.tsx +57 -0
  41. package/apps/web/components/ui/card.tsx +76 -0
  42. package/apps/web/components/ui/dropdown-menu.tsx +200 -0
  43. package/apps/web/components/ui/input.tsx +22 -0
  44. package/apps/web/components/ui/label.tsx +26 -0
  45. package/apps/web/components/ui/scroll-area.tsx +48 -0
  46. package/apps/web/components/ui/sonner.tsx +31 -0
  47. package/apps/web/components/ui/steps.tsx +36 -0
  48. package/apps/web/components/ui/switch.tsx +29 -0
  49. package/apps/web/components.json +21 -0
  50. package/apps/web/eslint.config.js +4 -0
  51. package/apps/web/lib/auth.ts +35 -0
  52. package/apps/web/lib/redis.ts +13 -0
  53. package/apps/web/lib/utils.ts +8 -0
  54. package/apps/web/next-env.d.ts +5 -0
  55. package/apps/web/next.config.js +4 -0
  56. package/apps/web/package.json +52 -0
  57. package/apps/web/postcss.config.js +6 -0
  58. package/apps/web/public/file-text.svg +3 -0
  59. package/apps/web/public/globe.svg +10 -0
  60. package/apps/web/public/next.svg +1 -0
  61. package/apps/web/public/turborepo-dark.svg +19 -0
  62. package/apps/web/public/turborepo-light.svg +19 -0
  63. package/apps/web/public/vercel.svg +10 -0
  64. package/apps/web/public/window.svg +3 -0
  65. package/apps/web/tailwind.config.js +65 -0
  66. package/apps/web/tsconfig.json +23 -0
  67. package/apps/web/types/global.d.ts +4 -0
  68. package/docker-compose.yml +14 -0
  69. package/package.json +55 -0
  70. package/packages/eslint-config/README.md +3 -0
  71. package/packages/eslint-config/base.js +32 -0
  72. package/packages/eslint-config/next.js +49 -0
  73. package/packages/eslint-config/package.json +24 -0
  74. package/packages/eslint-config/react-internal.js +39 -0
  75. package/packages/scripts/Auth/jwt.ts +83 -0
  76. package/packages/scripts/Auth/nextAuth.ts +146 -0
  77. package/packages/scripts/Auth/passport.ts +234 -0
  78. package/packages/scripts/backend/django.ts +30 -0
  79. package/packages/scripts/backend/expressjs.ts +72 -0
  80. package/packages/scripts/backend/expressts.ts +95 -0
  81. package/packages/scripts/frontend/angularjs.ts +0 -0
  82. package/packages/scripts/frontend/angularts.ts +29 -0
  83. package/packages/scripts/frontend/nextjs.ts +72 -0
  84. package/packages/scripts/frontend/reactjs.ts +36 -0
  85. package/packages/scripts/frontend/reactts.ts +34 -0
  86. package/packages/scripts/frontend/vuejs.ts +43 -0
  87. package/packages/scripts/frontend/vuets.ts +53 -0
  88. package/packages/scripts/orms/drizzleSetup.ts +102 -0
  89. package/packages/scripts/orms/mongoSetup.ts +68 -0
  90. package/packages/scripts/orms/prismaSetup.ts +14 -0
  91. package/packages/scripts/ui/shadcn.ts +228 -0
  92. package/packages/scripts/ui/tailwindcss.ts +126 -0
  93. package/packages/typescript-config/base.json +19 -0
  94. package/packages/typescript-config/nextjs.json +12 -0
  95. package/packages/typescript-config/package.json +9 -0
  96. package/packages/typescript-config/react-library.json +7 -0
  97. package/packages/ui/eslint.config.mjs +4 -0
  98. package/packages/ui/package.json +27 -0
  99. package/packages/ui/src/button.tsx +20 -0
  100. package/packages/ui/src/card.tsx +27 -0
  101. package/packages/ui/src/code.tsx +11 -0
  102. package/packages/ui/tsconfig.json +8 -0
  103. package/packages/ui/turbo/generators/config.ts +30 -0
  104. package/packages/ui/turbo/generators/templates/component.hbs +8 -0
  105. package/stackd.ts +134 -0
  106. package/start-web.sh +5 -0
  107. package/tsconfig.json +111 -0
  108. package/tsconfig.tsbuildinfo +1 -0
  109. package/turbo.json +21 -0
@@ -0,0 +1,158 @@
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
4
+ @layer base {
5
+ :root {
6
+ --background: 210 40% 98%;
7
+ --foreground: 222.2 84% 4.9%;
8
+ --card: 0 0% 100%;
9
+ --card-foreground: 222.2 84% 4.9%;
10
+ --popover: 0 0% 100%;
11
+ --popover-foreground: 222.2 84% 4.9%;
12
+ --primary: 184 100% 40%;
13
+ --primary-foreground: 210 40% 98%;
14
+ --secondary: 210 40% 96.1%;
15
+ --secondary-foreground: 222.2 47.4% 11.2%;
16
+ --muted: 210 40% 96.1%;
17
+ --muted-foreground: 215.4 16.3% 46.9%;
18
+ --accent: 184 100% 40%;
19
+ --accent-foreground: 222.2 47.4% 11.2%;
20
+ --destructive: 0 84.2% 60.2%;
21
+ --destructive-foreground: 210 40% 98%;
22
+ --border: 214.3 31.8% 91.4%;
23
+ --input: 214.3 31.8% 91.4%;
24
+ --ring: 184 100% 40%;
25
+ --chart-1: 12 76% 61%;
26
+ --chart-2: 173 58% 39%;
27
+ --chart-3: 197 37% 24%;
28
+ --chart-4: 43 74% 66%;
29
+ --chart-5: 27 87% 67%;
30
+ --radius: 0.5rem
31
+ }
32
+ .dark {
33
+ --background: 222.2 84% 4.9%;
34
+ --foreground: 210 40% 98%;
35
+ --card: 222.2 84% 4.9%;
36
+ --card-foreground: 210 40% 98%;
37
+ --popover: 222.2 84% 4.9%;
38
+ --popover-foreground: 210 40% 98%;
39
+ --primary: 184 100% 50%;
40
+ --primary-foreground: 222.2 47.4% 11.2%;
41
+ --secondary: 217.2 32.6% 17.5%;
42
+ --secondary-foreground: 210 40% 98%;
43
+ --muted: 217.2 32.6% 17.5%;
44
+ --muted-foreground: 215 20.2% 65.1%;
45
+ --accent: 184 100% 50%;
46
+ --accent-foreground: 210 40% 98%;
47
+ --destructive: 0 62.8% 30.6%;
48
+ --destructive-foreground: 210 40% 98%;
49
+ --border: 217.2 32.6% 17.5%;
50
+ --input: 217.2 32.6% 17.5%;
51
+ --ring: 184 100% 50%;
52
+ --chart-1: 220 70% 50%;
53
+ --chart-2: 160 60% 45%;
54
+ --chart-3: 30 80% 55%;
55
+ --chart-4: 280 65% 60%;
56
+ --chart-5: 340 75% 55%
57
+ }
58
+ }
59
+ @layer base {
60
+ * {
61
+ @apply border-border;
62
+ }
63
+ body {
64
+ @apply bg-background text-foreground;
65
+ }
66
+ }
67
+
68
+ @layer base {
69
+ * {
70
+ @apply border-border outline-ring/50;
71
+ }
72
+ body {
73
+ @apply bg-background text-foreground;
74
+ }
75
+ }
76
+
77
+ /* Add custom styles for the cards */
78
+ .card {
79
+ @apply transition-all duration-300;
80
+ animation: scaleIn 0.3s ease-out;
81
+ background: linear-gradient(to bottom right, var(--card), color-mix(in srgb, var(--card) 95%, var(--primary)));
82
+ border: 1px solid color-mix(in srgb, var(--primary) 20%, transparent);
83
+ }
84
+
85
+ .card:hover {
86
+ transform: translateY(-2px);
87
+ box-shadow: 0 8px 24px -8px color-mix(in srgb, var(--primary) 20%, transparent);
88
+ background: linear-gradient(to bottom right, color-mix(in srgb, var(--card) 98%, var(--primary)), var(--card));
89
+ border-color: color-mix(in srgb, var(--primary) 40%, transparent);
90
+ }
91
+
92
+ /* Update the navbar styling */
93
+ .navbar {
94
+ background: linear-gradient(to bottom, color-mix(in srgb, var(--background) 95%, var(--primary)), var(--background));
95
+ border-bottom: 1px solid color-mix(in srgb, var(--primary) 20%, transparent);
96
+ }
97
+
98
+ /* Add these animation keyframes */
99
+ @keyframes fadeInUp {
100
+ from {
101
+ opacity: 0;
102
+ transform: translateY(20px);
103
+ }
104
+ to {
105
+ opacity: 1;
106
+ transform: translateY(0);
107
+ }
108
+ }
109
+
110
+ @keyframes scaleIn {
111
+ from {
112
+ opacity: 0;
113
+ transform: scale(0.9);
114
+ }
115
+ to {
116
+ opacity: 1;
117
+ transform: scale(1);
118
+ }
119
+ }
120
+
121
+ /* Add staggered animation for card grid */
122
+ .card-grid {
123
+ display: grid;
124
+ }
125
+
126
+ .card-grid > * {
127
+ animation: fadeInUp 0.5s ease-out backwards;
128
+ }
129
+
130
+ /* Add staggered delay for each card */
131
+ .card-grid > *:nth-child(1) { animation-delay: 0.1s; }
132
+ .card-grid > *:nth-child(2) { animation-delay: 0.2s; }
133
+ .card-grid > *:nth-child(3) { animation-delay: 0.3s; }
134
+ .card-grid > *:nth-child(4) { animation-delay: 0.4s; }
135
+ .card-grid > *:nth-child(5) { animation-delay: 0.5s; }
136
+ .card-grid > *:nth-child(6) { animation-delay: 0.6s; }
137
+
138
+ /* Add animation for the selected state */
139
+ .card-selected {
140
+ animation: pulseGlow 2s infinite;
141
+ }
142
+
143
+ @keyframes pulseGlow {
144
+ 0% {
145
+ box-shadow: 0 0 0 0 color-mix(in srgb, var(--primary) 30%, transparent);
146
+ }
147
+ 70% {
148
+ box-shadow: 0 0 0 10px color-mix(in srgb, var(--primary) 0%, transparent);
149
+ }
150
+ 100% {
151
+ box-shadow: 0 0 0 0 color-mix(in srgb, var(--primary) 0%, transparent);
152
+ }
153
+ }
154
+
155
+ /* Add smooth transitions for all interactive elements */
156
+ .interactive-element {
157
+ @apply transition-all duration-300 ease-in-out;
158
+ }
@@ -0,0 +1,22 @@
1
+ import { Button } from "@/components/ui/button"
2
+ import Link from "next/link"
3
+ import { ArrowRight } from "lucide-react"
4
+
5
+ export default function Home() {
6
+ return (
7
+ <main className="flex min-h-screen flex-col items-center justify-center p-24">
8
+ <div className="text-center">
9
+ <h1 className="text-4xl font-bold mb-4">Project Scaffolder</h1>
10
+ <p className="text-xl text-muted-foreground mb-8">
11
+ Create your full-stack application in minutes
12
+ </p>
13
+ <Link href="/scaffold">
14
+ <Button size="lg">
15
+ Get Started
16
+ <ArrowRight className="ml-2 h-4 w-4" />
17
+ </Button>
18
+ </Link>
19
+ </div>
20
+ </main>
21
+ )
22
+ }
@@ -0,0 +1,35 @@
1
+ import type { Metadata } from "next";
2
+ import { Inter } from "next/font/google";
3
+ import "./globals.css";
4
+ import { JSX } from "react";
5
+ import { ThemeProvider } from "@/components/theme-provider";
6
+ import { Toaster } from "@/components/ui/sonner";
7
+
8
+ const inter = Inter({ subsets: ["latin"] });
9
+
10
+ export const metadata: Metadata = {
11
+ title: "Stack'd - Full Stack Project Generator",
12
+ description: "Generate full-stack applications with ease",
13
+ };
14
+
15
+ export default function RootLayout({
16
+ children,
17
+ }: {
18
+ children: React.ReactNode;
19
+ }): JSX.Element {
20
+ return (
21
+ <html lang="en" suppressHydrationWarning>
22
+ <body className={inter.className}>
23
+ <ThemeProvider
24
+ attribute="class"
25
+ defaultTheme="system"
26
+ enableSystem
27
+ disableTransitionOnChange
28
+ >
29
+ <main>{children}</main>
30
+ <Toaster />
31
+ </ThemeProvider>
32
+ </body>
33
+ </html>
34
+ );
35
+ }
@@ -0,0 +1,188 @@
1
+ .page {
2
+ --gray-rgb: 0, 0, 0;
3
+ --gray-alpha-200: rgba(var(--gray-rgb), 0.08);
4
+ --gray-alpha-100: rgba(var(--gray-rgb), 0.05);
5
+
6
+ --button-primary-hover: #383838;
7
+ --button-secondary-hover: #f2f2f2;
8
+
9
+ display: grid;
10
+ grid-template-rows: 20px 1fr 20px;
11
+ align-items: center;
12
+ justify-items: center;
13
+ min-height: 100svh;
14
+ padding: 80px;
15
+ gap: 64px;
16
+ font-synthesis: none;
17
+ }
18
+
19
+ @media (prefers-color-scheme: dark) {
20
+ .page {
21
+ --gray-rgb: 255, 255, 255;
22
+ --gray-alpha-200: rgba(var(--gray-rgb), 0.145);
23
+ --gray-alpha-100: rgba(var(--gray-rgb), 0.06);
24
+
25
+ --button-primary-hover: #ccc;
26
+ --button-secondary-hover: #1a1a1a;
27
+ }
28
+ }
29
+
30
+ .main {
31
+ display: flex;
32
+ flex-direction: column;
33
+ gap: 32px;
34
+ grid-row-start: 2;
35
+ }
36
+
37
+ .main ol {
38
+ font-family: var(--font-geist-mono);
39
+ padding-left: 0;
40
+ margin: 0;
41
+ font-size: 14px;
42
+ line-height: 24px;
43
+ letter-spacing: -0.01em;
44
+ list-style-position: inside;
45
+ }
46
+
47
+ .main li:not(:last-of-type) {
48
+ margin-bottom: 8px;
49
+ }
50
+
51
+ .main code {
52
+ font-family: inherit;
53
+ background: var(--gray-alpha-100);
54
+ padding: 2px 4px;
55
+ border-radius: 4px;
56
+ font-weight: 600;
57
+ }
58
+
59
+ .ctas {
60
+ display: flex;
61
+ gap: 16px;
62
+ }
63
+
64
+ .ctas a {
65
+ appearance: none;
66
+ border-radius: 128px;
67
+ height: 48px;
68
+ padding: 0 20px;
69
+ border: none;
70
+ font-family: var(--font-geist-sans);
71
+ border: 1px solid transparent;
72
+ transition: background 0.2s, color 0.2s, border-color 0.2s;
73
+ cursor: pointer;
74
+ display: flex;
75
+ align-items: center;
76
+ justify-content: center;
77
+ font-size: 16px;
78
+ line-height: 20px;
79
+ font-weight: 500;
80
+ }
81
+
82
+ a.primary {
83
+ background: var(--foreground);
84
+ color: var(--background);
85
+ gap: 8px;
86
+ }
87
+
88
+ a.secondary {
89
+ border-color: var(--gray-alpha-200);
90
+ min-width: 180px;
91
+ }
92
+
93
+ button.secondary {
94
+ appearance: none;
95
+ border-radius: 128px;
96
+ height: 48px;
97
+ padding: 0 20px;
98
+ border: none;
99
+ font-family: var(--font-geist-sans);
100
+ border: 1px solid transparent;
101
+ transition: background 0.2s, color 0.2s, border-color 0.2s;
102
+ cursor: pointer;
103
+ display: flex;
104
+ align-items: center;
105
+ justify-content: center;
106
+ font-size: 16px;
107
+ line-height: 20px;
108
+ font-weight: 500;
109
+ background: transparent;
110
+ border-color: var(--gray-alpha-200);
111
+ min-width: 180px;
112
+ }
113
+
114
+ .footer {
115
+ font-family: var(--font-geist-sans);
116
+ grid-row-start: 3;
117
+ display: flex;
118
+ gap: 24px;
119
+ }
120
+
121
+ .footer a {
122
+ display: flex;
123
+ align-items: center;
124
+ gap: 8px;
125
+ }
126
+
127
+ .footer img {
128
+ flex-shrink: 0;
129
+ }
130
+
131
+ /* Enable hover only on non-touch devices */
132
+ @media (hover: hover) and (pointer: fine) {
133
+ a.primary:hover {
134
+ background: var(--button-primary-hover);
135
+ border-color: transparent;
136
+ }
137
+
138
+ a.secondary:hover {
139
+ background: var(--button-secondary-hover);
140
+ border-color: transparent;
141
+ }
142
+
143
+ .footer a:hover {
144
+ text-decoration: underline;
145
+ text-underline-offset: 4px;
146
+ }
147
+ }
148
+
149
+ @media (max-width: 600px) {
150
+ .page {
151
+ padding: 32px;
152
+ padding-bottom: 80px;
153
+ }
154
+
155
+ .main {
156
+ align-items: center;
157
+ }
158
+
159
+ .main ol {
160
+ text-align: center;
161
+ }
162
+
163
+ .ctas {
164
+ flex-direction: column;
165
+ }
166
+
167
+ .ctas a {
168
+ font-size: 14px;
169
+ height: 40px;
170
+ padding: 0 16px;
171
+ }
172
+
173
+ a.secondary {
174
+ min-width: auto;
175
+ }
176
+
177
+ .footer {
178
+ flex-wrap: wrap;
179
+ align-items: center;
180
+ justify-content: center;
181
+ }
182
+ }
183
+
184
+ @media (prefers-color-scheme: dark) {
185
+ .logo {
186
+ filter: invert();
187
+ }
188
+ }
@@ -0,0 +1 @@
1
+ export { default } from './scaffold/page';
@@ -0,0 +1,9 @@
1
+ "use client"
2
+
3
+ import { SessionProvider } from "next-auth/react";
4
+
5
+ export const Providers = ({children}: {children: React.ReactNode}) => {
6
+ return <SessionProvider>
7
+ {children}
8
+ </SessionProvider>
9
+ }