project-initializer 0.2.1__tar.gz → 0.3.1__tar.gz

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 (358) hide show
  1. {project_initializer-0.2.1 → project_initializer-0.3.1}/MANIFEST.in +2 -0
  2. {project_initializer-0.2.1/project_initializer.egg-info → project_initializer-0.3.1}/PKG-INFO +44 -9
  3. {project_initializer-0.2.1 → project_initializer-0.3.1}/README.md +39 -6
  4. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/__init__.py +1 -1
  5. project_initializer-0.3.1/project_initializer/cli.py +391 -0
  6. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/env_generator.py +3 -1
  7. project_initializer-0.3.1/project_initializer/file_transforms.py +128 -0
  8. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/.github/workflows/test-package.yml +1 -1
  9. project_initializer-0.3.1/project_initializer/templates/frontend/.angular/cache/21.1.1/frontend/.tsbuildinfo +1 -0
  10. project_initializer-0.3.1/project_initializer/templates/frontend/.angular/cache/21.1.1/frontend/angular-compiler.db +0 -0
  11. project_initializer-0.2.1/project_initializer/templates/frontend/.DS_Store → project_initializer-0.3.1/project_initializer/templates/frontend/.angular/cache/21.1.1/frontend/angular-compiler.db-lock +0 -0
  12. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/Dockerfile +1 -1
  13. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/package-lock.json +1431 -1478
  14. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/package.json +1 -0
  15. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/src/app/app.config.ts +12 -0
  16. project_initializer-0.3.1/project_initializer/templates/frontend/src/app/app.routes.ts +35 -0
  17. project_initializer-0.3.1/project_initializer/templates/frontend/src/app/icons.spec.ts +70 -0
  18. project_initializer-0.3.1/project_initializer/templates/frontend/src/app/icons.ts +63 -0
  19. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/src/app/pages/chatbot/chatbot.ts +1 -1
  20. project_initializer-0.3.1/project_initializer/templates/frontend/src/app/pages/dashboard/dashboard.html +27 -0
  21. project_initializer-0.3.1/project_initializer/templates/frontend/src/app/pages/dashboard/dashboard.spec.ts +40 -0
  22. project_initializer-0.3.1/project_initializer/templates/frontend/src/app/pages/dashboard/dashboard.ts +22 -0
  23. project_initializer-0.3.1/project_initializer/templates/frontend/src/app/pages/home/home.html +33 -0
  24. project_initializer-0.3.1/project_initializer/templates/frontend/src/app/pages/home/home.spec.ts +40 -0
  25. project_initializer-0.3.1/project_initializer/templates/frontend/src/app/pages/home/home.ts +26 -0
  26. project_initializer-0.3.1/project_initializer/templates/frontend/src/app/pages/settings/settings.html +27 -0
  27. project_initializer-0.3.1/project_initializer/templates/frontend/src/app/pages/settings/settings.spec.ts +59 -0
  28. project_initializer-0.3.1/project_initializer/templates/frontend/src/app/pages/settings/settings.ts +34 -0
  29. project_initializer-0.3.1/project_initializer/templates/frontend/src/app/services/theme.service.spec.ts +135 -0
  30. project_initializer-0.3.1/project_initializer/templates/frontend/src/app/services/theme.service.ts +71 -0
  31. project_initializer-0.3.1/project_initializer/templates/frontend/src/app/shared/bottom-tab-bar/bottom-tab-bar.html +14 -0
  32. project_initializer-0.3.1/project_initializer/templates/frontend/src/app/shared/bottom-tab-bar/bottom-tab-bar.spec.ts +59 -0
  33. project_initializer-0.3.1/project_initializer/templates/frontend/src/app/shared/bottom-tab-bar/bottom-tab-bar.ts +15 -0
  34. project_initializer-0.3.1/project_initializer/templates/frontend/src/app/shared/layout/layout.html +36 -0
  35. project_initializer-0.3.1/project_initializer/templates/frontend/src/app/shared/layout/layout.spec.ts +77 -0
  36. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/src/app/shared/layout/layout.ts +28 -3
  37. project_initializer-0.3.1/project_initializer/templates/frontend/src/app/shared/layout/responsive-shell.integration.spec.ts +112 -0
  38. project_initializer-0.3.1/project_initializer/templates/frontend/src/app/shared/nav-item.model.ts +22 -0
  39. project_initializer-0.3.1/project_initializer/templates/frontend/src/app/shared/sidebar/sidebar.html +57 -0
  40. project_initializer-0.3.1/project_initializer/templates/frontend/src/app/shared/sidebar/sidebar.spec.ts +70 -0
  41. project_initializer-0.3.1/project_initializer/templates/frontend/src/app/shared/sidebar/sidebar.ts +36 -0
  42. project_initializer-0.3.1/project_initializer/templates/frontend/src/app/shared/sidebar/theme-toggle.integration.spec.ts +91 -0
  43. project_initializer-0.3.1/project_initializer/templates/frontend/src/assets/favicon.ico +0 -0
  44. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/src/index.html +2 -2
  45. project_initializer-0.3.1/project_initializer/templates/frontend/src/styles.css +201 -0
  46. project_initializer-0.3.1/project_initializer/templates-api-fastapi/CLAUDE.md +61 -0
  47. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/.claude/CLAUDE.md +6 -0
  48. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/alembic/env.py +7 -8
  49. project_initializer-0.3.1/project_initializer/templates-api-fastapi/api/alembic/versions/0001_create_items_table.py +53 -0
  50. project_initializer-0.3.1/project_initializer/templates-api-fastapi/api/alembic/versions/0002_create_users_table.py +48 -0
  51. project_initializer-0.3.1/project_initializer/templates-api-fastapi/api/app/api/v1/items.py +125 -0
  52. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/app/api/v1/router.py +4 -0
  53. project_initializer-0.3.1/project_initializer/templates-api-fastapi/api/app/api/v1/test.py +68 -0
  54. project_initializer-0.3.1/project_initializer/templates-api-fastapi/api/app/api/v1/users.py +19 -0
  55. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/app/database.py +3 -3
  56. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/app/dependencies.py +22 -31
  57. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/app/exceptions.py +0 -1
  58. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/app/main.py +36 -13
  59. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/app/middleware/logging.py +0 -1
  60. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/app/middleware/security.py +1 -1
  61. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/app/models/__init__.py +2 -0
  62. project_initializer-0.3.1/project_initializer/templates-api-fastapi/api/app/models/item.py +41 -0
  63. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/app/repositories/__init__.py +4 -4
  64. project_initializer-0.3.1/project_initializer/templates-api-fastapi/api/app/repositories/item.py +14 -0
  65. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/app/schemas/__init__.py +28 -44
  66. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/app/schemas/chatbot.py +0 -2
  67. project_initializer-0.3.1/project_initializer/templates-api-fastapi/api/app/schemas/item.py +49 -0
  68. project_initializer-0.3.1/project_initializer/templates-api-fastapi/api/app/schemas/user.py +37 -0
  69. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/app/services/__init__.py +2 -4
  70. project_initializer-0.3.1/project_initializer/templates-api-fastapi/api/app/services/item_service.py +56 -0
  71. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/app/utils/__init__.py +2 -12
  72. project_initializer-0.3.1/project_initializer/templates-api-fastapi/api/app/utils/audit.py +25 -0
  73. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/baml_client/__init__.py +48 -48
  74. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/baml_client/async_client.py +182 -182
  75. project_initializer-0.3.1/project_initializer/templates-api-fastapi/api/baml_client/inlinedbaml.py +21 -0
  76. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/baml_client/parser.py +46 -46
  77. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/baml_client/runtime.py +349 -349
  78. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/baml_client/sync_client.py +192 -192
  79. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/baml_client/type_builder.py +43 -42
  80. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/baml_client/watchers.py +33 -32
  81. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/baml_src/generators.baml +1 -1
  82. project_initializer-0.3.1/project_initializer/templates-api-fastapi/api/requirements.txt +39 -0
  83. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/tests/conftest.py +1 -1
  84. project_initializer-0.3.1/project_initializer/templates-api-fastapi/api/tests/e2e/test_app_boot.py +42 -0
  85. project_initializer-0.3.1/project_initializer/templates-api-fastapi/api/tests/e2e/test_openapi_metadata.py +95 -0
  86. project_initializer-0.3.1/project_initializer/templates-api-fastapi/api/tests/integration/test_health.py +25 -0
  87. project_initializer-0.3.1/project_initializer/templates-api-fastapi/api/tests/integration/test_items_auth.py +58 -0
  88. project_initializer-0.3.1/project_initializer/templates-api-fastapi/api/tests/integration/test_items_router.py +232 -0
  89. project_initializer-0.3.1/project_initializer/templates-api-fastapi/api/tests/integration/test_test_routes.py +76 -0
  90. project_initializer-0.3.1/project_initializer/templates-api-fastapi/api/tests/integration/test_users_me.py +72 -0
  91. project_initializer-0.3.1/project_initializer/templates-api-fastapi/api/tests/unit/test_item_model.py +74 -0
  92. project_initializer-0.3.1/project_initializer/templates-api-fastapi/api/tests/unit/test_item_service.py +95 -0
  93. project_initializer-0.3.1/project_initializer/templates-api-fastapi/api/tests/unit/test_schemas.py +51 -0
  94. project_initializer-0.3.1/project_initializer/templates-api-fastapi/api/tests/unit/test_user_schemas.py +129 -0
  95. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/baml_src/generators.baml +1 -1
  96. {project_initializer-0.2.1/project_initializer/templates-supabase-nestjs → project_initializer-0.3.1/project_initializer/templates-api-nestjs}/api/package.json +25 -25
  97. project_initializer-0.3.1/project_initializer/templates-api-nestjs/api/src/prisma/prisma-ssl.util.spec.ts +41 -0
  98. project_initializer-0.3.1/project_initializer/templates-api-nestjs/api/src/prisma/prisma-ssl.util.ts +37 -0
  99. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/prisma/prisma.service.ts +8 -2
  100. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/tsconfig.json +3 -1
  101. project_initializer-0.3.1/project_initializer/templates-asyncdb-fastapi/api/app/database_async.py +67 -0
  102. project_initializer-0.3.1/project_initializer/templates-asyncdb-fastapi/api/app/repositories/base_async.py +84 -0
  103. project_initializer-0.3.1/project_initializer/templates-asyncdb-fastapi/api/tests/unit/test_async_db.py +114 -0
  104. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-fastapi/api/.env.example +5 -5
  105. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-fastapi/api/alembic/env.py +7 -8
  106. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-fastapi/api/app/api/v1/auth.py +6 -1
  107. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-fastapi/api/app/api/v1/router.py +4 -0
  108. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-fastapi/api/app/config.py +3 -3
  109. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-fastapi/api/app/database.py +3 -3
  110. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-fastapi/api/app/dependencies.py +12 -11
  111. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-fastapi/api/app/models/__init__.py +2 -0
  112. project_initializer-0.3.1/project_initializer/templates-supabase-fastapi/api/requirements.txt +33 -0
  113. project_initializer-0.3.1/project_initializer/templates-supabase-fastapi/api/tests/integration/test_auth.py +60 -0
  114. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-nestjs/api/.env.example +5 -5
  115. {project_initializer-0.2.1/project_initializer/templates-api-nestjs → project_initializer-0.3.1/project_initializer/templates-supabase-nestjs}/api/package.json +26 -24
  116. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-token-fastapi/api/.env.example +3 -0
  117. project_initializer-0.3.1/project_initializer/templates-token-fastapi/api/app/api/v1/auth.py +162 -0
  118. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-token-fastapi/api/app/api/v1/router.py +4 -0
  119. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-token-fastapi/api/app/config.py +5 -0
  120. project_initializer-0.3.1/project_initializer/templates-token-fastapi/api/app/core/security.py +68 -0
  121. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-token-fastapi/api/app/dependencies.py +71 -25
  122. project_initializer-0.3.1/project_initializer/templates-token-fastapi/api/tests/integration/test_auth.py +72 -0
  123. project_initializer-0.3.1/project_initializer/templates-token-fastapi/api/tests/integration/test_jwt_auth.py +192 -0
  124. project_initializer-0.3.1/project_initializer/templates-token-fastapi/api/tests/unit/test_jwt_dependencies.py +120 -0
  125. project_initializer-0.3.1/project_initializer/templates-token-fastapi/api/tests/unit/test_security.py +131 -0
  126. {project_initializer-0.2.1 → project_initializer-0.3.1/project_initializer.egg-info}/PKG-INFO +44 -9
  127. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer.egg-info/SOURCES.txt +76 -3
  128. project_initializer-0.3.1/project_initializer.egg-info/requires.txt +4 -0
  129. {project_initializer-0.2.1 → project_initializer-0.3.1}/pyproject.toml +22 -4
  130. project_initializer-0.3.1/tests/test_async_db_flag.py +155 -0
  131. project_initializer-0.3.1/tests/test_asyncdb_overlay.py +56 -0
  132. project_initializer-0.3.1/tests/test_ci_workflow_scope.py +111 -0
  133. project_initializer-0.3.1/tests/test_cli_parser.py +74 -0
  134. project_initializer-0.3.1/tests/test_cli_validation.py +42 -0
  135. project_initializer-0.3.1/tests/test_docs_scope.py +38 -0
  136. project_initializer-0.3.1/tests/test_docs_sync_async.py +59 -0
  137. project_initializer-0.3.1/tests/test_docs_token_validate.py +44 -0
  138. project_initializer-0.3.1/tests/test_docs_tutorial_mapping.py +45 -0
  139. project_initializer-0.3.1/tests/test_env_generator_jwt.py +52 -0
  140. project_initializer-0.3.1/tests/test_file_transforms.py +186 -0
  141. project_initializer-0.3.1/tests/test_integration_build.py +165 -0
  142. project_initializer-0.3.1/tests/test_nestjs_build_config.py +58 -0
  143. project_initializer-0.3.1/tests/test_scope_routing.py +80 -0
  144. project_initializer-0.3.1/tests/test_scope_scaffold.py +178 -0
  145. project_initializer-0.3.1/tests/test_select_layers.py +62 -0
  146. project_initializer-0.2.1/project_initializer/cli.py +0 -196
  147. project_initializer-0.2.1/project_initializer/templates/.DS_Store +0 -0
  148. project_initializer-0.2.1/project_initializer/templates/frontend/src/app/app.routes.ts +0 -19
  149. project_initializer-0.2.1/project_initializer/templates/frontend/src/app/shared/layout/layout.html +0 -25
  150. project_initializer-0.2.1/project_initializer/templates/frontend/src/app/shared/sidebar/sidebar.html +0 -38
  151. project_initializer-0.2.1/project_initializer/templates/frontend/src/app/shared/sidebar/sidebar.ts +0 -32
  152. project_initializer-0.2.1/project_initializer/templates/frontend/src/styles.css +0 -41
  153. project_initializer-0.2.1/project_initializer/templates-api-fastapi/CLAUDE.md +0 -49
  154. project_initializer-0.2.1/project_initializer/templates-api-fastapi/api/app/api/v1/test.py +0 -242
  155. project_initializer-0.2.1/project_initializer/templates-api-fastapi/api/baml_client/inlinedbaml.py +0 -21
  156. project_initializer-0.2.1/project_initializer/templates-api-fastapi/api/requirements.txt +0 -34
  157. project_initializer-0.2.1/project_initializer/templates-supabase-fastapi/api/requirements.txt +0 -33
  158. project_initializer-0.2.1/project_initializer/templates-token-fastapi/api/app/api/v1/auth.py +0 -44
  159. {project_initializer-0.2.1 → project_initializer-0.3.1}/LICENSE +0 -0
  160. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/py.typed +0 -0
  161. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/.env.example +0 -0
  162. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/.gitignore +0 -0
  163. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/.vscode/extensions.json +0 -0
  164. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/.vscode/launch.json +0 -0
  165. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/.vscode/settings.json +0 -0
  166. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/.vscode/tasks.json +0 -0
  167. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/CLAUDE.md +0 -0
  168. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/LICENSE +0 -0
  169. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/MANIFEST.in +0 -0
  170. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/README.md +0 -0
  171. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/.claude/CLAUDE.md +0 -0
  172. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/.editorconfig +0 -0
  173. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/.gitignore +0 -0
  174. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/.postcssrc.json +0 -0
  175. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/.vscode/extensions.json +0 -0
  176. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/.vscode/launch.json +0 -0
  177. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/.vscode/tasks.json +0 -0
  178. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/README.md +0 -0
  179. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/angular.json +0 -0
  180. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/nginx.conf +0 -0
  181. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/public/favicon.ico +0 -0
  182. /project_initializer-0.2.1/project_initializer/templates/frontend/src/app/shared/sidebar/sidebar.css → /project_initializer-0.3.1/project_initializer/templates/frontend/src/app/app.css +0 -0
  183. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/src/app/app.html +0 -0
  184. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/src/app/app.spec.ts +0 -0
  185. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/src/app/app.ts +0 -0
  186. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/src/app/models/chat.model.ts +0 -0
  187. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/src/app/pages/chatbot/chatbot.html +0 -0
  188. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/src/app/services/chat.service.ts +0 -0
  189. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/src/app/shared/layout/layout.css +0 -0
  190. /project_initializer-0.2.1/project_initializer/templates/frontend/src/assets/favicon.ico → /project_initializer-0.3.1/project_initializer/templates/frontend/src/app/shared/sidebar/sidebar.css +0 -0
  191. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/src/environments/environment.model.ts +0 -0
  192. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/src/environments/environment.prod.ts +0 -0
  193. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/src/environments/environment.ts +0 -0
  194. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/src/main.ts +0 -0
  195. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/tsconfig.app.json +0 -0
  196. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/tsconfig.json +0 -0
  197. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/frontend/tsconfig.spec.json +0 -0
  198. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates/pyproject.toml +0 -0
  199. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/.vscode/extensions.json +0 -0
  200. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/.vscode/launch.json +0 -0
  201. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/.vscode/settings.json +0 -0
  202. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/.vscode/tasks.json +0 -0
  203. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/README.md +0 -0
  204. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/.dockerignore +0 -0
  205. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/.env.example +0 -0
  206. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/Dockerfile +0 -0
  207. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/README.md +0 -0
  208. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/alembic/README +0 -0
  209. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/alembic/script.py.mako +0 -0
  210. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/alembic/versions/.gitkeep +0 -0
  211. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/alembic.ini +0 -0
  212. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/app/__init__.py +0 -0
  213. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/app/api/__init__.py +0 -0
  214. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/app/api/v1/__init__.py +0 -0
  215. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/app/api/v1/chatbot.py +0 -0
  216. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/app/config.py +0 -0
  217. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/app/core/__init__.py +0 -0
  218. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/app/middleware/__init__.py +0 -0
  219. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/app/middleware/rate_limiting.py +0 -0
  220. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/app/models/base.py +0 -0
  221. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/app/models/user.py +0 -0
  222. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/app/repositories/base.py +0 -0
  223. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/app/services/chatbot_service.py +0 -0
  224. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/baml_client/config.py +0 -0
  225. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/baml_client/globals.py +0 -0
  226. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/baml_client/stream_types.py +0 -0
  227. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/baml_client/tracing.py +0 -0
  228. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/baml_client/type_map.py +0 -0
  229. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/baml_client/types.py +0 -0
  230. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/baml_src/chatbot.baml +0 -0
  231. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/baml_src/clients.baml +0 -0
  232. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/entrypoint.sh +0 -0
  233. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/pytest.ini +0 -0
  234. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/scripts/__init__.py +0 -0
  235. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/tests/__init__.py +0 -0
  236. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/tests/e2e/__init__.py +0 -0
  237. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/tests/integration/__init__.py +0 -0
  238. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/api/tests/unit/__init__.py +0 -0
  239. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/docker-compose.yml +0 -0
  240. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-fastapi/frontend/nginx.conf +0 -0
  241. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/.vscode/extensions.json +0 -0
  242. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/.vscode/launch.json +0 -0
  243. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/.vscode/settings.json +0 -0
  244. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/.vscode/tasks.json +0 -0
  245. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/CLAUDE.md +0 -0
  246. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/README.md +0 -0
  247. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/.claude/CLAUDE.md +0 -0
  248. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/.dockerignore +0 -0
  249. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/.env.example +0 -0
  250. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/.gitignore +0 -0
  251. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/Dockerfile +0 -0
  252. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/README.md +0 -0
  253. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/baml_client/async_client.ts +0 -0
  254. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/baml_client/async_request.ts +0 -0
  255. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/baml_client/config.ts +0 -0
  256. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/baml_client/globals.ts +0 -0
  257. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/baml_client/index.ts +0 -0
  258. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/baml_client/inlinedbaml.ts +0 -0
  259. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/baml_client/parser.ts +0 -0
  260. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/baml_client/partial_types.ts +0 -0
  261. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/baml_client/sync_client.ts +0 -0
  262. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/baml_client/sync_request.ts +0 -0
  263. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/baml_client/tracing.ts +0 -0
  264. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/baml_client/type_builder.ts +0 -0
  265. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/baml_client/types.ts +0 -0
  266. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/baml_client/watchers.ts +0 -0
  267. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/baml_src/chatbot.baml +0 -0
  268. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/baml_src/clients.baml +0 -0
  269. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/entrypoint.sh +0 -0
  270. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/nest-cli.json +0 -0
  271. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/prisma/migrations/.gitkeep +0 -0
  272. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/prisma/schema.prisma +0 -0
  273. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/prisma.config.ts +0 -0
  274. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/app.module.ts +0 -0
  275. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/common/decorators/current-user.decorator.ts +0 -0
  276. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/common/decorators/public.decorator.ts +0 -0
  277. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/common/exceptions/api.exceptions.ts +0 -0
  278. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/common/filters/http-exception.filter.ts +0 -0
  279. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/common/filters/index.ts +0 -0
  280. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/common/filters/prisma-exception.filter.ts +0 -0
  281. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/common/interceptors/transform.interceptor.ts +0 -0
  282. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/common/middleware/logging.middleware.ts +0 -0
  283. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/main.ts +0 -0
  284. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/modules/auth/auth.controller.ts +0 -0
  285. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/modules/auth/auth.module.ts +0 -0
  286. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/modules/auth/auth.service.ts +0 -0
  287. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/modules/auth/dto/auth.dto.ts +0 -0
  288. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/modules/chatbot/chatbot.controller.ts +0 -0
  289. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/modules/chatbot/chatbot.module.ts +0 -0
  290. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/modules/chatbot/chatbot.service.ts +0 -0
  291. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/modules/chatbot/dto/chat.dto.ts +0 -0
  292. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/modules/health/health.controller.ts +0 -0
  293. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/modules/health/health.module.ts +0 -0
  294. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/modules/test/dto/echo.dto.ts +0 -0
  295. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/modules/test/dto/item.dto.ts +0 -0
  296. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/modules/test/test.controller.ts +0 -0
  297. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/modules/test/test.module.ts +0 -0
  298. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/modules/test/test.service.ts +0 -0
  299. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/src/prisma/prisma.module.ts +0 -0
  300. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/api/tsconfig.build.json +0 -0
  301. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/docker-compose.yml +0 -0
  302. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-api-nestjs/frontend/nginx.conf +0 -0
  303. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-fastapi/README.md +0 -0
  304. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-fastapi/api/app/models/user.py +0 -0
  305. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-fastapi/api/entrypoint.sh +0 -0
  306. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-fastapi/docker-compose.yml +0 -0
  307. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-frontend/frontend/package.json +0 -0
  308. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-frontend/frontend/src/app/app.config.ts +0 -0
  309. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-frontend/frontend/src/app/app.routes.ts +0 -0
  310. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-frontend/frontend/src/app/auth/forgot-password/forgot-password.css +0 -0
  311. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-frontend/frontend/src/app/auth/forgot-password/forgot-password.html +0 -0
  312. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-frontend/frontend/src/app/auth/forgot-password/forgot-password.ts +0 -0
  313. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-frontend/frontend/src/app/auth/login/login.css +0 -0
  314. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-frontend/frontend/src/app/auth/login/login.html +0 -0
  315. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-frontend/frontend/src/app/auth/login/login.ts +0 -0
  316. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-frontend/frontend/src/app/auth/update-password/update-password.css +0 -0
  317. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-frontend/frontend/src/app/auth/update-password/update-password.html +0 -0
  318. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-frontend/frontend/src/app/auth/update-password/update-password.ts +0 -0
  319. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-frontend/frontend/src/app/guards/auth.guard.ts +0 -0
  320. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-frontend/frontend/src/app/interceptors/auth.interceptor.ts +0 -0
  321. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-frontend/frontend/src/app/services/auth.service.ts +0 -0
  322. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-frontend/frontend/src/app/shared/sidebar/sidebar.html +0 -0
  323. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-frontend/frontend/src/app/shared/sidebar/sidebar.ts +0 -0
  324. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-frontend/frontend/src/environments/environment.model.ts +0 -0
  325. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-frontend/frontend/src/environments/environment.prod.ts +0 -0
  326. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-frontend/frontend/src/environments/environment.ts +0 -0
  327. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-nestjs/README.md +0 -0
  328. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-nestjs/api/entrypoint.sh +0 -0
  329. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-nestjs/api/prisma/schema.prisma +0 -0
  330. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-nestjs/api/src/app.module.ts +0 -0
  331. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-nestjs/api/src/modules/auth/auth.controller.ts +0 -0
  332. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-nestjs/api/src/modules/auth/auth.guard.ts +0 -0
  333. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-nestjs/api/src/modules/auth/auth.module.ts +0 -0
  334. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-nestjs/api/src/modules/auth/auth.service.ts +0 -0
  335. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-nestjs/api/src/modules/auth/dto/auth.dto.ts +0 -0
  336. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-supabase-nestjs/docker-compose.yml +0 -0
  337. /project_initializer-0.2.1/project_initializer/templates-token-frontend/frontend/src/app/auth/login/login.css → /project_initializer-0.3.1/project_initializer/templates-token-fastapi/api/tests/unit/__init__.py +0 -0
  338. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-token-frontend/frontend/src/app/app.config.ts +0 -0
  339. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-token-frontend/frontend/src/app/app.routes.ts +0 -0
  340. /project_initializer-0.2.1/project_initializer/templates/frontend/src/app/app.css → /project_initializer-0.3.1/project_initializer/templates-token-frontend/frontend/src/app/auth/login/login.css +0 -0
  341. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-token-frontend/frontend/src/app/auth/login/login.html +0 -0
  342. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-token-frontend/frontend/src/app/auth/login/login.ts +0 -0
  343. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-token-frontend/frontend/src/app/guards/auth.guard.ts +0 -0
  344. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-token-frontend/frontend/src/app/interceptors/auth.interceptor.ts +0 -0
  345. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-token-frontend/frontend/src/app/services/auth.service.ts +0 -0
  346. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-token-frontend/frontend/src/app/shared/sidebar/sidebar.html +0 -0
  347. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-token-frontend/frontend/src/app/shared/sidebar/sidebar.ts +0 -0
  348. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-token-nestjs/api/.env.example +0 -0
  349. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-token-nestjs/api/src/app.module.ts +0 -0
  350. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-token-nestjs/api/src/modules/auth/auth.controller.ts +0 -0
  351. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-token-nestjs/api/src/modules/auth/auth.guard.ts +0 -0
  352. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-token-nestjs/api/src/modules/auth/auth.module.ts +0 -0
  353. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-token-nestjs/api/src/modules/auth/auth.service.ts +0 -0
  354. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer/templates-token-nestjs/api/src/modules/auth/dto/auth.dto.ts +0 -0
  355. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer.egg-info/dependency_links.txt +0 -0
  356. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer.egg-info/entry_points.txt +0 -0
  357. {project_initializer-0.2.1 → project_initializer-0.3.1}/project_initializer.egg-info/top_level.txt +0 -0
  358. {project_initializer-0.2.1 → project_initializer-0.3.1}/setup.cfg +0 -0
