fastapi-fullstack 0.2.7__py3-none-any.whl → 0.2.9__py3-none-any.whl

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 (630) hide show
  1. {fastapi_fullstack-0.2.7.dist-info → fastapi_fullstack-0.2.9.dist-info}/METADATA +221 -81
  2. fastapi_fullstack-0.2.9.dist-info/RECORD +780 -0
  3. fastapi_gen/cli.py +920 -22
  4. fastapi_gen/config.py +392 -15
  5. fastapi_gen/prompts.py +835 -107
  6. fastapi_gen/template/VARIABLES.md +95 -3
  7. fastapi_gen/template/cookiecutter.json +74 -7
  8. fastapi_gen/template/hooks/post_gen_project.py +564 -39
  9. fastapi_gen/template/{{cookiecutter.project_slug}}/.claude/rules/architecture.md +29 -0
  10. fastapi_gen/template/{{cookiecutter.project_slug}}/.gitignore +0 -1
  11. fastapi_gen/template/{{cookiecutter.project_slug}}/CLAUDE.md +14 -5
  12. fastapi_gen/template/{{cookiecutter.project_slug}}/CONTRIBUTING.md +93 -0
  13. fastapi_gen/template/{{cookiecutter.project_slug}}/ENV_VARS.md +195 -0
  14. fastapi_gen/template/{{cookiecutter.project_slug}}/MANUAL_STEPS.md +216 -0
  15. fastapi_gen/template/{{cookiecutter.project_slug}}/Makefile +152 -20
  16. fastapi_gen/template/{{cookiecutter.project_slug}}/README.md +261 -170
  17. fastapi_gen/template/{{cookiecutter.project_slug}}/SECURITY.md +93 -0
  18. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/.env.example +58 -4
  19. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/Dockerfile +11 -0
  20. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/env.py +10 -0
  21. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0000_create_users.py +84 -0
  22. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0001_create_organization_tables.py +262 -0
  23. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0002_backfill_personal_orgs.py +145 -0
  24. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0003_add_is_app_admin.py +56 -0
  25. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0004_5_create_core_tables.py +333 -0
  26. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0004_create_audit_log.py +78 -0
  27. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0005_add_org_id_to_conversations_and_rag.py +121 -0
  28. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0006_backfill_org_id_on_conversations.py +73 -0
  29. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0007_create_knowledge_bases.py +99 -0
  30. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0008_backfill_default_kbs.py +165 -0
  31. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0009_conv_active_kb_ids.py +66 -0
  32. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0010_org_billing_seats.py +66 -0
  33. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0011_create_plan_price_tables.py +108 -0
  34. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0012_create_subscription_table.py +94 -0
  35. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0013_create_stripe_event_table.py +70 -0
  36. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0014_credits_usage_events.py +144 -0
  37. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0015_create_mv_usage_daily.py +62 -0
  38. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0016_user_onboarding_at.py +44 -0
  39. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0018_user_slash_commands.py +71 -0
  40. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0019_user_external_id.py +40 -0
  41. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0020_conversation_external_user_id.py +39 -0
  42. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0021_create_items.py +74 -0
  43. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/__init__.py +4 -4
  44. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/assistant.py +197 -68
  45. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/crewai_assistant.py +96 -8
  46. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/deepagents_assistant.py +257 -35
  47. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/langchain_assistant.py +239 -36
  48. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/langgraph_assistant.py +239 -82
  49. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/prompts.py +56 -52
  50. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/pydantic_deep_assistant.py +120 -15
  51. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/__init__.py +19 -4
  52. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/chart_render.py +125 -0
  53. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/chart_tool.py +166 -0
  54. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/datetime_tool.py +9 -9
  55. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/fetch_url.py +106 -0
  56. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/rag_tool.py +151 -74
  57. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/web_search.py +62 -28
  58. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/deps.py +389 -15
  59. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/exception_handlers.py +38 -17
  60. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/__init__.py +70 -1
  61. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_conversations.py +58 -13
  62. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_stats.py +37 -0
  63. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_users.py +200 -0
  64. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/agent.py +86 -3123
  65. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/auth.py +104 -295
  66. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/billing.py +368 -0
  67. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/channels.py +12 -78
  68. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/contact.py +29 -0
  69. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/conversations.py +137 -2
  70. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/files.py +24 -2
  71. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/health.py +101 -4
  72. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/invitations.py +178 -0
  73. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/items.py +129 -0
  74. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/knowledge_bases.py +508 -0
  75. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/marketing.py +28 -0
  76. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/me_slash_commands.py +121 -0
  77. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/members.py +206 -0
  78. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/oauth.py +55 -19
  79. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/organizations.py +335 -0
  80. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/rag.py +130 -375
  81. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/slack_webhook.py +2 -2
  82. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/telegram_webhook.py +2 -2
  83. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/channel.py +4 -4
  84. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/cleanup.py +38 -40
  85. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/create_app_admin.py +111 -0
  86. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/rag.py +12 -12
  87. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/sync_stripe_plans.py +203 -0
  88. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/audit.py +117 -0
  89. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/config.py +225 -28
  90. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/exceptions.py +8 -0
  91. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/middleware.py +8 -6
  92. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/security.py +128 -38
  93. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/__init__.py +13 -0
  94. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/audit_log.py +169 -0
  95. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/channel_bot.py +5 -5
  96. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/conversation.py +73 -1
  97. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/credit_transaction.py +240 -0
  98. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/item.py +60 -0
  99. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/knowledge_base.py +250 -0
  100. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/organization.py +727 -0
  101. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/plan.py +295 -0
  102. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/rag_document.py +80 -4
  103. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/session.py +12 -12
  104. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/stripe_event.py +101 -0
  105. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/subscription.py +167 -0
  106. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/user.py +115 -91
  107. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/user_slash_command.py +227 -0
  108. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/webhook.py +6 -6
  109. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/main.py +87 -17
  110. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/__init__.py +32 -2
  111. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/channel_bot.py +3 -3
  112. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/conversation.py +202 -18
  113. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/credit_transaction.py +159 -0
  114. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/invitation.py +303 -0
  115. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/item.py +146 -0
  116. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/knowledge_base.py +295 -0
  117. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/member.py +310 -0
  118. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/message_rating.py +5 -5
  119. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/organization.py +457 -0
  120. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/plan.py +135 -0
  121. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/rag_document.py +57 -1
  122. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/stripe_event.py +99 -0
  123. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/subscription.py +171 -0
  124. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/usage_event.py +508 -0
  125. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/user.py +57 -5
  126. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/user_slash_command.py +168 -0
  127. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/admin.py +42 -0
  128. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/billing.py +208 -0
  129. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/contact.py +29 -0
  130. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/conversation.py +75 -0
  131. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/conversation_share.py +2 -0
  132. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/item.py +50 -0
  133. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/knowledge_base.py +63 -0
  134. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/marketing.py +23 -0
  135. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/organization.py +149 -0
  136. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/password_reset.py +44 -0
  137. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/user.py +6 -11
  138. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/user_slash_command.py +66 -0
  139. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/__init__.py +7 -60
  140. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/admin.py +180 -0
  141. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/agent.py +416 -11
  142. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/agent_invocation.py +199 -3
  143. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/agent_session.py +2487 -0
  144. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/anomaly_detection.py +229 -0
  145. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/__init__.py +13 -0
  146. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/checkout_service.py +249 -0
  147. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/credit_service.py +330 -0
  148. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/exceptions.py +43 -0
  149. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/facade.py +375 -0
  150. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/__init__.py +5 -0
  151. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/customer_events.py +90 -0
  152. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/invoice_events.py +231 -0
  153. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/payment_events.py +103 -0
  154. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/subscription_events.py +515 -0
  155. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/pricing.py +79 -0
  156. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/stripe_client.py +185 -0
  157. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/subscription_service.py +182 -0
  158. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/webhook_handler.py +178 -0
  159. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/channel_bot.py +82 -6
  160. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{channels → services/channels}/__init__.py +1 -1
  161. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{channels → services/channels}/base.py +14 -2
  162. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{channels → services/channels}/router.py +88 -15
  163. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{channels → services/channels}/slack.py +14 -2
  164. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{channels → services/channels}/telegram.py +14 -2
  165. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/contact.py +52 -0
  166. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/conversation.py +155 -8
  167. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/email/__init__.py +33 -0
  168. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/email/exceptions.py +33 -0
  169. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/__init__.py +5 -0
  170. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/base.py +33 -0
  171. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/log.py +45 -0
  172. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/resend.py +60 -0
  173. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/smtp.py +75 -0
  174. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/email/service.py +204 -0
  175. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/email/templates.py +50 -0
  176. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/file_storage.py +37 -8
  177. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/file_upload.py +34 -16
  178. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/invitation.py +605 -0
  179. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/item.py +104 -0
  180. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/knowledge_base.py +625 -0
  181. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/member.py +390 -0
  182. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/message_rating.py +2 -2
  183. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/newsletter.py +45 -0
  184. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/organization.py +362 -0
  185. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/config.py +7 -0
  186. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/connectors/__init__.py +2 -2
  187. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/connectors/google_drive.py +1 -1
  188. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/connectors/s3.py +1 -1
  189. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/documents.py +111 -56
  190. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/embeddings.py +2 -2
  191. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/ingestion.py +8 -8
  192. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/reranker.py +2 -2
  193. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/retrieval.py +4 -4
  194. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/sources/__init__.py +2 -2
  195. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/sources/base.py +1 -1
  196. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/sources/google_drive.py +1 -1
  197. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/sources/s3.py +1 -1
  198. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/vectorstore.py +9 -9
  199. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rag_document.py +157 -3
  200. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rag_status.py +55 -0
  201. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rag_sync.py +51 -0
  202. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/__init__.py +5 -0
  203. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/rules.py +56 -0
  204. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/service.py +155 -0
  205. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/storage.py +138 -0
  206. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/sync_source.py +43 -13
  207. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/usage.py +232 -0
  208. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/user.py +312 -476
  209. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/user_slash_command.py +274 -0
  210. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/__init__.py +3 -5
  211. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/arq_app.py +37 -128
  212. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/background/__init__.py +42 -0
  213. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/background/channel.py +44 -0
  214. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{tasks → worker/background}/rag.py +39 -37
  215. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/celery_app.py +32 -29
  216. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/__init__.py +33 -30
  217. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/anomaly_tasks.py +54 -0
  218. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/cleanup_tasks.py +84 -0
  219. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/email_tasks.py +107 -0
  220. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/rag_tasks.py +23 -23
  221. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/schedules.py +38 -22
  222. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/pyproject.toml +34 -8
  223. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/test_auth.py +0 -11
  224. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_agents.py +49 -22
  225. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_chart_tool.py +137 -0
  226. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_conversation_kb_toggle.py +164 -0
  227. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_fetch_url.py +101 -0
  228. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_kb_scoping.py +314 -0
  229. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_rbac_teams.py +316 -0
  230. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_repositories_teams.py +501 -0
  231. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_services.py +55 -12
  232. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_services_conversation.py +4 -2
  233. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_services_members.py +386 -0
  234. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_services_organizations.py +260 -0
  235. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_stripe_seats.py +221 -0
  236. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_tenant_isolation.py +233 -0
  237. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_web_search.py +97 -0
  238. fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.dev.yml +22 -1
  239. fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.prod.yml +23 -15
  240. fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.yml +23 -1
  241. fastapi_gen/template/{{cookiecutter.project_slug}}/docs/configuration.md +4 -4
  242. fastapi_gen/template/{{cookiecutter.project_slug}}/docs/deploy.md +142 -0
  243. fastapi_gen/template/{{cookiecutter.project_slug}}/docs/howto/add-rag-source.md +5 -5
  244. fastapi_gen/template/{{cookiecutter.project_slug}}/docs/howto/add-sync-connector.md +7 -7
  245. fastapi_gen/template/{{cookiecutter.project_slug}}/docs/patterns.md +3 -3
  246. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/email_verification.html +17 -0
  247. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/email_verification.txt +11 -0
  248. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/invitation.html +17 -0
  249. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/invitation.txt +12 -0
  250. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/low_credits.html +17 -0
  251. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/low_credits.txt +10 -0
  252. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/magic_link.html +18 -0
  253. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/magic_link.txt +11 -0
  254. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/newsletter_welcome.html +15 -0
  255. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/newsletter_welcome.txt +7 -0
  256. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/password_reset.html +18 -0
  257. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/password_reset.txt +11 -0
  258. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/payment_failed.html +17 -0
  259. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/payment_failed.txt +12 -0
  260. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/payment_succeeded.html +18 -0
  261. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/payment_succeeded.txt +12 -0
  262. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/subscription_canceled.html +18 -0
  263. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/subscription_canceled.txt +10 -0
  264. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/subscription_changed.html +17 -0
  265. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/subscription_changed.txt +10 -0
  266. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/trial_ending.html +17 -0
  267. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/trial_ending.txt +12 -0
  268. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/trial_expired.html +17 -0
  269. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/trial_expired.txt +10 -0
  270. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/welcome.html +16 -0
  271. fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/welcome.txt +12 -0
  272. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/README.md +2 -2
  273. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/content/blog/rag-defaults-that-age-well.mdx +81 -0
  274. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/content/blog/shipping-ai-saas-template.mdx +61 -0
  275. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/content/blog/streaming-tool-calls-without-tears.mdx +83 -0
  276. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/messages/en.json +696 -1
  277. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/messages/pl.json +696 -1
  278. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/next.config.ts +50 -4
  279. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/package.json +11 -1
  280. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/forgot-password/page.tsx +24 -0
  281. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/layout.tsx +68 -68
  282. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/login/page.tsx +25 -0
  283. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/magic-link-sent/page.tsx +74 -0
  284. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/register/page.tsx +24 -0
  285. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/reset-password/page.tsx +62 -0
  286. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/conversations/page.tsx +309 -285
  287. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/layout.tsx +31 -0
  288. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/page.tsx +283 -0
  289. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/ratings/page.tsx +362 -271
  290. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/stripe-events/page.tsx +599 -0
  291. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/system/page.tsx +328 -0
  292. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/users/page.tsx +364 -0
  293. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/credits/page.tsx +302 -0
  294. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/invoices/page.tsx +23 -0
  295. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/page.tsx +386 -0
  296. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/payment-methods/page.tsx +23 -0
  297. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/subscription/page.tsx +137 -0
  298. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/usage/page.tsx +284 -0
  299. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/chat/page.tsx +6 -18
  300. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/dashboard/page.tsx +374 -212
  301. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/invitations/[token]/page.tsx +82 -0
  302. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/kb/[id]/page.tsx +431 -0
  303. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/kb/page.tsx +60 -0
  304. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/layout.tsx +10 -18
  305. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/orgs/[id]/members/page.tsx +299 -0
  306. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/orgs/page.tsx +206 -0
  307. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/profile/page.tsx +3 -342
  308. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/rag/page.tsx +513 -295
  309. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/account/page.tsx +224 -0
  310. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/appearance/page.tsx +35 -0
  311. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/layout.tsx +28 -0
  312. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/notifications/page.tsx +204 -0
  313. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/page.tsx +3 -124
  314. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/profile/page.tsx +348 -0
  315. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/slash-commands/page.tsx +17 -0
  316. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/about/page.tsx +204 -0
  317. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/callback/page.tsx +47 -94
  318. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/magic-link/layout.tsx +14 -0
  319. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/magic-link/page.tsx +101 -0
  320. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/blog/[slug]/page.tsx +215 -0
  321. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/blog/page.tsx +171 -0
  322. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/changelog/page.tsx +125 -0
  323. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/community/page.tsx +118 -0
  324. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/contact/page.tsx +136 -0
  325. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/error.tsx +4 -6
  326. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/help/page.tsx +126 -0
  327. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/layout.tsx +39 -3
  328. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/legal/cookies/page.tsx +44 -0
  329. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/legal/privacy/page.tsx +44 -0
  330. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/legal/terms/page.tsx +44 -0
  331. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/onboarding/[step]/page.tsx +57 -0
  332. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/onboarding/page.tsx +5 -0
  333. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/page.tsx +407 -253
  334. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/pricing/layout.tsx +42 -0
  335. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/pricing/page.tsx +336 -0
  336. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/security/page.tsx +121 -0
  337. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/shared/[token]/page.tsx +17 -42
  338. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/conversations/[id]/route.ts +29 -0
  339. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/conversations/route.ts +41 -0
  340. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/conversations/users/route.ts +33 -0
  341. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/{v1/admin → admin}/ratings/export/route.ts +2 -7
  342. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/{v1/admin → admin}/ratings/route.ts +2 -7
  343. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/{v1/admin → admin}/ratings/summary/route.ts +2 -7
  344. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/stats/route.ts +22 -0
  345. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/stripe-events/route.ts +24 -0
  346. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/users/[userId]/impersonate/route.ts +27 -0
  347. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/users/[userId]/route.ts +72 -0
  348. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/{v1/admin/conversations → admin/users}/route.ts +5 -17
  349. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/login/route.ts +4 -8
  350. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/logout/route.ts +21 -4
  351. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/magic-link/request/route.ts +19 -0
  352. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/magic-link/verify/route.ts +51 -0
  353. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/me/route.ts +5 -14
  354. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/oauth-callback/route.ts +33 -33
  355. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/password-reset/confirm/route.ts +19 -0
  356. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/password-reset/request/route.ts +19 -0
  357. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/refresh/route.ts +23 -23
  358. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/register/route.ts +4 -8
  359. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/billing/checkout/route.ts +20 -0
  360. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/billing/invoices/route.ts +19 -0
  361. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/billing/me/[...path]/route.ts +56 -0
  362. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/billing/portal/route.ts +18 -0
  363. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/contact/route.ts +25 -0
  364. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/messages/[messageId]/rate/route.ts +6 -14
  365. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/messages/route.ts +4 -9
  366. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/route.ts +8 -19
  367. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/route.ts +8 -18
  368. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/shared-with-me/route.ts +1 -1
  369. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/tool-stats/route.ts +25 -0
  370. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/files/[id]/route.ts +12 -13
  371. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/files/upload/route.ts +1 -8
  372. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/health/route.ts +2 -8
  373. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/invitations/[token]/route.ts +40 -0
  374. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/documents/[docId]/route.ts +27 -0
  375. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/documents/route.ts +57 -0
  376. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/route.ts +58 -0
  377. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/[sourceId]/route.ts +27 -0
  378. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/[sourceId]/trigger/route.ts +27 -0
  379. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/connectors/route.ts +27 -0
  380. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/route.ts +51 -0
  381. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/route.ts +35 -0
  382. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/me/slash-commands/[id]/route.ts +51 -0
  383. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/me/slash-commands/builtin/route.ts +24 -0
  384. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/me/slash-commands/custom/route.ts +24 -0
  385. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/me/slash-commands/route.ts +22 -0
  386. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/avatar/route.ts +54 -0
  387. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/invitations/route.ts +41 -0
  388. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/members/[userId]/route.ts +42 -0
  389. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/members/route.ts +22 -0
  390. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/route.ts +58 -0
  391. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/route.ts +37 -0
  392. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/sessions/[id]/route.ts +22 -0
  393. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/sessions/route.ts +33 -0
  394. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/users/avatar/[userId]/route.ts +1 -1
  395. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/users/me/route.ts +35 -0
  396. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/agent/models/route.ts +2 -7
  397. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/documents/[documentId]/route.ts +1 -7
  398. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/documents/route.ts +1 -10
  399. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/info/route.ts +3 -8
  400. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/ingest/route.ts +1 -7
  401. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/route.ts +2 -8
  402. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/route.ts +3 -8
  403. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/documents/[docId]/download/route.ts +4 -8
  404. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/documents/[docId]/route.ts +1 -7
  405. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/documents/route.ts +0 -6
  406. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/search/route.ts +2 -8
  407. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/supported-formats/route.ts +1 -6
  408. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/[syncId]/route.ts +1 -7
  409. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/connectors/route.ts +1 -6
  410. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/local/route.ts +0 -6
  411. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/[sourceId]/route.ts +4 -9
  412. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/[sourceId]/trigger/route.ts +2 -7
  413. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/route.ts +1 -6
  414. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/apple-icon.tsx +34 -0
  415. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/global-error.tsx +0 -2
  416. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/globals.css +758 -361
  417. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/icon.tsx +35 -0
  418. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/layout.tsx +89 -7
  419. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/manifest.ts +21 -0
  420. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/not-found.tsx +3 -5
  421. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/opengraph-image.tsx +110 -0
  422. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/providers.tsx +2 -4
  423. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/robots.ts +45 -0
  424. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/sitemap.ts +69 -0
  425. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/admin/admin-nav.tsx +104 -0
  426. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/admin/user-detail-drawer.tsx +308 -0
  427. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/forgot-password-form.tsx +125 -0
  428. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/index.ts +2 -0
  429. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/login-form.tsx +83 -81
  430. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/oauth-buttons.tsx +73 -0
  431. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/register-form.tsx +185 -143
  432. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/reset-password-form.tsx +184 -0
  433. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/billing-card.tsx +99 -0
  434. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/credits-panel.tsx +133 -0
  435. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/index.ts +7 -0
  436. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/invoices-panel.tsx +111 -0
  437. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/payment-methods-panel.tsx +89 -0
  438. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/seat-selector-dialog.tsx +144 -0
  439. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/subscription-panel.tsx +238 -0
  440. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/usage-gauge.tsx +117 -0
  441. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/blog/mdx-components.tsx +49 -0
  442. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/brand-override.tsx +39 -0
  443. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chart-message.tsx +321 -0
  444. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-container.tsx +259 -50
  445. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-empty-state.tsx +73 -0
  446. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-input.tsx +120 -41
  447. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-settings.tsx +139 -0
  448. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/conversation-sidebar.tsx +156 -79
  449. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/copy-button.tsx +4 -6
  450. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/file-preview-panel.tsx +637 -0
  451. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/index.ts +5 -0
  452. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/kb-selector.tsx +166 -0
  453. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/markdown-content.tsx +73 -29
  454. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-item.tsx +280 -86
  455. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-list.tsx +17 -2
  456. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/pending-messages.tsx +64 -0
  457. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/rating-buttons.tsx +39 -44
  458. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/share-dialog.tsx +17 -31
  459. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/slash-command-palette.tsx +75 -0
  460. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/slash-commands.ts +148 -0
  461. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-approval-dialog.tsx +8 -17
  462. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-call-card.tsx +508 -237
  463. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/active-sessions.tsx +106 -0
  464. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/onboarding-banner.tsx +59 -0
  465. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/quick-actions.tsx +78 -0
  466. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/recent-activity.tsx +190 -0
  467. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/segmented-control.tsx +42 -0
  468. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/stat-card.tsx +131 -0
  469. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/subscription-chip.tsx +112 -0
  470. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/team-summary.tsx +150 -0
  471. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/tool-usage.tsx +143 -0
  472. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/top-models.tsx +146 -0
  473. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/usage-timeline.tsx +225 -0
  474. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/google-icon.tsx +0 -31
  475. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/index.ts +0 -3
  476. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/kb/create-kb-dialog.tsx +108 -0
  477. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/kb/index.ts +2 -0
  478. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/kb/kb-list.tsx +165 -0
  479. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/language-switcher.tsx +115 -26
  480. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/auth-guard.tsx +0 -2
  481. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/breadcrumb.tsx +4 -3
  482. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/command-palette.tsx +229 -0
  483. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/header.tsx +57 -28
  484. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/landing-nav.tsx +17 -23
  485. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/mobile-tab-bar.tsx +125 -0
  486. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/sidebar.tsx +39 -10
  487. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/legal/cookies-content.tsx +132 -0
  488. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/legal/privacy-content.tsx +245 -0
  489. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/legal/terms-content.tsx +265 -0
  490. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/animated-number.tsx +69 -0
  491. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/brand-icon.tsx +85 -0
  492. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/code-preview.tsx +142 -0
  493. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/contact-form.tsx +189 -0
  494. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/cookie-banner.tsx +243 -0
  495. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/data-flow-diagram.tsx +355 -0
  496. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/faq-accordion.tsx +33 -0
  497. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/feature-glyph.tsx +63 -0
  498. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/feature-mockup.tsx +169 -0
  499. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/feature-section.tsx +72 -0
  500. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/final-cta.tsx +43 -0
  501. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/footer-config.ts +112 -0
  502. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/hero-demo.tsx +117 -0
  503. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/hero.tsx +137 -0
  504. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/highlight.tsx +12 -0
  505. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/how-it-works.tsx +47 -0
  506. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/legal-page.tsx +73 -0
  507. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/logos-strip.tsx +40 -0
  508. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/marketing-footer.tsx +82 -0
  509. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/marketing-page-layout.tsx +93 -0
  510. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/marquee.tsx +68 -0
  511. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/newsletter-signup.tsx +52 -0
  512. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/pill-nav.tsx +85 -0
  513. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/pricing-teaser.tsx +97 -0
  514. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/reveal.tsx +58 -0
  515. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/section.tsx +52 -0
  516. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/testimonial-carousel.tsx +66 -0
  517. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/testimonial-grid.tsx +50 -0
  518. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/onboarding-shell.tsx +133 -0
  519. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/onboarding-state.ts +59 -0
  520. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-agent.tsx +120 -0
  521. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-data.tsx +147 -0
  522. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-done.tsx +58 -0
  523. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-team.tsx +102 -0
  524. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-welcome.tsx +67 -0
  525. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/rag/drag-drop-overlay.tsx +108 -0
  526. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/rag/sync-source-wizard.tsx +519 -0
  527. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/seo/json-ld.tsx +27 -0
  528. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/brand-color-picker.tsx +159 -0
  529. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/settings-nav.tsx +125 -0
  530. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/settings-section.tsx +83 -0
  531. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/slash-commands-manager.tsx +305 -0
  532. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/states/empty-state.tsx +84 -0
  533. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/states/error-state.tsx +41 -0
  534. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/states/index.ts +3 -0
  535. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/states/loading-state.tsx +113 -0
  536. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/create-org-dialog.tsx +69 -0
  537. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/index.ts +4 -0
  538. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/invite-member-dialog.tsx +91 -0
  539. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/members-table.tsx +116 -0
  540. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/org-switcher.tsx +77 -0
  541. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/index.ts +0 -5
  542. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-provider.tsx +0 -7
  543. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-toggle.tsx +3 -21
  544. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/accordion.tsx +5 -5
  545. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/alert-dialog.tsx +41 -11
  546. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/alert.tsx +62 -0
  547. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/avatar.tsx +12 -2
  548. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/badge.tsx +4 -8
  549. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.test.tsx +2 -7
  550. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.tsx +2 -2
  551. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/card.tsx +39 -67
  552. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/checkbox.tsx +2 -2
  553. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/dialog.tsx +38 -9
  554. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/dropdown-menu.tsx +31 -18
  555. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/index.ts +57 -5
  556. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/input.tsx +3 -3
  557. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/label.tsx +14 -15
  558. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/popover.tsx +2 -2
  559. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/progress.tsx +2 -2
  560. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/radio-group.tsx +3 -3
  561. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/scroll-area.tsx +3 -3
  562. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/select.tsx +18 -10
  563. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/separator.tsx +1 -1
  564. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/sheet.tsx +9 -19
  565. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/switch.tsx +3 -3
  566. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/table.tsx +9 -9
  567. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/tabs.tsx +6 -6
  568. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/textarea.tsx +2 -2
  569. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/tooltip.tsx +1 -1
  570. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/index.ts +13 -3
  571. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-admin-conversations.ts +51 -47
  572. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-admin-users.ts +104 -0
  573. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-auth.ts +6 -13
  574. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-billing.ts +202 -0
  575. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-chat.ts +204 -118
  576. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversation-shares.ts +42 -52
  577. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversations.ts +81 -50
  578. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-invitations.ts +60 -0
  579. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-knowledge-bases.ts +226 -0
  580. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-members.ts +58 -0
  581. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-organizations.ts +86 -0
  582. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-projects.ts +0 -207
  583. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-slash-commands.ts +131 -0
  584. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-websocket.ts +8 -3
  585. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/i18n.ts +20 -0
  586. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/admin-auth.ts +3 -11
  587. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/api-client.ts +3 -6
  588. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/blog.ts +156 -0
  589. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/changelog.ts +93 -0
  590. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/constants.ts +10 -5
  591. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/contact-info.ts +34 -0
  592. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/rag-api.ts +20 -5
  593. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/schema-org.ts +80 -0
  594. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/seo.ts +122 -0
  595. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/server-api.ts +3 -8
  596. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/slash-commands-api.ts +57 -0
  597. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/teaser-plans.ts +108 -0
  598. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.test.ts +0 -5
  599. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/middleware.ts +9 -1
  600. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.test.ts +0 -13
  601. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.ts +2 -2
  602. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-store.ts +89 -13
  603. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/conversation-store.ts +1 -3
  604. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/file-preview-store.ts +17 -0
  605. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/index.ts +6 -2
  606. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/kb-selection-store.ts +54 -0
  607. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/org-store.ts +53 -0
  608. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/project-store.ts +0 -73
  609. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/theme-store.ts +3 -10
  610. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/auth.ts +6 -8
  611. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/billing.ts +125 -0
  612. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/chat.ts +63 -6
  613. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/conversation.ts +3 -15
  614. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/index.ts +9 -2
  615. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/knowledge-base.ts +46 -0
  616. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/organization.ts +62 -0
  617. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/project.ts +0 -59
  618. fastapi_fullstack-0.2.7.dist-info/RECORD +0 -427
  619. fastapi_gen/template/{{cookiecutter.project_slug}}/.env.prod.example +0 -112
  620. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/tasks/__init__.py +0 -1
  621. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/tasks/channel.py +0 -35
  622. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/examples.py +0 -106
  623. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/taskiq_examples.py +0 -92
  624. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_worker.py +0 -74
  625. {fastapi_fullstack-0.2.7.dist-info → fastapi_fullstack-0.2.9.dist-info}/WHEEL +0 -0
  626. {fastapi_fullstack-0.2.7.dist-info → fastapi_fullstack-0.2.9.dist-info}/entry_points.txt +0 -0
  627. {fastapi_fullstack-0.2.7.dist-info → fastapi_fullstack-0.2.9.dist-info}/licenses/LICENSE +0 -0
  628. /fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/__init__.py +0 -0
  629. /fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/image_describer.py +0 -0
  630. /fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/models.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastapi-fullstack
