create-atsdc-stack 1.1.0 → 1.2.1

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 (48) hide show
  1. package/.claude/settings.local.json +3 -1
  2. package/CLAUDE.md +236 -215
  3. package/CONTRIBUTING.md +342 -342
  4. package/INSTALLATION.md +359 -359
  5. package/LICENSE +201 -201
  6. package/README.md +405 -405
  7. package/app/.env.example +17 -17
  8. package/app/.github/labeler.yml +61 -0
  9. package/app/.github/workflows/browser-tests.yml +101 -0
  10. package/app/.github/workflows/check.yml +24 -0
  11. package/app/.github/workflows/greetings.yml +16 -0
  12. package/app/.github/workflows/label.yml +22 -0
  13. package/app/.github/workflows/stale.yml +27 -0
  14. package/app/.github/workflows/summary.yml +34 -0
  15. package/app/.stylelintrc.json +8 -0
  16. package/app/README.md +251 -251
  17. package/app/astro.config.mjs +83 -83
  18. package/app/drizzle.config.ts +16 -16
  19. package/app/package.json +66 -52
  20. package/app/playwright.config.ts +27 -0
  21. package/app/public/manifest.webmanifest +36 -36
  22. package/app/pwa-assets.config.ts +8 -0
  23. package/app/src/components/Card.astro +36 -36
  24. package/app/src/db/initialize.ts +107 -107
  25. package/app/src/db/schema.ts +72 -72
  26. package/app/src/db/validations.ts +158 -158
  27. package/app/src/layouts/Layout.astro +63 -63
  28. package/app/src/lib/config.ts +36 -36
  29. package/app/src/lib/content-converter.ts +141 -141
  30. package/app/src/lib/dom-utils.ts +230 -230
  31. package/app/src/lib/exa-search.ts +269 -269
  32. package/app/src/pages/api/chat.ts +91 -91
  33. package/app/src/pages/api/posts.ts +350 -350
  34. package/app/src/pages/index.astro +87 -87
  35. package/app/src/styles/components/button.scss +152 -152
  36. package/app/src/styles/components/card.scss +180 -180
  37. package/app/src/styles/components/form.scss +240 -240
  38. package/app/src/styles/global.scss +141 -141
  39. package/app/src/styles/pages/index.scss +80 -80
  40. package/app/src/styles/reset.scss +83 -83
  41. package/app/src/styles/variables/globals.scss +96 -96
  42. package/app/src/styles/variables/mixins.scss +238 -238
  43. package/app/tests/browser.test.nopause.ts +10 -0
  44. package/app/tests/browser.test.ts +13 -0
  45. package/bin/cli.js +1151 -1151
  46. package/package.json +8 -6
  47. package/app/.astro/settings.json +0 -5
  48. package/app/.astro/types.d.ts +0 -1
