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.
- {fastapi_fullstack-0.2.7.dist-info → fastapi_fullstack-0.2.9.dist-info}/METADATA +221 -81
- fastapi_fullstack-0.2.9.dist-info/RECORD +780 -0
- fastapi_gen/cli.py +920 -22
- fastapi_gen/config.py +392 -15
- fastapi_gen/prompts.py +835 -107
- fastapi_gen/template/VARIABLES.md +95 -3
- fastapi_gen/template/cookiecutter.json +74 -7
- fastapi_gen/template/hooks/post_gen_project.py +564 -39
- fastapi_gen/template/{{cookiecutter.project_slug}}/.claude/rules/architecture.md +29 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/.gitignore +0 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/CLAUDE.md +14 -5
- fastapi_gen/template/{{cookiecutter.project_slug}}/CONTRIBUTING.md +93 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/ENV_VARS.md +195 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/MANUAL_STEPS.md +216 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/Makefile +152 -20
- fastapi_gen/template/{{cookiecutter.project_slug}}/README.md +261 -170
- fastapi_gen/template/{{cookiecutter.project_slug}}/SECURITY.md +93 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/.env.example +58 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/Dockerfile +11 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/env.py +10 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0000_create_users.py +84 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0001_create_organization_tables.py +262 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0002_backfill_personal_orgs.py +145 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0003_add_is_app_admin.py +56 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0004_5_create_core_tables.py +333 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0004_create_audit_log.py +78 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0005_add_org_id_to_conversations_and_rag.py +121 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0006_backfill_org_id_on_conversations.py +73 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0007_create_knowledge_bases.py +99 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0008_backfill_default_kbs.py +165 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0009_conv_active_kb_ids.py +66 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0010_org_billing_seats.py +66 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0011_create_plan_price_tables.py +108 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0012_create_subscription_table.py +94 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0013_create_stripe_event_table.py +70 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0014_credits_usage_events.py +144 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0015_create_mv_usage_daily.py +62 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0016_user_onboarding_at.py +44 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0018_user_slash_commands.py +71 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0019_user_external_id.py +40 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0020_conversation_external_user_id.py +39 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0021_create_items.py +74 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/__init__.py +4 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/assistant.py +197 -68
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/crewai_assistant.py +96 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/deepagents_assistant.py +257 -35
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/langchain_assistant.py +239 -36
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/langgraph_assistant.py +239 -82
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/prompts.py +56 -52
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/pydantic_deep_assistant.py +120 -15
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/__init__.py +19 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/chart_render.py +125 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/chart_tool.py +166 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/datetime_tool.py +9 -9
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/fetch_url.py +106 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/rag_tool.py +151 -74
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/web_search.py +62 -28
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/deps.py +389 -15
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/exception_handlers.py +38 -17
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/__init__.py +70 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_conversations.py +58 -13
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_stats.py +37 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_users.py +200 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/agent.py +86 -3123
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/auth.py +104 -295
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/billing.py +368 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/channels.py +12 -78
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/contact.py +29 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/conversations.py +137 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/files.py +24 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/health.py +101 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/invitations.py +178 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/items.py +129 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/knowledge_bases.py +508 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/marketing.py +28 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/me_slash_commands.py +121 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/members.py +206 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/oauth.py +55 -19
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/organizations.py +335 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/rag.py +130 -375
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/slack_webhook.py +2 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/telegram_webhook.py +2 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/channel.py +4 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/cleanup.py +38 -40
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/create_app_admin.py +111 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/rag.py +12 -12
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/sync_stripe_plans.py +203 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/audit.py +117 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/config.py +225 -28
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/exceptions.py +8 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/middleware.py +8 -6
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/security.py +128 -38
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/__init__.py +13 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/audit_log.py +169 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/channel_bot.py +5 -5
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/conversation.py +73 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/credit_transaction.py +240 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/item.py +60 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/knowledge_base.py +250 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/organization.py +727 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/plan.py +295 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/rag_document.py +80 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/session.py +12 -12
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/stripe_event.py +101 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/subscription.py +167 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/user.py +115 -91
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/user_slash_command.py +227 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/webhook.py +6 -6
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/main.py +87 -17
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/__init__.py +32 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/channel_bot.py +3 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/conversation.py +202 -18
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/credit_transaction.py +159 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/invitation.py +303 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/item.py +146 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/knowledge_base.py +295 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/member.py +310 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/message_rating.py +5 -5
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/organization.py +457 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/plan.py +135 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/rag_document.py +57 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/stripe_event.py +99 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/subscription.py +171 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/usage_event.py +508 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/user.py +57 -5
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/user_slash_command.py +168 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/admin.py +42 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/billing.py +208 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/contact.py +29 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/conversation.py +75 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/conversation_share.py +2 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/item.py +50 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/knowledge_base.py +63 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/marketing.py +23 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/organization.py +149 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/password_reset.py +44 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/user.py +6 -11
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/user_slash_command.py +66 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/__init__.py +7 -60
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/admin.py +180 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/agent.py +416 -11
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/agent_invocation.py +199 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/agent_session.py +2487 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/anomaly_detection.py +229 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/__init__.py +13 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/checkout_service.py +249 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/credit_service.py +330 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/exceptions.py +43 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/facade.py +375 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/__init__.py +5 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/customer_events.py +90 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/invoice_events.py +231 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/payment_events.py +103 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/subscription_events.py +515 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/pricing.py +79 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/stripe_client.py +185 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/subscription_service.py +182 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/billing/webhook_handler.py +178 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/channel_bot.py +82 -6
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{channels → services/channels}/__init__.py +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{channels → services/channels}/base.py +14 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{channels → services/channels}/router.py +88 -15
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{channels → services/channels}/slack.py +14 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{channels → services/channels}/telegram.py +14 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/contact.py +52 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/conversation.py +155 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/email/__init__.py +33 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/email/exceptions.py +33 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/__init__.py +5 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/base.py +33 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/log.py +45 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/resend.py +60 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/smtp.py +75 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/email/service.py +204 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/email/templates.py +50 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/file_storage.py +37 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/file_upload.py +34 -16
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/invitation.py +605 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/item.py +104 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/knowledge_base.py +625 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/member.py +390 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/message_rating.py +2 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/newsletter.py +45 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/organization.py +362 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/config.py +7 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/connectors/__init__.py +2 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/connectors/google_drive.py +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/connectors/s3.py +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/documents.py +111 -56
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/embeddings.py +2 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/ingestion.py +8 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/reranker.py +2 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/retrieval.py +4 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/sources/__init__.py +2 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/sources/base.py +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/sources/google_drive.py +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/sources/s3.py +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/vectorstore.py +9 -9
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rag_document.py +157 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rag_status.py +55 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rag_sync.py +51 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/__init__.py +5 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/rules.py +56 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/service.py +155 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/storage.py +138 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/sync_source.py +43 -13
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/usage.py +232 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/user.py +312 -476
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/user_slash_command.py +274 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/__init__.py +3 -5
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/arq_app.py +37 -128
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/background/__init__.py +42 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/background/channel.py +44 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{tasks → worker/background}/rag.py +39 -37
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/celery_app.py +32 -29
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/__init__.py +33 -30
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/anomaly_tasks.py +54 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/cleanup_tasks.py +84 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/email_tasks.py +107 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/rag_tasks.py +23 -23
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/schedules.py +38 -22
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/pyproject.toml +34 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/test_auth.py +0 -11
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_agents.py +49 -22
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_chart_tool.py +137 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_conversation_kb_toggle.py +164 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_fetch_url.py +101 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_kb_scoping.py +314 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_rbac_teams.py +316 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_repositories_teams.py +501 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_services.py +55 -12
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_services_conversation.py +4 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_services_members.py +386 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_services_organizations.py +260 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_stripe_seats.py +221 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_tenant_isolation.py +233 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_web_search.py +97 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.dev.yml +22 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.prod.yml +23 -15
- fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.yml +23 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/docs/configuration.md +4 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/docs/deploy.md +142 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/docs/howto/add-rag-source.md +5 -5
- fastapi_gen/template/{{cookiecutter.project_slug}}/docs/howto/add-sync-connector.md +7 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/docs/patterns.md +3 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/email_verification.html +17 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/email_verification.txt +11 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/invitation.html +17 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/invitation.txt +12 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/low_credits.html +17 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/low_credits.txt +10 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/magic_link.html +18 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/magic_link.txt +11 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/newsletter_welcome.html +15 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/newsletter_welcome.txt +7 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/password_reset.html +18 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/password_reset.txt +11 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/payment_failed.html +17 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/payment_failed.txt +12 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/payment_succeeded.html +18 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/payment_succeeded.txt +12 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/subscription_canceled.html +18 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/subscription_canceled.txt +10 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/subscription_changed.html +17 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/subscription_changed.txt +10 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/trial_ending.html +17 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/trial_ending.txt +12 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/trial_expired.html +17 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/trial_expired.txt +10 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/welcome.html +16 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/emails/compiled/welcome.txt +12 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/README.md +2 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/content/blog/rag-defaults-that-age-well.mdx +81 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/content/blog/shipping-ai-saas-template.mdx +61 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/content/blog/streaming-tool-calls-without-tears.mdx +83 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/messages/en.json +696 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/messages/pl.json +696 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/next.config.ts +50 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/package.json +11 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/forgot-password/page.tsx +24 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/layout.tsx +68 -68
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/login/page.tsx +25 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/magic-link-sent/page.tsx +74 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/register/page.tsx +24 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/reset-password/page.tsx +62 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/conversations/page.tsx +309 -285
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/layout.tsx +31 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/page.tsx +283 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/ratings/page.tsx +362 -271
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/stripe-events/page.tsx +599 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/system/page.tsx +328 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/users/page.tsx +364 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/credits/page.tsx +302 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/invoices/page.tsx +23 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/page.tsx +386 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/payment-methods/page.tsx +23 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/subscription/page.tsx +137 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/usage/page.tsx +284 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/chat/page.tsx +6 -18
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/dashboard/page.tsx +374 -212
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/invitations/[token]/page.tsx +82 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/kb/[id]/page.tsx +431 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/kb/page.tsx +60 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/layout.tsx +10 -18
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/orgs/[id]/members/page.tsx +299 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/orgs/page.tsx +206 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/profile/page.tsx +3 -342
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/rag/page.tsx +513 -295
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/account/page.tsx +224 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/appearance/page.tsx +35 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/layout.tsx +28 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/notifications/page.tsx +204 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/page.tsx +3 -124
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/profile/page.tsx +348 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/slash-commands/page.tsx +17 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/about/page.tsx +204 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/callback/page.tsx +47 -94
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/magic-link/layout.tsx +14 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/magic-link/page.tsx +101 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/blog/[slug]/page.tsx +215 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/blog/page.tsx +171 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/changelog/page.tsx +125 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/community/page.tsx +118 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/contact/page.tsx +136 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/error.tsx +4 -6
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/help/page.tsx +126 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/layout.tsx +39 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/legal/cookies/page.tsx +44 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/legal/privacy/page.tsx +44 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/legal/terms/page.tsx +44 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/onboarding/[step]/page.tsx +57 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/onboarding/page.tsx +5 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/page.tsx +407 -253
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/pricing/layout.tsx +42 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/pricing/page.tsx +336 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/security/page.tsx +121 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/shared/[token]/page.tsx +17 -42
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/conversations/[id]/route.ts +29 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/conversations/route.ts +41 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/conversations/users/route.ts +33 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/{v1/admin → admin}/ratings/export/route.ts +2 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/{v1/admin → admin}/ratings/route.ts +2 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/{v1/admin → admin}/ratings/summary/route.ts +2 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/stats/route.ts +22 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/stripe-events/route.ts +24 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/users/[userId]/impersonate/route.ts +27 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/users/[userId]/route.ts +72 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/{v1/admin/conversations → admin/users}/route.ts +5 -17
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/login/route.ts +4 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/logout/route.ts +21 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/magic-link/request/route.ts +19 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/magic-link/verify/route.ts +51 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/me/route.ts +5 -14
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/oauth-callback/route.ts +33 -33
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/password-reset/confirm/route.ts +19 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/password-reset/request/route.ts +19 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/refresh/route.ts +23 -23
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/register/route.ts +4 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/billing/checkout/route.ts +20 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/billing/invoices/route.ts +19 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/billing/me/[...path]/route.ts +56 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/billing/portal/route.ts +18 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/contact/route.ts +25 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/messages/[messageId]/rate/route.ts +6 -14
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/messages/route.ts +4 -9
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/route.ts +8 -19
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/route.ts +8 -18
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/shared-with-me/route.ts +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/tool-stats/route.ts +25 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/files/[id]/route.ts +12 -13
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/files/upload/route.ts +1 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/health/route.ts +2 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/invitations/[token]/route.ts +40 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/documents/[docId]/route.ts +27 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/documents/route.ts +57 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/route.ts +58 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/[sourceId]/route.ts +27 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/[sourceId]/trigger/route.ts +27 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/connectors/route.ts +27 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/route.ts +51 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/route.ts +35 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/me/slash-commands/[id]/route.ts +51 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/me/slash-commands/builtin/route.ts +24 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/me/slash-commands/custom/route.ts +24 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/me/slash-commands/route.ts +22 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/avatar/route.ts +54 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/invitations/route.ts +41 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/members/[userId]/route.ts +42 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/members/route.ts +22 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/route.ts +58 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/route.ts +37 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/sessions/[id]/route.ts +22 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/sessions/route.ts +33 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/users/avatar/[userId]/route.ts +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/users/me/route.ts +35 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/agent/models/route.ts +2 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/documents/[documentId]/route.ts +1 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/documents/route.ts +1 -10
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/info/route.ts +3 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/ingest/route.ts +1 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/route.ts +2 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/route.ts +3 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/documents/[docId]/download/route.ts +4 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/documents/[docId]/route.ts +1 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/documents/route.ts +0 -6
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/search/route.ts +2 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/supported-formats/route.ts +1 -6
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/[syncId]/route.ts +1 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/connectors/route.ts +1 -6
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/local/route.ts +0 -6
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/[sourceId]/route.ts +4 -9
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/[sourceId]/trigger/route.ts +2 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/route.ts +1 -6
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/apple-icon.tsx +34 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/global-error.tsx +0 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/globals.css +758 -361
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/icon.tsx +35 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/layout.tsx +89 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/manifest.ts +21 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/not-found.tsx +3 -5
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/opengraph-image.tsx +110 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/providers.tsx +2 -4
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/robots.ts +45 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/sitemap.ts +69 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/admin/admin-nav.tsx +104 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/admin/user-detail-drawer.tsx +308 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/forgot-password-form.tsx +125 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/index.ts +2 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/login-form.tsx +83 -81
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/oauth-buttons.tsx +73 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/register-form.tsx +185 -143
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/reset-password-form.tsx +184 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/billing-card.tsx +99 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/credits-panel.tsx +133 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/index.ts +7 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/invoices-panel.tsx +111 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/payment-methods-panel.tsx +89 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/seat-selector-dialog.tsx +144 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/subscription-panel.tsx +238 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/usage-gauge.tsx +117 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/blog/mdx-components.tsx +49 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/brand-override.tsx +39 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chart-message.tsx +321 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-container.tsx +259 -50
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-empty-state.tsx +73 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-input.tsx +120 -41
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-settings.tsx +139 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/conversation-sidebar.tsx +156 -79
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/copy-button.tsx +4 -6
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/file-preview-panel.tsx +637 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/index.ts +5 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/kb-selector.tsx +166 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/markdown-content.tsx +73 -29
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-item.tsx +280 -86
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-list.tsx +17 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/pending-messages.tsx +64 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/rating-buttons.tsx +39 -44
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/share-dialog.tsx +17 -31
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/slash-command-palette.tsx +75 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/slash-commands.ts +148 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-approval-dialog.tsx +8 -17
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-call-card.tsx +508 -237
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/active-sessions.tsx +106 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/onboarding-banner.tsx +59 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/quick-actions.tsx +78 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/recent-activity.tsx +190 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/segmented-control.tsx +42 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/stat-card.tsx +131 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/subscription-chip.tsx +112 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/team-summary.tsx +150 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/tool-usage.tsx +143 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/top-models.tsx +146 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/usage-timeline.tsx +225 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/google-icon.tsx +0 -31
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/index.ts +0 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/kb/create-kb-dialog.tsx +108 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/kb/index.ts +2 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/kb/kb-list.tsx +165 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/language-switcher.tsx +115 -26
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/auth-guard.tsx +0 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/breadcrumb.tsx +4 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/command-palette.tsx +229 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/header.tsx +57 -28
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/landing-nav.tsx +17 -23
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/mobile-tab-bar.tsx +125 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/sidebar.tsx +39 -10
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/legal/cookies-content.tsx +132 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/legal/privacy-content.tsx +245 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/legal/terms-content.tsx +265 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/animated-number.tsx +69 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/brand-icon.tsx +85 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/code-preview.tsx +142 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/contact-form.tsx +189 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/cookie-banner.tsx +243 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/data-flow-diagram.tsx +355 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/faq-accordion.tsx +33 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/feature-glyph.tsx +63 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/feature-mockup.tsx +169 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/feature-section.tsx +72 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/final-cta.tsx +43 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/footer-config.ts +112 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/hero-demo.tsx +117 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/hero.tsx +137 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/highlight.tsx +12 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/how-it-works.tsx +47 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/legal-page.tsx +73 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/logos-strip.tsx +40 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/marketing-footer.tsx +82 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/marketing-page-layout.tsx +93 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/marquee.tsx +68 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/newsletter-signup.tsx +52 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/pill-nav.tsx +85 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/pricing-teaser.tsx +97 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/reveal.tsx +58 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/section.tsx +52 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/testimonial-carousel.tsx +66 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/testimonial-grid.tsx +50 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/onboarding-shell.tsx +133 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/onboarding-state.ts +59 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-agent.tsx +120 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-data.tsx +147 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-done.tsx +58 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-team.tsx +102 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-welcome.tsx +67 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/rag/drag-drop-overlay.tsx +108 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/rag/sync-source-wizard.tsx +519 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/seo/json-ld.tsx +27 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/brand-color-picker.tsx +159 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/settings-nav.tsx +125 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/settings-section.tsx +83 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/slash-commands-manager.tsx +305 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/states/empty-state.tsx +84 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/states/error-state.tsx +41 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/states/index.ts +3 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/states/loading-state.tsx +113 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/create-org-dialog.tsx +69 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/index.ts +4 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/invite-member-dialog.tsx +91 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/members-table.tsx +116 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/org-switcher.tsx +77 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/index.ts +0 -5
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-provider.tsx +0 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-toggle.tsx +3 -21
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/accordion.tsx +5 -5
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/alert-dialog.tsx +41 -11
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/alert.tsx +62 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/avatar.tsx +12 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/badge.tsx +4 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.test.tsx +2 -7
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.tsx +2 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/card.tsx +39 -67
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/checkbox.tsx +2 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/dialog.tsx +38 -9
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/dropdown-menu.tsx +31 -18
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/index.ts +57 -5
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/input.tsx +3 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/label.tsx +14 -15
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/popover.tsx +2 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/progress.tsx +2 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/radio-group.tsx +3 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/scroll-area.tsx +3 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/select.tsx +18 -10
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/separator.tsx +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/sheet.tsx +9 -19
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/switch.tsx +3 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/table.tsx +9 -9
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/tabs.tsx +6 -6
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/textarea.tsx +2 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/tooltip.tsx +1 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/index.ts +13 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-admin-conversations.ts +51 -47
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-admin-users.ts +104 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-auth.ts +6 -13
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-billing.ts +202 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-chat.ts +204 -118
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversation-shares.ts +42 -52
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversations.ts +81 -50
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-invitations.ts +60 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-knowledge-bases.ts +226 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-members.ts +58 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-organizations.ts +86 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-projects.ts +0 -207
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-slash-commands.ts +131 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-websocket.ts +8 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/i18n.ts +20 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/admin-auth.ts +3 -11
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/api-client.ts +3 -6
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/blog.ts +156 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/changelog.ts +93 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/constants.ts +10 -5
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/contact-info.ts +34 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/rag-api.ts +20 -5
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/schema-org.ts +80 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/seo.ts +122 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/server-api.ts +3 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/slash-commands-api.ts +57 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/teaser-plans.ts +108 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.test.ts +0 -5
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/middleware.ts +9 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.test.ts +0 -13
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.ts +2 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-store.ts +89 -13
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/conversation-store.ts +1 -3
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/file-preview-store.ts +17 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/index.ts +6 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/kb-selection-store.ts +54 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/org-store.ts +53 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/project-store.ts +0 -73
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/theme-store.ts +3 -10
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/auth.ts +6 -8
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/billing.ts +125 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/chat.ts +63 -6
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/conversation.ts +3 -15
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/index.ts +9 -2
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/knowledge-base.ts +46 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/organization.ts +62 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/project.ts +0 -59
- fastapi_fullstack-0.2.7.dist-info/RECORD +0 -427
- fastapi_gen/template/{{cookiecutter.project_slug}}/.env.prod.example +0 -112
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/tasks/__init__.py +0 -1
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/tasks/channel.py +0 -35
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/examples.py +0 -106
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/taskiq_examples.py +0 -92
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_worker.py +0 -74
- {fastapi_fullstack-0.2.7.dist-info → fastapi_fullstack-0.2.9.dist-info}/WHEEL +0 -0
- {fastapi_fullstack-0.2.7.dist-info → fastapi_fullstack-0.2.9.dist-info}/entry_points.txt +0 -0
- {fastapi_fullstack-0.2.7.dist-info → fastapi_fullstack-0.2.9.dist-info}/licenses/LICENSE +0 -0
- /fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/__init__.py +0 -0
- /fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/{rag → services/rag}/image_describer.py +0 -0
- /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.
|
|
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
|
|
172
|
+
### Start Development
|
|
166
173
|
|
|
167
|
-
|
|
174
|
+
#### First time on a fresh clone
|
|
168
175
|
|
|
169
176
|
```bash
|
|
170
177
|
cd my_ai_app
|
|
171
|
-
make
|
|
172
|
-
make docker-frontend # Start frontend
|
|
178
|
+
make bootstrap # = make dev + make seed
|
|
173
179
|
```
|
|
174
180
|
|
|
175
|
-
|
|
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
|
-
-
|
|
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
|
-
|
|
183
|
-
|
|
185
|
+
```bash
|
|
186
|
+
make dev # idempotent: build + up + migrate. Re-run anytime.
|
|
187
|
+
```
|
|
184
188
|
|
|
185
|
-
|
|
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
|
-
|
|
191
|
+
**Behind the scenes (`make dev`):**
|
|
189
192
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
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
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
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
|
-
|
|
207
|
+
### Day-to-day commands
|
|
201
208
|
|
|
202
209
|
```bash
|
|
203
|
-
#
|
|
204
|
-
make
|
|
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
|
-
|
|
218
|
+
### Environments
|
|
208
219
|
|
|
209
|
-
|
|
210
|
-
|
|
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
|
-
|
|
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
|
-
|
|
218
|
-
make
|
|
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
|
-
|
|
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
|
-
|
|
225
|
-
#
|
|
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
|
-
|
|
248
|
+
</details>
|
|
249
|
+
|
|
250
|
+
<details>
|
|
251
|
+
<summary><b>Production deploy</b></summary>
|
|
229
252
|
|
|
230
253
|
```bash
|
|
231
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
###
|
|
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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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
|
-
|
|
282
|
-
|:---:|:---:|
|
|
283
|
-
|  |  |
|
|
345
|
+