3
- Version: 0.2.7
3
+ Version: 0.2.9
4
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
5
  Project-URL: Homepage, https://github.com/vstorm-co/full-stack-ai-agent-template
6
6
  Project-URL: Documentation, https://github.com/vstorm-co/full-stack-ai-agent-template#readme
@@ -19,13 +19,20 @@ Classifier: Programming Language :: Python :: 3.11
19
19
  Classifier: Programming Language :: Python :: 3.12
20
20
  Classifier: Topic :: Software Development :: Code Generators
21
21
  Requires-Python: >=3.11
22
+ Requires-Dist: arq>=0.28.0
23
+ Requires-Dist: celery>=5.6.3
22
24
  Requires-Dist: click>=8.3.0
23
25
  Requires-Dist: cookiecutter>=2.7.0
24
26
  Requires-Dist: email-validator>=2.3.0
27
+ Requires-Dist: httpx>=0.28.1
25
28
  Requires-Dist: pydantic-settings>=2.13.0
26
29
  Requires-Dist: pydantic>=2.13.0
30
+ Requires-Dist: pytest-asyncio>=1.3.0
31
+ Requires-Dist: pytest>=9.0.3
27
32
  Requires-Dist: questionary>=2.1.0
28
33
  Requires-Dist: rich>=15.0.0
