fastapi-fullstack 0.2.7__tar.gz → 0.2.8__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 (1033) hide show
  1. fastapi_fullstack-0.2.8/PKG-INFO +1235 -0
  2. fastapi_fullstack-0.2.8/README.md +1188 -0
  3. fastapi_fullstack-0.2.8/fastapi_gen/cli.py +1445 -0
  4. fastapi_fullstack-0.2.8/fastapi_gen/config.py +970 -0
  5. fastapi_fullstack-0.2.8/fastapi_gen/prompts.py +1773 -0
  6. fastapi_fullstack-0.2.8/pyproject.toml +181 -0
  7. fastapi_fullstack-0.2.8/template/VARIABLES.md +464 -0
  8. fastapi_fullstack-0.2.8/template/cookiecutter.json +198 -0
  9. fastapi_fullstack-0.2.8/template/hooks/post_gen_project.py +1005 -0
  10. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/.claude/rules/architecture.md +138 -0
  11. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/CLAUDE.md +196 -0
  12. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/CONTRIBUTING.md +93 -0
  13. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/ENV_VARS.md +195 -0
  14. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/MANUAL_STEPS.md +216 -0
  15. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/Makefile +510 -0
  16. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/README.md +380 -0
  17. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/SECURITY.md +93 -0
  18. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/.env.example +403 -0
  19. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/Dockerfile +68 -0
  20. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/env.py +119 -0
  21. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0000_create_users.py +84 -0
  22. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0001_create_organization_tables.py +262 -0
  23. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0002_backfill_personal_orgs.py +145 -0
  24. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0003_add_is_app_admin.py +56 -0
  25. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0004_5_create_core_tables.py +333 -0
  26. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0004_create_audit_log.py +78 -0
  27. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0005_add_org_id_to_conversations_and_rag.py +121 -0
  28. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0006_backfill_org_id_on_conversations.py +73 -0
  29. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0007_create_knowledge_bases.py +99 -0
  30. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0008_backfill_default_kbs.py +165 -0
  31. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0009_conv_active_kb_ids.py +66 -0
  32. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0010_org_billing_seats.py +66 -0
  33. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0011_create_plan_price_tables.py +108 -0
  34. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0012_create_subscription_table.py +94 -0
  35. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0013_create_stripe_event_table.py +70 -0
  36. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0014_credits_usage_events.py +144 -0
  37. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0015_create_mv_usage_daily.py +62 -0
  38. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0016_user_onboarding_at.py +44 -0
  39. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0018_user_slash_commands.py +71 -0
  40. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0019_user_external_id.py +40 -0
  41. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0020_conversation_external_user_id.py +39 -0
  42. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0021_create_items.py +74 -0
  43. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/agents/__init__.py +65 -0
  44. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/agents/assistant.py +382 -0
  45. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/agents/crewai_assistant.py +652 -0
  46. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/agents/deepagents_assistant.py +785 -0
  47. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/agents/langchain_assistant.py +414 -0
  48. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/agents/langgraph_assistant.py +512 -0
  49. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/agents/pydantic_deep_assistant.py +418 -0
  50. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/__init__.py +24 -0
  51. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/datetime_tool.py +13 -0
  52. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/rag_tool.py +300 -0
  53. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/web_search.py +74 -0
  54. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/deps.py +1144 -0
  55. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/exception_handlers.py +110 -0
  56. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/__init__.py +201 -0
  57. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_conversations.py +211 -0
  58. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_stats.py +37 -0
  59. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_users.py +200 -0
  60. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/agent.py +308 -0
  61. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/auth.py +252 -0
  62. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/billing.py +368 -0
  63. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/channels.py +365 -0
  64. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/contact.py +29 -0
  65. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/conversations.py +1229 -0
  66. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/files.py +153 -0
  67. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/health.py +310 -0
  68. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/invitations.py +178 -0
  69. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/items.py +129 -0
  70. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/knowledge_bases.py +508 -0
  71. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/marketing.py +28 -0
  72. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/me_slash_commands.py +121 -0
  73. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/members.py +206 -0
  74. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/oauth.py +174 -0
  75. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/organizations.py +335 -0
  76. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/rag.py +448 -0
  77. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/slack_webhook.py +76 -0
  78. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/telegram_webhook.py +123 -0
  79. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/commands/channel.py +270 -0
  80. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/commands/cleanup.py +96 -0
  81. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/commands/create_app_admin.py +111 -0
  82. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/commands/rag.py +808 -0
  83. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/commands/sync_stripe_plans.py +203 -0
  84. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/core/audit.py +117 -0
  85. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/core/config.py +735 -0
  86. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/core/exceptions.py +130 -0
  87. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/core/middleware.py +102 -0
  88. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/core/security.py +192 -0
  89. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/__init__.py +66 -0
  90. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/audit_log.py +169 -0
  91. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/channel_bot.py +243 -0
  92. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/conversation.py +721 -0
  93. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/credit_transaction.py +240 -0
  94. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/item.py +60 -0
  95. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/knowledge_base.py +250 -0
  96. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/organization.py +727 -0
  97. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/plan.py +295 -0
  98. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/rag_document.py +212 -0
  99. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/session.py +245 -0
  100. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/stripe_event.py +101 -0
  101. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/subscription.py +167 -0
  102. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/user.py +399 -0
  103. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/user_slash_command.py +227 -0
  104. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/webhook.py +416 -0
  105. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/main.py +613 -0
  106. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/__init__.py +105 -0
  107. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/channel_bot.py +387 -0
  108. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/conversation.py +1422 -0
  109. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/credit_transaction.py +159 -0
  110. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/invitation.py +303 -0
  111. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/item.py +146 -0
  112. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/knowledge_base.py +295 -0
  113. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/member.py +310 -0
  114. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/message_rating.py +661 -0
  115. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/organization.py +457 -0
  116. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/plan.py +135 -0
  117. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/rag_document.py +270 -0
  118. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/stripe_event.py +99 -0
  119. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/subscription.py +171 -0
  120. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/usage_event.py +508 -0
  121. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/user.py +536 -0
  122. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/user_slash_command.py +168 -0
  123. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/schemas/admin.py +42 -0
  124. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/schemas/billing.py +208 -0
  125. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/schemas/contact.py +29 -0
  126. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/schemas/conversation.py +318 -0
  127. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/schemas/conversation_share.py +114 -0
  128. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/schemas/item.py +50 -0
  129. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/schemas/knowledge_base.py +63 -0
  130. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/schemas/marketing.py +23 -0
  131. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/schemas/organization.py +149 -0
  132. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/schemas/password_reset.py +44 -0
  133. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/schemas/user.py +77 -0
  134. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/schemas/user_slash_command.py +66 -0
  135. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/__init__.py +11 -0
  136. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/admin.py +180 -0
  137. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/agent.py +446 -0
  138. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/agent_invocation.py +692 -0
  139. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/agent_session.py +2396 -0
  140. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/anomaly_detection.py +229 -0
  141. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/__init__.py +13 -0
  142. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/checkout_service.py +249 -0
  143. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/credit_service.py +330 -0
  144. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/exceptions.py +43 -0
  145. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/facade.py +375 -0
  146. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/__init__.py +5 -0
  147. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/customer_events.py +90 -0
  148. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/invoice_events.py +231 -0
  149. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/payment_events.py +103 -0
  150. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/subscription_events.py +515 -0
  151. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/pricing.py +71 -0
  152. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/stripe_client.py +185 -0
  153. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/subscription_service.py +182 -0
  154. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/webhook_handler.py +178 -0
  155. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/channel_bot.py +446 -0
  156. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/channels/__init__.py +31 -0
  157. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/channels/router.py +673 -0
  158. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/channels/slack.py +253 -0
  159. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/channels/telegram.py +258 -0
  160. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/contact.py +52 -0
  161. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/conversation.py +1835 -0
  162. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/email/__init__.py +33 -0
  163. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/email/exceptions.py +33 -0
  164. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/__init__.py +5 -0
  165. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/base.py +33 -0
  166. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/log.py +45 -0
  167. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/resend.py +60 -0
  168. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/smtp.py +75 -0
  169. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/email/service.py +204 -0
  170. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/email/templates.py +50 -0
  171. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/file_storage.py +130 -0
  172. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/file_upload.py +553 -0
  173. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/invitation.py +605 -0
  174. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/item.py +104 -0
  175. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/knowledge_base.py +625 -0
  176. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/member.py +390 -0
  177. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/message_rating.py +1193 -0
  178. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/newsletter.py +45 -0
  179. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/organization.py +362 -0
  180. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/config.py +181 -0
  181. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/connectors/__init__.py +70 -0
  182. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/connectors/google_drive.py +204 -0
  183. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/connectors/s3.py +131 -0
  184. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/documents.py +1068 -0
  185. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/embeddings.py +301 -0
  186. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/ingestion.py +207 -0
  187. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/reranker.py +408 -0
  188. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/retrieval.py +392 -0
  189. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/sources/__init__.py +22 -0
  190. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/sources/base.py +120 -0
  191. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/sources/google_drive.py +148 -0
  192. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/sources/s3.py +95 -0
  193. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/vectorstore.py +622 -0
  194. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag_document.py +560 -0
  195. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag_status.py +55 -0
  196. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag_sync.py +299 -0
  197. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/__init__.py +5 -0
  198. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/rules.py +56 -0
  199. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/service.py +155 -0
  200. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/storage.py +138 -0
  201. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/sync_source.py +396 -0
  202. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/usage.py +232 -0
  203. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/user.py +498 -0
  204. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/user_slash_command.py +274 -0
  205. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/worker/__init__.py +3 -0
  206. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/worker/arq_app.py +85 -0
  207. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/worker/background/__init__.py +42 -0
  208. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/worker/background/channel.py +44 -0
  209. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/worker/background/rag.py +142 -0
  210. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/worker/celery_app.py +71 -0
  211. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/__init__.py +53 -0
  212. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/anomaly_tasks.py +54 -0
  213. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/cleanup_tasks.py +84 -0
  214. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/email_tasks.py +107 -0
  215. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/rag_tasks.py +466 -0
  216. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/schedules.py +54 -0
  217. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/pyproject.toml +409 -0
  218. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/tests/api/test_auth.py +255 -0
  219. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/tests/test_agents.py +272 -0
  220. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/tests/test_conversation_kb_toggle.py +164 -0
  221. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/tests/test_kb_scoping.py +314 -0
  222. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/tests/test_rbac_teams.py +316 -0
  223. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/tests/test_repositories_teams.py +501 -0
  224. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/tests/test_services.py +406 -0
  225. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/tests/test_services_conversation.py +904 -0
  226. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/tests/test_services_members.py +386 -0
  227. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/tests/test_services_organizations.py +260 -0
  228. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/tests/test_stripe_seats.py +221 -0
  229. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/tests/test_tenant_isolation.py +233 -0
  230. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/docker-compose.dev.yml +430 -0
  231. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/docker-compose.prod.yml +771 -0
  232. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/docker-compose.yml +479 -0
  233. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/docs/deploy.md +142 -0
  234. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/docs/howto/add-rag-source.md +180 -0
  235. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/docs/howto/add-sync-connector.md +273 -0
  236. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/docs/patterns.md +207 -0
  237. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/email_verification.html +17 -0
  238. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/email_verification.txt +11 -0
  239. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/invitation.html +17 -0
  240. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/invitation.txt +12 -0
  241. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/low_credits.html +17 -0
  242. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/low_credits.txt +10 -0
  243. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/magic_link.html +18 -0
  244. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/magic_link.txt +11 -0
  245. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/newsletter_welcome.html +15 -0
  246. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/newsletter_welcome.txt +7 -0
  247. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/password_reset.html +18 -0
  248. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/password_reset.txt +11 -0
  249. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/payment_failed.html +17 -0
  250. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/payment_failed.txt +12 -0
  251. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/payment_succeeded.html +18 -0
  252. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/payment_succeeded.txt +12 -0
  253. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/subscription_canceled.html +18 -0
  254. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/subscription_canceled.txt +10 -0
  255. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/subscription_changed.html +17 -0
  256. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/subscription_changed.txt +10 -0
  257. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/trial_ending.html +17 -0
  258. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/trial_ending.txt +12 -0
  259. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/trial_expired.html +17 -0
  260. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/trial_expired.txt +10 -0
  261. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/welcome.html +16 -0
  262. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/welcome.txt +12 -0
  263. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/content/blog/rag-defaults-that-age-well.mdx +81 -0
  264. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/content/blog/shipping-ai-saas-template.mdx +61 -0
  265. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/content/blog/streaming-tool-calls-without-tears.mdx +83 -0
  266. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/messages/en.json +887 -0
  267. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/messages/pl.json +887 -0
  268. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/next.config.ts +116 -0
  269. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/package.json +109 -0
  270. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/forgot-password/page.tsx +24 -0
  271. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/layout.tsx +94 -0
  272. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/login/page.tsx +30 -0
  273. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/magic-link-sent/page.tsx +74 -0
  274. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/register/page.tsx +29 -0
  275. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/reset-password/page.tsx +62 -0
  276. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/conversations/page.tsx +378 -0
  277. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/layout.tsx +31 -0
  278. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/page.tsx +283 -0
  279. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/ratings/page.tsx +427 -0
  280. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/stripe-events/page.tsx +599 -0
  281. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/system/page.tsx +328 -0
  282. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/users/page.tsx +364 -0
  283. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/credits/page.tsx +302 -0
  284. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/invoices/page.tsx +23 -0
  285. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/page.tsx +386 -0
  286. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/payment-methods/page.tsx +23 -0
  287. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/subscription/page.tsx +137 -0
  288. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/usage/page.tsx +284 -0
  289. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/chat/page.tsx +17 -0
  290. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/dashboard/page.tsx +437 -0
  291. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/invitations/[token]/page.tsx +82 -0
  292. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/kb/[id]/page.tsx +431 -0
  293. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/kb/page.tsx +60 -0
  294. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/layout.tsx +25 -0
  295. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/orgs/[id]/members/page.tsx +299 -0
  296. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/orgs/page.tsx +206 -0
  297. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/profile/page.tsx +5 -0
  298. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/rag/page.tsx +1054 -0
  299. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/account/page.tsx +224 -0
  300. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/appearance/page.tsx +35 -0
  301. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/layout.tsx +28 -0
  302. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/notifications/page.tsx +204 -0
  303. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/page.tsx +5 -0
  304. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/profile/page.tsx +348 -0
  305. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/slash-commands/page.tsx +17 -0
  306. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/about/page.tsx +204 -0
  307. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/callback/page.tsx +66 -0
  308. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/magic-link/layout.tsx +14 -0
  309. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/magic-link/page.tsx +101 -0
  310. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/blog/[slug]/page.tsx +215 -0
  311. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/blog/page.tsx +171 -0
  312. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/changelog/page.tsx +125 -0
  313. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/community/page.tsx +118 -0
  314. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/contact/page.tsx +136 -0
  315. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/error.tsx +45 -0
  316. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/help/page.tsx +126 -0
  317. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/layout.tsx +71 -0
  318. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/legal/cookies/page.tsx +44 -0
  319. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/legal/privacy/page.tsx +44 -0
  320. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/legal/terms/page.tsx +44 -0
  321. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/onboarding/[step]/page.tsx +57 -0
  322. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/onboarding/page.tsx +5 -0
  323. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/page.tsx +436 -0
  324. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/pricing/layout.tsx +42 -0
  325. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/pricing/page.tsx +336 -0
  326. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/security/page.tsx +121 -0
  327. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/shared/[token]/page.tsx +73 -0
  328. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/conversations/[id]/route.ts +29 -0
  329. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/conversations/route.ts +41 -0
  330. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/conversations/users/route.ts +33 -0
  331. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/ratings/export/route.ts +53 -0
  332. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/ratings/route.ts +37 -0
  333. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/ratings/summary/route.ts +30 -0
  334. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/stats/route.ts +22 -0
  335. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/stripe-events/route.ts +24 -0
  336. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/users/[userId]/impersonate/route.ts +27 -0
  337. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/users/[userId]/route.ts +72 -0
  338. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/users/route.ts +36 -0
  339. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/login/route.ts +61 -0
  340. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/logout/route.ts +41 -0
  341. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/magic-link/request/route.ts +19 -0
  342. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/magic-link/verify/route.ts +51 -0
  343. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/me/route.ts +33 -0
  344. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/oauth-callback/route.ts +50 -0
  345. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/password-reset/confirm/route.ts +19 -0
  346. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/password-reset/request/route.ts +19 -0
  347. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/refresh/route.ts +68 -0
  348. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/register/route.ts +22 -0
  349. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/billing/checkout/route.ts +20 -0
  350. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/billing/invoices/route.ts +19 -0
  351. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/billing/me/[...path]/route.ts +56 -0
  352. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/billing/portal/route.ts +18 -0
  353. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/contact/route.ts +25 -0
  354. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/messages/[messageId]/rate/route.ts +87 -0
  355. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/messages/route.ts +34 -0
  356. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/route.ts +95 -0
  357. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/route.ts +61 -0
  358. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/shared-with-me/route.ts +27 -0
  359. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/tool-stats/route.ts +25 -0
  360. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/files/[id]/route.ts +46 -0
  361. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/files/upload/route.ts +32 -0
  362. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/health/route.ts +15 -0
  363. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/invitations/[token]/route.ts +40 -0
  364. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/documents/[docId]/route.ts +27 -0
  365. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/documents/route.ts +57 -0
  366. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/route.ts +58 -0
  367. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/[sourceId]/route.ts +27 -0
  368. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/[sourceId]/trigger/route.ts +27 -0
  369. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/connectors/route.ts +27 -0
  370. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/route.ts +51 -0
  371. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/route.ts +35 -0
  372. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/me/slash-commands/[id]/route.ts +51 -0
  373. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/me/slash-commands/builtin/route.ts +24 -0
  374. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/me/slash-commands/custom/route.ts +24 -0
  375. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/me/slash-commands/route.ts +22 -0
  376. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/avatar/route.ts +54 -0
  377. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/invitations/route.ts +41 -0
  378. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/members/[userId]/route.ts +42 -0
  379. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/members/route.ts +22 -0
  380. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/route.ts +58 -0
  381. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/route.ts +37 -0
  382. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/sessions/[id]/route.ts +22 -0
  383. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/sessions/route.ts +33 -0
  384. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/users/avatar/[userId]/route.ts +30 -0
  385. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/users/me/route.ts +35 -0
  386. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/agent/models/route.ts +24 -0
  387. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/documents/[documentId]/route.ts +27 -0
  388. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/documents/route.ts +21 -0
  389. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/info/route.ts +55 -0
  390. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/ingest/route.ts +37 -0
  391. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/route.ts +54 -0
  392. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/route.ts +51 -0
  393. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/documents/[docId]/download/route.ts +39 -0
  394. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/documents/[docId]/route.ts +27 -0
  395. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/documents/route.ts +25 -0
  396. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/search/route.ts +29 -0
  397. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/supported-formats/route.ts +18 -0
  398. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/[syncId]/route.ts +25 -0
  399. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/connectors/route.ts +19 -0
  400. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/local/route.ts +23 -0
  401. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/[sourceId]/route.ts +73 -0
  402. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/[sourceId]/trigger/route.ts +26 -0
  403. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/route.ts +41 -0
  404. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/apple-icon.tsx +34 -0
  405. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/global-error.tsx +106 -0
  406. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/globals.css +916 -0
  407. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/icon.tsx +35 -0
  408. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/layout.tsx +105 -0
  409. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/manifest.ts +21 -0
  410. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/not-found.tsx +29 -0
  411. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/opengraph-image.tsx +110 -0
  412. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/providers.tsx +34 -0
  413. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/robots.ts +45 -0
  414. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/sitemap.ts +69 -0
  415. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/admin/admin-nav.tsx +104 -0
  416. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/admin/user-detail-drawer.tsx +308 -0
  417. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/forgot-password-form.tsx +125 -0
  418. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/index.ts +4 -0
  419. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/login-form.tsx +134 -0
  420. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/oauth-buttons.tsx +73 -0
  421. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/register-form.tsx +268 -0
  422. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/reset-password-form.tsx +184 -0
  423. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/billing-card.tsx +99 -0
  424. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/credits-panel.tsx +133 -0
  425. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/index.ts +7 -0
  426. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/invoices-panel.tsx +111 -0
  427. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/payment-methods-panel.tsx +89 -0
  428. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/seat-selector-dialog.tsx +144 -0
  429. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/subscription-panel.tsx +238 -0
  430. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/usage-gauge.tsx +117 -0
  431. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/blog/mdx-components.tsx +49 -0
  432. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/brand-override.tsx +39 -0
  433. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-container.tsx +436 -0
  434. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-empty-state.tsx +73 -0
  435. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-input.tsx +346 -0
  436. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-settings.tsx +139 -0
  437. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/conversation-sidebar.tsx +464 -0
  438. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/copy-button.tsx +44 -0
  439. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/file-preview-panel.tsx +637 -0
  440. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/index.ts +14 -0
  441. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/kb-selector.tsx +162 -0
  442. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/markdown-content.tsx +211 -0
  443. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-item.tsx +306 -0
  444. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-list.tsx +53 -0
  445. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/pending-messages.tsx +64 -0
  446. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/rating-buttons.tsx +252 -0
  447. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/share-dialog.tsx +221 -0
  448. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/slash-command-palette.tsx +75 -0
  449. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/slash-commands.ts +148 -0
  450. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-approval-dialog.tsx +129 -0
  451. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-call-card.tsx +485 -0
  452. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/active-sessions.tsx +106 -0
  453. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/onboarding-banner.tsx +59 -0
  454. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/quick-actions.tsx +78 -0
  455. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/recent-activity.tsx +190 -0
  456. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/segmented-control.tsx +42 -0
  457. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/stat-card.tsx +131 -0
  458. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/subscription-chip.tsx +112 -0
  459. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/team-summary.tsx +150 -0
  460. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/tool-usage.tsx +143 -0
  461. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/top-models.tsx +146 -0
  462. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/usage-timeline.tsx +225 -0
  463. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/google-icon.tsx +1 -0
  464. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/index.ts +0 -0
  465. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/kb/create-kb-dialog.tsx +108 -0
  466. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/kb/index.ts +2 -0
  467. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/kb/kb-list.tsx +165 -0
  468. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/language-switcher.tsx +165 -0
  469. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/auth-guard.tsx +43 -0
  470. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/breadcrumb.tsx +52 -0
  471. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/command-palette.tsx +229 -0
  472. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/header.tsx +139 -0
  473. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/landing-nav.tsx +79 -0
  474. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/mobile-tab-bar.tsx +125 -0
  475. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/sidebar.tsx +111 -0
  476. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/legal/cookies-content.tsx +132 -0
  477. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/legal/privacy-content.tsx +245 -0
  478. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/legal/terms-content.tsx +265 -0
  479. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/animated-number.tsx +69 -0
  480. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/brand-icon.tsx +85 -0
  481. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/code-preview.tsx +142 -0
  482. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/contact-form.tsx +189 -0
  483. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/cookie-banner.tsx +243 -0
  484. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/data-flow-diagram.tsx +355 -0
  485. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/faq-accordion.tsx +33 -0
  486. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/feature-glyph.tsx +63 -0
  487. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/feature-mockup.tsx +169 -0
  488. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/feature-section.tsx +72 -0
  489. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/final-cta.tsx +43 -0
  490. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/footer-config.ts +112 -0
  491. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/hero-demo.tsx +117 -0
  492. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/hero.tsx +137 -0
  493. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/highlight.tsx +12 -0
  494. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/how-it-works.tsx +47 -0
  495. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/legal-page.tsx +73 -0
  496. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/logos-strip.tsx +40 -0
  497. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/marketing-footer.tsx +82 -0
  498. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/marketing-page-layout.tsx +93 -0
  499. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/marquee.tsx +68 -0
  500. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/newsletter-signup.tsx +52 -0
  501. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/pill-nav.tsx +85 -0
  502. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/pricing-teaser.tsx +97 -0
  503. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/reveal.tsx +58 -0
  504. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/section.tsx +52 -0
  505. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/testimonial-carousel.tsx +66 -0
  506. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/testimonial-grid.tsx +50 -0
  507. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/onboarding-shell.tsx +133 -0
  508. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/onboarding-state.ts +59 -0
  509. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-agent.tsx +120 -0
  510. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-data.tsx +147 -0
  511. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-done.tsx +58 -0
  512. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-team.tsx +102 -0
  513. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-welcome.tsx +67 -0
  514. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/rag/drag-drop-overlay.tsx +108 -0
  515. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/rag/sync-source-wizard.tsx +519 -0
  516. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/seo/json-ld.tsx +27 -0
  517. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/brand-color-picker.tsx +159 -0
  518. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/settings-nav.tsx +125 -0
  519. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/settings-section.tsx +83 -0
  520. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/slash-commands-manager.tsx +305 -0
  521. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/states/empty-state.tsx +84 -0
  522. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/states/error-state.tsx +41 -0
  523. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/states/index.ts +3 -0
  524. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/states/loading-state.tsx +113 -0
  525. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/create-org-dialog.tsx +69 -0
  526. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/index.ts +4 -0
  527. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/invite-member-dialog.tsx +91 -0
  528. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/members-table.tsx +116 -0
  529. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/org-switcher.tsx +77 -0
  530. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/index.ts +2 -0
  531. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-provider.tsx +46 -0
  532. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-toggle.tsx +87 -0
  533. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/accordion.tsx +52 -0
  534. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/alert-dialog.tsx +116 -0
  535. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/alert.tsx +62 -0
  536. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/avatar.tsx +49 -0
  537. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/badge.tsx +31 -0
  538. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.test.tsx +71 -0
  539. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.tsx +48 -0
  540. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/card.tsx +54 -0
  541. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/checkbox.tsx +27 -0
  542. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/dialog.tsx +105 -0
  543. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/dropdown-menu.tsx +175 -0
  544. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/index.ts +77 -0
  545. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/input.tsx +21 -0
  546. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/label.tsx +20 -0
  547. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/popover.tsx +30 -0
  548. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/progress.tsx +25 -0
  549. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/radio-group.tsx +37 -0
  550. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/scroll-area.tsx +45 -0
  551. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/select.tsx +149 -0
  552. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/separator.tsx +25 -0
  553. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/sheet.tsx +99 -0
  554. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/switch.tsx +28 -0
  555. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/table.tsx +93 -0
  556. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/tabs.tsx +54 -0
  557. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/textarea.tsx +21 -0
  558. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/tooltip.tsx +29 -0
  559. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/index.ts +21 -0
  560. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-admin-conversations.ts +134 -0
  561. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-admin-users.ts +104 -0
  562. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-auth.ts +101 -0
  563. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-billing.ts +202 -0
  564. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-chat.ts +583 -0
  565. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversation-shares.ts +116 -0
  566. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversations.ts +269 -0
  567. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-invitations.ts +60 -0
  568. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-knowledge-bases.ts +226 -0
  569. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-members.ts +58 -0
  570. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-organizations.ts +86 -0
  571. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-projects.ts +0 -0
  572. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-slash-commands.ts +131 -0
  573. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-websocket.ts +113 -0
  574. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/i18n.ts +50 -0
  575. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/admin-auth.ts +39 -0
  576. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/api-client.ts +87 -0
  577. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/blog.ts +156 -0
  578. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/changelog.ts +93 -0
  579. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/constants.ts +54 -0
  580. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/contact-info.ts +34 -0
  581. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/rag-api.ts +282 -0
  582. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/schema-org.ts +80 -0
  583. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/seo.ts +122 -0
  584. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/server-api.ts +88 -0
  585. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/slash-commands-api.ts +57 -0
  586. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/teaser-plans.ts +108 -0
  587. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.test.ts +39 -0
  588. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/middleware.ts +34 -0
  589. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.test.ts +59 -0
  590. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.ts +71 -0
  591. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-store.ts +65 -0
  592. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/stores/conversation-store.ts +72 -0
  593. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/stores/file-preview-store.ts +17 -0
  594. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/stores/index.ts +13 -0
  595. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/stores/kb-selection-store.ts +54 -0
  596. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/stores/org-store.ts +53 -0
  597. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/stores/project-store.ts +0 -0
  598. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/stores/theme-store.ts +37 -0
  599. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/types/auth.ts +72 -0
  600. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/types/billing.ts +125 -0
  601. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/types/chat.ts +170 -0
  602. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/types/conversation.ts +137 -0
  603. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/types/index.ts +20 -0
  604. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/types/knowledge-base.ts +46 -0
  605. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/types/organization.ts +62 -0
  606. fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/types/project.ts +0 -0
  607. fastapi_fullstack-0.2.7/PKG-INFO +0 -1101
  608. fastapi_fullstack-0.2.7/README.md +0 -1061
  609. fastapi_fullstack-0.2.7/fastapi_gen/cli.py +0 -555
  610. fastapi_fullstack-0.2.7/fastapi_gen/config.py +0 -606
  611. fastapi_fullstack-0.2.7/fastapi_gen/prompts.py +0 -1096
  612. fastapi_fullstack-0.2.7/pyproject.toml +0 -174
  613. fastapi_fullstack-0.2.7/template/VARIABLES.md +0 -375
  614. fastapi_fullstack-0.2.7/template/cookiecutter.json +0 -134
  615. fastapi_fullstack-0.2.7/template/hooks/post_gen_project.py +0 -496
  616. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/.claude/rules/architecture.md +0 -109
  617. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/CLAUDE.md +0 -187
  618. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/Makefile +0 -378
  619. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/README.md +0 -289
  620. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/.env.example +0 -349
  621. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/Dockerfile +0 -57
  622. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/alembic/env.py +0 -109
  623. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/agents/__init__.py +0 -65
  624. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/agents/assistant.py +0 -291
  625. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/agents/crewai_assistant.py +0 -623
  626. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/agents/deepagents_assistant.py +0 -627
  627. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/agents/langchain_assistant.py +0 -276
  628. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/agents/langgraph_assistant.py +0 -420
  629. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/agents/pydantic_deep_assistant.py +0 -359
  630. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/__init__.py +0 -18
  631. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/datetime_tool.py +0 -13
  632. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/rag_tool.py +0 -223
  633. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/web_search.py +0 -82
  634. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/api/deps.py +0 -770
  635. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/api/exception_handlers.py +0 -89
  636. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/__init__.py +0 -132
  637. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_conversations.py +0 -166
  638. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/agent.py +0 -3345
  639. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/auth.py +0 -443
  640. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/channels.py +0 -431
  641. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/conversations.py +0 -1094
  642. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/files.py +0 -131
  643. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/health.py +0 -213
  644. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/oauth.py +0 -138
  645. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/rag.py +0 -693
  646. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/slack_webhook.py +0 -76
  647. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/telegram_webhook.py +0 -123
  648. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/channels/__init__.py +0 -31
  649. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/channels/router.py +0 -636
  650. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/channels/slack.py +0 -253
  651. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/channels/telegram.py +0 -258
  652. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/commands/channel.py +0 -270
  653. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/commands/cleanup.py +0 -98
  654. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/commands/rag.py +0 -808
  655. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/core/config.py +0 -539
  656. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/core/exceptions.py +0 -122
  657. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/core/middleware.py +0 -100
  658. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/core/security.py +0 -102
  659. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/db/models/__init__.py +0 -53
  660. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/db/models/channel_bot.py +0 -243
  661. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/db/models/conversation.py +0 -649
  662. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/db/models/rag_document.py +0 -136
  663. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/db/models/session.py +0 -245
  664. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/db/models/user.py +0 -375
  665. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/db/models/webhook.py +0 -416
  666. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/main.py +0 -543
  667. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/rag/config.py +0 -174
  668. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/rag/connectors/__init__.py +0 -70
  669. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/rag/connectors/google_drive.py +0 -204
  670. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/rag/connectors/s3.py +0 -131
  671. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/rag/documents.py +0 -1013
  672. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/rag/embeddings.py +0 -301
  673. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/rag/ingestion.py +0 -207
  674. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/rag/reranker.py +0 -408
  675. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/rag/retrieval.py +0 -392
  676. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/rag/sources/__init__.py +0 -22
  677. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/rag/sources/base.py +0 -120
  678. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/rag/sources/google_drive.py +0 -148
  679. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/rag/sources/s3.py +0 -95
  680. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/rag/vectorstore.py +0 -622
  681. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/repositories/__init__.py +0 -75
  682. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/repositories/channel_bot.py +0 -387
  683. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/repositories/conversation.py +0 -1238
  684. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/repositories/message_rating.py +0 -661
  685. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/repositories/rag_document.py +0 -214
  686. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/repositories/user.py +0 -484
  687. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/schemas/conversation.py +0 -243
  688. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/schemas/conversation_share.py +0 -112
  689. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/schemas/user.py +0 -82
  690. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/services/__init__.py +0 -64
  691. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/services/agent.py +0 -41
  692. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/services/agent_invocation.py +0 -496
  693. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/services/channel_bot.py +0 -370
  694. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/services/conversation.py +0 -1688
  695. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/services/file_storage.py +0 -101
  696. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/services/file_upload.py +0 -535
  697. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/services/message_rating.py +0 -1193
  698. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/services/rag_document.py +0 -406
  699. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/services/rag_sync.py +0 -248
  700. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/services/sync_source.py +0 -366
  701. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/services/user.py +0 -662
  702. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/tasks/__init__.py +0 -1
  703. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/tasks/channel.py +0 -35
  704. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/tasks/rag.py +0 -140
  705. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/worker/__init__.py +0 -5
  706. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/worker/arq_app.py +0 -176
  707. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/worker/celery_app.py +0 -68
  708. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/__init__.py +0 -50
  709. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/examples.py +0 -106
  710. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/rag_tasks.py +0 -466
  711. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/schedules.py +0 -38
  712. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/taskiq_examples.py +0 -92
  713. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/pyproject.toml +0 -389
  714. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/tests/api/test_auth.py +0 -266
  715. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/tests/test_agents.py +0 -271
  716. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/tests/test_services.py +0 -363
  717. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/tests/test_services_conversation.py +0 -902
  718. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/tests/test_worker.py +0 -74
  719. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/docker-compose.dev.yml +0 -409
  720. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/docker-compose.prod.yml +0 -757
  721. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/docker-compose.yml +0 -457
  722. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/docs/howto/add-rag-source.md +0 -180
  723. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/docs/howto/add-sync-connector.md +0 -273
  724. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/docs/patterns.md +0 -207
  725. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/messages/en.json +0 -192
  726. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/messages/pl.json +0 -192
  727. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/next.config.ts +0 -70
  728. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/package.json +0 -99
  729. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/layout.tsx +0 -94
  730. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/login/page.tsx +0 -5
  731. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/register/page.tsx +0 -5
  732. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/conversations/page.tsx +0 -354
  733. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/ratings/page.tsx +0 -336
  734. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/chat/page.tsx +0 -29
  735. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/dashboard/page.tsx +0 -275
  736. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/layout.tsx +0 -33
  737. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/profile/page.tsx +0 -344
  738. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/rag/page.tsx +0 -836
  739. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/page.tsx +0 -126
  740. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/callback/page.tsx +0 -113
  741. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/error.tsx +0 -47
  742. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/layout.tsx +0 -35
  743. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/page.tsx +0 -282
  744. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/shared/[token]/page.tsx +0 -98
  745. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/login/route.ts +0 -65
  746. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/logout/route.ts +0 -24
  747. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/me/route.ts +0 -42
  748. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/oauth-callback/route.ts +0 -50
  749. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/refresh/route.ts +0 -68
  750. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/register/route.ts +0 -26
  751. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/messages/[messageId]/rate/route.ts +0 -95
  752. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/messages/route.ts +0 -39
  753. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/route.ts +0 -106
  754. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/route.ts +0 -71
  755. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/shared-with-me/route.ts +0 -27
  756. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/files/[id]/route.ts +0 -47
  757. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/files/upload/route.ts +0 -39
  758. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/health/route.ts +0 -21
  759. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/users/avatar/[userId]/route.ts +0 -30
  760. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/admin/conversations/route.ts +0 -48
  761. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/admin/ratings/export/route.ts +0 -58
  762. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/admin/ratings/route.ts +0 -42
  763. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/admin/ratings/summary/route.ts +0 -35
  764. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/agent/models/route.ts +0 -29
  765. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/documents/[documentId]/route.ts +0 -33
  766. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/documents/route.ts +0 -30
  767. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/info/route.ts +0 -60
  768. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/ingest/route.ts +0 -43
  769. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/route.ts +0 -60
  770. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/route.ts +0 -56
  771. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/documents/[docId]/download/route.ts +0 -43
  772. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/documents/[docId]/route.ts +0 -33
  773. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/documents/route.ts +0 -31
  774. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/search/route.ts +0 -35
  775. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/supported-formats/route.ts +0 -23
  776. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/[syncId]/route.ts +0 -31
  777. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/connectors/route.ts +0 -24
  778. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/local/route.ts +0 -29
  779. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/[sourceId]/route.ts +0 -78
  780. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/[sourceId]/trigger/route.ts +0 -31
  781. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/route.ts +0 -46
  782. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/global-error.tsx +0 -108
  783. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/globals.css +0 -519
  784. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/layout.tsx +0 -23
  785. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/not-found.tsx +0 -31
  786. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/app/providers.tsx +0 -36
  787. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/index.ts +0 -2
  788. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/login-form.tsx +0 -132
  789. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/register-form.tsx +0 -226
  790. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-container.tsx +0 -255
  791. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-input.tsx +0 -267
  792. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/conversation-sidebar.tsx +0 -387
  793. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/copy-button.tsx +0 -46
  794. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/index.ts +0 -9
  795. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/markdown-content.tsx +0 -167
  796. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-item.tsx +0 -175
  797. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-list.tsx +0 -38
  798. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/rating-buttons.tsx +0 -257
  799. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/share-dialog.tsx +0 -235
  800. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-approval-dialog.tsx +0 -138
  801. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-call-card.tsx +0 -389
  802. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/google-icon.tsx +0 -32
  803. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/index.ts +0 -3
  804. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/language-switcher.tsx +0 -76
  805. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/auth-guard.tsx +0 -45
  806. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/breadcrumb.tsx +0 -51
  807. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/header.tsx +0 -110
  808. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/landing-nav.tsx +0 -85
  809. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/sidebar.tsx +0 -82
  810. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/index.ts +0 -7
  811. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-provider.tsx +0 -53
  812. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-toggle.tsx +0 -105
  813. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/accordion.tsx +0 -52
  814. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/alert-dialog.tsx +0 -86
  815. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/avatar.tsx +0 -39
  816. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/badge.tsx +0 -35
  817. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.test.tsx +0 -76
  818. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.tsx +0 -48
  819. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/card.tsx +0 -82
  820. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/checkbox.tsx +0 -27
  821. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/dialog.tsx +0 -76
  822. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/dropdown-menu.tsx +0 -162
  823. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/index.ts +0 -25
  824. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/input.tsx +0 -21
  825. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/label.tsx +0 -21
  826. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/popover.tsx +0 -30
  827. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/progress.tsx +0 -25
  828. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/radio-group.tsx +0 -37
  829. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/scroll-area.tsx +0 -45
  830. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/select.tsx +0 -141
  831. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/separator.tsx +0 -25
  832. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/sheet.tsx +0 -109
  833. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/switch.tsx +0 -28
  834. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/table.tsx +0 -93
  835. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/tabs.tsx +0 -54
  836. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/textarea.tsx +0 -21
  837. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/tooltip.tsx +0 -29
  838. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/hooks/index.ts +0 -11
  839. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-admin-conversations.ts +0 -130
  840. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-auth.ts +0 -108
  841. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-chat.ts +0 -516
  842. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversation-shares.ts +0 -126
  843. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversations.ts +0 -238
  844. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-projects.ts +0 -207
  845. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-websocket.ts +0 -108
  846. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/i18n.ts +0 -30
  847. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/lib/admin-auth.ts +0 -47
  848. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/lib/api-client.ts +0 -90
  849. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/lib/constants.ts +0 -49
  850. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/lib/rag-api.ts +0 -267
  851. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/lib/server-api.ts +0 -93
  852. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.test.ts +0 -44
  853. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/middleware.ts +0 -26
  854. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.test.ts +0 -72
  855. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.ts +0 -71
  856. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-store.ts +0 -74
  857. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/stores/conversation-store.ts +0 -74
  858. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/stores/index.ts +0 -9
  859. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/stores/project-store.ts +0 -73
  860. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/stores/theme-store.ts +0 -44
  861. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/types/auth.ts +0 -74
  862. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/types/chat.ts +0 -161
  863. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/types/conversation.ts +0 -149
  864. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/types/index.ts +0 -13
  865. fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/frontend/src/types/project.ts +0 -59
  866. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/.gitignore +0 -0
  867. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/LICENSE +0 -0
  868. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/fastapi_gen/__init__.py +0 -0
  869. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/fastapi_gen/generator.py +0 -0
  870. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.claude/commands/add-endpoint.md +0 -0
  871. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.claude/commands/fix-issue.md +0 -0
  872. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.claude/commands/review.md +0 -0
  873. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.claude/rules/api-conventions.md +0 -0
  874. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.claude/rules/code-style.md +0 -0
  875. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.claude/rules/exceptions-security.md +0 -0
  876. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.claude/rules/frontend.md +0 -0
  877. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.claude/rules/schemas-models.md +0 -0
  878. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.claude/rules/testing.md +0 -0
  879. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.claude/settings.json +0 -0
  880. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.env.prod.example +0 -0
  881. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.github/workflows/ci.yml +0 -0
  882. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.gitignore +0 -0
  883. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.gitlab-ci.yml +0 -0
  884. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/AGENTS.md +0 -0
  885. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/.dockerignore +0 -0
  886. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/.pre-commit-config.yaml +0 -0
  887. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/alembic/script.py.mako +0 -0
  888. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/.gitkeep +0 -0
  889. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/alembic.ini +0 -0
  890. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/__init__.py +0 -0
  891. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/admin.py +0 -0
  892. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/agents/prompts.py +0 -0
  893. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/api/__init__.py +0 -0
  894. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/api/router.py +0 -0
  895. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/__init__.py +0 -0
  896. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_ratings.py +0 -0
  897. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/projects.py +0 -0
  898. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/sessions.py +0 -0
  899. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/users.py +0 -0
  900. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/webhooks.py +0 -0
  901. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/api/versioning.py +0 -0
  902. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/clients/__init__.py +0 -0
  903. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/clients/redis.py +0 -0
  904. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/commands/__init__.py +0 -0
  905. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/commands/example.py +0 -0
  906. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/commands/seed.py +0 -0
  907. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/core/__init__.py +0 -0
  908. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/core/cache.py +0 -0
  909. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/core/channel_crypto.py +0 -0
  910. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/core/csrf.py +0 -0
  911. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/core/logfire_setup.py +0 -0
  912. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/core/logging.py +0 -0
  913. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/core/oauth.py +0 -0
  914. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/core/rate_limit.py +0 -0
  915. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/core/sanitize.py +0 -0
  916. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/db/__init__.py +0 -0
  917. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/db/base.py +0 -0
  918. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/db/models/channel_identity.py +0 -0
  919. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/db/models/channel_session.py +0 -0
  920. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/db/models/chat_file.py +0 -0
  921. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/db/models/conversation_share.py +0 -0
  922. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/db/models/message_rating.py +0 -0
  923. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/db/models/project.py +0 -0
  924. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/db/models/sync_log.py +0 -0
  925. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/db/models/sync_source.py +0 -0
  926. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/db/session.py +0 -0
  927. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/repositories/channel_identity.py +0 -0
  928. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/repositories/channel_session.py +0 -0
  929. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/repositories/chat_file.py +0 -0
  930. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/repositories/conversation_share.py +0 -0
  931. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/repositories/project.py +0 -0
  932. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/repositories/session.py +0 -0
  933. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/repositories/sync_log.py +0 -0
  934. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/repositories/sync_source.py +0 -0
  935. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/repositories/webhook.py +0 -0
  936. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/schemas/__init__.py +0 -0
  937. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/schemas/base.py +0 -0
  938. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/schemas/channel_bot.py +0 -0
  939. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/schemas/file.py +0 -0
  940. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/schemas/message_rating.py +0 -0
  941. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/schemas/project.py +0 -0
  942. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/schemas/rag.py +0 -0
  943. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/schemas/session.py +0 -0
  944. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/schemas/sync_source.py +0 -0
  945. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/schemas/token.py +0 -0
  946. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/schemas/webhook.py +0 -0
  947. {fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app → fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services}/channels/base.py +0 -0
  948. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/services/conversation_share.py +0 -0
  949. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/services/health.py +0 -0
  950. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/services/project.py +0 -0
  951. {fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app → fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services}/rag/__init__.py +0 -0
  952. {fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app → fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services}/rag/image_describer.py +0 -0
  953. {fastapi_fullstack-0.2.7/template/{{cookiecutter.project_slug}}/backend/app → fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services}/rag/models.py +0 -0
  954. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/services/session.py +0 -0
  955. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/services/webhook.py +0 -0
  956. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/worker/taskiq_app.py +0 -0
  957. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/cli/__init__.py +0 -0
  958. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/cli/commands.py +0 -0
  959. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/scripts/.gitkeep +0 -0
  960. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/__init__.py +0 -0
  961. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/api/__init__.py +0 -0
  962. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_exceptions.py +0 -0
  963. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_health.py +0 -0
  964. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_metrics.py +0 -0
  965. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_openapi.py +0 -0
  966. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_users.py +0 -0
  967. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/conftest.py +0 -0
  968. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/test_admin.py +0 -0
  969. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/test_clients.py +0 -0
  970. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/test_commands.py +0 -0
  971. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/test_core.py +0 -0
  972. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/test_migrations.py +0 -0
  973. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/test_repositories.py +0 -0
  974. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/test_security.py +0 -0
  975. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/test_ssrf.py +0 -0
  976. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docker-compose.frontend.yml +0 -0
  977. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/adding_features.md +0 -0
  978. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/architecture.md +0 -0
  979. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/commands.md +0 -0
  980. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/configuration.md +0 -0
  981. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/file-processing.md +0 -0
  982. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/howto/add-agent-tool.md +0 -0
  983. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/howto/add-api-endpoint.md +0 -0
  984. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/howto/add-background-task.md +0 -0
  985. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/howto/configure-sync-sources.md +0 -0
  986. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/howto/customize-agent-prompt.md +0 -0
  987. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/howto/use-ratings.md +0 -0
  988. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/permissions.md +0 -0
  989. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/testing.md +0 -0
  990. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/.dockerignore +0 -0
  991. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/.editorconfig +0 -0
  992. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/.env.example +0 -0
  993. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/.gitignore +0 -0
  994. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/.husky/pre-commit +0 -0
  995. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/.prettierignore +0 -0
  996. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/.prettierrc +0 -0
  997. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/Dockerfile +0 -0
  998. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/README.md +0 -0
  999. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/e2e/auth.setup.ts +0 -0
  1000. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/e2e/auth.spec.ts +0 -0
  1001. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/e2e/chat.spec.ts +0 -0
  1002. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/e2e/home.spec.ts +0 -0
  1003. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/eslint.config.mjs +0 -0
  1004. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/instrumentation.ts +0 -0
  1005. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/playwright.config.ts +0 -0
  1006. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/postcss.config.mjs +0 -0
  1007. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/shares/[shareId]/route.ts +0 -0
  1008. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/shares/route.ts +0 -0
  1009. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/export/route.ts +0 -0
  1010. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/users/me/avatar/route.ts +0 -0
  1011. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/index.ts +0 -0
  1012. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/page-transition.tsx +0 -0
  1013. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/skeleton.tsx +0 -0
  1014. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/spinner.tsx +0 -0
  1015. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/lib/file-api.ts +0 -0
  1016. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.ts +0 -0
  1017. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-sidebar-store.ts +0 -0
  1018. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/stores/sidebar-store.ts +0 -0
  1019. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/types/api.ts +0 -0
  1020. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/types/speech.d.ts +0 -0
  1021. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/tsconfig.json +0 -0
  1022. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/vercel.json +0 -0
  1023. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/vitest.config.ts +0 -0
  1024. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/vitest.setup.ts +0 -0
  1025. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/kubernetes/configmap.yaml +0 -0
  1026. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/kubernetes/deployment.yaml +0 -0
  1027. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/kubernetes/ingress.yaml +0 -0
  1028. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/kubernetes/kustomization.yaml +0 -0
  1029. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/kubernetes/namespace.yaml +0 -0
  1030. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/kubernetes/secret.yaml +0 -0
  1031. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/kubernetes/service.yaml +0 -0
  1032. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/nginx/nginx.conf +0 -0
  1033. {fastapi_fullstack-0.2.7 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/nginx/ssl/.gitkeep +0 -0
@@ -0,0 +1,1235 @@
1
+ Metadata-Version: 2.4
2
+ Name: fastapi-fullstack
3
+ Version: 0.2.8
4
+ Summary: Full-stack FastAPI + Next.js template generator with PydanticAI/LangChain agents, WebSocket streaming, 20+ enterprise integrations, and Logfire/LangSmith observability. Ship AI apps fast. CLI tool to generate production-ready FastAPI + Next.js projects with AI agents, auth, and observability.
5
+ Project-URL: Homepage, https://github.com/vstorm-co/full-stack-ai-agent-template
6
+ Project-URL: Documentation, https://github.com/vstorm-co/full-stack-ai-agent-template#readme
7
+ Project-URL: Repository, https://github.com/vstorm-co/full-stack-ai-agent-template
8
+ Author-email: Vstorm <hr@vstorm.co>
9
+ License: MIT
10
+ License-File: LICENSE
11
+ Keywords: ai-agents,celery,cookiecutter,docker,fastapi,full-stack,langchain,langgraph,llm,logfire,milvus,mongodb,nextjs,observability,postgresql,pydantic-ai,python,rag,react,redis,retrieval-augmented-generation,template,typescript
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Environment :: Console
14
+ Classifier: Framework :: FastAPI
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: License :: OSI Approved :: MIT License
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Topic :: Software Development :: Code Generators
21
+ Requires-Python: >=3.11
22
+ Requires-Dist: arq>=0.28.0
23
+ Requires-Dist: celery>=5.6.3
24
+ Requires-Dist: click>=8.3.0
25
+ Requires-Dist: cookiecutter>=2.7.0
26
+ Requires-Dist: email-validator>=2.3.0
27
+ Requires-Dist: httpx>=0.28.1
28
+ Requires-Dist: pydantic-settings>=2.13.0
29
+ Requires-Dist: pydantic>=2.13.0
30
+ Requires-Dist: pytest-asyncio>=1.3.0
31
+ Requires-Dist: pytest>=9.0.3
32
+ Requires-Dist: questionary>=2.1.0
33
+ Requires-Dist: rich>=15.0.0
34
+ Requires-Dist: stripe>=15.1.0
35
+ Requires-Dist: taskiq>=0.12.4
36
+ Provides-Extra: dev
37
+ Requires-Dist: pre-commit>=4.0.0; extra == 'dev'
38
+ Requires-Dist: pytest-cov>=7.0.0; extra == 'dev'
39
+ Requires-Dist: pytest>=9.0.0; extra == 'dev'
40
+ Requires-Dist: ruff>=0.14.0; extra == 'dev'
41
+ Requires-Dist: ty>=0.0.31; extra == 'dev'
42
+ Provides-Extra: docs
43
+ Requires-Dist: mkdocs-material>=9.7.0; extra == 'docs'
44
+ Requires-Dist: mkdocs>=1.6.1; extra == 'docs'
45
+ Requires-Dist: pymdown-extensions>=10.20; extra == 'docs'
46
+ Description-Content-Type: text/markdown
47
+
48
+ <p align="center">
49
+ <img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/banner.png" alt="Full-Stack AI Agent Template" width="100%">
50
+ </p>
51
+
52
+ <h1 align="center">Full-Stack AI Agent Template</h1>
53
+
54
+ <p align="center">
55
+ <i>Production-ready FastAPI + Next.js project generator with AI agents, RAG, and 20+ enterprise integrations.</i>
56
+ </p>
57
+
58
+ <p align="center">
59
+ <a href="#-quick-start">Quick Start</a> •
60
+ <a href="#-features">Features</a> •
61
+ <a href="#-demo">Demo</a> •
62
+ <a href="https://vstorm-co.github.io/full-stack-ai-agent-template/">Documentation</a> •
63
+ <a href="https://oss.vstorm.co/projects/full-stack-ai-agent-template/configurator/">Configurator</a> •
64
+ <a href="https://pypi.org/project/fastapi-fullstack/">PyPI</a>
65
+ </p>
66
+
67
+ <p align="center">
68
+ <a href="https://pypi.org/project/fastapi-fullstack/"><img src="https://img.shields.io/pypi/v/fastapi-fullstack?color=green&logo=pypi&logoColor=white" alt="PyPI"></a>
69
+ <a href="https://pepy.tech/projects/fastapi-fullstack"><img src="https://static.pepy.tech/badge/fastapi-fullstack/month" alt="PyPI Downloads"></a>
70
+ <a href="https://github.com/vstorm-co/full-stack-ai-agent-template/stargazers"><img src="https://img.shields.io/github/stars/vstorm-co/full-stack-ai-agent-template?style=flat&logo=github&color=yellow" alt="GitHub Stars"></a>
71
+ <a href="https://www.python.org/"><img src="https://img.shields.io/badge/python-3.11+-blue?logo=python&logoColor=white" alt="Python 3.11+"></a>
72
+ <a href="https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/LICENSE"><img src="https://img.shields.io/github/license/vstorm-co/full-stack-ai-agent-template?color=blue" alt="License"></a>
73
+ <img src="https://img.shields.io/badge/coverage-100%25-brightgreen" alt="Coverage">
74
+ <a href="https://github.com/vstorm-co/full-stack-ai-agent-template/actions/workflows/ci.yml"><img src="https://github.com/vstorm-co/full-stack-ai-agent-template/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
75
+ <a href="https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/SECURITY.md"><img src="https://img.shields.io/badge/security-policy-blueviolet?logo=shieldsdotio&logoColor=white" alt="Security Policy"></a>
76
+ <a href="https://www.bestpractices.dev/projects/12539"><img src="https://www.bestpractices.dev/projects/12539/badge" alt="OpenSSF Best Practices"></a>
77
+ <a href="https://github.com/pydantic/pydantic-ai"><img src="https://img.shields.io/badge/Powered%20by-Pydantic%20AI-E92063?logo=pydantic&logoColor=white" alt="Pydantic AI"></a>
78
+ <a href="https://x.com/Kacper95682155"><img src="https://img.shields.io/badge/X-000000?logo=x&logoColor=white" alt="X"></a>
79
+ </p>
80
+
81
+ <p align="center">
82
+ <b>🤖 6 AI Agent Frameworks</b> <i>(PydanticAI, PydanticDeep, LangChain, LangGraph, CrewAI, DeepAgents)</i>
83
+ <br>
84
+ <b>📄 RAG Pipeline</b> <i>(Milvus, Qdrant, pgvector, ChromaDB)</i>
85
+ <br>
86
+ <b>⚡ FastAPI + Next.js 15</b> <i>(WebSocket streaming, real-time chat UI)</i>
87
+ <br>
88
+ <b>🔗 Conversation Sharing</b> <i>(direct sharing, public links, admin browser)</i>
89
+ <br>
90
+ <b>🔒 Enterprise-Ready</b> <i>(JWT, OAuth, admin panel, Celery, Docker, K8s)</i>
91
+ </p>
92
+
93
+ <details>
94
+ <summary><b>Table of Contents</b></summary>
95
+
96
+ - [Quick Start](#-quick-start)
97
+ - [Demo](#-demo)
98
+ - [Screenshots](#-screenshots)
99
+ - [Why This Template](#-why-this-template)
100
+ - [Features](#-features)
101
+ - [Architecture](#-architecture)
102
+ - [AI Agent](#-ai-agent)
103
+ - [RAG](#-rag-retrieval-augmented-generation)
104
+ - [Observability](#-observability)
105
+ - [Django-style CLI](#-django-style-cli)
106
+ - [Generated Project Structure](#-generated-project-structure)
107
+ - [Configuration Options](#-configuration-options)
108
+ - [Comparison](#-comparison)
109
+ - [FAQ](#-faq)
110
+ - [Documentation](#-documentation)
111
+ - [Contributing](#-contributing)
112
+
113
+ </details>
114
+
115
+ ---
116
+
117
+ ## Vstorm OSS Ecosystem
118
+
119
+ This template is part of a broader open-source ecosystem for production AI agents:
120
+
121
+ | Project | Description | |
122
+ |---------|-------------|---|
123
+ | **[pydantic-deepagents](https://github.com/vstorm-co/pydantic-deepagents)** | The modular agent runtime for Python. Claude Code-style CLI with Docker sandbox, browser automation, multi-agent teams, and /improve. | [![Stars](https://img.shields.io/github/stars/vstorm-co/pydantic-deepagents?style=flat&logo=github&color=yellow)](https://github.com/vstorm-co/pydantic-deepagents) |
124
+ | **[pydantic-ai-shields](https://github.com/vstorm-co/pydantic-ai-shields)** | Drop-in guardrails for Pydantic AI agents. 5 infra + 5 content shields. | [![Stars](https://img.shields.io/github/stars/vstorm-co/pydantic-ai-shields?style=flat&logo=github&color=yellow)](https://github.com/vstorm-co/pydantic-ai-shields) |
125
+ | **[pydantic-ai-subagents](https://github.com/vstorm-co/pydantic-ai-subagents)** | Declarative multi-agent orchestration with token tracking. | [![Stars](https://img.shields.io/github/stars/vstorm-co/pydantic-ai-subagents?style=flat&logo=github&color=yellow)](https://github.com/vstorm-co/pydantic-ai-subagents) |
126
+ | **[summarization-pydantic-ai](https://github.com/vstorm-co/pydantic-ai-summarization)** | Smart context compression for long-running agents. | [![Stars](https://img.shields.io/github/stars/vstorm-co/summarization-pydantic-ai?style=flat&logo=github&color=yellow)](https://github.com/vstorm-co/summarization-pydantic-ai) |
127
+ | **[pydantic-ai-backend](https://github.com/vstorm-co/pydantic-ai-backend)** | Sandboxed execution for AI agents. Docker + Daytona. | [![Stars](https://img.shields.io/github/stars/vstorm-co/pydantic-ai-backend?style=flat&logo=github&color=yellow)](https://github.com/vstorm-co/pydantic-ai-backend) |
128
+
129
+ > **Want the runtime behind this template's AI agents?** [pydantic-deepagents](https://github.com/vstorm-co/pydantic-deepagents) powers the `deepagents` framework option — install it standalone with `curl -fsSL .../install.sh | bash`.
130
+
131
+ Browse all projects at [oss.vstorm.co](https://oss.vstorm.co)
132
+
133
+ ---
134
+
135
+ ## 🚀 Quick Start
136
+
137
+ > [!TIP]
138
+ > **Prefer a visual configurator?** Use the [Web Configurator](https://oss.vstorm.co/projects/full-stack-ai-agent-template/configurator/) to configure your project in the browser and download a ZIP — no CLI installation needed.
139
+
140
+ ### Installation
141
+
142
+ ```bash
143
+ # pip
144
+ pip install fastapi-fullstack
145
+
146
+ # uv (recommended)
147
+ uv tool install fastapi-fullstack
148
+
149
+ # pipx
150
+ pipx install fastapi-fullstack
151
+ ```
152
+
153
+ ### Create Your Project
154
+
155
+ ```bash
156
+ # Interactive wizard (recommended — runs by default)
157
+ fastapi-fullstack
158
+
159
+ # Quick mode with options
160
+ fastapi-fullstack create my_ai_app \
161
+ --database postgresql \
162
+ --frontend nextjs
163
+
164
+ # Use presets for common setups
165
+ fastapi-fullstack create my_ai_app --preset production # Full production setup
166
+ fastapi-fullstack create my_ai_app --preset ai-agent # AI agent with streaming
167
+
168
+ # Minimal project (no extras)
169
+ fastapi-fullstack create my_ai_app --minimal
170
+ ```
171
+
172
+ ### Start Development
173
+
174
+ #### First time on a fresh clone
175
+
176
+ ```bash
177
+ cd my_ai_app
178
+ make bootstrap # = make dev + make seed
179
+ ```
180
+
181
+ That's it — backend, database, Redis, vector store (if RAG), Celery (if selected) come up, migrations are applied, and a default admin is seeded.
182
+
183
+ #### Day-to-day
184
+
185
+ ```bash
186
+ make dev # idempotent: build + up + migrate. Re-run anytime.
187
+ ```
188
+
189
+ `make dev` skips admin seeding (that's a one-shot in `make seed`) so it stays cheap to run after every code/config change.
190
+
191
+ **Behind the scenes (`make dev`):**
192
+
193
+ 1. Builds the backend Docker image (cached after first run)
194
+ 2. Starts services via `docker-compose.dev.yml` (hot-reload bind mounts)
195
+ 3. Polls Postgres until ready (`pg_isready` — no fixed sleeps)
196
+ 4. Applies pending Alembic migrations (no-op if already at head)
197
+
198
+ **Then access:**
199
+
200
+ | | URL | |
201
+ |---|---|---|
202
+ | Backend API | <http://localhost:8000> | |
203
+ | Docs | <http://localhost:8000/docs> | OpenAPI / Swagger |
204
+ | Admin | <http://localhost:8000/admin> | `admin@example.com` / `admin123` (after `make seed`) |
205
+ | Frontend | <http://localhost:3000> | `make dev-frontend` (Docker) or `cd frontend && bun install && bun dev` (local) |
206
+
207
+ ### Day-to-day commands
208
+
209
+ ```bash
210
+ make dev # bootstrap or restart (no admin re-seed)
211
+ make seed # one-shot admin creation (no-op if admin exists)
212
+ make dev-down # stop everything
213
+ make dev-logs # tail container logs
214
+ make dev-rebuild # force-rebuild backend image (after pyproject.toml changes)
215
+ make dev-frontend # start the Next.js container
216
+ ```
217
+
218
+ ### Environments
219
+
220
+ | `make` target | Compose file | When to use |
221
+ |---|---|---|
222
+ | `make dev` | `docker-compose.dev.yml` | Local development with hot-reload + bind-mounted source. |
223
+ | `make stage` | `docker-compose.yml` | Production-like build (no bind mounts) running on localhost. Sanity-check before deploy. |
224
+ | `make prod` | `docker-compose.prod.yml` | Production. Requires `.env.prod` (copy from `.env.prod.example`) + external Nginx using `nginx/nginx.conf`. |
225
+
226
+ Each env has matching `-down`, `-logs`, `-rebuild` siblings.
227
+
228
+ > [!NOTE]
229
+ > **Windows users:** `make` requires GNU Make. Install via [Chocolatey](https://chocolatey.org/) (`choco install make`) or use **WSL2 / Git Bash**. The Docker workflow is identical across macOS, Linux, and WSL2.
230
+
231
+ <details>
232
+ <summary><b>Local backend (no Docker, for IDE breakpoints)</b></summary>
233
+
234
+ If you want to run the backend on the host while the database stays in Docker:
235
+
236
+ ```bash
237
+ cd my_ai_app
238
+ make install # uv sync + pre-commit hooks
239
+
240
+ # Start only infrastructure containers
241
+ docker compose -f docker-compose.dev.yml up -d db redis # add 'milvus etcd minio' if RAG
242
+
243
+ make db-upgrade # apply migrations
244
+ make create-admin # interactive
245
+ make run # uvicorn --reload
246
+ ```
247
+
248
+ </details>
249
+
250
+ <details>
251
+ <summary><b>Production deploy</b></summary>
252
+
253
+ ```bash
254
+ # On your server
255
+ git clone <your-repo>
256
+ cd my_ai_app
257
+
258
+ cp .env.prod.example .env.prod # fill in real secrets
259
+ # Configure your nginx host using nginx/nginx.conf as reference
260
+
261
+ make prod # builds + starts + migrates
262
+ make prod-logs # tail logs
263
+ ```
264
+
265
+ For frontend deployment to **Vercel**:
266
+
267
+ ```bash
268
+ cd frontend && npx vercel --prod
269
+ ```
270
+
271
+ In the Vercel dashboard set `BACKEND_URL`, `BACKEND_WS_URL`, `NEXT_PUBLIC_AUTH_ENABLED=true`.
272
+
273
+ </details>
274
+
275
+ ### Using the Project CLI
276
+
277
+ Each generated project has a CLI named after your `project_slug`. For example, if you created `my_ai_app`:
278
+
279
+ ```bash
280
+ cd backend
281
+
282
+ # The CLI command is: uv run <project_slug> <command>
283
+ uv run my_ai_app server run --reload # Start dev server
284
+ uv run my_ai_app db migrate -m "message" # Create migration
285
+ uv run my_ai_app db upgrade # Apply migrations
286
+ uv run my_ai_app user create-admin # Create admin user
287
+ ```
288
+
289
+ Use `make help` to see all available Makefile shortcuts.
290
+
291
+ ---
292
+
293
+ ## 🎬 Demo
294
+
295
+ **CLI generator:**
296
+
297
+ <p align="center">
298
+ <img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/app_start.gif" alt="FastAPI Fullstack Generator Demo">
299
+ </p>
300
+
301
+ **Live chat:**
302
+
303
+ <p align="center">
304
+ <img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/chat_demo_light.gif" alt="Chat Demo">
305
+ </p>
306
+
307
+ **File upload & RAG ingestion:**
308
+
309
+ <p align="center">
310
+ <img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/file_uploud_light.gif" alt="File Upload Demo">
311
+ </p>
312
+
313
+ ---
314
+
315
+ ## 📸 Screenshots
316
+
317
+ ### Marketing Site
318
+
319
+ **Landing Page** — Full-page marketing site with hero, features breakdown, testimonials, pricing preview, and FAQ. Generated with the `enable_marketing_site` option.
320
+
321
+ ![Landing Page](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/landing_page.png)
322
+
323
+ **Pricing** — Three-tier pricing page (Starter / Pro / Business) with monthly/annual toggle. Pulls live plan data from Stripe when connected; shows template plans otherwise.
324
+
325
+ ![Pricing](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/pricing.png)
326
+
327
+ **Blog** — Engineering blog included out of the box. Posts are MDX files in the repo — no CMS needed. Supports tags, featured posts, and author bylines.
328
+
329
+ ![Blog](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/blog.png)
330
+
331
+ **Blog Post** — Individual post view with author card, reading time, and tag badges. Content is plain MDX — edit files and redeploy.
332
+
333
+ ![Blog Post](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/blog_post.png)
334
+
335
+ ### Auth
336
+
337
+ **Login** — Split-screen login with Google OAuth and email/password. Left panel shows a product pitch with a social proof quote. HTTP-only cookie session on submit.
338
+
339
+ ![Login](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/login.png)
340
+
341
+ **Register** — Same split-screen layout as login. Google sign-up and email/password form with confirm-password field and terms acceptance.
342
+
343
+ ![Register](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/register.png)
344
+
345
+ ### Dashboard
346
+
347
+ **Dashboard (light mode)** — Workspace overview showing conversation count, knowledge base vector count, recent activity feed, agent tool call stats, active sessions, and team info. Onboarding banner guides new users through setup in under 2 minutes.
348
+
349
+ ![Dashboard Light](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/dashboard_light.png)
350
+
351
+ **Dashboard (dark mode)** — Same dashboard in dark theme. Theme is saved per-device and can be overridden per-workspace in appearance settings.
352
+
353
+ ![Dashboard Dark](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/dashboard_dark.png)
354
+
355
+ ### Teams & Organizations
356
+
357
+ **Workspaces** — List of all organizations the user belongs to. Shows plan tier and role for each. Users can switch active workspace or create a new organization.
358
+
359
+ ![Organizations](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/organizations.png)
360
+
361
+ **Team Management** — Organization detail page with workspace profile (name + avatar), member list with roles, and an "Invite teammate" button. Owners and admins can adjust roles inline.
362
+
363
+ ![Organization Details](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/organizations_details.png)
364
+
365
+ ### Knowledge Bases
366
+
367
+ **Knowledge Bases** — List of RAG knowledge bases scoped to the current workspace. Each base shows its collection slug. Users can create new bases, toggle which ones are active in chat, and upload documents through the UI.
368
+
369
+ ![Knowledge Bases](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/knowledge_bases.png)
370
+
371
+ ### Billing
372
+
373
+ **Billing** — Workspace billing dashboard showing current plan, storage usage (chat attachments + indexed RAG documents), quick links to usage breakdown, invoices, payment methods, and subscription management. "Manage in Stripe" opens the Stripe customer portal.
374
+
375
+ ![Billing](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/billing.png)
376
+
377
+ ### Profile & Settings
378
+
379
+ **Profile** — Personal info tab: avatar upload, display name, email, and active session list with per-device revoke buttons. Visibility note explains which fields are shown to teammates.
380
+
381
+ ![Profile](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/profile.png)
382
+
383
+ **Account & Security** — Change password form with strength guidance, "Sign out everywhere" button, and danger zone for permanent account deletion.
384
+
385
+ ![Account](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/profile_account.png)
386
+
387
+ **Slash Commands** — Customize the `/command` palette in chat. Toggle built-in commands (`/clear`, `/regen`, `/settings`, `/summarize`, `/explain`) and create custom shortcuts that send a stored prompt with a few keystrokes.
388
+
389
+ ![Slash Commands](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/profile_commands.png)
390
+
391
+ **Appearance** — Theme switcher (light / dark / system) and brand color picker with four presets: Blue (Stripe/Vercel), Green (healthtech), Red (energetic), Orange (B2C), Violet (Anthropic-style). Brand color updates CSS variables across the entire workspace and is saved per-device.
392
+
393
+ ![Appearance](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/profile_apperance.png)
394
+
395
+ **Notification Preferences** — Per-category notification controls with separate toggles for email and in-app delivery. Categories: Billing, Team activity, Security alerts, and Product updates. Preferences stored locally and synced to the backend via `/users/me/notifications`.
396
+
397
+ ![Notifications](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/profile_notifications.png)
398
+
399
+ ### Admin Panel
400
+
401
+ **Admin Overview** — Workspace-wide metrics (total users, active sessions last 24h, conversation count, MRR) plus a recent activity feed showing all conversations across all users. Requires the `admin` role.
402
+
403
+ ![Admin Overview](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/admin.png)
404
+
405
+ **User Management** — Full user list with search by email or name. Shows role, status, join date, and an "Inspect" action to impersonate or suspend any user. Pagination built in.
406
+
407
+ ![Admin Users](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/admin_users.png)
408
+
409
+ **Conversation Browser** — Browse all conversations across the workspace. Filter by status and owner, sort by any column, open any conversation in a read-only view. Useful for support and quality review.
410
+
411
+ ![Admin Conversations](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/admin_conversations.png)
412
+
413
+ **Message Quality & Ratings** — Aggregated like/dislike feedback on AI responses over the last 30 days. Shows approval rate, daily chart, and a filterable table of individual ratings with optional user comments. Export to CSV.
414
+
415
+ ![Admin Ratings](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/admin_ratings.png)
416
+
417
+ **Stripe Events Log** — Webhook event browser for debugging Stripe billing flows. Lists all received events (type, customer, amount, status, timestamp) and lets admins manually replay any event via the backend `/admin/stripe-events/{id}/replay` endpoint.
418
+
419
+ ![Stripe Events](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/admin_stripe_events.png)
420
+
421
+ **System Health** — Live readiness dashboard auto-refreshing every 30 seconds. Checks API, Database (PostgreSQL primary), Redis, Vector store, LLM provider, Background worker, and Stripe API. Shows uptime percentage per service.
422
+
423
+ ![System Health](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/admin_system_health.png)
424
+
425
+ ### Observability
426
+
427
+ **Logfire (PydanticAI)** — Full distributed tracing for PydanticAI agent runs, FastAPI requests, database queries, Redis, Celery tasks, and HTTPX calls — all in one timeline.
428
+
429
+ ![Logfire](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/logfire.png)
430
+
431
+ **LangSmith (LangChain / LangGraph)** — Trace viewer for LangChain agent runs with step-by-step chain inspection, token usage, and feedback collection.
432
+
433
+ ![LangSmith](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/langsmith.png)
434
+
435
+ ### Messaging Channels
436
+
437
+ **Telegram Bot** — Multi-bot integration with both polling and webhook modes. Each bot gets its own session, supports group concurrency control, and routes messages through the same agent pipeline as the web UI.
438
+
439
+ ![Telegram](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/telegram.png)
440
+
441
+ ### Monitoring & API
442
+
443
+ **Celery Flower** — Real-time task queue monitor. Track worker status, task throughput, and failure rates for background jobs (document ingestion, email, webhooks).
444
+
445
+ ![Flower](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/flower.png)
446
+
447
+ **API Documentation** — Auto-generated OpenAPI / Swagger UI at `/docs`. All endpoints documented with request/response schemas, auth requirements, and example payloads.
448
+
449
+ ![API Docs](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/docs_2.png)
450
+
451
+ ---
452
+
453
+ ## 🎯 Why This Template
454
+
455
+ Building AI/LLM applications requires more than just an API wrapper. You need:
456
+
457
+ - **Type-safe AI agents** with tool/function calling
458
+ - **Real-time streaming** responses via WebSocket
459
+ - **Conversation persistence** and history management
460
+ - **Production infrastructure** - auth, rate limiting, observability
461
+ - **Enterprise integrations** - background tasks, webhooks, admin panels
462
+
463
+ This template gives you all of that out of the box, with **20+ configurable integrations** so you can focus on building your AI product, not boilerplate.
464
+
465
+ ### Perfect For
466
+
467
+ - 🤖 **AI Chatbots & Assistants** - PydanticAI or LangChain agents with streaming responses
468
+ - 📊 **ML Applications** - Background task processing with Celery/Taskiq
469
+ - 🏢 **Enterprise SaaS** - Full auth, admin panel, webhooks, and more
470
+ - 🚀 **Startups** - Ship fast with production-ready infrastructure
471
+
472
+ ### AI-Agent Friendly
473
+
474
+ Generated projects include **CLAUDE.md** and **AGENTS.md** files optimized for AI coding assistants (Claude Code, Codex, Copilot, Cursor, Zed). Following [progressive disclosure](https://humanlayer.dev/blog/writing-a-good-claude-md) best practices - concise project overview with pointers to detailed docs when needed.
475
+
476
+ ---
477
+
478
+ ## ✨ Features
479
+
480
+ <p align="center">
481
+ <a href="https://ai.pydantic.dev"><img src="https://img.shields.io/badge/PydanticAI-E92063?logo=pydantic&logoColor=white" alt="PydanticAI"></a>
482
+ <a href="https://python.langchain.com"><img src="https://img.shields.io/badge/LangChain-1C3C3C?logo=langchain&logoColor=white" alt="LangChain"></a>
483
+ <a href="https://langchain-ai.github.io/langgraph/"><img src="https://img.shields.io/badge/LangGraph-005A9C?logo=langchain&logoColor=white" alt="LangGraph"></a>
484
+ <a href="https://www.crewai.com"><img src="https://img.shields.io/badge/CrewAI-FF6B35?logoColor=white" alt="CrewAI"></a>
485
+ <a href="https://milvus.io"><img src="https://img.shields.io/badge/Milvus-FF6B35?logoColor=white" alt="Milvus"></a>
486
+ <a href="https://openai.com"><img src="https://img.shields.io/badge/OpenAI-412991?logo=openai&logoColor=white" alt="OpenAI"></a>
487
+ <a href="https://anthropic.com"><img src="https://img.shields.io/badge/Anthropic-D4A373?logo=anthropic&logoColor=white" alt="Anthropic"></a>
488
+ <a href="https://ai.google.dev"><img src="https://img.shields.io/badge/Gemini-4285F4?logo=google&logoColor=white" alt="Google Gemini"></a>
489
+ <a href="https://openrouter.ai"><img src="https://img.shields.io/badge/OpenRouter-6366F1?logoColor=white" alt="OpenRouter"></a>
490
+ </p>
491
+
492
+ <p align="center">
493
+ <a href="https://fastapi.tiangolo.com"><img src="https://img.shields.io/badge/FastAPI-009688?logo=fastapi&logoColor=white" alt="FastAPI"></a>
494
+ <a href="https://nextjs.org"><img src="https://img.shields.io/badge/Next.js_15-000000?logo=next.js&logoColor=white" alt="Next.js 15"></a>
495
+ <a href="https://react.dev"><img src="https://img.shields.io/badge/React_19-61DAFB?logo=react&logoColor=black" alt="React 19"></a>
496
+ <a href="https://www.typescriptlang.org"><img src="https://img.shields.io/badge/TypeScript-3178C6?logo=typescript&logoColor=white" alt="TypeScript"></a>
497
+ <a href="https://tailwindcss.com"><img src="https://img.shields.io/badge/Tailwind_v4-06B6D4?logo=tailwindcss&logoColor=white" alt="Tailwind CSS"></a>
498
+ <a href="https://www.sqlalchemy.org"><img src="https://img.shields.io/badge/SQLAlchemy-D71F00?logo=sqlalchemy&logoColor=white" alt="SQLAlchemy"></a>
499
+ </p>
500
+
501
+ <p align="center">
502
+ <a href="https://www.postgresql.org"><img src="https://img.shields.io/badge/PostgreSQL-4169E1?logo=postgresql&logoColor=white" alt="PostgreSQL"></a>
503
+ <a href="https://www.mongodb.com"><img src="https://img.shields.io/badge/MongoDB-47A248?logo=mongodb&logoColor=white" alt="MongoDB"></a>
504
+ <a href="https://redis.io"><img src="https://img.shields.io/badge/Redis-DC382D?logo=redis&logoColor=white" alt="Redis"></a>
505
+ <a href="https://milvus.io"><img src="https://img.shields.io/badge/Milvus-00A1EA?logoColor=white" alt="Milvus"></a>
506
+ <a href="https://qdrant.tech"><img src="https://img.shields.io/badge/Qdrant-FF6B6B?logoColor=white" alt="Qdrant"></a>
507
+ <a href="https://www.trychroma.com"><img src="https://img.shields.io/badge/ChromaDB-FF6F61?logoColor=white" alt="ChromaDB"></a>
508
+ <a href="https://docs.celeryq.dev"><img src="https://img.shields.io/badge/Celery-37814A?logo=celery&logoColor=white" alt="Celery"></a>
509
+ <a href="https://logfire.pydantic.dev"><img src="https://img.shields.io/badge/Logfire-E92063?logo=pydantic&logoColor=white" alt="Logfire"></a>
510
+ <a href="https://sentry.io"><img src="https://img.shields.io/badge/Sentry-362D59?logo=sentry&logoColor=white" alt="Sentry"></a>
511
+ <a href="https://prometheus.io"><img src="https://img.shields.io/badge/Prometheus-E6522C?logo=prometheus&logoColor=white" alt="Prometheus"></a>
512
+ </p>
513
+
514
+ <p align="center">
515
+ <a href="https://www.docker.com"><img src="https://img.shields.io/badge/Docker-2496ED?logo=docker&logoColor=white" alt="Docker"></a>
516
+ <a href="https://kubernetes.io"><img src="https://img.shields.io/badge/Kubernetes-326CE5?logo=kubernetes&logoColor=white" alt="Kubernetes"></a>
517
+ <a href="https://github.com/features/actions"><img src="https://img.shields.io/badge/GitHub_Actions-2088FF?logo=githubactions&logoColor=white" alt="GitHub Actions"></a>
518
+ <a href="https://aws.amazon.com/s3/"><img src="https://img.shields.io/badge/S3-569A31?logo=amazons3&logoColor=white" alt="S3"></a>
519
+ </p>
520
+
521
+ ### 🤖 AI/LLM First
522
+
523
+ - **6 AI Frameworks** - [PydanticAI](https://ai.pydantic.dev), [PydanticDeep](https://github.com/vstorm-co/pydantic-deep), [LangChain](https://python.langchain.com), [LangGraph](https://langchain-ai.github.io/langgraph/), [CrewAI](https://www.crewai.com), [DeepAgents](https://github.com/vstorm-co/pydantic-deepagents)
524
+ - **4 LLM Providers** - OpenAI, Anthropic, Google Gemini, OpenRouter
525
+ - **RAG** - Document ingestion, vector search, reranking (Milvus, Qdrant, ChromaDB, pgvector)
526
+ - **WebSocket Streaming** - Real-time responses with full event access
527
+ - **Messaging Channels** - Telegram and Slack multi-bot integration with polling, webhooks, per-thread sessions, group concurrency control
528
+ - **Conversation Sharing** - Share conversations with users or via public links, admin conversation browser
529
+ - **Conversation Persistence** - Save chat history to database
530
+ - **Message Ratings** - Like/dislike responses with feedback, admin analytics
531
+ - **Image Description** - Extract images from documents, describe via LLM vision
532
+ - **Multimodal Embeddings** - Google Gemini embedding model (text + images)
533
+ - **Document Sources** - Local files, API upload, Google Drive, S3/MinIO
534
+ - **Sync Sources** - Configurable connectors (Google Drive, S3) with scheduled sync
535
+ - **Observability** - Logfire for PydanticAI, LangSmith for LangChain/LangGraph/DeepAgents
536
+
537
+ ### ⚡ Backend (FastAPI)
538
+
539
+ - **[FastAPI](https://fastapi.tiangolo.com)** + **[Pydantic v2](https://docs.pydantic.dev)** - High-performance async API
540
+ - **Multiple Databases** - PostgreSQL (async), MongoDB (async), SQLite
541
+ - **Authentication** - JWT + Refresh tokens, API Keys, OAuth2 (Google)
542
+ - **Background Tasks** - Celery, Taskiq, or ARQ
543
+ - **Django-style CLI** - Custom management commands with auto-discovery
544
+
545
+ ### 🎨 Frontend (Next.js 15)
546
+
547
+ - **React 19** + **TypeScript** + **Tailwind CSS v4**
548
+ - **AI Chat Interface** - WebSocket streaming, tool call visualization
549
+ - **Authentication** - HTTP-only cookies, auto-refresh, password reset, magic link
550
+ - **Marketing Site** - hero, pricing, FAQ, blog, contact form, legal pages (PL + EN)
551
+ - **User Settings** - profile, API keys CRUD (`sk_*` tokens), onboarding tracking
552
+ - **Admin Panel** - workspace stats, Stripe events browser
553
+ - **SEO** - per-page metadata, OG image, sitemap, robots, manifest, favicons
554
+ - **Dark Mode** + **i18n** (PL/EN via next-intl, locale-prefixed routes)
555
+
556
+ ### 🔌 20+ Enterprise Integrations
557
+
558
+ | Category | Integrations |
559
+ |----------|-------------|
560
+ | **AI Frameworks** | PydanticAI, PydanticDeep, LangChain, LangGraph, CrewAI, DeepAgents |
561
+ | **LLM Providers** | OpenAI, Anthropic, Google Gemini, OpenRouter |
562
+ | **RAG / Vector Stores** | Milvus, Qdrant, ChromaDB, pgvector |
563
+ | **RAG Sources** | Local files, API upload, Google Drive, S3/MinIO, Sync Sources (configurable, scheduled) |
564
+ | **Embeddings** | OpenAI, Voyage, Gemini (multimodal), SentenceTransformers |
565
+ | **Caching & State** | Redis, fastapi-cache2 |
566
+ | **Security** | Rate limiting, CORS, CSRF protection |
567
+ | **Observability** | Logfire, LangSmith, Sentry, Prometheus |
568
+ | **Admin** | SQLAdmin panel with auth |
569
+ | **Collaboration** | Conversation sharing (direct + link), admin conversation browser |
570
+ | **Messaging** | Telegram multi-bot (polling + webhook), Slack multi-bot (Events API + Socket Mode) |
571
+ | **Events** | Webhooks, WebSockets |
572
+ | **DevOps** | Docker, GitHub Actions, GitLab CI, Kubernetes |
573
+
574
+ ### 🗺️ Architecture Overview
575
+
576
+ ```
577
+ ┌──────────────────────────────────────────────────────────────────────────┐
578
+ │ FRONTEND (Next.js 15) │
579
+ │ Chat UI · Knowledge Base · Dashboard · Settings · Dark Mode · i18n │
580
+ └──────────────┬───────────────────────────────────────────┬───────────────┘
581
+ │ REST / WebSocket │ Vercel
582
+ ▼ ▼
583
+ ┌──────────────────────────────────────────────────────────────────────────┐
584
+ │ BACKEND (FastAPI) │
585
+ │ │
586
+ │ ┌─────────────────────────────────────────────────────────────────┐ │
587
+ │ │ AI AGENTS │ │
588
+ │ │ PydanticAI · LangChain · LangGraph · CrewAI · DeepAgents │ │
589
+ │ │ ──────────────────────────────────────────────────────────── │ │
590
+ │ │ Tools: datetime · web_search (Tavily) · search_knowledge_base │ │
591
+ │ │ Providers: OpenAI · Anthropic · Gemini · OpenRouter │ │
592
+ │ └─────────────────────────────────────────────────────────────────┘ │
593
+ │ │
594
+ │ ┌─────────────────────────────────────────────────────────────────┐ │
595
+ │ │ RAG PIPELINE │ │
596
+ │ │ │ │
597
+ │ │ Sources Parse Chunk Embed │ │
598
+ │ │ ───────── ────────── ────────── ────────────── │ │
599
+ │ │ Local files PyMuPDF recursive OpenAI │ │
600
+ │ │ API upload LiteParse markdown Voyage │ │
601
+ │ │ Google Drive LlamaParse fixed Gemini (multi) │ │
602
+ │ │ S3/MinIO python-docx SentenceTransf. │ │
603
+ │ │ Sync Sources │ │
604
+ │ │ │ │
605
+ │ │ Store Search Rank │ │
606
+ │ │ ────────────── ────────────── ────────────── │ │
607
+ │ │ Milvus Vector similarity Cohere reranker │ │
608
+ │ │ Qdrant BM25 + vector RRF CrossEncoder │ │
609
+ │ │ ChromaDB Multi-collection │ │
610
+ │ │ pgvector │ │
611
+ │ └─────────────────────────────────────────────────────────────────┘ │
612
+ │ │
613
+ │ Auth (JWT/API Key/OAuth) · Rate Limiting · Webhooks · Admin Panel │
614
+ │ Background Tasks (Celery/Taskiq/ARQ) · Django-style CLI │
615
+ │ Observability (Logfire/LangSmith/Sentry/Prometheus) │
616
+ └───────┬──────────────┬──────────────┬──────────────┬─────────────────────┘
617
+ │ │ │ │
618
+ ▼ ▼ ▼ ▼
619
+ PostgreSQL Redis Vector DB LLM APIs
620
+ MongoDB (Milvus/ (OpenAI/
621
+ SQLite Qdrant/ Anthropic/
622
+ ChromaDB/ Gemini)
623
+ pgvector)
624
+ ```
625
+
626
+ ---
627
+
628
+ ## 🏗️ Architecture
629
+
630
+ ```mermaid
631
+ graph TB
632
+ subgraph Frontend["Frontend (Next.js 15)"]
633
+ UI[React Components]
634
+ WS[WebSocket Client]
635
+ Store[Zustand Stores]
636
+ end
637
+
638
+ subgraph Backend["Backend (FastAPI)"]
639
+ API[API Routes]
640
+ Services[Services Layer]
641
+ Repos[Repositories]
642
+ Agent[AI Agent]
643
+ end
644
+
645
+ subgraph Infrastructure
646
+ DB[(PostgreSQL/MongoDB)]
647
+ Redis[(Redis)]
648
+ Queue[Celery/Taskiq]
649
+ end
650
+
651
+ subgraph External
652
+ LLM[OpenAI/Anthropic]
653
+ Webhook[Webhook Endpoints]
654
+ end
655
+
656
+ UI --> API
657
+ WS <--> Agent
658
+ API --> Services
659
+ Services --> Repos
660
+ Services --> Agent
661
+ Repos --> DB
662
+ Agent --> LLM
663
+ Services --> Redis
664
+ Services --> Queue
665
+ Services --> Webhook
666
+ ```
667
+
668
+ ### Layered Architecture
669
+
670
+ The backend follows a clean **Repository + Service** pattern:
671
+
672
+ ```mermaid
673
+ graph LR
674
+ A[API Routes] --> B[Services]
675
+ B --> C[Repositories]
676
+ C --> D[(Database)]
677
+
678
+ B --> E[External APIs]
679
+ B --> F[AI Agents]
680
+ ```
681
+
682
+ | Layer | Responsibility |
683
+ |-------|---------------|
684
+ | **Routes** | HTTP handling, validation, auth |
685
+ | **Services** | Business logic, orchestration |
686
+ | **Repositories** | Data access, queries |
687
+
688
+ See [Architecture Documentation](https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/docs/architecture.md) for details.
689
+
690
+ ---
691
+
692
+ ## 🤖 AI Agent
693
+
694
+ Choose from **6 AI frameworks** and **4 LLM providers** when generating your project:
695
+
696
+ ```bash
697
+ # PydanticAI with OpenAI (default)
698
+ fastapi-fullstack create my_app --ai-framework pydantic_ai
699
+
700
+ # LangGraph with Anthropic
701
+ fastapi-fullstack create my_app --ai-framework langgraph --llm-provider anthropic
702
+
703
+ # CrewAI with Google Gemini
704
+ fastapi-fullstack create my_app --ai-framework crewai --llm-provider google
705
+
706
+ # DeepAgents with OpenAI
707
+ fastapi-fullstack create my_app --ai-framework deepagents
708
+
709
+ # With RAG enabled
710
+ fastapi-fullstack create my_app --rag --database postgresql --task-queue celery
711
+ ```
712
+
713
+ ### Supported Combinations
714
+
715
+ | Framework | OpenAI | Anthropic | Gemini | OpenRouter |
716
+ |-----------|:------:|:---------:|:------:|:----------:|
717
+ | **PydanticAI** | ✓ | ✓ | ✓ | ✓ |
718
+ | **PydanticDeep** | ✓ | ✓ | ✓ | - |
719
+ | **LangChain** | ✓ | ✓ | ✓ | - |
720
+ | **LangGraph** | ✓ | ✓ | ✓ | - |
721
+ | **CrewAI** | ✓ | ✓ | ✓ | - |
722
+ | **DeepAgents** | ✓ | ✓ | ✓ | - |
723
+
724
+ ### PydanticAI Integration
725
+
726
+ Type-safe agents with full dependency injection:
727
+
728
+ ```python
729
+ # app/agents/assistant.py
730
+ from pydantic_ai import Agent, RunContext
731
+
732
+ @dataclass
733
+ class Deps:
734
+ user_id: str | None = None
735
+ db: AsyncSession | None = None
736
+
737
+ agent = Agent[Deps, str](
738
+ model="openai:gpt-4o-mini",
739
+ system_prompt="You are a helpful assistant.",
740
+ )
741
+
742
+ @agent.tool
743
+ async def search_database(ctx: RunContext[Deps], query: str) -> list[dict]:
744
+ """Search the database for relevant information."""
745
+ # Access user context and database via ctx.deps
746
+ ...
747
+ ```
748
+
749
+ ### LangChain Integration
750
+
751
+ Flexible agents with LangGraph:
752
+
753
+ ```python
754
+ # app/agents/langchain_assistant.py
755
+ from langchain.tools import tool
756
+ from langgraph.prebuilt import create_react_agent
757
+
758
+ @tool
759
+ def search_database(query: str) -> list[dict]:
760
+ """Search the database for relevant information."""
761
+ ...
762
+
763
+ agent = create_react_agent(
764
+ model=ChatOpenAI(model="gpt-4o-mini"),
765
+ tools=[search_database],
766
+ prompt="You are a helpful assistant.",
767
+ )
768
+ ```
769
+
770
+ ### WebSocket Streaming
771
+
772
+ Both frameworks use the same WebSocket endpoint with real-time streaming:
773
+
774
+ ```python
775
+ @router.websocket("/ws")
776
+ async def agent_ws(websocket: WebSocket):
777
+ await websocket.accept()
778
+
779
+ # Works with both PydanticAI and LangChain
780
+ async for event in agent.stream(user_input):
781
+ await websocket.send_json({
782
+ "type": "text_delta",
783
+ "content": event.content
784
+ })
785
+ ```
786
+
787
+ ### Observability
788
+
789
+ Each framework has its own observability solution:
790
+
791
+ | Framework | Observability | Dashboard |
792
+ |-----------|--------------|-----------|
793
+ | **PydanticAI** | [Logfire](https://logfire.pydantic.dev) | Agent runs, tool calls, token usage |
794
+ | **LangChain** | [LangSmith](https://smith.langchain.com) | Traces, feedback, datasets |
795
+
796
+ See [AI Agent Documentation](https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/docs/ai-agent.md) for more.
797
+
798
+ ---
799
+
800
+ ## 📄 RAG (Retrieval-Augmented Generation)
801
+
802
+ Enable RAG to give your AI agents access to a knowledge base built from your documents.
803
+
804
+ ### Vector Store Backends
805
+
806
+ | Backend | Type | Docker Required | Best For |
807
+ |---------|------|:---:|---------|
808
+ | **Milvus** | Dedicated vector DB | Yes (3 services) | Production, large scale |
809
+ | **Qdrant** | Dedicated vector DB | Yes (1 service) | Production, simple setup |
810
+ | **ChromaDB** | Embedded / HTTP | No | Development, prototyping |
811
+ | **pgvector** | PostgreSQL extension | No (uses existing PG) | Already have PostgreSQL |
812
+
813
+ ### Document Ingestion (CLI)
814
+
815
+ ```bash
816
+ # Local files
817
+ uv run my_app rag-ingest /path/to/document.pdf --collection docs
818
+ uv run my_app rag-ingest /path/to/folder/ --recursive
819
+
820
+ # Google Drive (service account)
821
+ uv run my_app rag-sync-gdrive --collection docs --folder-id <drive_folder_id>
822
+
823
+ # S3/MinIO
824
+ uv run my_app rag-sync-s3 --collection docs --prefix reports/ --bucket my-bucket
825
+ ```
826
+
827
+ ### Embedding Providers
828
+
829
+ | Provider | Model | Dimensions | Multimodal |
830
+ |----------|-------|:---:|:---:|
831
+ | **OpenAI** | text-embedding-3-small | 1536 | - |
832
+ | **Voyage** | voyage-3 | 1024 | - |
833
+ | **Gemini** | gemini-embedding-exp-03-07 | 3072 | Text + Images |
834
+ | **SentenceTransformers** | all-MiniLM-L6-v2 | 384 | - |
835
+
836
+ ### Features
837
+
838
+ - **Document parsing** - PDF (PyMuPDF with tables, headers/footers, OCR), DOCX, TXT, MD + 130+ formats via LlamaParse
839
+ - **Image description** - Extract images from documents, describe via LLM vision API (opt-in)
840
+ - **Chunking** - RecursiveCharacterTextSplitter with configurable size/overlap
841
+ - **Reranking** - Cohere API or local CrossEncoder for improved search quality
842
+ - **Agent integration** - All 6 AI frameworks get a `search_knowledge_base` tool automatically
843
+
844
+ ---
845
+
846
+ ## 📊 Observability
847
+
848
+ ### Logfire (for PydanticAI)
849
+
850
+ [Logfire](https://logfire.pydantic.dev) provides complete observability for your application - from AI agents to database queries. Built by the Pydantic team, it offers first-class support for the entire Python ecosystem.
851
+
852
+ ```mermaid
853
+ graph LR
854
+ subgraph Your App
855
+ API[FastAPI]
856
+ Agent[PydanticAI]
857
+ DB[(Database)]
858
+ Cache[(Redis)]
859
+ Queue[Celery/Taskiq]
860
+ HTTP[HTTPX]
861
+ end
862
+
863
+ subgraph Logfire
864
+ Traces[Traces]
865
+ Metrics[Metrics]
866
+ Logs[Logs]
867
+ end
868
+
869
+ API --> Traces
870
+ Agent --> Traces
871
+ DB --> Traces
872
+ Cache --> Traces
873
+ Queue --> Traces
874
+ HTTP --> Traces
875
+ ```
876
+
877
+ | Component | What You See |
878
+ |-----------|-------------|
879
+ | **PydanticAI** | Agent runs, tool calls, LLM requests, token usage, streaming events |
880
+ | **FastAPI** | Request/response traces, latency, status codes, route performance |
881
+ | **PostgreSQL/MongoDB** | Query execution time, slow queries, connection pool stats |
882
+ | **Redis** | Cache hits/misses, command latency, key patterns |
883
+ | **Celery/Taskiq** | Task execution, queue depth, worker performance |
884
+ | **HTTPX** | External API calls, response times, error rates |
885
+
886
+ ### LangSmith (for LangChain)
887
+
888
+ [LangSmith](https://smith.langchain.com) provides observability specifically designed for LangChain applications:
889
+
890
+ | Feature | Description |
891
+ |---------|-------------|
892
+ | **Traces** | Full execution traces for agent runs and chains |
893
+ | **Feedback** | Collect user feedback on agent responses |
894
+ | **Datasets** | Build evaluation datasets from production data |
895
+ | **Monitoring** | Track latency, errors, and token usage |
896
+
897
+ LangSmith is automatically configured when you choose LangChain:
898
+
899
+ ```bash
900
+ # .env
901
+ LANGCHAIN_TRACING_V2=true
902
+ LANGCHAIN_API_KEY=your-api-key
903
+ LANGCHAIN_PROJECT=my_project
904
+ ```
905
+
906
+ ### Configuration
907
+
908
+ Enable Logfire and select which components to instrument:
909
+
910
+ ```bash
911
+ fastapi-fullstack new
912
+ # ✓ Enable Logfire observability
913
+ # ✓ Instrument FastAPI
914
+ # ✓ Instrument Database
915
+ # ✓ Instrument Redis
916
+ # ✓ Instrument Celery
917
+ # ✓ Instrument HTTPX
918
+ ```
919
+
920
+ ### Usage
921
+
922
+ ```python
923
+ # Automatic instrumentation in app/main.py
924
+ import logfire
925
+
926
+ logfire.configure()
927
+ logfire.instrument_fastapi(app)
928
+ logfire.instrument_asyncpg()
929
+ logfire.instrument_redis()
930
+ logfire.instrument_httpx()
931
+ ```
932
+
933
+ ```python
934
+ # Manual spans for custom logic
935
+ with logfire.span("process_order", order_id=order.id):
936
+ await validate_order(order)
937
+ await charge_payment(order)
938
+ await send_confirmation(order)
939
+ ```
940
+
941
+ For more details, see [Logfire Documentation](https://logfire.pydantic.dev/docs/integrations/).
942
+
943
+ ---
944
+
945
+ ## 🛠️ Django-style CLI
946
+
947
+ Each generated project includes a powerful CLI inspired by Django's management commands:
948
+
949
+ ### Built-in Commands
950
+
951
+ ```bash
952
+ # Server
953
+ my_app server run --reload
954
+ my_app server routes
955
+
956
+ # Database (Alembic wrapper)
957
+ my_app db init
958
+ my_app db migrate -m "Add users"
959
+ my_app db upgrade
960
+
961
+ # Users
962
+ my_app user create --email admin@example.com --superuser
963
+ my_app user list
964
+ ```
965
+
966
+ ### Custom Commands
967
+
968
+ Create your own commands with auto-discovery:
969
+
970
+ ```python
971
+ # app/commands/seed.py
972
+ from app.commands import command, success, error
973
+ import click
974
+
975
+ @command("seed", help="Seed database with test data")
976
+ @click.option("--count", "-c", default=10, type=int)
977
+ @click.option("--dry-run", is_flag=True)
978
+ def seed_database(count: int, dry_run: bool):
979
+ """Seed the database with sample data."""
980
+ if dry_run:
981
+ info(f"[DRY RUN] Would create {count} records")
982
+ return
983
+
984
+ # Your logic here
985
+ success(f"Created {count} records!")
986
+ ```
987
+
988
+ Commands are **automatically discovered** from `app/commands/` - just create a file and use the `@command` decorator.
989
+
990
+ ```bash
991
+ my_app cmd seed --count 100
992
+ my_app cmd seed --dry-run
993
+ ```
994
+
995
+ ---
996
+
997
+ ## 📁 Generated Project Structure
998
+
999
+ ```
1000
+ my_project/
1001
+ ├── backend/
1002
+ │ ├── app/
1003
+ │ │ ├── main.py # FastAPI app with lifespan
1004
+ │ │ ├── api/
1005
+ │ │ │ ├── routes/v1/ # Versioned API endpoints
1006
+ │ │ │ ├── deps.py # Dependency injection
1007
+ │ │ │ └── router.py # Route aggregation
1008
+ │ │ ├── core/ # Config, security, middleware
1009
+ │ │ ├── db/models/ # SQLAlchemy/MongoDB models
1010
+ │ │ ├── schemas/ # Pydantic schemas
1011
+ │ │ ├── repositories/ # Data access layer
1012
+ │ │ ├── services/ # Business logic
1013
+ │ │ ├── agents/ # AI agents with centralized prompts
1014
+ │ │ ├── rag/ # RAG module (vector store, embeddings, ingestion)
1015
+ │ │ ├── commands/ # Django-style CLI commands
1016
+ │ │ └── worker/ # Background tasks
1017
+ │ ├── cli/ # Project CLI
1018
+ │ ├── tests/ # pytest test suite
1019
+ │ └── alembic/ # Database migrations
1020
+ ├── frontend/
1021
+ │ ├── src/
1022
+ │ │ ├── app/ # Next.js App Router
1023
+ │ │ ├── components/ # React components
1024
+ │ │ ├── hooks/ # useChat, useWebSocket, etc.
1025
+ │ │ └── stores/ # Zustand state management
1026
+ │ └── e2e/ # Playwright tests
1027
+ ├── docker-compose.yml
1028
+ ├── Makefile
1029
+ └── README.md
1030
+ ```
1031
+
1032
+ Generated projects include version metadata in `pyproject.toml` for tracking:
1033
+
1034
+ ```toml
1035
+ [tool.fastapi-fullstack]
1036
+ generator_version = "0.1.5"
1037
+ generated_at = "2024-12-21T10:30:00+00:00"
1038
+ ```
1039
+
1040
+ ---
1041
+
1042
+ ## ⚙️ Configuration Options
1043
+
1044
+ ### Core Options
1045
+
1046
+ | Option | Values | Description |
1047
+ |--------|--------|-------------|
1048
+ | **Database** | `postgresql`, `mongodb`, `sqlite`, `none` | Async by default |
1049
+ | **ORM** | `sqlalchemy`, `sqlmodel` | SQLModel for simplified syntax |
1050
+ | **Auth** | `jwt`, `api_key`, `both`, `none` | JWT includes user management |
1051
+ | **OAuth** | `none`, `google` | Social login |
1052
+ | **AI Framework** | `pydantic_ai`, `langchain`, `langgraph`, `crewai`, `deepagents` | Choose your AI agent framework |
1053
+ | **LLM Provider** | `openai`, `anthropic`, `google`, `openrouter` | OpenRouter only with PydanticAI |
1054
+ | **RAG** | `--rag` | Enable RAG with vector database |
1055
+ | **Vector Store** | `milvus`, `qdrant`, `chromadb`, `pgvector` | pgvector uses existing PostgreSQL |
1056
+ | **Background Tasks** | `none`, `celery`, `taskiq`, `arq` | Distributed queues |
1057
+ | **Frontend** | `none`, `nextjs` | Next.js 15 + React 19 |
1058
+
1059
+ ### Presets
1060
+
1061
+ | Preset | Description |
1062
+ |--------|-------------|
1063
+ | `--preset production` | Full production setup with Redis, Sentry, Kubernetes, Prometheus |
1064
+ | `--preset ai-agent` | AI agent with WebSocket streaming and conversation persistence |
1065
+ | `--minimal` | Minimal project with no extras |
1066
+
1067
+ ### Integrations
1068
+
1069
+ Select what you need:
1070
+
1071
+ ```bash
1072
+ fastapi-fullstack new
1073
+ # ✓ Redis (caching/sessions)
1074
+ # ✓ Rate limiting (slowapi)
1075
+ # ✓ Pagination (fastapi-pagination)
1076
+ # ✓ Admin Panel (SQLAdmin)
1077
+ # ✓ AI Agent (PydanticAI or LangChain)
1078
+ # ✓ Webhooks
1079
+ # ✓ Sentry
1080
+ # ✓ Logfire / LangSmith
1081
+ # ✓ Prometheus
1082
+ # ... and more
1083
+ ```
1084
+
1085
+ ---
1086
+
1087
+ ## 🔄 Comparison
1088
+
1089
+ ### vs. Manual Setup
1090
+
1091
+ Setting up a production AI agent stack manually means wiring together 10+ tools yourself:
1092
+
1093
+ ```bash
1094
+ # Without this template, you'd need to manually:
1095
+ # 1. Set up FastAPI project structure
1096
+ # 2. Configure SQLAlchemy + Alembic migrations
1097
+ # 3. Implement JWT auth with refresh tokens
1098
+ # 4. Build WebSocket streaming for AI responses
1099
+ # 5. Integrate PydanticAI/LangChain with tool calling
1100
+ # 6. Set up RAG pipeline (parsing, chunking, embedding, vector store)
1101
+ # 7. Configure Celery + Redis for background tasks
1102
+ # 8. Build Next.js frontend with auth and chat UI
1103
+ # 9. Write Docker Compose for all services
1104
+ # 10. Add observability, rate limiting, admin panel...
1105
+
1106
+ # With this template:
1107
+ pip install fastapi-fullstack
1108
+ fastapi-fullstack
1109
+ # Done. All of the above, configured and working.
1110
+ ```
1111
+
1112
+ ### vs. Alternatives
1113
+
1114
+ | Feature | **This Template** | [full-stack-fastapi-template](https://github.com/fastapi/full-stack-fastapi-template) | [create-t3-app](https://github.com/t3-oss/create-t3-app) |
1115
+ |---------|:-:|:-:|:-:|
1116
+ | **AI Agents** (5 frameworks) | ✅ | ❌ | ❌ |
1117
+ | **RAG Pipeline** (4 vector stores) | ✅ | ❌ | ❌ |
1118
+ | **WebSocket Streaming** | ✅ | ❌ | ❌ |
1119
+ | **Conversation Persistence** | ✅ | ❌ | ❌ |
1120
+ | **LLM Observability** (Logfire/LangSmith) | ✅ | ❌ | ❌ |
1121
+ | **FastAPI Backend** | ✅ | ✅ | ❌ |
1122
+ | **Next.js Frontend** | ✅ (v15) | ❌ | ✅ |
1123
+ | **JWT + OAuth Authentication** | ✅ | ✅ | ✅ (NextAuth) |
1124
+ | **Background Tasks** (Celery/Taskiq/ARQ) | ✅ | ✅ (Celery) | ❌ |
1125
+ | **Admin Panel** | ✅ (SQLAdmin) | ❌ | ❌ |
1126
+ | **Multiple Databases** (PG/Mongo/SQLite) | ✅ | PostgreSQL only | Prisma |
1127
+ | **Docker + K8s** | ✅ | ✅ | ❌ |
1128
+ | **Interactive CLI Wizard** | ✅ | ❌ | ✅ |
1129
+ | **Django-style Commands** | ✅ | ❌ | ❌ |
1130
+ | **Document Sources** (GDrive, S3, API) | ✅ | ❌ | ❌ |
1131
+ | **AI-Agent Friendly** (CLAUDE.md) | ✅ | ❌ | ❌ |
1132
+
1133
+ ---
1134
+
1135
+ ## ❓ FAQ
1136
+
1137
+ <details>
1138
+ <summary><b>How is this different from full-stack-fastapi-template?</b></summary>
1139
+
1140
+ [full-stack-fastapi-template](https://github.com/fastapi/full-stack-fastapi-template) by @tiangolo is a great starting point for FastAPI projects, but it focuses on traditional web apps. This template is purpose-built for **AI/LLM applications** — it adds AI agents (5 frameworks), RAG with 4 vector stores, WebSocket streaming, conversation persistence, LLM observability, and a Next.js chat UI out of the box.
1141
+
1142
+ </details>
1143
+
1144
+ <details>
1145
+ <summary><b>Can I use this without AI/LLM features?</b></summary>
1146
+
1147
+ Yes. The AI agent and RAG modules are optional. You can use this as a pure FastAPI + Next.js template with auth, admin panel, background tasks, and all other infrastructure — just skip the AI framework selection during setup.
1148
+
1149
+ </details>
1150
+
1151
+ <details>
1152
+ <summary><b>What Python and Node.js versions are required?</b></summary>
1153
+
1154
+ Python 3.11+ and Node.js 18+ (for the Next.js frontend). We recommend using [uv](https://docs.astral.sh/uv/) for Python and [bun](https://bun.sh) for the frontend.
1155
+
1156
+ </details>
1157
+
1158
+ <details>
1159
+ <summary><b>Can I add integrations after project generation?</b></summary>
1160
+
1161
+ The generated project is plain code — no lock-in or runtime dependency on the generator. You can add, remove, or modify any integration manually. The template just gives you a well-structured starting point.
1162
+
1163
+ </details>
1164
+
1165
+ <details>
1166
+ <summary><b>Can I use a different LLM provider than the one I selected?</b></summary>
1167
+
1168
+ Yes. The LLM provider is configured via environment variables (`AI_MODEL`, `OPENAI_API_KEY`, etc.). You can switch providers by changing the `.env` file and the model name — no code changes needed for PydanticAI (which supports all providers natively).
1169
+
1170
+ </details>
1171
+
1172
+ ---
1173
+
1174
+ ## 📚 Documentation
1175
+
1176
+ | Document | Description |
1177
+ |----------|-------------|
1178
+ | [Architecture](https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/docs/architecture.md) | Repository + Service pattern, layered design |
1179
+ | [Frontend](https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/docs/frontend.md) | Next.js setup, auth, state management |
1180
+ | [AI Agent](https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/docs/ai-agent.md) | PydanticAI, tools, WebSocket streaming |
1181
+ | [Observability](https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/docs/observability.md) | Logfire integration, tracing, metrics |
1182
+ | [Deployment](https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/docs/deployment.md) | Docker, Kubernetes, production setup |
1183
+ | [Development](https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/docs/development.md) | Local setup, testing, debugging |
1184
+ | [Changelog](https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/docs/CHANGELOG.md) | Version history and release notes |
1185
+
1186
+ ---
1187
+
1188
+ ## Star History
1189
+
1190
+ [![Star History Chart](https://api.star-history.com/svg?repos=vstorm-co/full-stack-fastapi-nextjs-llm-template&type=date&legend=top-left)](https://www.star-history.com/#vstorm-co/full-stack-fastapi-nextjs-llm-template&type=date&legend=top-left)
1191
+
1192
+ ---
1193
+
1194
+ ## 🙏 Inspiration
1195
+
1196
+ This project is inspired by:
1197
+
1198
+ - [full-stack-fastapi-template](https://github.com/fastapi/full-stack-fastapi-template) by @tiangolo
1199
+ - [fastapi-template](https://github.com/s3rius/fastapi-template) by @s3rius
1200
+ - [FastAPI Best Practices](https://github.com/zhanymkanov/fastapi-best-practices) by @zhanymkanov
1201
+ - Django's management commands system
1202
+
1203
+ ---
1204
+
1205
+ ## 🤝 Contributing
1206
+
1207
+ Contributions are welcome! Please read our [Contributing Guide](https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/CONTRIBUTING.md) for details.
1208
+
1209
+ <a href="https://github.com/vstorm-co/full-stack-ai-agent-template/graphs/contributors">
1210
+ <img src="https://contrib.rocks/image?repo=vstorm-co/full-stack-ai-agent-template" alt="Contributors" />
1211
+ </a>
1212
+
1213
+ ---
1214
+
1215
+ ## 📄 License
1216
+
1217
+ MIT License - see [LICENSE](https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/LICENSE) for details.
1218
+
1219
+ ---
1220
+
1221
+ <div align="center">
1222
+
1223
+ ### Need help implementing this in your company?
1224
+
1225
+ <p>We're <a href="https://vstorm.co"><b>Vstorm</b></a> — an Applied Agentic AI Engineering Consultancy<br>with 30+ production AI agent implementations.</p>
1226
+
1227
+ <a href="https://vstorm.co/contact-us/">
1228
+ <img src="https://img.shields.io/badge/Talk%20to%20us%20%E2%86%92-0066FF?style=for-the-badge&logoColor=white" alt="Talk to us">
1229
+ </a>
1230
+
1231
+ <br><br>
1232
+
1233
+ Made with ❤️ by <a href="https://vstorm.co"><b>Vstorm</b></a>
1234
+
1235
+ </div>