@@ -16,6 +16,8 @@ recursive-include project_initializer/templates-token-frontend *
16
16
  recursive-include project_initializer/templates-token-frontend .*
17
17
  recursive-include project_initializer/templates-supabase-frontend *
18
18
  recursive-include project_initializer/templates-supabase-frontend .*
19
+ recursive-include project_initializer/templates-asyncdb-fastapi *
20
+ recursive-include project_initializer/templates-asyncdb-fastapi .*
19
21
  include project_initializer/py.typed
20
22
  include project_initializer/templates/.gitignore
21
23
  include project_initializer/templates/.env.example
@@ -1,16 +1,15 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: project-initializer
3
- Version: 0.2.1
3
+ Version: 0.3.1
4
4
  Summary: CLI tool to scaffold full-stack projects with FastAPI or NestJS, Angular, and Docker
5
5
  Author: Silvio Baratto
6
- License: MIT
6
+ License-Expression: MIT
7
7
  Project-URL: Homepage, https://github.com/silviobaratto/project-initializer
8
8
  Project-URL: Repository, https://github.com/silviobaratto/project-initializer
9
9
  Keywords: cli,scaffold,fastapi,nestjs,angular,docker,project-generator
10
10
  Classifier: Development Status :: 3 - Alpha
11
11
  Classifier: Environment :: Console