34
+ Requires-Dist: stripe>=15.1.0
35
+ Requires-Dist: taskiq>=0.12.4
29
36
  Provides-Extra: dev
30
37
  Requires-Dist: pre-commit>=4.0.0; extra == 'dev'
31
38
  Requires-Dist: pytest-cov>=7.0.0; extra == 'dev'
@@ -162,89 +169,106 @@ fastapi-fullstack create my_ai_app --preset ai-agent # AI agent with streami
162
169
  fastapi-fullstack create my_ai_app --minimal
163
170
  ```
164
171
 
165
- ### Start Development (Docker — recommended)
172
+ ### Start Development
166
173
 
167
- The fastest way to get running — 2 commands:
174
+ #### First time on a fresh clone
168
175
 
169
176
  ```bash
170
177
  cd my_ai_app
171
- make docker-up # Start backend + database + migrations + admin user
172
- make docker-frontend # Start frontend
178
+ make bootstrap # = make dev + make seed
173
179
  ```
174
180
 
175
- **Access:**
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.
176
182
 
177
- - API: <http://localhost:8000>
178
- - Docs: <http://localhost:8000/docs>
179
- - Admin Panel: <http://localhost:8000/admin>
180
- - Frontend: <http://localhost:3000>
183
+ #### Day-to-day
181
184
 
182
- > [!TIP]
183
- > That's it. Docker handles database setup, migrations, and admin user creation automatically.
185
+ ```bash
186
+ make dev # idempotent: build + up + migrate. Re-run anytime.
187
+ ```
184
188
 
185
- <details>
186
- <summary><b>Manual setup (without Docker)</b></summary>
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.
187
190
 
188
- #### 1. Install dependencies
191
+ **Behind the scenes (`make dev`):**
189
192
 
190
- ```bash
191
- cd my_ai_app
192
- make install
193
- ```
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)
194
197
 
195
- > [!NOTE]
196
- > **Windows Users:** The `make` command requires GNU Make which is not available by default on Windows.
197
- > Install via [Chocolatey](https://chocolatey.org/) (`choco install make`), use WSL, or run raw commands manually.
198
- > Each generated project includes a "Manual Commands Reference" section in its README with all commands.
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) |
199
206
 
200
- #### 2. Start the database
207
+ ### Day-to-day commands
201
208
 
202
209
  ```bash
