create-win-project 1.3.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 (198) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +187 -0
  3. package/ci/expo.yml +28 -0
  4. package/ci/laravel.yml +49 -0
  5. package/ci/nextjs.yml +29 -0
  6. package/ci/springboot.yml +33 -0
  7. package/ci/vite.yml +36 -0
  8. package/compatibility/profiles.json +237 -0
  9. package/docs/ARCHITECTURE.md +118 -0
  10. package/docs/CONTENT_MODEL.md +36 -0
  11. package/docs/DEPENDENCY_MAINTENANCE.md +31 -0
  12. package/index.js +431 -0
  13. package/lib/application-shapes.js +95 -0
  14. package/lib/banner.js +45 -0
  15. package/lib/catalog.js +343 -0
  16. package/lib/compatibility.js +116 -0
  17. package/lib/constants.js +3 -0
  18. package/lib/doctor.js +45 -0
  19. package/lib/files.js +158 -0
  20. package/lib/generator.js +366 -0
  21. package/lib/interview.js +77 -0
  22. package/lib/laravel-scaffold.js +3 -0
  23. package/lib/playbooks.js +172 -0
  24. package/lib/project-location.js +18 -0
  25. package/lib/scaffold.js +467 -0
  26. package/lib/stacks/context.js +27 -0
  27. package/lib/stacks/contract.js +142 -0
  28. package/lib/stacks/index.js +8 -0
  29. package/lib/stacks/laravel/architecture.js +27 -0
  30. package/lib/stacks/laravel/auth/oidc.js +13 -0
  31. package/lib/stacks/laravel/auth/public.js +28 -0
  32. package/lib/stacks/laravel/auth/sanctum.js +14 -0
  33. package/lib/stacks/laravel/auth/session.js +17 -0
  34. package/lib/stacks/laravel/composer.js +50 -0
  35. package/lib/stacks/laravel/generate.js +362 -0
  36. package/lib/stacks/laravel/index.js +18 -0
  37. package/lib/stacks/laravel/ui/blade.js +15 -0
  38. package/lib/stacks/laravel/ui/index.js +29 -0
  39. package/lib/stacks/laravel/ui/inertia-react.js +35 -0
  40. package/lib/stacks/laravel/ui/livewire.js +39 -0
  41. package/lib/stacks/laravel/ui/shared.js +14 -0
  42. package/lib/stacks/registry.js +42 -0
  43. package/lib/stacks/shared/contributions.js +25 -0
  44. package/lib/template.js +62 -0
  45. package/package.json +49 -0
  46. package/playbooks/INDEX.md +58 -0
  47. package/playbooks/capabilities/auth/oidc-resource-server.md +15 -0
  48. package/playbooks/capabilities/auth/spring-session.md +15 -0
  49. package/playbooks/capabilities/ci/github-actions.manifest.json +10 -0
  50. package/playbooks/capabilities/ci/github-actions.md +61 -0
  51. package/playbooks/capabilities/docker/docker.manifest.json +11 -0
  52. package/playbooks/capabilities/docker/overview.md +55 -0
  53. package/playbooks/capabilities/flyway/environments.md +5 -0
  54. package/playbooks/capabilities/flyway/flyway.manifest.json +12 -0
  55. package/playbooks/capabilities/flyway/migrations.md +7 -0
  56. package/playbooks/capabilities/flyway/testing.md +5 -0
  57. package/playbooks/capabilities/laravel/database.md +8 -0
  58. package/playbooks/capabilities/laravel/migrations.md +15 -0
  59. package/playbooks/capabilities/laravel/observability.md +8 -0
  60. package/playbooks/capabilities/laravel/oidc-resource-server.md +10 -0
  61. package/playbooks/capabilities/laravel/queues.md +8 -0
  62. package/playbooks/capabilities/laravel/sanctum-spa.md +8 -0
  63. package/playbooks/capabilities/laravel/scheduler.md +7 -0
  64. package/playbooks/capabilities/laravel/session-auth.md +8 -0
  65. package/playbooks/capabilities/laravel/storage-uploads.md +7 -0
  66. package/playbooks/capabilities/postgresql/architecture.md +5 -0
  67. package/playbooks/capabilities/postgresql/migrations.md +5 -0
  68. package/playbooks/capabilities/postgresql/postgresql.manifest.json +15 -0
  69. package/playbooks/capabilities/postgresql/schema-design.md +7 -0
  70. package/playbooks/capabilities/postgresql/security.md +5 -0
  71. package/playbooks/capabilities/postgresql/testing.md +5 -0
  72. package/playbooks/capabilities/prisma/architecture.md +5 -0
  73. package/playbooks/capabilities/prisma/migrations.md +11 -0
  74. package/playbooks/capabilities/prisma/prisma.manifest.json +14 -0
  75. package/playbooks/capabilities/prisma/runtime.md +5 -0
  76. package/playbooks/capabilities/prisma/schema.md +5 -0
  77. package/playbooks/capabilities/prisma/testing.md +5 -0
  78. package/playbooks/capabilities/supabase/architecture.md +5 -0
  79. package/playbooks/capabilities/supabase/authentication.md +5 -0
  80. package/playbooks/capabilities/supabase/expo.md +16 -0
  81. package/playbooks/capabilities/supabase/migrations.md +7 -0
  82. package/playbooks/capabilities/supabase/nextjs.md +24 -0
  83. package/playbooks/capabilities/supabase/rls.md +7 -0
  84. package/playbooks/capabilities/supabase/supabase.manifest.json +32 -0
  85. package/playbooks/capabilities/supabase/testing.md +5 -0
  86. package/playbooks/capabilities/supabase/vite.md +14 -0
  87. package/playbooks/concerns/axios.md +123 -0
  88. package/playbooks/concerns/next-safe-action.md +66 -0
  89. package/playbooks/concerns/next-themes.md +87 -0
  90. package/playbooks/concerns/nuqs.md +59 -0
  91. package/playbooks/concerns/t3-env.md +48 -0
  92. package/playbooks/concerns/tanstack-query.md +145 -0
  93. package/playbooks/concerns/zod.md +174 -0
  94. package/playbooks/concerns/zustand.md +93 -0
  95. package/playbooks/devops/makefile.manifest.json +10 -0
  96. package/playbooks/devops/makefile.md +556 -0
  97. package/playbooks/devops/pr-template.manifest.json +10 -0
  98. package/playbooks/devops/pr-template.md +106 -0
  99. package/playbooks/platform/laravel-ui/blade/architecture.md +5 -0
  100. package/playbooks/platform/laravel-ui/blade/runtime.md +5 -0
  101. package/playbooks/platform/laravel-ui/blade/security.md +5 -0
  102. package/playbooks/platform/laravel-ui/blade/structure.md +5 -0
  103. package/playbooks/platform/laravel-ui/blade/testing.md +5 -0
  104. package/playbooks/platform/laravel-ui/inertia-react/architecture.md +5 -0
  105. package/playbooks/platform/laravel-ui/inertia-react/runtime.md +5 -0
  106. package/playbooks/platform/laravel-ui/inertia-react/security.md +5 -0
  107. package/playbooks/platform/laravel-ui/inertia-react/structure.md +5 -0
  108. package/playbooks/platform/laravel-ui/inertia-react/testing.md +5 -0
  109. package/playbooks/platform/laravel-ui/livewire/architecture.md +5 -0
  110. package/playbooks/platform/laravel-ui/livewire/runtime.md +5 -0
  111. package/playbooks/platform/laravel-ui/livewire/security.md +5 -0
  112. package/playbooks/platform/laravel-ui/livewire/structure.md +5 -0
  113. package/playbooks/platform/laravel-ui/livewire/testing.md +5 -0
  114. package/playbooks/platform/mobile.manifest.json +17 -0
  115. package/playbooks/platform/mobile.md +15 -0
  116. package/playbooks/platform/web.manifest.json +17 -0
  117. package/playbooks/platform/web.md +17 -0
  118. package/playbooks/stack/expo/architecture.md +27 -0
  119. package/playbooks/stack/expo/runtime.md +14 -0
  120. package/playbooks/stack/expo/security.md +18 -0
  121. package/playbooks/stack/expo/structure.md +26 -0
  122. package/playbooks/stack/expo/testing.md +13 -0
  123. package/playbooks/stack/laravel/architecture.md +34 -0
  124. package/playbooks/stack/laravel/runtime.md +27 -0
  125. package/playbooks/stack/laravel/security.md +23 -0
  126. package/playbooks/stack/laravel/structure.md +29 -0
  127. package/playbooks/stack/laravel/testing.md +22 -0
  128. package/playbooks/stack/laravel-ui.manifest.json +42 -0
  129. package/playbooks/stack/laravel.manifest.json +35 -0
  130. package/playbooks/stack/nextjs/architecture.md +62 -0
  131. package/playbooks/stack/nextjs/runtime.md +31 -0
  132. package/playbooks/stack/nextjs/security.md +32 -0
  133. package/playbooks/stack/nextjs/structure.md +50 -0
  134. package/playbooks/stack/nextjs/testing.md +20 -0
  135. package/playbooks/stack/nextjs.manifest.json +49 -0
  136. package/playbooks/stack/no-frontend.manifest.json +25 -0
  137. package/playbooks/stack/none.manifest.json +21 -0
  138. package/playbooks/stack/react-native.manifest.json +49 -0
  139. package/playbooks/stack/react-vite/architecture.md +33 -0
  140. package/playbooks/stack/react-vite/runtime.md +13 -0
  141. package/playbooks/stack/react-vite/security.md +16 -0
  142. package/playbooks/stack/react-vite/structure.md +23 -0
  143. package/playbooks/stack/react-vite/testing.md +12 -0
  144. package/playbooks/stack/react-vite.manifest.json +46 -0
  145. package/playbooks/stack/springboot/architecture.md +40 -0
  146. package/playbooks/stack/springboot/runtime.md +28 -0
  147. package/playbooks/stack/springboot/security.md +28 -0
  148. package/playbooks/stack/springboot/structure.md +30 -0
  149. package/playbooks/stack/springboot/testing.md +22 -0
  150. package/playbooks/stack/springboot.manifest.json +38 -0
  151. package/playbooks/styling/css-modules-extensions.md +267 -0
  152. package/playbooks/styling/css-modules.manifest.json +11 -0
  153. package/playbooks/styling/native-styles.manifest.json +9 -0
  154. package/playbooks/styling/native-styles.md +29 -0
  155. package/playbooks/styling/tailwind-extensions.md +182 -0
  156. package/playbooks/styling/tailwind.manifest.json +11 -0
  157. package/playbooks/universal/accessibility.manifest.json +11 -0
  158. package/playbooks/universal/accessibility.md +45 -0
  159. package/playbooks/universal/coding-rules.manifest.json +12 -0
  160. package/playbooks/universal/coding-rules.md +281 -0
  161. package/playbooks/universal/error-handling.manifest.json +10 -0
  162. package/playbooks/universal/error-handling.md +21 -0
  163. package/playbooks/universal/git-conventions.manifest.json +10 -0
  164. package/playbooks/universal/git-conventions.md +186 -0
  165. package/playbooks/universal/observability.manifest.json +10 -0
  166. package/playbooks/universal/observability.md +29 -0
  167. package/playbooks/universal/security.manifest.json +11 -0
  168. package/playbooks/universal/security.md +30 -0
  169. package/playbooks/universal/typescript.manifest.json +11 -0
  170. package/playbooks/universal/typescript.md +272 -0
  171. package/scripts/compatibility-matrix.mjs +48 -0
  172. package/scripts/validate-content.mjs +76 -0
  173. package/scripts/verify-generated.mjs +153 -0
  174. package/templates/agents/nextjs.md +47 -0
  175. package/templates/agents/react-native.md +48 -0
  176. package/templates/agents/react-vite.md +48 -0
  177. package/templates/docker/compose/postgres.yml +29 -0
  178. package/templates/docker/compose/springboot.yml +69 -0
  179. package/templates/docker/compose/supabase.yml +18 -0
  180. package/templates/docker/compose-prod/springboot.yml +64 -0
  181. package/templates/docker/dockerfile/laravel-inertia.dev.dockerfile +21 -0
  182. package/templates/docker/dockerfile/laravel.dev.dockerfile +12 -0
  183. package/templates/docker/dockerfile/laravel.prod.dockerfile +13 -0
  184. package/templates/docker/dockerfile/nextjs.dev.dockerfile +6 -0
  185. package/templates/docker/dockerfile/nextjs.prod.dockerfile +18 -0
  186. package/templates/docker/dockerfile/springboot.dev.dockerfile +5 -0
  187. package/templates/docker/dockerfile/springboot.prod.dockerfile +10 -0
  188. package/templates/docker/dockerfile/vite.dev.dockerfile +6 -0
  189. package/templates/docker/dockerfile/vite.prod.dockerfile +12 -0
  190. package/templates/gitignore/base.gitignore +32 -0
  191. package/templates/gitignore/nextjs.gitignore +40 -0
  192. package/templates/gitignore/react-native.gitignore +43 -0
  193. package/templates/gitignore/react-vite.gitignore +39 -0
  194. package/templates/makefile/frontend.mk +31 -0
  195. package/templates/makefile/laravel.mk +47 -0
  196. package/templates/makefile/postgres.mk +40 -0
  197. package/templates/makefile/springboot.mk +125 -0
  198. package/templates/makefile/supabase.mk +42 -0