12
12
  Classifier: Intended Audience :: Developers
13
- Classifier: License :: OSI Approved :: MIT License
14
13
  Classifier: Operating System :: OS Independent
15
14
  Classifier: Programming Language :: Python :: 3
16
15
  Classifier: Programming Language :: Python :: 3.10
@@ -20,6 +19,9 @@ Classifier: Topic :: Software Development :: Code Generators
20
19
  Requires-Python: >=3.10
21
20
  Description-Content-Type: text/markdown
22
21
  License-File: LICENSE
22
+ Provides-Extra: dev
23
+ Requires-Dist: ruff>=0.15; extra == "dev"
24
+ Requires-Dist: pytest>=9; extra == "dev"
23
25
  Dynamic: license-file
24
26
 
25
27
  # project-initializer
@@ -28,7 +30,7 @@ Dynamic: license-file
28
30
  [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/downloads/)
29
31
  [![CI](https://github.com/silviobaratto/project-initializer/actions/workflows/test-package.yml/badge.svg)](https://github.com/silviobaratto/project-initializer/actions)
30
32
 
31
- CLI tool to scaffold full-stack projects with **FastAPI** or **NestJS**, **Angular**, and **Docker** — with optional authentication via token or Supabase.
33
+ CLI tool to scaffold full-stack projects with **FastAPI** or **NestJS**, **Angular**, and **Docker** — with optional authentication via token or Supabase. Scaffold the full stack, or just the **backend** or **frontend** with `--scope`.
32
34
 
33
35
  ## Installation
34
36
 
@@ -83,6 +85,35 @@ project-initializer my-app --auth supabase # Supabase JWT auth + RLS
83
85
  - **Token auth** (`--auth token`) — Bearer-token middleware on the API. Frontend gets a login guard and an HTTP interceptor that attaches the token.
84
86
  - **Supabase auth** (`--auth supabase`) — Supabase JWT validation on the API. Frontend integrates `@supabase/supabase-js` for login/signup. Docker Compose omits the local `db` service since Supabase hosts the database.
85
87
 
88
+ ## Project Scope (full-stack / backend-only / frontend-only)
89
+
90
+ By default the CLI scaffolds both halves (`api/` + `frontend/`). Use `--scope` to generate only one:
91
+
92
+ ```bash
93
+ project-initializer my-app # fullstack (default): api + frontend
94
+ project-initializer my-app --scope api # backend only — no frontend/, no frontend service
95
+ project-initializer my-app --scope frontend # frontend only — Angular app, no api/
96
+ ```
97
+
98
+ - **`--scope api`** — emits `api/` + `docker-compose.yml` (without the `frontend` service) + `api/.env`. Combine with `--fastapi`/`--nestjs`/`--auth` as usual.
99
+ - **`--scope frontend`** — emits just the Angular `frontend/` (nginx `/api/` proxy stripped). Cannot be combined with `--fastapi`/`--nestjs`/`--auth` (those are backend concerns).
100
+ - **`--scope fullstack`** (default) — both halves, current behavior.
101
+
102
+ ## Async Database (opt-in)
103
+
104
+ FastAPI backends scaffold the **sync** SQLAlchemy path by default — sync `def` path operations run in Starlette's threadpool, so a blocking `Session` never stalls the event loop. This is the recommended default per the FastAPI tutorial.
105
+
106
+ Pass `--async-db` to additionally lay down the **async** SQLAlchemy overlay (async engine + `AsyncSession` + `get_async_db` dependency, asyncpg driver):
107
+
108
+ ```bash
109
+ project-initializer my-app --async-db # fullstack + async DB path
110
+ project-initializer my-app --scope api --async-db # backend only + async DB path
111
+ ```
112
+
113
+ - FastAPI only — rejected with `--nestjs` and with `--scope frontend`.
114
+ - Additive: the sync path stays the default; the async modules are an isolated overlay you wire in explicitly.
115
+ - See the generated `api/.claude/CLAUDE.md` for the sync-vs-async convention (pick the keyword from the I/O, not by style).
116
+
86
117
  ## All 6 Variants
87
118
 
88
119
  | Command | Backend | Auth |
@@ -97,9 +128,12 @@ project-initializer my-app --auth supabase # Supabase JWT auth + RLS
97
128
  Additional flags:
98
129
 
99
130
  ```bash
100
- project-initializer my-project --force # Overwrite existing files
101
- project-initializer . # Scaffold in current directory
102
- project-initializer --version # Show version
131
+ project-initializer my-project --scope api # Backend only
132
+ project-initializer my-project --scope frontend # Frontend only
133
+ project-initializer my-project --async-db # FastAPI async SQLAlchemy path (opt-in)
134
+ project-initializer my-project --force # Overwrite existing files
135
+ project-initializer . # Scaffold in current directory
136
+ project-initializer --version # Show version
103
137
  ```
104
138
 
105
139
  ## Generated Project Structure
@@ -135,7 +169,8 @@ The CLI auto-generates `api/.env` based on the chosen variant. A root `.env.exam
135
169
  For Supabase variants, configure these in `api/.env`:
136
170
  ```
137
171
  SUPABASE_URL=https://your-project.supabase.co
138
- SUPABASE_PUBLISHABLE_KEY=your-anon-key
172
+ SUPABASE_PUBLISHABLE_KEY=sb_publishable_... # client-side (replaces legacy anon key)
173
+ SUPABASE_SECRET_KEY=sb_secret_... # server-side, bypasses RLS (replaces service_role)
139
174
  ```
140
175
 
141
176
  ## Development
@@ -164,7 +199,7 @@ npm run test # Run tests
164
199
 
165
200
  ```bash
166
201
  cd frontend
167
- npm install
202
+ npm install --legacy-peer-deps
168
203
  ng serve # Dev server on :4200
169
204
  ng build # Production build
170
205
  ng test # Unit tests
@@ -4,7 +4,7 @@
4
4
  [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/downloads/)
5
5
  [![CI](https://github.com/silviobaratto/project-initializer/actions/workflows/test-package.yml/badge.svg)](https://github.com/silviobaratto/project-initializer/actions)
6
6
 
7
- CLI tool to scaffold full-stack projects with **FastAPI** or **NestJS**, **Angular**, and **Docker** — with optional authentication via token or Supabase.
7
+ CLI tool to scaffold full-stack projects with **FastAPI** or **NestJS**, **Angular**, and **Docker** — with optional authentication via token or Supabase. Scaffold the full stack, or just the **backend** or **frontend** with `--scope`.
8
8
 
9
9
  ## Installation
10
10
 
@@ -59,6 +59,35 @@ project-initializer my-app --auth supabase # Supabase JWT auth + RLS
59
59
  - **Token auth** (`--auth token`) — Bearer-token middleware on the API. Frontend gets a login guard and an HTTP interceptor that attaches the token.
60
60
  - **Supabase auth** (`--auth supabase`) — Supabase JWT validation on the API. Frontend integrates `@supabase/supabase-js` for login/signup. Docker Compose omits the local `db` service since Supabase hosts the database.
61
61
 
62
+ ## Project Scope (full-stack / backend-only / frontend-only)
63
+
64
+ By default the CLI scaffolds both halves (`api/` + `frontend/`). Use `--scope` to generate only one:
65
+
66
+ ```bash
67
+ project-initializer my-app # fullstack (default): api + frontend
68
+ project-initializer my-app --scope api # backend only — no frontend/, no frontend service
69
+ project-initializer my-app --scope frontend # frontend only — Angular app, no api/
70
+ ```
71
+
72
+ - **`--scope api`** — emits `api/` + `docker-compose.yml` (without the `frontend` service) + `api/.env`. Combine with `--fastapi`/`--nestjs`/`--auth` as usual.
73
+ - **`--scope frontend`** — emits just the Angular `frontend/` (nginx `/api/` proxy stripped). Cannot be combined with `--fastapi`/`--nestjs`/`--auth` (those are backend concerns).
74
+ - **`--scope fullstack`** (default) — both halves, current behavior.
75
+
76
+ ## Async Database (opt-in)
77
+
78
+ FastAPI backends scaffold the **sync** SQLAlchemy path by default — sync `def` path operations run in Starlette's threadpool, so a blocking `Session` never stalls the event loop. This is the recommended default per the FastAPI tutorial.
79
+
80
+ Pass `--async-db` to additionally lay down the **async** SQLAlchemy overlay (async engine + `AsyncSession` + `get_async_db` dependency, asyncpg driver):
81
+
82
+ ```bash
83
+ project-initializer my-app --async-db # fullstack + async DB path
84
+ project-initializer my-app --scope api --async-db # backend only + async DB path
85
+ ```
86
+
87
+ - FastAPI only — rejected with `--nestjs` and with `--scope frontend`.
88
+ - Additive: the sync path stays the default; the async modules are an isolated overlay you wire in explicitly.
89
+ - See the generated `api/.claude/CLAUDE.md` for the sync-vs-async convention (pick the keyword from the I/O, not by style).
90
+
62
91
  ## All 6 Variants
63
92
 
64
93
  | Command | Backend | Auth |
@@ -73,9 +102,12 @@ project-initializer my-app --auth supabase # Supabase JWT auth + RLS
73
102
  Additional flags:
74
103
 
75
104
  ```bash
76
- project-initializer my-project --force # Overwrite existing files
77
- project-initializer . # Scaffold in current directory
78
- project-initializer --version # Show version
105
+ project-initializer my-project --scope api # Backend only
106
+ project-initializer my-project --scope frontend # Frontend only
107
+ project-initializer my-project --async-db # FastAPI async SQLAlchemy path (opt-in)
108
+ project-initializer my-project --force # Overwrite existing files
109
+ project-initializer . # Scaffold in current directory
110
+ project-initializer --version # Show version
79
111
  ```
80
112
 
81
113
  ## Generated Project Structure
@@ -111,7 +143,8 @@ The CLI auto-generates `api/.env` based on the chosen variant. A root `.env.exam
111
143
  For Supabase variants, configure these in `api/.env`:
112
144
  ```
113
145
  SUPABASE_URL=https://your-project.supabase.co
114
- SUPABASE_PUBLISHABLE_KEY=your-anon-key
146
+ SUPABASE_PUBLISHABLE_KEY=sb_publishable_... # client-side (replaces legacy anon key)
147
+ SUPABASE_SECRET_KEY=sb_secret_... # server-side, bypasses RLS (replaces service_role)
115
148
  ```
116
149
 
117
150
  ## Development
@@ -140,7 +173,7 @@ npm run test # Run tests
140
173
 
141
174
  ```bash
142
175
  cd frontend
143
- npm install
176
+ npm install --legacy-peer-deps
144
177
  ng serve # Dev server on :4200
145
178
  ng build # Production build
146
179
  ng test # Unit tests
@@ -1,3 +1,3 @@
1
1
  """Project Initializer - CLI tool to scaffold full-stack projects."""
2
2
 
3
- __version__ = "0.2.0"
3
+ __version__ = "0.3.0"
@@ -0,0 +1,391 @@
1
+ """CLI entry point for project-initializer."""
2
+
3
+ import argparse
4
+ import shutil
5
+ import sys
6
+ from collections.abc import Callable
7
+ from pathlib import Path
8
+
9
+ from . import __version__
10
+ from .env_generator import generate_env, parse_env
11
+ from .file_transforms import (
12
+ append_async_requirements,
13
+ filter_compose,
14
+ generate_frontend_compose,
15
+ strip_nginx_proxy_block,
16
+ )
17
+
18
+ FRAMEWORKS = ("fastapi", "nestjs")
19
+ AUTH_MODES = ("token", "supabase")
20
+ SCOPES = ("fullstack", "api", "frontend")
21
+
22
+ TEMPLATES_ROOT = Path(__file__).parent
23
+
24
+
25
+ def get_templates_dir() -> Path:
26
+ return TEMPLATES_ROOT / "templates"
27
+
28
+
29
+ def get_api_templates_dir(framework: str) -> Path:
30
+ return TEMPLATES_ROOT / f"templates-api-{framework}"
31
+
32
+
33
+ def get_auth_overlay_dir(auth_mode: str, framework: str) -> Path:
34
+ return TEMPLATES_ROOT / f"templates-{auth_mode}-{framework}"
35
+
36
+
37
+ def get_auth_frontend_overlay_dir(auth_mode: str) -> Path:
38
+ return TEMPLATES_ROOT / f"templates-{auth_mode}-frontend"
39
+
40
+
41
+ def get_asyncdb_overlay_dir() -> Path:
42
+ """Opt-in async SQLAlchemy overlay (FastAPI only), merged by --async-db."""
43
+ return TEMPLATES_ROOT / "templates-asyncdb-fastapi"
44
+
45
+
46
+ def _compose_handler(scope: str) -> Callable:
47
+ """File handler that filters docker-compose.yml for the given scope."""
48
+
49
+ def handle(path: Path) -> str | None:
50
+ if path.name == "docker-compose.yml":
51
+ return filter_compose(path.read_text(encoding="utf-8"), scope)
52
+ return None
53
+
54
+ return handle
55
+
56
+
57
+ def _nginx_handler() -> Callable:
58
+ """File handler that strips the /api/ proxy block from nginx.conf."""
59
+
60
+ def handle(path: Path) -> str | None:
61
+ if path.name == "nginx.conf":
62
+ return strip_nginx_proxy_block(path.read_text(encoding="utf-8"))
63
+ return None
64
+
65
+ return handle
66
+
67
+
68
+ def _requirements_handler() -> Callable:
69
+ """File handler that appends the async DB deps to api/requirements.txt."""
70
+
71
+ def handle(path: Path) -> str | None:
72
+ if path.name == "requirements.txt":
73
+ return append_async_requirements(path.read_text(encoding="utf-8"))
74
+ return None
75
+
76
+ return handle
77
+
78
+
79
+ def _combine(*handlers: Callable | None) -> Callable | None:
80
+ """Compose filename handlers into one transform; None if all are None.
81
+
82
+ Returning None when nothing applies preserves byte-identical pass-through
83
+ (the default scaffold). Handlers target disjoint filenames, so first
84
+ non-None wins is an unambiguous dispatch.
85
+ """
86
+ active = [handler for handler in handlers if handler is not None]
87
+ if not active:
88
+ return None
89
+
90
+ def transform(path: Path) -> str | None:
91
+ for handler in active:
92
+ result = handler(path)
93
+ if result is not None:
94
+ return result
95
+ return None
96
+
97
+ return transform
98
+
99
+
100
+ def select_layers(
101
+ scope: str,
102
+ framework: str,
103
+ auth: str | None,
104
+ async_db: bool = False,
105
+ ) -> list[tuple[Path, frozenset[str], Callable | None]]:
106
+ """Return the ordered merge layers for the requested scope.
107
+
108
+ Each tuple is (src_dir, skip_subdirs, file_transform). The frontend branch
109
+ MUST NOT consult ``framework`` — it is scope-only. When ``async_db`` is set
110
+ (FastAPI only), a requirements transform is composed onto the layers that
111
+ carry ``requirements.txt`` (the async overlay ships none), and the async
112
+ overlay is appended last.
113
+
114
+ Declarative data construction — exempt from the <10-line rule.
115
+ """
116
+ base = get_templates_dir()
117
+ api = get_api_templates_dir(framework)
118
+ want_async = async_db and framework == "fastapi"
119
+ reqs = _requirements_handler() if want_async else None
120
+
121
+ if scope == "fullstack":
122
+ layers: list[tuple[Path, frozenset[str], Callable | None]] = [
123
+ (base, frozenset(), None),
124
+ (api, frozenset(), _combine(reqs)),
125
+ ]
126
+ if auth:
127
+ layers.append((get_auth_overlay_dir(auth, framework), frozenset(), _combine(reqs)))
128
+ layers.append((get_auth_frontend_overlay_dir(auth), frozenset(), None))
129
+ if want_async:
130
+ layers.append((get_asyncdb_overlay_dir(), frozenset(), None))
131
+ return layers
132
+
133
+ if scope == "api":
134
+ compose = _compose_handler("api")
135
+ layers = [
136
+ (base, frozenset({"frontend"}), None),
137
+ (api, frozenset({"frontend"}), _combine(compose, reqs)),
138
+ ]
139
+ if auth:
140
+ layers.append(
141
+ (get_auth_overlay_dir(auth, framework), frozenset(), _combine(compose, reqs))
142
+ )
143
+ if want_async:
144
+ layers.append((get_asyncdb_overlay_dir(), frozenset(), None))
145
+ return layers
146
+
147
+ # scope == "frontend"
148
+ layers = [(base, frozenset(), _nginx_handler())]
149
+ if auth:
150
+ layers.append((get_auth_frontend_overlay_dir(auth), frozenset(), None))
151
+ return layers
152
+
153
+
154
+ def _copy_file(src: Path, dst: Path, file_transform: Callable | None) -> None:
155
+ """Copy src to dst, optionally transforming text content.
156
+
157
+ The transform receives the source Path and returns transformed text for
158
+ files it targets, or None to pass through to shutil.copy2 (binary-safe).
159
+ """
160
+ if file_transform is not None:
161
+ transformed = file_transform(src)
162
+ if transformed is not None:
163
+ dst.write_text(transformed, encoding="utf-8")
164
+ return
165
+ shutil.copy2(src, dst)
166
+
167
+
168
+ def copy_template(
169
+ dest_dir: Path,
170
+ project_name: str | None = None,
171
+ auth: str | None = None,
172
+ framework: str = "fastapi",
173
+ scope: str = "fullstack",
174
+ async_db: bool = False,
175
+ ) -> None:
176
+ """Copy template files to destination directory."""
177
+ skip_patterns = {
178
+ "__pycache__",
179
+ ".pyc",
180
+ "node_modules",
181
+ ".git",
182
+ ".env",
183
+ "*.egg-info",
184
+ "dist",
185
+ "build",
186
+ }
187
+
188
+ def should_skip(name: str) -> bool:
189
+ return any(
190
+ name == pattern or name.endswith(pattern.lstrip("*"))
191
+ for pattern in skip_patterns
192
+ )
193
+
194
+ def copy_tree(
195
+ src: Path,
196
+ dst: Path,
197
+ skip_subdirs: frozenset[str] = frozenset(),
198
+ file_transform: Callable | None = None,
199
+ ) -> None:
200
+ """Recursively copy directory tree, merging into existing dirs."""
201
+ dst.mkdir(parents=True, exist_ok=True)
202
+
203
+ for item in src.iterdir():
204
+ if should_skip(item.name):
205
+ continue
206
+ if item.is_dir() and item.name in skip_subdirs:
207
+ continue
208
+
209
+ dest_item = dst / item.name
210
+
211
+ if item.is_dir():
212
+ copy_tree(item, dest_item, frozenset(), file_transform)
213
+ else:
214
+ _copy_file(item, dest_item, file_transform)
215
+ print(f" Created: {dest_item.relative_to(dest_dir)}")
216
+
217
+ def require_dir(path: Path) -> None:
218
+ if not path.exists():
219
+ print(f"Error: Templates directory not found at {path}")
220
+ sys.exit(1)
221
+
222
+ auth_label = f" + {auth} auth" if auth else ""
223
+ print(f"Creating project in: {dest_dir}")
224
+ print(f"Framework: {framework}{auth_label}")
225
+ print("-" * 40)
226
+
227
+ for src, skip, transform in select_layers(scope, framework, auth, async_db):
228
+ require_dir(src)
229
+ copy_tree(src, dest_dir, skip, transform)
230
+
231
+ # Generate .env for the API (only when the api layer is present)
232
+ if scope in ("fullstack", "api"):
233
+ env_example_path = TEMPLATES_ROOT / "env_defaults.env"
234
+ source = parse_env(env_example_path) if env_example_path.exists() else {}
235
+ env_content = generate_env(framework, auth, source, use_placeholders=True)
236
+ api_env_path = dest_dir / "api" / ".env"
237
+ api_env_path.write_text(env_content, encoding="utf-8")
238
+ print(f" Created: {api_env_path.relative_to(dest_dir)}")
239
+
240
+ if scope == "frontend":
241
+ compose_path = dest_dir / "docker-compose.yml"
242
+ compose_path.write_text(generate_frontend_compose(), encoding="utf-8")
243
+ print(f" Created: {compose_path.relative_to(dest_dir)}")
244
+
245
+ print("-" * 40)
246
+ print("Project created successfully!")
247
+ print("\nNext steps:")
248
+ print(f" cd {dest_dir.name}")
249
+ print(" # Edit api/.env with your real keys")
250
+ if auth == "supabase":
251
+ print(" # Configure SUPABASE_URL and SUPABASE_PUBLISHABLE_KEY in api/.env")
252
+ print(" docker-compose up -d")
253
+ if framework == "nestjs":
254
+ print("\n # NestJS API development:")
255
+ print(" cd api && npm install && npm run start:dev")
256
+ else:
257
+ print("\n # FastAPI development:")
258
+ print(
259
+ " cd api && pip install -r requirements.txt && uvicorn app.main:app --reload"
260
+ )
261
+
262
+
263
+ def build_parser() -> argparse.ArgumentParser:
264
+ """Construct the CLI argument parser.
265
+
266
+ Declarative builder: registers all flags in a flat sequence and is
267
+ therefore exempt from the per-method line limit. ``framework`` defaults
268
+ to ``None`` (no ``set_defaults``) so callers can distinguish an explicit
269
+ ``--fastapi``/``--nestjs`` from the absent case; the ``"fastapi"`` default
270
+ is resolved in ``main()`` after parsing.
271
+ """
272
+ parser = argparse.ArgumentParser(
273
+ prog="project-initializer",
274
+ description="Initialize a new full-stack project with FastAPI or NestJS, Angular, and Docker",
275
+ )
276
+ parser.add_argument(
277
+ "project_name",
278
+ nargs="?",
279
+ default=".",
280
+ help="Name of the project directory to create (default: current directory)",
281
+ )
282
+ parser.add_argument(
283
+ "-v",
284
+ "--version",
285
+ action="version",
286
+ version=f"%(prog)s {__version__}",
287
+ )
288
+ parser.add_argument(
289
+ "-f",
290
+ "--force",
291
+ action="store_true",
292
+ help="Overwrite existing files without prompting",
293
+ )
294
+ parser.add_argument(
295
+ "--auth",
296
+ nargs="?",
297
+ const="token",
298
+ default=None,
299
+ choices=AUTH_MODES,
300
+ help="Auth mode: 'token' (simple token, default) or 'supabase'",
301
+ )
302
+ parser.add_argument(
303
+ "--scope",
304
+ choices=SCOPES,
305
+ default="fullstack",
306
+ help="Layers to scaffold: 'fullstack' (default), 'api', or 'frontend'",
307
+ )
308
+ parser.add_argument(
309
+ "--async-db",
310
+ dest="async_db",
311
+ action="store_true",
312
+ help="Add the opt-in async SQLAlchemy path (FastAPI only)",
313
+ )
314
+
315
+ framework_group = parser.add_mutually_exclusive_group()
316
+ framework_group.add_argument(
317
+ "--fastapi",
318
+ action="store_const",
319
+ const="fastapi",
320
+ dest="framework",
321
+ help="Use FastAPI backend (default)",
322
+ )
323
+ framework_group.add_argument(
324
+ "--nestjs",
325
+ action="store_const",
326
+ const="nestjs",
327
+ dest="framework",
328
+ help="Use NestJS backend",
329
+ )
330
+
331
+ return parser
332
+
333
+
334
+ def validate_scope(
335
+ scope: str,
336
+ framework: str | None,
337
+ auth: str | None,
338
+ async_db: bool = False,
339
+ ) -> list[str]:
340
+ """Return error messages for invalid --scope / framework / auth combos.
341
+
342
+ Pure function (no I/O); empty list means valid. ``framework``/``auth`` are
343
+ ``None`` when their flags were omitted, so ``--scope frontend`` alone is
344
+ accepted. ``--async-db`` is a FastAPI api concern: rejected for ``--nestjs``
345
+ and for ``--scope frontend``; ``api``/``fullstack`` accept all API options.
346
+ """
347
+ if scope == "frontend" and framework is not None:
348
+ return ["--scope frontend cannot be combined with --fastapi/--nestjs"]
349
+ if scope == "frontend" and auth is not None:
350
+ return ["--scope frontend cannot be combined with --auth"]
351
+ if async_db and framework == "nestjs":
352
+ return ["--async-db is a FastAPI option and cannot be combined with --nestjs"]
353
+ if async_db and scope == "frontend":
354
+ return ["--async-db cannot be combined with --scope frontend"]
355
+ return []
356
+
357
+
358
+ def main() -> None:
359
+ """Main entry point for the CLI."""
360
+ parser = build_parser()
361
+ args = parser.parse_args()
362
+ errors = validate_scope(args.scope, args.framework, args.auth, args.async_db)
363
+ if errors:
364
+ parser.error(errors[0])
365
+ framework = args.framework if args.framework is not None else "fastapi"
366
+
367
+ # Determine destination directory
368
+ if args.project_name == ".":
369
+ dest_dir = Path.cwd()
370
+ else:
371
+ dest_dir = Path.cwd() / args.project_name
372
+
373
+ # Check if directory exists and has content
374
+ if dest_dir.exists() and any(dest_dir.iterdir()) and not args.force:
375
+ response = input(f"Directory '{dest_dir}' is not empty. Continue? [y/N]: ")
376
+ if response.lower() != "y":
377
+ print("Aborted.")
378
+ sys.exit(0)
379
+
380
+ copy_template(
381
+ dest_dir,
382
+ args.project_name,
383
+ auth=args.auth,
384
+ framework=framework,
385
+ scope=args.scope,
386
+ async_db=args.async_db,
387
+ )
388
+
389
+
390
+ if __name__ == "__main__":
391
+ main()
@@ -38,7 +38,6 @@ def generate_env(
38
38
  is_supabase = auth == "supabase"
39
39
  is_token = auth == "token"
40
40
  is_fastapi = framework == "fastapi"
41
- is_nestjs = framework == "nestjs"
42
41
 
43
42
  def val(key: str, fallback: str = "") -> str:
44
43
  return source_env.get(key, fallback)
@@ -71,6 +70,9 @@ def generate_env(
71
70
  lines.append("")
72
71
  lines.append("# Authentication")
73
72
  lines.append(f"AUTH_TOKEN={val('AUTH_TOKEN')}")
73
+ lines.append(f"JWT_SECRET_KEY={val('JWT_SECRET_KEY', 'changeme')}")
74
+ lines.append("JWT_ALGORITHM=HS256")
75
+ lines.append("ACCESS_TOKEN_EXPIRE_MINUTES=30")
74
76
 
75
77
  # --- Server ---
76
78
  lines.append("")