203
- # PostgreSQL (with Docker)
204
- make docker-db
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
205
216
  ```
206
217
 
207
- #### 3. Create and apply database migrations
218
+ ### Environments
208
219
 
209
- > [!WARNING]
210
- > Both commands are required! `db-migrate` creates the migration file, `db-upgrade` applies it to the database.
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 `backend/.env` (copy from `backend/.env.example`, fill real secrets) + external Nginx using `nginx/nginx.conf`. |
211
225
 
212
- ```bash
213
- # Create initial migration (REQUIRED first time)
214
- make db-migrate
215
- # Enter message: "Initial migration"
226
+ Each env has matching `-down`, `-logs`, `-rebuild` siblings.
216
227
 
217
- # Apply migrations to create tables
218
- make db-upgrade
219
- ```
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.
220
230
 
221
- #### 4. Create admin user
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:
222
235
 
223
236
  ```bash
224
- make create-admin
225
- # Enter email and password when prompted
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
226
246
  ```
227
247
 
228
- #### 5. Start the backend
248
+ </details>
249
+
250
+ <details>
251
+ <summary><b>Production deploy</b></summary>
229
252
 
230
253
  ```bash
231
- make run
254
+ # On your server
255
+ git clone <your-repo>
256
+ cd my_ai_app
257
+
258
+ cp backend/.env.example backend/.env # 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
232
263
  ```
233
264
 
234
- #### 6. Start the frontend (new terminal)
265
+ For frontend deployment to **Vercel**:
235
266
 
236
267
  ```bash