@@ -0,0 +1,48 @@
1
+ # AGENTS.md
2
+
3
+ > Small operating contract for agents. Project intent lives in `CONTEXT.md`; task guidance is routed through `RULES.md`.
4
+
5
+ ## Project
6
+
7
+ {{PROJECT_NAME}} — {{PROJECT_DESCRIPTION}}
8
+
9
+ - Stack: `{{STACK}}`
10
+ - Platform: `{{PLATFORM}}`
11
+
12
+ ## Commands
13
+
14
+ Run frontend commands from `frontend/`.
15
+
16
+ - Install: `npm install` initially; use `npm ci` after committing the lockfile.
17
+ - Develop: `npm run dev`
18
+ - Validate: `npm run lint && npm run typecheck && npm run test --if-present && npm run build`
19
+ - End-to-end: `npm run test:e2e --if-present`
20
+ - Spring backend, when present: `cd backend && ./mvnw --batch-mode test` (`mvnw.cmd` on Windows)
21
+
22
+ ## Required workflow
23
+
24
+ 1. Read `CONTEXT.md` and inspect neighboring implementation and tests.
25
+ 2. Find the concern in `RULES.md`; open only its linked playbook section.
26
+ 3. State assumptions when behavior is ambiguous.
27
+ 4. Make the smallest coherent change and add risk-appropriate tests.
28
+ 5. Run lint, typecheck, relevant tests, and a production build.
29
+
30
+ ## Always-on constraints
31
+
32
+ {{CONSTRAINTS}}
33
+
34
+ - Treat all SPA code and public-prefixed environment values as user-visible.
35
+ - Validate input and authorize on the server; route guards are only user experience.
36
+ - Never put session IDs or access/refresh tokens in browser web storage.
37
+
38
+ ## Authority boundaries
39
+
40
+ - Do not deploy, publish, merge, push, or modify production data unless explicitly asked.
41
+ - Do not delete user work or weaken checks to make a task pass.
42
+
43
+ ## Definition of done
44
+
45
+ - Acceptance behavior and risk-appropriate tests are present.
46
+ - Validation commands pass, or the exact blocker is reported.
47
+ - Loading, empty, error, keyboard, and narrow-screen behavior are considered.
48
+ - Relevant docs are updated.
@@ -0,0 +1,29 @@
1
+ # docker-compose.yml — {{PROJECT_NAME}} ({{STACK}}) — Dev (Postgres only)
2
+ services:
3
+
4
+ db:
5
+ container_name: {{PROJECT_NAME}}-db
6
+ image: {{POSTGRES_IMAGE}}
7
+ ports:
8
+ - "5432:5432"
9
+ environment:
10
+ - POSTGRES_USER=${POSTGRES_USER}
11
+ - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
12
+ - POSTGRES_DB=${POSTGRES_DB}
13
+ volumes:
14
+ - postgres-data:/var/lib/postgresql/data
15
+ networks:
16
+ - app-network
17
+ healthcheck:
18
+ test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
19
+ interval: 10s
20
+ timeout: 5s
21
+ retries: 5
22
+
23
+ volumes:
24
+ postgres-data:
25
+ name: {{PROJECT_NAME}}-postgres-data
26
+
27
+ networks:
28
+ app-network:
29
+ name: {{PROJECT_NAME}}-network
@@ -0,0 +1,69 @@
1
+ # docker-compose.yml — {{PROJECT_NAME}} ({{STACK}}) — Dev
2
+ services:
3
+
4
+ frontend:
5
+ container_name: {{PROJECT_NAME}}-frontend
6
+ build:
7
+ context: {{FRONTEND_DIR}}
8
+ dockerfile: {{FRONTEND_DOCKERFILE}}
9
+ ports:
10
+ - "{{FRONTEND_PORT}}:{{FRONTEND_PORT}}"
11
+ volumes:
12
+ - ./{{FRONTEND_DIR}}:/app
13
+ - /app/node_modules
14
+ environment:
15
+ - {{ENV_PREFIX}}API_URL=${{ENV_PREFIX}}API_URL
16
+ depends_on:
17
+ - backend
18
+ networks:
19
+ - app-network
20
+
21
+ backend:
22
+ container_name: {{PROJECT_NAME}}-backend
23
+ build:
24
+ context: ./backend
25
+ dockerfile: Dockerfile.dev
26
+ ports:
27
+ - "8080:8080"
28
+ volumes:
29
+ - ./backend:/app
30
+ - maven-cache:/root/.m2
31
+ environment:
32
+ - SPRING_PROFILES_ACTIVE=dev
33
+ - DATABASE_URL=jdbc:postgresql://db:5432/${POSTGRES_DB}
34
+ - POSTGRES_USER=${POSTGRES_USER}
35
+ - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
36
+ depends_on:
37
+ db:
38
+ condition: service_healthy
39
+ networks:
40
+ - app-network
41
+
42
+ db:
43
+ container_name: {{PROJECT_NAME}}-db
44
+ image: {{POSTGRES_IMAGE}}
45
+ ports:
46
+ - "5432:5432"
47
+ environment:
48
+ - POSTGRES_USER=${POSTGRES_USER}
49
+ - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
50
+ - POSTGRES_DB=${POSTGRES_DB}
51
+ volumes:
52
+ - postgres-data:/var/lib/postgresql/data
53
+ networks:
54
+ - app-network
55
+ healthcheck:
56
+ test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
57
+ interval: 10s
58
+ timeout: 5s
59
+ retries: 5
60
+
61
+ volumes:
62
+ postgres-data:
63
+ name: {{PROJECT_NAME}}-postgres-data
64
+ maven-cache:
65
+ name: {{PROJECT_NAME}}-maven-cache
66
+
67
+ networks:
68
+ app-network:
69
+ name: {{PROJECT_NAME}}-network
@@ -0,0 +1,18 @@
1
+ # docker-compose.yml — {{PROJECT_NAME}} ({{STACK}}) — application + managed Supabase
2
+ services:
3
+ frontend:
4
+ container_name: {{PROJECT_NAME}}-frontend
5
+ build:
6
+ context: {{FRONTEND_DIR}}
7
+ dockerfile: {{FRONTEND_DOCKERFILE}}
8
+ ports:
9
+ - "{{FRONTEND_PORT}}:{{FRONTEND_PORT}}"
10
+ volumes:
11
+ - ./{{FRONTEND_DIR}}:/app
12
+ - /app/node_modules
13
+ environment:
14
+ - {{ENV_PREFIX}}SUPABASE_URL=${{ENV_PREFIX}}SUPABASE_URL
15
+ - {{ENV_PREFIX}}SUPABASE_PUBLISHABLE_KEY=${{ENV_PREFIX}}SUPABASE_PUBLISHABLE_KEY
16
+
17
+ # The Supabase platform is managed separately. Use `supabase start` for the
18
+ # official local stack instead of approximating it with a bare PostgreSQL image.
@@ -0,0 +1,64 @@
1
+ # docker-compose.prod.yml — {{PROJECT_NAME}} ({{STACK}}) — Prod
2
+ services:
3
+
4
+ frontend:
5
+ container_name: {{PROJECT_NAME}}-frontend-prod
6
+ build:
7
+ context: {{FRONTEND_DIR}}
8
+ dockerfile: {{FRONTEND_DOCKERFILE_PROD}}
9
+ target: production
10
+ ports:
11
+ - "{{FRONTEND_PROD_PORT}}"
12
+ environment:
13
+ - {{ENV_PREFIX}}API_URL=${{ENV_PREFIX}}API_URL
14
+ depends_on:
15
+ - backend
16
+ networks:
17
+ - app-network
18
+ restart: always
19
+
20
+ backend:
21
+ container_name: {{PROJECT_NAME}}-backend-prod
22
+ build:
23
+ context: ./backend
24
+ dockerfile: Dockerfile
25
+ target: production
26
+ ports:
27
+ - "8080:8080"
28
+ environment:
29
+ - SPRING_PROFILES_ACTIVE=prod
30
+ - DATABASE_URL=jdbc:postgresql://db:5432/${POSTGRES_DB}
31
+ - POSTGRES_USER=${POSTGRES_USER}
32
+ - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
33
+ depends_on:
34
+ db:
35
+ condition: service_healthy
36
+ networks:
37
+ - app-network
38
+ restart: always
39
+
40
+ db:
41
+ container_name: {{PROJECT_NAME}}-db-prod
42
+ image: {{POSTGRES_IMAGE}}
43
+ environment:
44
+ - POSTGRES_USER=${POSTGRES_USER}
45
+ - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
46
+ - POSTGRES_DB=${POSTGRES_DB}
47
+ volumes:
48
+ - postgres-data-prod:/var/lib/postgresql/data
49
+ networks:
50
+ - app-network
51
+ restart: always
52
+ healthcheck:
53
+ test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
54
+ interval: 10s
55
+ timeout: 5s
56
+ retries: 5
57
+
58
+ volumes:
59
+ postgres-data-prod:
60
+ name: {{PROJECT_NAME}}-postgres-data-prod
61
+
62
+ networks:
63
+ app-network:
64
+ name: {{PROJECT_NAME}}-network-prod
@@ -0,0 +1,21 @@
1
+ FROM {{NODE_IMAGE}} AS assets
2
+ WORKDIR /app
3
+ COPY package*.json ./
4
+ RUN npm install
5
+ COPY resources ./resources
6
+ COPY vite.config.js ./
7
+ RUN npm run build
8
+
9
+ FROM {{COMPOSER_IMAGE}} AS composer
10
+
11
+ FROM {{PHP_IMAGE}}
12
+ RUN apk add --no-cache libpq-dev && docker-php-ext-install pdo_pgsql
13
+ WORKDIR /app
14
+ COPY --from=composer /usr/bin/composer /usr/local/bin/composer
15
+ COPY composer.json ./
16
+ RUN composer install --no-interaction --prefer-dist --no-scripts
17
+ COPY . .
18
+ COPY --from=assets /app/public/build ./public/build
19
+ RUN composer dump-autoload --optimize
20
+ EXPOSE 8000
21
+ CMD ["php", "artisan", "serve", "--host=0.0.0.0", "--port=8000"]
@@ -0,0 +1,12 @@
1
+ FROM {{COMPOSER_IMAGE}} AS composer
2
+
3
+ FROM {{PHP_IMAGE}}
4
+ RUN apk add --no-cache libpq-dev && docker-php-ext-install pdo_pgsql
5
+ WORKDIR /app
6
+ COPY --from=composer /usr/bin/composer /usr/local/bin/composer
7
+ COPY composer.json ./
8
+ RUN composer install --no-interaction --prefer-dist --no-scripts
9
+ COPY . .
10
+ RUN composer dump-autoload --optimize
11
+ EXPOSE 8000
12
+ CMD ["php", "artisan", "serve", "--host=0.0.0.0", "--port=8000"]
@@ -0,0 +1,13 @@
1
+ FROM {{COMPOSER_IMAGE}} AS composer
2
+
3
+ FROM {{PHP_IMAGE}} AS production
4
+ RUN apk add --no-cache libpq-dev && docker-php-ext-install pdo_pgsql
5
+ WORKDIR /app
6
+ COPY --from=composer /usr/bin/composer /usr/local/bin/composer
7
+ COPY composer.json ./
8
+ RUN composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader --no-scripts
9
+ COPY . .
10
+ RUN composer dump-autoload --classmap-authoritative
11
+ USER www-data
12
+ EXPOSE 8000
13
+ CMD ["php", "artisan", "serve", "--host=0.0.0.0", "--port=8000"]
@@ -0,0 +1,6 @@
1
+ FROM {{NODE_IMAGE}}
2
+ WORKDIR /app
3
+ COPY package*.json ./
4
+ RUN npm ci
5
+ EXPOSE {{FRONTEND_PORT}}
6
+ CMD ["npm", "run", "dev"]
@@ -0,0 +1,18 @@
1
+ FROM {{NODE_IMAGE}} AS builder
2
+ WORKDIR /app
3
+ COPY package*.json ./
4
+ RUN npm ci
5
+ RUN mkdir -p public
6
+ COPY . .
7
+ ARG DATABASE_URL=postgresql://dummy:dummy@localhost:5432/dummy
8
+ ENV DATABASE_URL=$DATABASE_URL
9
+ RUN npm run build
10
+
11
+ FROM {{NODE_IMAGE}} AS production
12
+ WORKDIR /app
13
+ ENV NODE_ENV=production
14
+ COPY --from=builder /app/.next/standalone ./
15
+ COPY --from=builder /app/.next/static ./.next/static
16
+ COPY --from=builder /app/public ./public
17
+ EXPOSE {{FRONTEND_PORT}}
18
+ CMD ["node", "server.js"]
@@ -0,0 +1,5 @@
1
+ FROM {{MAVEN_IMAGE}}
2
+ WORKDIR /app
3
+ COPY . .
4
+ EXPOSE 8080
5
+ CMD ["mvn", "spring-boot:run"]
@@ -0,0 +1,10 @@
1
+ FROM {{MAVEN_IMAGE}} AS builder
2
+ WORKDIR /app
3
+ COPY . .
4
+ RUN mvn --batch-mode package -DskipTests
5
+
6
+ FROM {{JAVA_IMAGE}} AS production
7
+ WORKDIR /app
8
+ COPY --from=builder /app/target/*.jar app.jar
9
+ EXPOSE 8080
10
+ CMD ["java", "-jar", "app.jar"]
@@ -0,0 +1,6 @@
1
+ FROM {{NODE_IMAGE}}
2
+ WORKDIR /app
3
+ COPY package*.json ./
4
+ RUN npm ci
5
+ EXPOSE 5173
6
+ CMD ["npm", "run", "dev", "--", "--host"]
@@ -0,0 +1,12 @@
1
+ FROM {{NODE_IMAGE}} AS builder
2
+ WORKDIR /app
3
+ COPY package*.json ./
4
+ RUN npm ci
5
+ COPY . .
6
+ RUN npm run build
7
+
8
+ FROM {{NGINX_IMAGE}} AS production
9
+ COPY --from=builder /app/dist /usr/share/nginx/html
10
+ COPY nginx.conf /etc/nginx/conf.d/default.conf
11
+ EXPOSE 80
12
+ CMD ["nginx", "-g", "daemon off;"]
@@ -0,0 +1,32 @@
1
+ # Environment
2
+ .env
3
+ .env.local
4
+ .env.production
5
+ .env.*.local
6
+
7
+ # Dependencies
8
+ node_modules/
9
+
10
+ # IDE
11
+ .idea/
12
+ .vscode/
13
+ *.iml
14
+ *.suo
15
+ *.user
16
+
17
+ # OS
18
+ .DS_Store
19
+ Thumbs.db
20
+
21
+ # Logs
22
+ *.log
23
+ logs/
24
+ npm-debug.log*
25
+
26
+ # Testing
27
+ coverage/
28
+ playwright-report/
29
+ test-results/
30
+
31
+ # Docker volumes
32
+ postgres-data/
@@ -0,0 +1,40 @@
1
+ # Environment
2
+ .env
3
+ .env.local
4
+ .env.production
5
+ .env.*.local
6
+
7
+ # Dependencies
8
+ node_modules/
9
+
10
+ # Build outputs
11
+ .next/
12
+ out/
13
+ src/generated/prisma/
14
+
15
+ # IDE
16
+ .idea/
17
+ .vscode/
18
+ *.iml
19
+ *.suo
20
+ *.user
21
+
22
+ # OS
23
+ .DS_Store
24
+ Thumbs.db
25
+
26
+ # Logs
27
+ *.log
28
+ logs/
29
+ npm-debug.log*
30
+
31
+ # Testing
32
+ coverage/
33
+ playwright-report/
34
+ test-results/
35
+
36
+ # Docker volumes
37
+ postgres-data/
38
+
39
+ # Supabase
40
+ .supabase/
@@ -0,0 +1,43 @@
1
+ # Environment
2
+ .env
3
+ .env.local
4
+ .env.production
5
+ .env.*.local
6
+
7
+ # Dependencies
8
+ node_modules/
9
+
10
+ # Expo
11
+ .expo/
12
+ dist/
13
+ web-build/
14
+
15
+ # Native
16
+ *.orig.*
17
+ *.jks
18
+ *.p8
19
+ *.p12
20
+ *.key
21
+ *.mobileprovision
22
+
23
+ # Metro
24
+ .metro-health-check*
25
+
26
+ # IDE
27
+ .idea/
28
+ .vscode/
29
+ *.iml
30
+ *.suo
31
+ *.user
32
+
33
+ # OS
34
+ .DS_Store
35
+ Thumbs.db
36
+
37
+ # Logs
38
+ *.log
39
+ logs/
40
+ npm-debug.log*
41
+
42
+ # Testing
43
+ coverage/
@@ -0,0 +1,39 @@
1
+ # Environment
2
+ .env
3
+ .env.local
4
+ .env.production
5
+ .env.*.local
6
+
7
+ # Dependencies
8
+ node_modules/
9
+
10
+ # Build outputs
11
+ dist/
12
+ build/
13
+
14
+ # IDE
15
+ .idea/
16
+ .vscode/
17
+ *.iml
18
+ *.suo
19
+ *.user
20
+
21
+ # OS
22
+ .DS_Store
23
+ Thumbs.db
24
+
25
+ # Logs
26
+ *.log
27
+ logs/
28
+ npm-debug.log*
29
+
30
+ # Testing
31
+ coverage/
32
+ playwright-report/
33
+ test-results/
34
+
35
+ # Docker volumes
36
+ postgres-data/
37
+
38
+ # Supabase
39
+ .supabase/
@@ -0,0 +1,31 @@
1
+ # Makefile — {{PROJECT_NAME}} frontend-only convenience aliases
2
+ # Make is optional; every target delegates to cross-platform npm scripts.
3
+
4
+ NPM_DIR := {{FRONTEND_DIR}}
5
+
6
+ .DEFAULT_GOAL := help
7
+ .PHONY: help install dev build lint format check test
8
+
9
+ help: ## Show available commands
10
+ @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-16s\033[0m %s\n", $$1, $$2}'
11
+
12
+ install: ## Install exact dependencies from the lockfile
13
+ npm --prefix $(NPM_DIR) ci
14
+
15
+ dev: ## Start the frontend development server
16
+ npm --prefix $(NPM_DIR) run dev
17
+
18
+ build: ## Build for production
19
+ npm --prefix $(NPM_DIR) run build
20
+
21
+ lint: ## Run ESLint when supported
22
+ npm --prefix $(NPM_DIR) run lint --if-present
23
+
24
+ format: ## Format files with the project-local Prettier
25
+ npm --prefix $(NPM_DIR) run format
26
+
27
+ check: ## Run the generated quality checks
28
+ npm --prefix $(NPM_DIR) run check
29
+
30
+ test: ## Run tests when configured
31
+ npm --prefix $(NPM_DIR) run test --if-present
@@ -0,0 +1,47 @@
1
+ COMPOSE := docker compose
2
+ LARAVEL := $(COMPOSE) exec backend
3
+
4
+ .DEFAULT_GOAL := help
5
+
6
+ .PHONY: help setup build run dev stop logs test format analyse migrate shell clean
7
+ help: ## Show available commands
8
+ @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-16s\033[0m %s\n", $$1, $$2}'
9
+
10
+ setup: ## First run: build, start, create key, and migrate
11
+ $(COMPOSE) build
12
+ $(COMPOSE) up -d
13
+ $(LARAVEL) php artisan key:generate
14
+ $(LARAVEL) php artisan migrate
15
+
16
+ build: ## Build development container images
17
+ $(COMPOSE) build
18
+
19
+ run: ## Start existing images without rebuilding
20
+ $(COMPOSE) up -d
21
+
22
+ dev: ## Start existing images and follow logs
23
+ $(COMPOSE) up
24
+
25
+ stop: ## Stop containers without deleting data
26
+ $(COMPOSE) down
27
+
28
+ logs: ## Follow application logs
29
+ $(COMPOSE) logs -f
30
+
31
+ test: ## Run Laravel tests in the container
32
+ $(LARAVEL) php artisan test
33
+
34
+ format: ## Format PHP source
35
+ $(LARAVEL) ./vendor/bin/pint
36
+
37
+ analyse: ## Run Larastan
38
+ $(LARAVEL) ./vendor/bin/phpstan analyse --memory-limit=1G
39
+
40
+ migrate: ## Apply pending Laravel migrations
41
+ $(LARAVEL) php artisan migrate
42
+
43
+ shell: ## Open a shell in the Laravel container
44
+ $(LARAVEL) sh
45
+
46
+ clean: ## Remove containers and project volumes (destructive)
47
+ $(COMPOSE) down -v --remove-orphans
@@ -0,0 +1,40 @@
1
+ # =============================================================================
2
+ # Makefile — {{PROJECT_NAME}} ({{STACK}} + Prisma)
3
+ # =============================================================================
4
+
5
+ COMPOSE := docker compose
6
+
7
+ .DEFAULT_GOAL := help
8
+
9
+ .PHONY: help dev build lint test db-start db-stop db-migrate db-reset db-studio
10
+
11
+ help: ## Show all commands
12
+ @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) \
13
+ | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
14
+
15
+ dev: db-start ## Start PostgreSQL + Next.js dev server
16
+ npm run dev
17
+
18
+ build: ## Build for production
19
+ npm run build
20
+
21
+ lint: ## Run ESLint
22
+ npm run lint
23
+
24
+ test: ## Run Vitest
25
+ npm run test
26
+
27
+ db-start: ## Start PostgreSQL container
28
+ $(COMPOSE) up -d db
29
+
30
+ db-stop: ## Stop PostgreSQL container
31
+ $(COMPOSE) down
32
+
33
+ db-migrate: ## Run Prisma migrations
34
+ npm run db:migrate
35
+
36
+ db-reset: ## Reset DB + migrate + seed
37
+ npm run db:reset
38
+
39
+ db-studio: ## Open Prisma Studio
40
+ npm run db:studio