@@ -1,87 +1,87 @@
1
- ---
2
- /**
3
- * Home Page
4
- * Demonstrates SCSS architecture:
5
- * - No inline styles
6
- * - All styles imported from external SCSS file
7
- * - Component-specific styles in separate files
8
- */
9
- import Layout from '@/layouts/Layout.astro';
10
- import { siteConfig } from '@/lib/config';
11
-
12
- // Import component-specific styles
13
- import '@/styles/components/button.scss';
14
- import '@/styles/pages/index.scss';
15
- ---
16
-
17
- <Layout pageTitle="Home">
18
- <main class="home">
19
- <div class="container">
20
- <header class="home__header">
21
- <h1 class="home__title">Welcome to {siteConfig.stackName}</h1>
22
- <p class="home__subtitle">
23
- A production-ready full-stack framework combining the best modern web technologies
24
- </p>
25
- </header>
26
-
27
- <section class="home__features">
28
- <div class="home__feature card">
29
- <h3>⚡ Astro</h3>
30
- <p>Lightning-fast static site generation with dynamic capabilities</p>
31
- </div>
32
-
33
- <div class="home__feature card">
34
- <h3>📘 TypeScript</h3>
35
- <p>Full type safety across your entire application</p>
36
- </div>
37
-
38
- <div class="home__feature card">
39
- <h3>🗄️ Drizzle ORM</h3>
40
- <p>Type-safe database operations with PostgreSQL</p>
41
- </div>
42
-
43
- <div class="home__feature card">
44
- <h3>🔐 Clerk</h3>
45
- <p>Complete authentication and user management</p>
46
- </div>
47
-
48
- <div class="home__feature card">
49
- <h3>🎨 SCSS</h3>
50
- <p>Powerful styling with variables, mixins, and modules</p>
51
- </div>
52
-
53
- <div class="home__feature card">
54
- <h3>✅ Zod</h3>
55
- <p>Runtime validation for API routes and forms</p>
56
- </div>
57
-
58
- <div class="home__feature card">
59
- <h3>🤖 Vercel AI SDK</h3>
60
- <p>Seamless integration with AI language models</p>
61
- </div>
62
-
63
- <div class="home__feature card">
64
- <h3>🔑 NanoID</h3>
65
- <p>Secure, URL-friendly unique identifiers</p>
66
- </div>
67
-
68
- <div class="home__feature card">
69
- <h3>📱 PWA</h3>
70
- <p>Progressive Web App with offline capabilities</p>
71
- </div>
72
- </section>
73
-
74
- <section class="home__cta">
75
- <h2>Get Started</h2>
76
- <div class="home__cta-buttons">
77
- <a href={siteConfig.docsUrl} class="btn btn-primary btn-lg">
78
- Read Documentation
79
- </a>
80
- <a href={siteConfig.githubUrl} class="btn btn-secondary btn-lg">
81
- View on GitHub
82
- </a>
83
- </div>
84
- </section>
85
- </div>
86
- </main>
87
- </Layout>
1
+ ---
2
+ /**
3
+ * Home Page
4
+ * Demonstrates SCSS architecture:
5
+ * - No inline styles
6
+ * - All styles imported from external SCSS file
7
+ * - Component-specific styles in separate files
8
+ */
9
+ import Layout from '@/layouts/Layout.astro';
10
+ import { siteConfig } from '@/lib/config';
11
+
12
+ // Import component-specific styles
13
+ import '@/styles/components/button.scss';
14
+ import '@/styles/pages/index.scss';
15
+ ---
16
+
17
+ <Layout pageTitle="Home">
18
+ <main class="home">
19
+ <div class="container">
20
+ <header class="home__header">
21
+ <h1 class="home__title">Welcome to {siteConfig.stackName}</h1>
22
+ <p class="home__subtitle">
23
+ A production-ready full-stack framework combining the best modern web technologies
24
+ </p>
25
+ </header>
26
+
27
+ <section class="home__features">
28
+ <div class="home__feature card">
29
+ <h3>⚡ Astro</h3>
30
+ <p>Lightning-fast static site generation with dynamic capabilities</p>
31
+ </div>
32
+
33
+ <div class="home__feature card">
34
+ <h3>📘 TypeScript</h3>
35
+ <p>Full type safety across your entire application</p>
36
+ </div>
37
+
38
+ <div class="home__feature card">
39
+ <h3>🗄️ Drizzle ORM</h3>
40
+ <p>Type-safe database operations with PostgreSQL</p>
41
+ </div>
42
+
43
+ <div class="home__feature card">
44
+ <h3>🔐 Clerk</h3>
45
+ <p>Complete authentication and user management</p>
46
+ </div>
47
+
48
+ <div class="home__feature card">
49
+ <h3>🎨 SCSS</h3>
50
+ <p>Powerful styling with variables, mixins, and modules</p>
51
+ </div>
52
+
53
+ <div class="home__feature card">
54
+ <h3>✅ Zod</h3>
55
+ <p>Runtime validation for API routes and forms</p>
56
+ </div>
57
+
58
+ <div class="home__feature card">
59
+ <h3>🤖 Vercel AI SDK</h3>
60
+ <p>Seamless integration with AI language models</p>
61
+ </div>
62
+
63
+ <div class="home__feature card">
64
+ <h3>🔑 NanoID</h3>
65
+ <p>Secure, URL-friendly unique identifiers</p>
66
+ </div>
67
+
68
+ <div class="home__feature card">
69
+ <h3>📱 PWA</h3>
70
+ <p>Progressive Web App with offline capabilities</p>
71
+ </div>
72
+ </section>
73
+
74
+ <section class="home__cta">
75
+ <h2>Get Started</h2>
76
+ <div class="home__cta-buttons">
77
+ <a href={siteConfig.docsUrl} class="btn btn-primary btn-lg">
78
+ Read Documentation
79
+ </a>
80
+ <a href={siteConfig.githubUrl} class="btn btn-secondary btn-lg">
81
+ View on GitHub
82
+ </a>
83
+ </div>
84
+ </section>
85
+ </div>
86
+ </main>
87
+ </Layout>
@@ -1,152 +1,152 @@
1
- @use 'sass:color';
2
- @use '../variables/globals' as *;
3
- @use '../variables/mixins' as *;
4
-
5
- // Button component styles
6
- // Usage (preferred): <button class="btn" data-variant="primary" data-size="lg">Click me</button>
7
- // Usage (alternative): <button class="btn primary lg">Class chaining</button>
8
-
9
- .btn {
10
- @include button-base;
11
-
12
- // Variant modifiers using data attributes (preferred for state/variants)
13
- &[data-variant='primary'] {
14
- @include button-primary;
15
- }
16
-
17
- &[data-variant='secondary'] {
18
- @include button-secondary;
19
- }
20
-
21
- &[data-variant='danger'] {
22
- background-color: $error-color;
23
- color: $text-inverse;
24
-
25
- &:hover:not(:disabled) {
26
- background-color: color.adjust($error-color, $lightness: -10%);
27
- }
28
- }
29
-
30
- &[data-variant='success'] {
31
- background-color: $success-color;
32
- color: $text-inverse;
33
-
34
- &:hover:not(:disabled) {
35
- background-color: color.adjust($success-color, $lightness: -10%);
36
- }
37
- }
38
-
39
- // Size modifiers using data attributes
40
- &[data-size='small'] {
41
- padding: $spacing-extra-small $spacing-small;
42
- font-size: $font-size-small;
43
- }
44
-
45
- &[data-size='large'] {
46
- padding: $spacing-medium $spacing-extra-large;
47
- font-size: $font-size-large;
48
- }
49
-
50
- // State modifiers using data attributes
51
- &[data-state='loading'] {
52
- position: relative;
53
- color: transparent;
54
- pointer-events: none;
55
-
56
- &::after {
57
- content: '';
58
- position: absolute;
59
- width: 1rem;
60
- height: 1rem;
61
- top: 50%;
62
- left: 50%;
63
- margin-left: -0.5rem;
64
- margin-top: -0.5rem;
65
- border: 2px solid transparent;
66
- border-top-color: currentColor;
67
- border-radius: 50%;
68
- animation: button-spin 0.6s linear infinite;
69
- }
70
- }
71
-
72
- &[data-state='active'] {
73
- box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.1);
74
- }
75
-
76
- // Layout modifiers using data attributes
77
- &[data-width='full'] {
78
- width: 100%;
79
- }
80
-
81
- &[data-has-icon='true'] {
82
- display: inline-flex;
83
- align-items: center;
84
- gap: $spacing-small;
85
-
86
- svg {
87
- width: 1.25rem;
88
- height: 1.25rem;
89
- }
90
- }
91
-
92
- // Alternative: Class chaining for variants when data attributes aren't appropriate
93
- // Use this when you need CSS-only solutions or when data attributes feel verbose
94
- &.primary {
95
- @include button-primary;
96
- }
97
-
98
- &.secondary {
99
- @include button-secondary;
100
- }
101
-
102
- &.danger {
103
- background-color: $error-color;
104
- color: $text-inverse;
105
-
106
- &:hover:not(:disabled) {
107
- background-color: color.adjust($error-color, $lightness: -10%);
108
- }
109
- }
110
-
111
- &.success {
112
- background-color: $success-color;
113
- color: $text-inverse;
114
-
115
- &:hover:not(:disabled) {
116
- background-color: color.adjust($success-color, $lightness: -10%);
117
- }
118
- }
119
-
120
- // Size class chaining alternatives
121
- &.small {
122
- padding: $spacing-extra-small $spacing-small;
123
- font-size: $font-size-small;
124
- }
125
-
126
- &.large {
127
- padding: $spacing-medium $spacing-extra-large;
128
- font-size: $font-size-large;
129
- }
130
-
131
- // Layout class chaining alternatives
132
- &.full {
133
- width: 100%;
134
- }
135
-
136
- &.with-icon {
137
- display: inline-flex;
138
- align-items: center;
139
- gap: $spacing-small;
140
-
141
- svg {
142
- width: 1.25rem;
143
- height: 1.25rem;
144
- }
145
- }
146
- }
147
-
148
- @keyframes button-spin {
149
- to {
150
- transform: rotate(360deg);
151
- }
152
- }
1
+ @use 'sass:color';
2
+ @use '../variables/globals' as *;
3
+ @use '../variables/mixins' as *;
4
+
5
+ // Button component styles
6
+ // Usage (preferred): <button class="btn" data-variant="primary" data-size="lg">Click me</button>
7
+ // Usage (alternative): <button class="btn primary lg">Class chaining</button>
8
+
9
+ .btn {
10
+ @include button-base;
11
+
12
+ // Variant modifiers using data attributes (preferred for state/variants)
13
+ &[data-variant='primary'] {
14
+ @include button-primary;
15
+ }
16
+
17
+ &[data-variant='secondary'] {
18
+ @include button-secondary;
19
+ }
20
+
21
+ &[data-variant='danger'] {
22
+ background-color: $error-color;
23
+ color: $text-inverse;
24
+
25
+ &:hover:not(:disabled) {
26
+ background-color: color.adjust($error-color, $lightness: -10%);
27
+ }
28
+ }
29
+
30
+ &[data-variant='success'] {
31
+ background-color: $success-color;
32
+ color: $text-inverse;
33
+
34
+ &:hover:not(:disabled) {
35
+ background-color: color.adjust($success-color, $lightness: -10%);
36
+ }
37
+ }
38
+
39
+ // Size modifiers using data attributes
40
+ &[data-size='small'] {
41
+ padding: $spacing-extra-small $spacing-small;
42
+ font-size: $font-size-small;
43
+ }
44
+
45
+ &[data-size='large'] {
46
+ padding: $spacing-medium $spacing-extra-large;
47
+ font-size: $font-size-large;
48
+ }
49
+
50
+ // State modifiers using data attributes
51
+ &[data-state='loading'] {
52
+ position: relative;
53
+ color: transparent;
54
+ pointer-events: none;
55
+
56
+ &::after {
57
+ content: '';
58
+ position: absolute;
59
+ width: 1rem;
60
+ height: 1rem;
61
+ top: 50%;
62
+ left: 50%;
63
+ margin-left: -0.5rem;
64
+ margin-top: -0.5rem;
65
+ border: 2px solid transparent;
66
+ border-top-color: currentColor;
67
+ border-radius: 50%;
68
+ animation: button-spin 0.6s linear infinite;
69
+ }
70
+ }
71
+
72
+ &[data-state='active'] {
73
+ box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.1);
74
+ }
75
+
76
+ // Layout modifiers using data attributes
77
+ &[data-width='full'] {
78
+ width: 100%;
79
+ }
80
+
81
+ &[data-has-icon='true'] {
82
+ display: inline-flex;
83
+ align-items: center;
84
+ gap: $spacing-small;
85
+
86
+ svg {
87
+ width: 1.25rem;
88
+ height: 1.25rem;
89
+ }
90
+ }
91
+
92
+ // Alternative: Class chaining for variants when data attributes aren't appropriate
93
+ // Use this when you need CSS-only solutions or when data attributes feel verbose
94
+ &.primary {
95
+ @include button-primary;
96
+ }
97
+
98
+ &.secondary {
99
+ @include button-secondary;
100
+ }
101
+
102
+ &.danger {
103
+ background-color: $error-color;
104
+ color: $text-inverse;
105
+
106
+ &:hover:not(:disabled) {
107
+ background-color: color.adjust($error-color, $lightness: -10%);
108
+ }
109
+ }
110
+
111
+ &.success {
112
+ background-color: $success-color;
113
+ color: $text-inverse;
114
+
115
+ &:hover:not(:disabled) {
116
+ background-color: color.adjust($success-color, $lightness: -10%);
117
+ }
118
+ }
119
+
120
+ // Size class chaining alternatives
121
+ &.small {
122
+ padding: $spacing-extra-small $spacing-small;
123
+ font-size: $font-size-small;
124
+ }
125
+
126
+ &.large {
127
+ padding: $spacing-medium $spacing-extra-large;
128
+ font-size: $font-size-large;
129
+ }
130
+
131
+ // Layout class chaining alternatives
132
+ &.full {
133
+ width: 100%;
134
+ }
135
+
136
+ &.with-icon {
137
+ display: inline-flex;
138
+ align-items: center;
139
+ gap: $spacing-small;
140
+
141
+ svg {
142
+ width: 1.25rem;
143
+ height: 1.25rem;
144
+ }
145
+ }
146
+ }
147
+
148
+ @keyframes button-spin {
149
+ to {
150
+ transform: rotate(360deg);
151
+ }
152
+ }