237
- cd frontend
238
- bun install
239
- bun dev
268
+ cd frontend && npx vercel --prod
240
269
  ```
241
270
 
242
- **Access:**
243
-
244
- - API: <http://localhost:8000>
245
- - Docs: <http://localhost:8000/docs>
246
- - Admin Panel: <http://localhost:8000/admin> (login with admin user)
247
- - Frontend: <http://localhost:3000>
271
+ In the Vercel dashboard set `BACKEND_URL`, `BACKEND_WS_URL`, `NEXT_PUBLIC_AUTH_ENABLED=true`.
248
272
 
249
273
  </details>
250
274
 
@@ -268,55 +292,167 @@ Use `make help` to see all available Makefile shortcuts.
268
292
 
269
293
  ## 🎬 Demo
270
294
 
295
+ **CLI generator:**
296
+
271
297
  <p align="center">
272
298
  <img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/app_start.gif" alt="FastAPI Fullstack Generator Demo">
273
299
  </p>
274
300
 
301
+ **Live chat — web search:**
302
+
303
+ <p align="center">
304
+ <img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/chat/websearchdemo.gif" alt="Agent answering with live web search">
305
+ </p>
306
+
307
+ **Live chat — chart generation:**
308
+
309
+ <p align="center">
310
+ <img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/chat/chartdemo.gif" alt="Agent generating an interactive chart">
311
+ </p>
312
+
313
+ **File upload & RAG ingestion:**
314
+
315
+ <p align="center">
316
+ <img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/file_uploud_light.gif" alt="File Upload Demo">
317
+ </p>
318
+
275
319
  ---
276
320
 
277
321
  ## 📸 Screenshots
278
322
 
279
- ### Landing Page & Login
323
+ ### Marketing Site
324
+
325
+ **Landing Page** — Full-page marketing site with hero, features breakdown, testimonials, pricing preview, and FAQ. Generated with the `enable_marketing_site` option.
326
+
327
+ ![Landing Page](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/landing_page.png)
328
+
329
+ **Pricing** — Three-tier pricing page (Starter / Pro / Business) with monthly/annual toggle. Pulls live plan data from Stripe when connected; shows template plans otherwise.
330
+
331
+ ![Pricing](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/pricing.png)
332
+
333
+ **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.
334
+
335
+ ![Blog](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/blog.png)
336
+
337
+ **Blog Post** — Individual post view with author card, reading time, and tag badges. Content is plain MDX — edit files and redeploy.
338
+
339
+ ![Blog Post](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/blog_post.png)
340
+
341
+ ### Auth
342
+
343
+ **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.
280
344
 
281
- | Landing Page | Login |
282
- |:---:|:---:|
283
- | ![Landing Page](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/landingpage.png) | ![Login](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/login.png) |
345
+ ![Login](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/login.png)
284
346
 
285
- ### Dashboard, Chat & RAG
347
+ **Register** Same split-screen layout as login. Google sign-up and email/password form with confirm-password field and terms acceptance.
286
348
 
287
- | Dashboard | Chat with RAG |
288
- |:---:|:---:|
289
- | ![Dashboard](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/dashboard.png) | ![Chat with RAG](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/chatwithrag.png) |
290
- | **Documents** | **Search** |
291
- | ![RAG Documents](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/ragdocuments.png) | ![RAG Search](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/ragsearch.png) |
349
+ ![Register](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/register.png)
350
+
351
+ ### Dashboard
352
+
353
+ **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.
354
+
355
+ ![Dashboard Light](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/dashboard_light.png)
356
+
357
+ **Dashboard (dark mode)** — Same dashboard in dark theme. Theme is saved per-device and can be overridden per-workspace in appearance settings.
358
+
359
+ ![Dashboard Dark](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/dashboard_dark.png)
360
+
361
+ ### Teams & Organizations
362
+
363
+ **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.
364
+
365
+ ![Organizations](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/organizations.png)
366
+
367
+ **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.
368
+
369
+ ![Organization Details](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/organizations_details.png)
370
+
371
+ ### Knowledge Bases
372
+
373
+ **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.
374
+
375
+ ![Knowledge Bases](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/knowledge_bases.png)
376
+
377
+ ### Billing
378
+
379
+ **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.
380
+
381
+ ![Billing](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/billing.png)
382
+
383
+ ### Profile & Settings
384
+
385
+ **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.
386
+
387
+ ![Profile](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/profile.png)
388
+
389
+ **Account & Security** — Change password form with strength guidance, "Sign out everywhere" button, and danger zone for permanent account deletion.
390
+
391
+ ![Account](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/profile_account.png)
392
+
393
+ **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.
394
+
395
+ ![Slash Commands](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/profile_commands.png)
396
+
397
+ **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.
398
+
399
+ ![Appearance](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/profile_apperance.png)
400
+
401
+ **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`.
402
+
403
+ ![Notifications](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/profile_notifications.png)
404
+
405
+ ### Admin Panel
406
+
407
+ **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.
408
+
409
+ ![Admin Overview](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/admin.png)
410
+
411
+ **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.
412
+
413
+ ![Admin Users](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/admin_users.png)
414
+
415
+ **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.
416
+
417
+ ![Admin Conversations](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/admin_conversations.png)
418
+
419
+ **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.
420
+
421
+ ![Admin Ratings](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/admin_ratings.png)
422
+
423
+ **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.
424
+
425
+ ![Stripe Events](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/admin_stripe_events.png)
426
+
427
+ **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.
428
+
429
+ ![System Health](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/admin_system_health.png)
292
430
 