|
|
284
346
|
|
|
285
|
-
|
|
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
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
349
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
388
|
+
|
|
389
|
+
**Account & Security** — Change password form with strength guidance, "Sign out everywhere" button, and danger zone for permanent account deletion.
|
|
390
|
+
|
|
391
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
292
430
|
|
|
293
431
|
### Observability
|
|
294
432
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
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
|
+

|
|
436
|
+
|
|
437
|
+
**LangSmith (LangChain / LangGraph)** — Trace viewer for LangChain agent runs with step-by-step chain inspection, token usage, and feedback collection.
|
|
438
|
+
|
|
439
|
+

|
|
298
440
|
|
|
299
441
|
### Messaging Channels
|
|
300
442
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
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
|
+

|
|
446
|
+
|
|
447
|
+
### Monitoring & API
|
|
306
448
|
|
|
307
|
-
|
|
308
|
-
|:---:|
|
|
309
|
-
|  |
|
|
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
|
-
|
|
451
|
+

|
|
312
452
|
|
|
313
|
-
|
|
314
|
-
|:---:|:---:|
|
|
315
|
-
|  |  |
|
|
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
|
-
|
|
318
|
-
|:---:|
|
|
319
|
-
|  |
|
|
455
|
+

|
|
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
|
-
- **
|
|
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
|
|