293
431
  ### Observability
294
432
 
295
- | Logfire (PydanticAI) | LangSmith (LangChain) |
296
- |:---:|:---:|
297
- | ![Logfire](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/logfire.png) | ![LangSmith](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/langsmith.png) |
433
+ **Logfire (PydanticAI)** Full distributed tracing for PydanticAI agent runs, FastAPI requests, database queries, Redis, Celery tasks, and HTTPX calls — all in one timeline.
434
+
435
+ ![Logfire](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/logfire.png)
436
+
437
+ **LangSmith (LangChain / LangGraph)** — Trace viewer for LangChain agent runs with step-by-step chain inspection, token usage, and feedback collection.
438
+
439
+ ![LangSmith](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/langsmith.png)
298
440
 
299
441
  ### Messaging Channels
300
442
 
301
- <p align="center">
302
- <img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/telegram_icon.png" width="40" alt="Telegram">
303
- &nbsp;&nbsp;&nbsp;
304
- <img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/slack_icon.png" width="40" alt="Slack">
305
- </p>
443
+ **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.
444
+
445
+ ![Telegram](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/telegram.png)
446
+
447
+ ### Monitoring & API
306
448
 
307
- | Telegram Bot |
308
- |:---:|
309
- | ![Telegram](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/telegram.png) |
449
+ **Celery Flower** Real-time task queue monitor. Track worker status, task throughput, and failure rates for background jobs (document ingestion, email, webhooks).
310
450
 
311
- ### Admin, Monitoring & API
451
+ ![Flower](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/flower.png)
312
452
 
313
- | Celery Flower | SQLAdmin Panel |
314
- |:---:|:---:|
315
- | ![Flower](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/flower.png) | ![Admin](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/admin.png) |
453
+ **API Documentation** Auto-generated OpenAPI / Swagger UI at `/docs`. All endpoints documented with request/response schemas, auth requirements, and example payloads.
316
454
 
317
- | API Documentation |
318
- |:---:|
319
- | ![API Docs](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/docs_2.png) |
455
+ ![API Docs](https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/docs_2.png)
320
456
 
321
457
  ---
322
458
 
@@ -416,8 +552,12 @@ Generated projects include **CLAUDE.md** and **AGENTS.md** files optimized for A
416
552
 
417
553
  - **React 19** + **TypeScript** + **Tailwind CSS v4**
418
554
  - **AI Chat Interface** - WebSocket streaming, tool call visualization
419
- - **Authentication** - HTTP-only cookies, auto-refresh
420
- - **Dark Mode** + **i18n**
555
+ - **Authentication** - HTTP-only cookies, auto-refresh, password reset, magic link
556
+ - **Marketing Site** - hero, pricing, FAQ, blog, contact form, legal pages (PL + EN)
557
+ - **User Settings** - profile, API keys CRUD (`sk_*` tokens), onboarding tracking
558
+ - **Admin Panel** - workspace stats, Stripe events browser
559
+ - **SEO** - per-page metadata, OG image, sitemap, robots, manifest, favicons
560
+ - **Dark Mode** + **i18n** (PL/EN via next-intl, locale-prefixed routes)
421
561
 
422
562
  ### 🔌 20+ Enterprise Integrations
423
563