fastapi-fullstack 0.2.6__tar.gz → 0.2.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fastapi_fullstack-0.2.8/PKG-INFO +1235 -0
- fastapi_fullstack-0.2.8/README.md +1188 -0
- fastapi_fullstack-0.2.8/fastapi_gen/cli.py +1445 -0
- fastapi_fullstack-0.2.8/fastapi_gen/config.py +970 -0
- fastapi_fullstack-0.2.8/fastapi_gen/prompts.py +1773 -0
- fastapi_fullstack-0.2.8/pyproject.toml +181 -0
- fastapi_fullstack-0.2.8/template/VARIABLES.md +464 -0
- fastapi_fullstack-0.2.8/template/cookiecutter.json +198 -0
- fastapi_fullstack-0.2.8/template/hooks/post_gen_project.py +1005 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/.claude/rules/architecture.md +138 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/CLAUDE.md +196 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/CONTRIBUTING.md +93 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/ENV_VARS.md +195 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/MANUAL_STEPS.md +216 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/Makefile +510 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/README.md +380 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/SECURITY.md +93 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/.env.example +403 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/Dockerfile +68 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/env.py +119 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0000_create_users.py +84 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0001_create_organization_tables.py +262 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0002_backfill_personal_orgs.py +145 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0003_add_is_app_admin.py +56 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0004_5_create_core_tables.py +333 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0004_create_audit_log.py +78 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0005_add_org_id_to_conversations_and_rag.py +121 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0006_backfill_org_id_on_conversations.py +73 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0007_create_knowledge_bases.py +99 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0008_backfill_default_kbs.py +165 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0009_conv_active_kb_ids.py +66 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0010_org_billing_seats.py +66 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0011_create_plan_price_tables.py +108 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0012_create_subscription_table.py +94 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0013_create_stripe_event_table.py +70 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0014_credits_usage_events.py +144 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0015_create_mv_usage_daily.py +62 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0016_user_onboarding_at.py +44 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0018_user_slash_commands.py +71 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0019_user_external_id.py +40 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0020_conversation_external_user_id.py +39 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0021_create_items.py +74 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/agents/__init__.py +65 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/agents/assistant.py +382 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/agents/crewai_assistant.py +652 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/agents/deepagents_assistant.py +785 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/agents/langchain_assistant.py +414 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/agents/langgraph_assistant.py +512 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/agents/pydantic_deep_assistant.py +418 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/__init__.py +24 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/datetime_tool.py +13 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/rag_tool.py +300 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/web_search.py +74 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/deps.py +1144 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/exception_handlers.py +110 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/__init__.py +201 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_conversations.py +211 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_ratings.py +261 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_stats.py +37 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_users.py +200 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/agent.py +308 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/auth.py +252 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/billing.py +368 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/channels.py +365 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/contact.py +29 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/conversations.py +1229 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/files.py +153 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/health.py +310 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/invitations.py +178 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/items.py +129 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/knowledge_bases.py +508 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/marketing.py +28 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/me_slash_commands.py +121 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/members.py +206 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/oauth.py +174 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/organizations.py +335 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/projects.py +200 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/rag.py +448 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/sessions.py +125 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/slack_webhook.py +76 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/telegram_webhook.py +123 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/users.py +366 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/webhooks.py +517 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/commands/channel.py +270 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/commands/cleanup.py +96 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/commands/create_app_admin.py +111 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/commands/rag.py +808 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/commands/seed.py +204 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/commands/sync_stripe_plans.py +203 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/core/audit.py +117 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/core/config.py +735 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/core/exceptions.py +130 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/core/middleware.py +102 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/core/security.py +192 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/__init__.py +66 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/audit_log.py +169 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/channel_bot.py +243 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/conversation.py +721 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/credit_transaction.py +240 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/item.py +60 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/knowledge_base.py +250 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/organization.py +727 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/plan.py +295 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/rag_document.py +212 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/session.py +245 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/stripe_event.py +101 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/subscription.py +167 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/user.py +399 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/user_slash_command.py +227 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/db/models/webhook.py +416 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/main.py +613 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/__init__.py +105 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/channel_bot.py +387 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/chat_file.py +138 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/conversation.py +1422 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/credit_transaction.py +159 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/invitation.py +303 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/item.py +146 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/knowledge_base.py +295 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/member.py +310 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/message_rating.py +661 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/organization.py +457 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/plan.py +135 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/rag_document.py +270 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/stripe_event.py +99 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/subscription.py +171 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/sync_log.py +188 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/usage_event.py +508 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/user.py +536 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/user_slash_command.py +168 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/repositories/webhook.py +406 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/schemas/admin.py +42 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/schemas/billing.py +208 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/schemas/contact.py +29 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/schemas/conversation.py +318 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/schemas/conversation_share.py +114 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/schemas/file.py +33 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/schemas/item.py +50 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/schemas/knowledge_base.py +63 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/schemas/marketing.py +23 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/schemas/organization.py +149 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/schemas/password_reset.py +44 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/schemas/user.py +77 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/schemas/user_slash_command.py +66 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/__init__.py +11 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/admin.py +180 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/agent.py +446 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/agent_invocation.py +692 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/agent_session.py +2396 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/anomaly_detection.py +229 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/__init__.py +13 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/checkout_service.py +249 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/credit_service.py +330 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/exceptions.py +43 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/facade.py +375 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/__init__.py +5 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/customer_events.py +90 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/invoice_events.py +231 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/payment_events.py +103 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/subscription_events.py +515 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/pricing.py +71 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/stripe_client.py +185 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/subscription_service.py +182 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/billing/webhook_handler.py +178 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/channel_bot.py +446 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/channels/__init__.py +31 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/channels/router.py +673 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/channels/slack.py +253 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/channels/telegram.py +258 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/contact.py +52 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/conversation.py +1835 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/email/__init__.py +33 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/email/exceptions.py +33 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/__init__.py +5 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/base.py +33 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/log.py +45 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/resend.py +60 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/smtp.py +75 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/email/service.py +204 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/email/templates.py +50 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/file_storage.py +130 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/file_upload.py +553 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/health.py +23 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/invitation.py +605 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/item.py +104 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/knowledge_base.py +625 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/member.py +390 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/message_rating.py +1193 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/newsletter.py +45 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/organization.py +362 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/project.py +678 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/config.py +181 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/connectors/__init__.py +70 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/connectors/google_drive.py +204 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/connectors/s3.py +131 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/documents.py +1068 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/embeddings.py +301 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/ingestion.py +207 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/reranker.py +408 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/retrieval.py +392 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/sources/__init__.py +22 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/sources/base.py +120 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/sources/google_drive.py +148 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/sources/s3.py +95 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag/vectorstore.py +622 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag_document.py +560 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag_status.py +55 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rag_sync.py +299 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/__init__.py +5 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/rules.py +56 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/service.py +155 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/storage.py +138 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/session.py +390 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/sync_source.py +396 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/usage.py +232 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/user.py +498 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/user_slash_command.py +274 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services/webhook.py +620 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/worker/__init__.py +3 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/worker/arq_app.py +85 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/worker/background/__init__.py +42 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/worker/background/channel.py +44 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/worker/background/rag.py +142 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/worker/celery_app.py +71 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/__init__.py +53 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/anomaly_tasks.py +54 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/cleanup_tasks.py +84 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/email_tasks.py +107 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/rag_tasks.py +466 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/schedules.py +54 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/pyproject.toml +409 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/tests/api/test_auth.py +255 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/tests/test_agents.py +272 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/tests/test_conversation_kb_toggle.py +164 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/tests/test_kb_scoping.py +314 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/tests/test_rbac_teams.py +316 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/tests/test_repositories_teams.py +501 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/tests/test_services.py +406 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/tests/test_services_conversation.py +904 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/tests/test_services_members.py +386 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/tests/test_services_organizations.py +260 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/tests/test_stripe_seats.py +221 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/tests/test_tenant_isolation.py +233 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/docker-compose.dev.yml +430 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/docker-compose.prod.yml +771 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/docker-compose.yml +479 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/docs/deploy.md +142 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/docs/howto/add-rag-source.md +180 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/docs/howto/add-sync-connector.md +273 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/docs/patterns.md +207 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/email_verification.html +17 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/email_verification.txt +11 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/invitation.html +17 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/invitation.txt +12 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/low_credits.html +17 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/low_credits.txt +10 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/magic_link.html +18 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/magic_link.txt +11 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/newsletter_welcome.html +15 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/newsletter_welcome.txt +7 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/password_reset.html +18 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/password_reset.txt +11 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/payment_failed.html +17 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/payment_failed.txt +12 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/payment_succeeded.html +18 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/payment_succeeded.txt +12 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/subscription_canceled.html +18 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/subscription_canceled.txt +10 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/subscription_changed.html +17 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/subscription_changed.txt +10 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/trial_ending.html +17 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/trial_ending.txt +12 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/trial_expired.html +17 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/trial_expired.txt +10 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/welcome.html +16 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/emails/compiled/welcome.txt +12 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/.editorconfig +12 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/.husky/pre-commit +1 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/.prettierrc +11 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/content/blog/rag-defaults-that-age-well.mdx +81 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/content/blog/shipping-ai-saas-template.mdx +61 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/content/blog/streaming-tool-calls-without-tears.mdx +83 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/eslint.config.mjs +17 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/messages/en.json +887 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/messages/pl.json +887 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/next.config.ts +116 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/package.json +109 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/forgot-password/page.tsx +24 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/layout.tsx +94 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/login/page.tsx +30 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/magic-link-sent/page.tsx +74 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/register/page.tsx +29 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/reset-password/page.tsx +62 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/conversations/page.tsx +378 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/layout.tsx +31 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/page.tsx +283 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/ratings/page.tsx +427 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/stripe-events/page.tsx +599 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/system/page.tsx +328 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/users/page.tsx +364 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/credits/page.tsx +302 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/invoices/page.tsx +23 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/page.tsx +386 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/payment-methods/page.tsx +23 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/subscription/page.tsx +137 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/usage/page.tsx +284 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/chat/page.tsx +17 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/dashboard/page.tsx +437 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/invitations/[token]/page.tsx +82 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/kb/[id]/page.tsx +431 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/kb/page.tsx +60 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/layout.tsx +25 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/orgs/[id]/members/page.tsx +299 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/orgs/page.tsx +206 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/profile/page.tsx +5 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/rag/page.tsx +1054 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/account/page.tsx +224 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/appearance/page.tsx +35 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/layout.tsx +28 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/notifications/page.tsx +204 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/page.tsx +5 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/profile/page.tsx +348 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/slash-commands/page.tsx +17 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/about/page.tsx +204 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/callback/page.tsx +66 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/magic-link/layout.tsx +14 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/magic-link/page.tsx +101 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/blog/[slug]/page.tsx +215 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/blog/page.tsx +171 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/changelog/page.tsx +125 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/community/page.tsx +118 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/contact/page.tsx +136 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/error.tsx +45 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/help/page.tsx +126 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/layout.tsx +71 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/legal/cookies/page.tsx +44 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/legal/privacy/page.tsx +44 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/legal/terms/page.tsx +44 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/onboarding/[step]/page.tsx +57 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/onboarding/page.tsx +5 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/page.tsx +436 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/pricing/layout.tsx +42 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/pricing/page.tsx +336 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/security/page.tsx +121 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/shared/[token]/page.tsx +73 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/conversations/[id]/route.ts +29 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/conversations/route.ts +41 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/conversations/users/route.ts +33 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/ratings/export/route.ts +53 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/ratings/route.ts +37 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/ratings/summary/route.ts +30 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/stats/route.ts +22 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/stripe-events/route.ts +24 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/users/[userId]/impersonate/route.ts +27 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/users/[userId]/route.ts +72 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/users/route.ts +36 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/login/route.ts +61 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/logout/route.ts +41 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/magic-link/request/route.ts +19 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/magic-link/verify/route.ts +51 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/me/route.ts +33 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/oauth-callback/route.ts +50 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/password-reset/confirm/route.ts +19 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/password-reset/request/route.ts +19 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/refresh/route.ts +68 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/register/route.ts +22 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/billing/checkout/route.ts +20 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/billing/invoices/route.ts +19 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/billing/me/[...path]/route.ts +56 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/billing/portal/route.ts +18 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/contact/route.ts +25 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/messages/[messageId]/rate/route.ts +87 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/messages/route.ts +34 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/route.ts +95 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/route.ts +61 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/shared-with-me/route.ts +27 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/tool-stats/route.ts +25 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/files/[id]/route.ts +46 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/files/upload/route.ts +32 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/health/route.ts +15 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/invitations/[token]/route.ts +40 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/documents/[docId]/route.ts +27 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/documents/route.ts +57 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/route.ts +58 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/[sourceId]/route.ts +27 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/[sourceId]/trigger/route.ts +27 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/connectors/route.ts +27 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/route.ts +51 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/route.ts +35 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/me/slash-commands/[id]/route.ts +51 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/me/slash-commands/builtin/route.ts +24 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/me/slash-commands/custom/route.ts +24 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/me/slash-commands/route.ts +22 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/avatar/route.ts +54 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/invitations/route.ts +41 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/members/[userId]/route.ts +42 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/members/route.ts +22 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/route.ts +58 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/route.ts +37 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/sessions/[id]/route.ts +22 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/sessions/route.ts +33 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/users/avatar/[userId]/route.ts +30 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/users/me/route.ts +35 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/agent/models/route.ts +24 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/documents/[documentId]/route.ts +27 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/documents/route.ts +21 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/info/route.ts +55 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/ingest/route.ts +37 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/route.ts +54 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/route.ts +51 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/documents/[docId]/download/route.ts +39 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/documents/[docId]/route.ts +27 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/documents/route.ts +25 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/search/route.ts +29 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/supported-formats/route.ts +18 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/[syncId]/route.ts +25 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/connectors/route.ts +19 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/local/route.ts +23 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/[sourceId]/route.ts +73 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/[sourceId]/trigger/route.ts +26 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/route.ts +41 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/apple-icon.tsx +34 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/global-error.tsx +106 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/globals.css +916 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/icon.tsx +35 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/layout.tsx +105 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/manifest.ts +21 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/not-found.tsx +29 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/opengraph-image.tsx +110 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/providers.tsx +34 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/robots.ts +45 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/app/sitemap.ts +69 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/admin/admin-nav.tsx +104 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/admin/user-detail-drawer.tsx +308 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/forgot-password-form.tsx +125 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/index.ts +4 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/login-form.tsx +134 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/oauth-buttons.tsx +73 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/register-form.tsx +268 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/reset-password-form.tsx +184 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/billing-card.tsx +99 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/credits-panel.tsx +133 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/index.ts +7 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/invoices-panel.tsx +111 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/payment-methods-panel.tsx +89 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/seat-selector-dialog.tsx +144 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/subscription-panel.tsx +238 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/usage-gauge.tsx +117 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/blog/mdx-components.tsx +49 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/brand-override.tsx +39 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-container.tsx +436 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-empty-state.tsx +73 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-input.tsx +346 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-settings.tsx +139 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/conversation-sidebar.tsx +464 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/copy-button.tsx +44 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/file-preview-panel.tsx +637 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/index.ts +14 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/kb-selector.tsx +162 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/markdown-content.tsx +211 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-item.tsx +306 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-list.tsx +53 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/pending-messages.tsx +64 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/rating-buttons.tsx +252 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/share-dialog.tsx +221 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/slash-command-palette.tsx +75 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/slash-commands.ts +148 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-approval-dialog.tsx +129 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-call-card.tsx +485 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/active-sessions.tsx +106 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/onboarding-banner.tsx +59 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/quick-actions.tsx +78 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/recent-activity.tsx +190 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/segmented-control.tsx +42 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/stat-card.tsx +131 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/subscription-chip.tsx +112 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/team-summary.tsx +150 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/tool-usage.tsx +143 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/top-models.tsx +146 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/usage-timeline.tsx +225 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/google-icon.tsx +1 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/index.ts +0 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/kb/create-kb-dialog.tsx +108 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/kb/index.ts +2 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/kb/kb-list.tsx +165 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/language-switcher.tsx +165 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/auth-guard.tsx +43 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/breadcrumb.tsx +52 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/command-palette.tsx +229 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/header.tsx +139 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/landing-nav.tsx +79 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/mobile-tab-bar.tsx +125 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/sidebar.tsx +111 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/legal/cookies-content.tsx +132 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/legal/privacy-content.tsx +245 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/legal/terms-content.tsx +265 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/animated-number.tsx +69 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/brand-icon.tsx +85 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/code-preview.tsx +142 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/contact-form.tsx +189 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/cookie-banner.tsx +243 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/data-flow-diagram.tsx +355 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/faq-accordion.tsx +33 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/feature-glyph.tsx +63 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/feature-mockup.tsx +169 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/feature-section.tsx +72 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/final-cta.tsx +43 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/footer-config.ts +112 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/hero-demo.tsx +117 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/hero.tsx +137 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/highlight.tsx +12 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/how-it-works.tsx +47 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/legal-page.tsx +73 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/logos-strip.tsx +40 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/marketing-footer.tsx +82 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/marketing-page-layout.tsx +93 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/marquee.tsx +68 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/newsletter-signup.tsx +52 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/pill-nav.tsx +85 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/pricing-teaser.tsx +97 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/reveal.tsx +58 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/section.tsx +52 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/testimonial-carousel.tsx +66 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/testimonial-grid.tsx +50 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/onboarding-shell.tsx +133 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/onboarding-state.ts +59 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-agent.tsx +120 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-data.tsx +147 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-done.tsx +58 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-team.tsx +102 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-welcome.tsx +67 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/rag/drag-drop-overlay.tsx +108 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/rag/sync-source-wizard.tsx +519 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/seo/json-ld.tsx +27 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/brand-color-picker.tsx +159 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/settings-nav.tsx +125 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/settings-section.tsx +83 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/slash-commands-manager.tsx +305 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/states/empty-state.tsx +84 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/states/error-state.tsx +41 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/states/index.ts +3 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/states/loading-state.tsx +113 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/create-org-dialog.tsx +69 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/index.ts +4 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/invite-member-dialog.tsx +91 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/members-table.tsx +116 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/org-switcher.tsx +77 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/index.ts +2 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-provider.tsx +46 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-toggle.tsx +87 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/accordion.tsx +52 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/alert-dialog.tsx +116 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/alert.tsx +62 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/avatar.tsx +49 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/badge.tsx +31 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.test.tsx +71 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.tsx +48 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/card.tsx +54 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/checkbox.tsx +27 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/dialog.tsx +105 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/dropdown-menu.tsx +175 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/index.ts +77 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/input.tsx +21 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/label.tsx +20 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/popover.tsx +30 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/progress.tsx +25 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/radio-group.tsx +37 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/scroll-area.tsx +45 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/select.tsx +149 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/separator.tsx +25 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/sheet.tsx +99 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/switch.tsx +28 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/table.tsx +93 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/tabs.tsx +54 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/textarea.tsx +21 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/tooltip.tsx +29 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/index.ts +21 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-admin-conversations.ts +134 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-admin-users.ts +104 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-auth.ts +101 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-billing.ts +202 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-chat.ts +583 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversation-shares.ts +116 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversations.ts +269 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-invitations.ts +60 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-knowledge-bases.ts +226 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-members.ts +58 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-organizations.ts +86 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-projects.ts +0 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-slash-commands.ts +131 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-websocket.ts +113 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/i18n.ts +50 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/admin-auth.ts +39 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/api-client.ts +87 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/blog.ts +156 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/changelog.ts +93 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/constants.ts +54 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/contact-info.ts +34 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/rag-api.ts +282 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/schema-org.ts +80 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/seo.ts +122 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/server-api.ts +88 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/slash-commands-api.ts +57 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/teaser-plans.ts +108 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.test.ts +39 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/middleware.ts +34 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.test.ts +59 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.ts +71 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-store.ts +65 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/stores/conversation-store.ts +72 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/stores/file-preview-store.ts +17 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/stores/index.ts +13 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/stores/kb-selection-store.ts +54 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/stores/org-store.ts +53 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/stores/project-store.ts +0 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/stores/theme-store.ts +37 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/types/auth.ts +72 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/types/billing.ts +125 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/types/chat.ts +170 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/types/conversation.ts +137 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/types/index.ts +20 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/types/knowledge-base.ts +46 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/types/organization.ts +62 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/src/types/project.ts +0 -0
- fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/frontend/tsconfig.json +29 -0
- fastapi_fullstack-0.2.6/PKG-INFO +0 -1101
- fastapi_fullstack-0.2.6/README.md +0 -1061
- fastapi_fullstack-0.2.6/fastapi_gen/cli.py +0 -519
- fastapi_fullstack-0.2.6/fastapi_gen/config.py +0 -596
- fastapi_fullstack-0.2.6/fastapi_gen/prompts.py +0 -1096
- fastapi_fullstack-0.2.6/pyproject.toml +0 -174
- fastapi_fullstack-0.2.6/template/VARIABLES.md +0 -375
- fastapi_fullstack-0.2.6/template/cookiecutter.json +0 -134
- fastapi_fullstack-0.2.6/template/hooks/post_gen_project.py +0 -425
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/.claude/rules/architecture.md +0 -109
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/CLAUDE.md +0 -187
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/Makefile +0 -378
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/README.md +0 -289
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/.env.example +0 -349
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/Dockerfile +0 -57
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/alembic/env.py +0 -109
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/agents/__init__.py +0 -65
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/agents/assistant.py +0 -291
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/agents/crewai_assistant.py +0 -623
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/agents/deepagents_assistant.py +0 -627
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/agents/langchain_assistant.py +0 -276
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/agents/langgraph_assistant.py +0 -420
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/agents/pydantic_deep_assistant.py +0 -359
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/__init__.py +0 -18
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/datetime_tool.py +0 -13
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/rag_tool.py +0 -223
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/web_search.py +0 -82
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/api/deps.py +0 -770
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/api/exception_handlers.py +0 -89
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/__init__.py +0 -132
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_conversations.py +0 -400
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_ratings.py +0 -365
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/agent.py +0 -3666
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/auth.py +0 -443
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/channels.py +0 -431
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/conversations.py +0 -1098
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/files.py +0 -132
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/health.py +0 -230
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/oauth.py +0 -202
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/projects.py +0 -200
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/rag.py +0 -898
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/sessions.py +0 -170
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/slack_webhook.py +0 -128
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/telegram_webhook.py +0 -181
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/users.py +0 -372
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/webhooks.py +0 -478
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/channels/__init__.py +0 -31
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/channels/router.py +0 -633
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/channels/slack.py +0 -254
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/channels/telegram.py +0 -259
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/commands/channel.py +0 -309
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/commands/cleanup.py +0 -98
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/commands/rag.py +0 -826
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/commands/seed.py +0 -239
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/core/config.py +0 -539
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/core/exceptions.py +0 -122
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/core/middleware.py +0 -100
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/core/security.py +0 -102
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/db/models/__init__.py +0 -53
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/db/models/channel_bot.py +0 -243
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/db/models/conversation.py +0 -649
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/db/models/rag_document.py +0 -136
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/db/models/session.py +0 -245
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/db/models/user.py +0 -375
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/db/models/webhook.py +0 -416
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/main.py +0 -543
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/rag/config.py +0 -174
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/rag/connectors/__init__.py +0 -70
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/rag/connectors/google_drive.py +0 -204
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/rag/connectors/s3.py +0 -131
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/rag/documents.py +0 -1013
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/rag/embeddings.py +0 -301
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/rag/ingestion.py +0 -183
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/rag/reranker.py +0 -408
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/rag/retrieval.py +0 -392
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/rag/sources/__init__.py +0 -22
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/rag/sources/base.py +0 -120
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/rag/sources/google_drive.py +0 -148
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/rag/sources/s3.py +0 -95
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/rag/vectorstore.py +0 -584
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/repositories/__init__.py +0 -73
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/repositories/channel_bot.py +0 -387
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/repositories/chat_file.py +0 -91
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/repositories/conversation.py +0 -1060
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/repositories/message_rating.py +0 -541
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/repositories/rag_document.py +0 -192
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/repositories/sync_log.py +0 -184
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/repositories/user.py +0 -332
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/repositories/webhook.py +0 -358
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/schemas/conversation.py +0 -243
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/schemas/conversation_share.py +0 -112
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/schemas/file.py +0 -33
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/schemas/user.py +0 -67
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/services/__init__.py +0 -64
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/services/agent_invocation.py +0 -496
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/services/channel_bot.py +0 -331
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/services/conversation.py +0 -1579
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/services/file_storage.py +0 -101
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/services/file_upload.py +0 -537
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/services/message_rating.py +0 -891
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/services/project.py +0 -678
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/services/rag_document.py +0 -382
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/services/rag_sync.py +0 -224
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/services/session.py +0 -333
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/services/sync_source.py +0 -301
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/services/user.py +0 -460
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/services/webhook.py +0 -622
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/worker/__init__.py +0 -5
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/worker/arq_app.py +0 -176
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/worker/celery_app.py +0 -68
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/__init__.py +0 -50
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/examples.py +0 -106
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/rag_tasks.py +0 -482
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/schedules.py +0 -38
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/taskiq_examples.py +0 -92
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/pyproject.toml +0 -366
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/tests/api/test_auth.py +0 -266
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/tests/test_agents.py +0 -271
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/tests/test_services.py +0 -363
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/tests/test_services_conversation.py +0 -905
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/tests/test_worker.py +0 -74
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/docker-compose.dev.yml +0 -409
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/docker-compose.prod.yml +0 -757
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/docker-compose.yml +0 -457
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/docs/howto/add-rag-source.md +0 -180
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/docs/howto/add-sync-connector.md +0 -273
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/docs/patterns.md +0 -207
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/.prettierrc +0 -11
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/eslint.config.mjs +0 -16
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/messages/en.json +0 -111
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/messages/pl.json +0 -111
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/next.config.ts +0 -70
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/package.json +0 -87
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/layout.tsx +0 -94
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/login/page.tsx +0 -5
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/register/page.tsx +0 -5
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/conversations/page.tsx +0 -273
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/ratings/page.tsx +0 -334
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/chat/page.tsx +0 -29
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/dashboard/page.tsx +0 -275
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/layout.tsx +0 -33
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/profile/page.tsx +0 -344
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/rag/page.tsx +0 -835
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/page.tsx +0 -126
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/callback/page.tsx +0 -113
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/error.tsx +0 -47
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/layout.tsx +0 -35
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/page.tsx +0 -282
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/shared/[token]/page.tsx +0 -98
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/login/route.ts +0 -65
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/logout/route.ts +0 -24
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/me/route.ts +0 -42
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/oauth-callback/route.ts +0 -50
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/refresh/route.ts +0 -68
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/register/route.ts +0 -26
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/messages/[messageId]/rate/route.ts +0 -95
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/messages/route.ts +0 -39
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/route.ts +0 -106
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/route.ts +0 -71
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/shared-with-me/route.ts +0 -27
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/files/[id]/route.ts +0 -47
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/files/upload/route.ts +0 -39
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/health/route.ts +0 -21
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/users/avatar/[userId]/route.ts +0 -30
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/admin/conversations/route.ts +0 -48
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/admin/ratings/export/route.ts +0 -58
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/admin/ratings/route.ts +0 -42
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/admin/ratings/summary/route.ts +0 -35
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/agent/models/route.ts +0 -29
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/documents/[documentId]/route.ts +0 -33
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/documents/route.ts +0 -30
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/info/route.ts +0 -60
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/ingest/route.ts +0 -43
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/route.ts +0 -60
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/route.ts +0 -56
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/documents/[docId]/download/route.ts +0 -43
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/documents/[docId]/route.ts +0 -33
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/documents/route.ts +0 -31
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/search/route.ts +0 -35
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/supported-formats/route.ts +0 -23
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/[syncId]/route.ts +0 -31
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/connectors/route.ts +0 -24
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/local/route.ts +0 -29
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/[sourceId]/route.ts +0 -78
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/[sourceId]/trigger/route.ts +0 -31
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/route.ts +0 -46
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/global-error.tsx +0 -108
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/globals.css +0 -519
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/layout.tsx +0 -23
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/not-found.tsx +0 -31
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/app/providers.tsx +0 -36
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/index.ts +0 -2
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/login-form.tsx +0 -130
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/register-form.tsx +0 -224
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-container.tsx +0 -255
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-input.tsx +0 -266
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/conversation-sidebar.tsx +0 -383
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/copy-button.tsx +0 -46
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/index.ts +0 -9
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/markdown-content.tsx +0 -167
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-item.tsx +0 -175
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-list.tsx +0 -38
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/rating-buttons.tsx +0 -244
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/share-dialog.tsx +0 -199
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-approval-dialog.tsx +0 -138
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-call-card.tsx +0 -389
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/google-icon.tsx +0 -32
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/index.ts +0 -3
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/language-switcher.tsx +0 -76
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/auth-guard.tsx +0 -45
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/breadcrumb.tsx +0 -50
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/header.tsx +0 -110
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/landing-nav.tsx +0 -85
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/sidebar.tsx +0 -82
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/index.ts +0 -7
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-provider.tsx +0 -53
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-toggle.tsx +0 -105
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/accordion.tsx +0 -52
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/alert-dialog.tsx +0 -86
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/avatar.tsx +0 -39
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/badge.tsx +0 -35
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.test.tsx +0 -76
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.tsx +0 -48
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/card.tsx +0 -82
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/checkbox.tsx +0 -27
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/dialog.tsx +0 -76
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/dropdown-menu.tsx +0 -162
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/index.ts +0 -25
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/input.tsx +0 -21
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/label.tsx +0 -21
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/popover.tsx +0 -30
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/progress.tsx +0 -25
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/radio-group.tsx +0 -37
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/scroll-area.tsx +0 -45
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/select.tsx +0 -141
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/separator.tsx +0 -25
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/sheet.tsx +0 -109
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/switch.tsx +0 -28
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/table.tsx +0 -93
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/tabs.tsx +0 -54
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/textarea.tsx +0 -21
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/tooltip.tsx +0 -29
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/hooks/index.ts +0 -11
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-admin-conversations.ts +0 -130
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-auth.ts +0 -108
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-chat.ts +0 -516
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversation-shares.ts +0 -126
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversations.ts +0 -231
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-projects.ts +0 -207
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-websocket.ts +0 -108
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/i18n.ts +0 -30
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/lib/admin-auth.ts +0 -47
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/lib/api-client.ts +0 -90
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/lib/constants.ts +0 -49
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/lib/rag-api.ts +0 -267
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/lib/server-api.ts +0 -93
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.test.ts +0 -44
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/middleware.ts +0 -26
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.test.ts +0 -72
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.ts +0 -71
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-store.ts +0 -74
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/stores/conversation-store.ts +0 -74
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/stores/index.ts +0 -9
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/stores/project-store.ts +0 -73
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/stores/theme-store.ts +0 -44
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/types/auth.ts +0 -74
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/types/chat.ts +0 -161
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/types/conversation.ts +0 -149
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/types/index.ts +0 -13
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/src/types/project.ts +0 -59
- fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/frontend/tsconfig.json +0 -28
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/.gitignore +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/LICENSE +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/fastapi_gen/__init__.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/fastapi_gen/generator.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.claude/commands/add-endpoint.md +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.claude/commands/fix-issue.md +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.claude/commands/review.md +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.claude/rules/api-conventions.md +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.claude/rules/code-style.md +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.claude/rules/exceptions-security.md +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.claude/rules/frontend.md +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.claude/rules/schemas-models.md +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.claude/rules/testing.md +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.claude/settings.json +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.env.prod.example +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.github/workflows/ci.yml +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.gitignore +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/.gitlab-ci.yml +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/AGENTS.md +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/.dockerignore +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/.pre-commit-config.yaml +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/alembic/script.py.mako +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/.gitkeep +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/alembic.ini +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/__init__.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/admin.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/agents/prompts.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/api/__init__.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/api/router.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/__init__.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/api/versioning.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/clients/__init__.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/clients/redis.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/commands/__init__.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/commands/example.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/core/__init__.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/core/cache.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/core/channel_crypto.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/core/csrf.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/core/logfire_setup.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/core/logging.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/core/oauth.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/core/rate_limit.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/core/sanitize.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/db/__init__.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/db/base.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/db/models/channel_identity.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/db/models/channel_session.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/db/models/chat_file.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/db/models/conversation_share.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/db/models/message_rating.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/db/models/project.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/db/models/sync_log.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/db/models/sync_source.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/db/session.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/repositories/channel_identity.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/repositories/channel_session.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/repositories/conversation_share.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/repositories/project.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/repositories/session.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/repositories/sync_source.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/schemas/__init__.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/schemas/base.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/schemas/channel_bot.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/schemas/message_rating.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/schemas/project.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/schemas/rag.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/schemas/session.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/schemas/sync_source.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/schemas/token.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/schemas/webhook.py +0 -0
- {fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app → fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services}/channels/base.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/services/conversation_share.py +0 -0
- {fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app → fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services}/rag/__init__.py +0 -0
- {fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app → fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services}/rag/image_describer.py +0 -0
- {fastapi_fullstack-0.2.6/template/{{cookiecutter.project_slug}}/backend/app → fastapi_fullstack-0.2.8/template/{{cookiecutter.project_slug}}/backend/app/services}/rag/models.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/app/worker/taskiq_app.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/cli/__init__.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/cli/commands.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/scripts/.gitkeep +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/__init__.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/api/__init__.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_exceptions.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_health.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_metrics.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_openapi.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_users.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/conftest.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/test_admin.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/test_clients.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/test_commands.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/test_core.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/test_migrations.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/test_repositories.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/test_security.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/backend/tests/test_ssrf.py +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docker-compose.frontend.yml +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/adding_features.md +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/architecture.md +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/commands.md +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/configuration.md +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/file-processing.md +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/howto/add-agent-tool.md +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/howto/add-api-endpoint.md +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/howto/add-background-task.md +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/howto/configure-sync-sources.md +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/howto/customize-agent-prompt.md +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/howto/use-ratings.md +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/permissions.md +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/docs/testing.md +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/.dockerignore +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/.env.example +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/.gitignore +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/.prettierignore +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/Dockerfile +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/README.md +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/e2e/auth.setup.ts +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/e2e/auth.spec.ts +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/e2e/chat.spec.ts +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/e2e/home.spec.ts +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/instrumentation.ts +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/playwright.config.ts +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/postcss.config.mjs +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/shares/[shareId]/route.ts +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/shares/route.ts +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/export/route.ts +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/users/me/avatar/route.ts +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/index.ts +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/page-transition.tsx +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/skeleton.tsx +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/spinner.tsx +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/lib/file-api.ts +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.ts +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-sidebar-store.ts +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/stores/sidebar-store.ts +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/types/api.ts +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/src/types/speech.d.ts +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/vercel.json +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/vitest.config.ts +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/frontend/vitest.setup.ts +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/kubernetes/configmap.yaml +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/kubernetes/deployment.yaml +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/kubernetes/ingress.yaml +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/kubernetes/kustomization.yaml +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/kubernetes/namespace.yaml +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/kubernetes/secret.yaml +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/kubernetes/service.yaml +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/nginx/nginx.conf +0 -0
- {fastapi_fullstack-0.2.6 → fastapi_fullstack-0.2.8}/template/{{cookiecutter.project_slug}}/nginx/ssl/.gitkeep +0 -0
|
@@ -0,0 +1,1235 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: fastapi-fullstack
|
|
3
|
+
Version: 0.2.8
|
|
4
|
+
Summary: Full-stack FastAPI + Next.js template generator with PydanticAI/LangChain agents, WebSocket streaming, 20+ enterprise integrations, and Logfire/LangSmith observability. Ship AI apps fast. CLI tool to generate production-ready FastAPI + Next.js projects with AI agents, auth, and observability.
|
|
5
|
+
Project-URL: Homepage, https://github.com/vstorm-co/full-stack-ai-agent-template
|
|
6
|
+
Project-URL: Documentation, https://github.com/vstorm-co/full-stack-ai-agent-template#readme
|
|
7
|
+
Project-URL: Repository, https://github.com/vstorm-co/full-stack-ai-agent-template
|
|
8
|
+
Author-email: Vstorm <hr@vstorm.co>
|
|
9
|
+
License: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Keywords: ai-agents,celery,cookiecutter,docker,fastapi,full-stack,langchain,langgraph,llm,logfire,milvus,mongodb,nextjs,observability,postgresql,pydantic-ai,python,rag,react,redis,retrieval-augmented-generation,template,typescript
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Framework :: FastAPI
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Topic :: Software Development :: Code Generators
|
|
21
|
+
Requires-Python: >=3.11
|
|
22
|
+
Requires-Dist: arq>=0.28.0
|
|
23
|
+
Requires-Dist: celery>=5.6.3
|
|
24
|
+
Requires-Dist: click>=8.3.0
|
|
25
|
+
Requires-Dist: cookiecutter>=2.7.0
|
|
26
|
+
Requires-Dist: email-validator>=2.3.0
|
|
27
|
+
Requires-Dist: httpx>=0.28.1
|
|
28
|
+
Requires-Dist: pydantic-settings>=2.13.0
|
|
29
|
+
Requires-Dist: pydantic>=2.13.0
|
|
30
|
+
Requires-Dist: pytest-asyncio>=1.3.0
|
|
31
|
+
Requires-Dist: pytest>=9.0.3
|
|
32
|
+
Requires-Dist: questionary>=2.1.0
|
|
33
|
+
Requires-Dist: rich>=15.0.0
|
|
34
|
+
Requires-Dist: stripe>=15.1.0
|
|
35
|
+
Requires-Dist: taskiq>=0.12.4
|
|
36
|
+
Provides-Extra: dev
|
|
37
|
+
Requires-Dist: pre-commit>=4.0.0; extra == 'dev'
|
|
38
|
+
Requires-Dist: pytest-cov>=7.0.0; extra == 'dev'
|
|
39
|
+
Requires-Dist: pytest>=9.0.0; extra == 'dev'
|
|
40
|
+
Requires-Dist: ruff>=0.14.0; extra == 'dev'
|
|
41
|
+
Requires-Dist: ty>=0.0.31; extra == 'dev'
|
|
42
|
+
Provides-Extra: docs
|
|
43
|
+
Requires-Dist: mkdocs-material>=9.7.0; extra == 'docs'
|
|
44
|
+
Requires-Dist: mkdocs>=1.6.1; extra == 'docs'
|
|
45
|
+
Requires-Dist: pymdown-extensions>=10.20; extra == 'docs'
|
|
46
|
+
Description-Content-Type: text/markdown
|
|
47
|
+
|
|
48
|
+
<p align="center">
|
|
49
|
+
<img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/banner.png" alt="Full-Stack AI Agent Template" width="100%">
|
|
50
|
+
</p>
|
|
51
|
+
|
|
52
|
+
<h1 align="center">Full-Stack AI Agent Template</h1>
|
|
53
|
+
|
|
54
|
+
<p align="center">
|
|
55
|
+
<i>Production-ready FastAPI + Next.js project generator with AI agents, RAG, and 20+ enterprise integrations.</i>
|
|
56
|
+
</p>
|
|
57
|
+
|
|
58
|
+
<p align="center">
|
|
59
|
+
<a href="#-quick-start">Quick Start</a> •
|
|
60
|
+
<a href="#-features">Features</a> •
|
|
61
|
+
<a href="#-demo">Demo</a> •
|
|
62
|
+
<a href="https://vstorm-co.github.io/full-stack-ai-agent-template/">Documentation</a> •
|
|
63
|
+
<a href="https://oss.vstorm.co/projects/full-stack-ai-agent-template/configurator/">Configurator</a> •
|
|
64
|
+
<a href="https://pypi.org/project/fastapi-fullstack/">PyPI</a>
|
|
65
|
+
</p>
|
|
66
|
+
|
|
67
|
+
<p align="center">
|
|
68
|
+
<a href="https://pypi.org/project/fastapi-fullstack/"><img src="https://img.shields.io/pypi/v/fastapi-fullstack?color=green&logo=pypi&logoColor=white" alt="PyPI"></a>
|
|
69
|
+
<a href="https://pepy.tech/projects/fastapi-fullstack"><img src="https://static.pepy.tech/badge/fastapi-fullstack/month" alt="PyPI Downloads"></a>
|
|
70
|
+
<a href="https://github.com/vstorm-co/full-stack-ai-agent-template/stargazers"><img src="https://img.shields.io/github/stars/vstorm-co/full-stack-ai-agent-template?style=flat&logo=github&color=yellow" alt="GitHub Stars"></a>
|
|
71
|
+
<a href="https://www.python.org/"><img src="https://img.shields.io/badge/python-3.11+-blue?logo=python&logoColor=white" alt="Python 3.11+"></a>
|
|
72
|
+
<a href="https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/LICENSE"><img src="https://img.shields.io/github/license/vstorm-co/full-stack-ai-agent-template?color=blue" alt="License"></a>
|
|
73
|
+
<img src="https://img.shields.io/badge/coverage-100%25-brightgreen" alt="Coverage">
|
|
74
|
+
<a href="https://github.com/vstorm-co/full-stack-ai-agent-template/actions/workflows/ci.yml"><img src="https://github.com/vstorm-co/full-stack-ai-agent-template/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
75
|
+
<a href="https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/SECURITY.md"><img src="https://img.shields.io/badge/security-policy-blueviolet?logo=shieldsdotio&logoColor=white" alt="Security Policy"></a>
|
|
76
|
+
<a href="https://www.bestpractices.dev/projects/12539"><img src="https://www.bestpractices.dev/projects/12539/badge" alt="OpenSSF Best Practices"></a>
|
|
77
|
+
<a href="https://github.com/pydantic/pydantic-ai"><img src="https://img.shields.io/badge/Powered%20by-Pydantic%20AI-E92063?logo=pydantic&logoColor=white" alt="Pydantic AI"></a>
|
|
78
|
+
<a href="https://x.com/Kacper95682155"><img src="https://img.shields.io/badge/X-000000?logo=x&logoColor=white" alt="X"></a>
|
|
79
|
+
</p>
|
|
80
|
+
|
|
81
|
+
<p align="center">
|
|
82
|
+
<b>🤖 6 AI Agent Frameworks</b> <i>(PydanticAI, PydanticDeep, LangChain, LangGraph, CrewAI, DeepAgents)</i>
|
|
83
|
+
<br>
|
|
84
|
+
<b>📄 RAG Pipeline</b> <i>(Milvus, Qdrant, pgvector, ChromaDB)</i>
|
|
85
|
+
<br>
|
|
86
|
+
<b>⚡ FastAPI + Next.js 15</b> <i>(WebSocket streaming, real-time chat UI)</i>
|
|
87
|
+
<br>
|
|
88
|
+
<b>🔗 Conversation Sharing</b> <i>(direct sharing, public links, admin browser)</i>
|
|
89
|
+
<br>
|
|
90
|
+
<b>🔒 Enterprise-Ready</b> <i>(JWT, OAuth, admin panel, Celery, Docker, K8s)</i>
|
|
91
|
+
</p>
|
|
92
|
+
|
|
93
|
+
<details>
|
|
94
|
+
<summary><b>Table of Contents</b></summary>
|
|
95
|
+
|
|
96
|
+
- [Quick Start](#-quick-start)
|
|
97
|
+
- [Demo](#-demo)
|
|
98
|
+
- [Screenshots](#-screenshots)
|
|
99
|
+
- [Why This Template](#-why-this-template)
|
|
100
|
+
- [Features](#-features)
|
|
101
|
+
- [Architecture](#-architecture)
|
|
102
|
+
- [AI Agent](#-ai-agent)
|
|
103
|
+
- [RAG](#-rag-retrieval-augmented-generation)
|
|
104
|
+
- [Observability](#-observability)
|
|
105
|
+
- [Django-style CLI](#-django-style-cli)
|
|
106
|
+
- [Generated Project Structure](#-generated-project-structure)
|
|
107
|
+
- [Configuration Options](#-configuration-options)
|
|
108
|
+
- [Comparison](#-comparison)
|
|
109
|
+
- [FAQ](#-faq)
|
|
110
|
+
- [Documentation](#-documentation)
|
|
111
|
+
- [Contributing](#-contributing)
|
|
112
|
+
|
|
113
|
+
</details>
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Vstorm OSS Ecosystem
|
|
118
|
+
|
|
119
|
+
This template is part of a broader open-source ecosystem for production AI agents:
|
|
120
|
+
|
|
121
|
+
| Project | Description | |
|
|
122
|
+
|---------|-------------|---|
|
|
123
|
+
| **[pydantic-deepagents](https://github.com/vstorm-co/pydantic-deepagents)** | The modular agent runtime for Python. Claude Code-style CLI with Docker sandbox, browser automation, multi-agent teams, and /improve. | [](https://github.com/vstorm-co/pydantic-deepagents) |
|
|
124
|
+
| **[pydantic-ai-shields](https://github.com/vstorm-co/pydantic-ai-shields)** | Drop-in guardrails for Pydantic AI agents. 5 infra + 5 content shields. | [](https://github.com/vstorm-co/pydantic-ai-shields) |
|
|
125
|
+
| **[pydantic-ai-subagents](https://github.com/vstorm-co/pydantic-ai-subagents)** | Declarative multi-agent orchestration with token tracking. | [](https://github.com/vstorm-co/pydantic-ai-subagents) |
|
|
126
|
+
| **[summarization-pydantic-ai](https://github.com/vstorm-co/pydantic-ai-summarization)** | Smart context compression for long-running agents. | [](https://github.com/vstorm-co/summarization-pydantic-ai) |
|
|
127
|
+
| **[pydantic-ai-backend](https://github.com/vstorm-co/pydantic-ai-backend)** | Sandboxed execution for AI agents. Docker + Daytona. | [](https://github.com/vstorm-co/pydantic-ai-backend) |
|
|
128
|
+
|
|
129
|
+
> **Want the runtime behind this template's AI agents?** [pydantic-deepagents](https://github.com/vstorm-co/pydantic-deepagents) powers the `deepagents` framework option — install it standalone with `curl -fsSL .../install.sh | bash`.
|
|
130
|
+
|
|
131
|
+
Browse all projects at [oss.vstorm.co](https://oss.vstorm.co)
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## 🚀 Quick Start
|
|
136
|
+
|
|
137
|
+
> [!TIP]
|
|
138
|
+
> **Prefer a visual configurator?** Use the [Web Configurator](https://oss.vstorm.co/projects/full-stack-ai-agent-template/configurator/) to configure your project in the browser and download a ZIP — no CLI installation needed.
|
|
139
|
+
|
|
140
|
+
### Installation
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
# pip
|
|
144
|
+
pip install fastapi-fullstack
|
|
145
|
+
|
|
146
|
+
# uv (recommended)
|
|
147
|
+
uv tool install fastapi-fullstack
|
|
148
|
+
|
|
149
|
+
# pipx
|
|
150
|
+
pipx install fastapi-fullstack
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Create Your Project
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
# Interactive wizard (recommended — runs by default)
|
|
157
|
+
fastapi-fullstack
|
|
158
|
+
|
|
159
|
+
# Quick mode with options
|
|
160
|
+
fastapi-fullstack create my_ai_app \
|
|
161
|
+
--database postgresql \
|
|
162
|
+
--frontend nextjs
|
|
163
|
+
|
|
164
|
+
# Use presets for common setups
|
|
165
|
+
fastapi-fullstack create my_ai_app --preset production # Full production setup
|
|
166
|
+
fastapi-fullstack create my_ai_app --preset ai-agent # AI agent with streaming
|
|
167
|
+
|
|
168
|
+
# Minimal project (no extras)
|
|
169
|
+
fastapi-fullstack create my_ai_app --minimal
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Start Development
|
|
173
|
+
|
|
174
|
+
#### First time on a fresh clone
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
cd my_ai_app
|
|
178
|
+
make bootstrap # = make dev + make seed
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
That's it — backend, database, Redis, vector store (if RAG), Celery (if selected) come up, migrations are applied, and a default admin is seeded.
|
|
182
|
+
|
|
183
|
+
#### Day-to-day
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
make dev # idempotent: build + up + migrate. Re-run anytime.
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
`make dev` skips admin seeding (that's a one-shot in `make seed`) so it stays cheap to run after every code/config change.
|
|
190
|
+
|
|
191
|
+
**Behind the scenes (`make dev`):**
|
|
192
|
+
|
|
193
|
+
1. Builds the backend Docker image (cached after first run)
|
|
194
|
+
2. Starts services via `docker-compose.dev.yml` (hot-reload bind mounts)
|
|
195
|
+
3. Polls Postgres until ready (`pg_isready` — no fixed sleeps)
|
|
196
|
+
4. Applies pending Alembic migrations (no-op if already at head)
|
|
197
|
+
|
|
198
|
+
**Then access:**
|
|
199
|
+
|
|
200
|
+
| | URL | |
|
|
201
|
+
|---|---|---|
|
|
202
|
+
| Backend API | <http://localhost:8000> | |
|
|
203
|
+
| Docs | <http://localhost:8000/docs> | OpenAPI / Swagger |
|
|
204
|
+
| Admin | <http://localhost:8000/admin> | `admin@example.com` / `admin123` (after `make seed`) |
|
|
205
|
+
| Frontend | <http://localhost:3000> | `make dev-frontend` (Docker) or `cd frontend && bun install && bun dev` (local) |
|
|
206
|
+
|
|
207
|
+
### Day-to-day commands
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
make dev # bootstrap or restart (no admin re-seed)
|
|
211
|
+
make seed # one-shot admin creation (no-op if admin exists)
|
|
212
|
+
make dev-down # stop everything
|
|
213
|
+
make dev-logs # tail container logs
|
|
214
|
+
make dev-rebuild # force-rebuild backend image (after pyproject.toml changes)
|
|
215
|
+
make dev-frontend # start the Next.js container
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### Environments
|
|
219
|
+
|
|
220
|
+
| `make` target | Compose file | When to use |
|
|
221
|
+
|---|---|---|
|
|
222
|
+
| `make dev` | `docker-compose.dev.yml` | Local development with hot-reload + bind-mounted source. |
|
|
223
|
+
| `make stage` | `docker-compose.yml` | Production-like build (no bind mounts) running on localhost. Sanity-check before deploy. |
|
|
224
|
+
| `make prod` | `docker-compose.prod.yml` | Production. Requires `.env.prod` (copy from `.env.prod.example`) + external Nginx using `nginx/nginx.conf`. |
|
|
225
|
+
|
|
226
|
+
Each env has matching `-down`, `-logs`, `-rebuild` siblings.
|
|
227
|
+
|
|
228
|
+
> [!NOTE]
|
|
229
|
+
> **Windows users:** `make` requires GNU Make. Install via [Chocolatey](https://chocolatey.org/) (`choco install make`) or use **WSL2 / Git Bash**. The Docker workflow is identical across macOS, Linux, and WSL2.
|
|
230
|
+
|
|
231
|
+
<details>
|
|
232
|
+
<summary><b>Local backend (no Docker, for IDE breakpoints)</b></summary>
|
|
233
|
+
|
|
234
|
+
If you want to run the backend on the host while the database stays in Docker:
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
cd my_ai_app
|
|
238
|
+
make install # uv sync + pre-commit hooks
|
|
239
|
+
|
|
240
|
+
# Start only infrastructure containers
|
|
241
|
+
docker compose -f docker-compose.dev.yml up -d db redis # add 'milvus etcd minio' if RAG
|
|
242
|
+
|
|
243
|
+
make db-upgrade # apply migrations
|
|
244
|
+
make create-admin # interactive
|
|
245
|
+
make run # uvicorn --reload
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
</details>
|
|
249
|
+
|
|
250
|
+
<details>
|
|
251
|
+
<summary><b>Production deploy</b></summary>
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
# On your server
|
|
255
|
+
git clone <your-repo>
|
|
256
|
+
cd my_ai_app
|
|
257
|
+
|
|
258
|
+
cp .env.prod.example .env.prod # fill in real secrets
|
|
259
|
+
# Configure your nginx host using nginx/nginx.conf as reference
|
|
260
|
+
|
|
261
|
+
make prod # builds + starts + migrates
|
|
262
|
+
make prod-logs # tail logs
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
For frontend deployment to **Vercel**:
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
cd frontend && npx vercel --prod
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
In the Vercel dashboard set `BACKEND_URL`, `BACKEND_WS_URL`, `NEXT_PUBLIC_AUTH_ENABLED=true`.
|
|
272
|
+
|
|
273
|
+
</details>
|
|
274
|
+
|
|
275
|
+
### Using the Project CLI
|
|
276
|
+
|
|
277
|
+
Each generated project has a CLI named after your `project_slug`. For example, if you created `my_ai_app`:
|
|
278
|
+
|
|
279
|
+
```bash
|
|
280
|
+
cd backend
|
|
281
|
+
|
|
282
|
+
# The CLI command is: uv run <project_slug> <command>
|
|
283
|
+
uv run my_ai_app server run --reload # Start dev server
|
|
284
|
+
uv run my_ai_app db migrate -m "message" # Create migration
|
|
285
|
+
uv run my_ai_app db upgrade # Apply migrations
|
|
286
|
+
uv run my_ai_app user create-admin # Create admin user
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
Use `make help` to see all available Makefile shortcuts.
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
## 🎬 Demo
|
|
294
|
+
|
|
295
|
+
**CLI generator:**
|
|
296
|
+
|
|
297
|
+
<p align="center">
|
|
298
|
+
<img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/app_start.gif" alt="FastAPI Fullstack Generator Demo">
|
|
299
|
+
</p>
|
|
300
|
+
|
|
301
|
+
**Live chat:**
|
|
302
|
+
|
|
303
|
+
<p align="center">
|
|
304
|
+
<img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/chat_demo_light.gif" alt="Chat Demo">
|
|
305
|
+
</p>
|
|
306
|
+
|
|
307
|
+
**File upload & RAG ingestion:**
|
|
308
|
+
|
|
309
|
+
<p align="center">
|
|
310
|
+
<img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new/file_uploud_light.gif" alt="File Upload Demo">
|
|
311
|
+
</p>
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
315
|
+
## 📸 Screenshots
|
|
316
|
+
|
|
317
|
+
### Marketing Site
|
|
318
|
+
|
|
319
|
+
**Landing Page** — Full-page marketing site with hero, features breakdown, testimonials, pricing preview, and FAQ. Generated with the `enable_marketing_site` option.
|
|
320
|
+
|
|
321
|
+

|
|
322
|
+
|
|
323
|
+
**Pricing** — Three-tier pricing page (Starter / Pro / Business) with monthly/annual toggle. Pulls live plan data from Stripe when connected; shows template plans otherwise.
|
|
324
|
+
|
|
325
|
+

|
|
326
|
+
|
|
327
|
+
**Blog** — Engineering blog included out of the box. Posts are MDX files in the repo — no CMS needed. Supports tags, featured posts, and author bylines.
|
|
328
|
+
|
|
329
|
+

|
|
330
|
+
|
|
331
|
+
**Blog Post** — Individual post view with author card, reading time, and tag badges. Content is plain MDX — edit files and redeploy.
|
|
332
|
+
|
|
333
|
+

|
|
334
|
+
|
|
335
|
+
### Auth
|
|
336
|
+
|
|
337
|
+
**Login** — Split-screen login with Google OAuth and email/password. Left panel shows a product pitch with a social proof quote. HTTP-only cookie session on submit.
|
|
338
|
+
|
|
339
|
+

|
|
340
|
+
|
|
341
|
+
**Register** — Same split-screen layout as login. Google sign-up and email/password form with confirm-password field and terms acceptance.
|
|
342
|
+
|
|
343
|
+

|
|
344
|
+
|
|
345
|
+
### Dashboard
|
|
346
|
+
|
|
347
|
+
**Dashboard (light mode)** — Workspace overview showing conversation count, knowledge base vector count, recent activity feed, agent tool call stats, active sessions, and team info. Onboarding banner guides new users through setup in under 2 minutes.
|
|
348
|
+
|
|
349
|
+

|
|
350
|
+
|
|
351
|
+
**Dashboard (dark mode)** — Same dashboard in dark theme. Theme is saved per-device and can be overridden per-workspace in appearance settings.
|
|
352
|
+
|
|
353
|
+

|
|
354
|
+
|
|
355
|
+
### Teams & Organizations
|
|
356
|
+
|
|
357
|
+
**Workspaces** — List of all organizations the user belongs to. Shows plan tier and role for each. Users can switch active workspace or create a new organization.
|
|
358
|
+
|
|
359
|
+

|
|
360
|
+
|
|
361
|
+
**Team Management** — Organization detail page with workspace profile (name + avatar), member list with roles, and an "Invite teammate" button. Owners and admins can adjust roles inline.
|
|
362
|
+
|
|
363
|
+

|
|
364
|
+
|
|
365
|
+
### Knowledge Bases
|
|
366
|
+
|
|
367
|
+
**Knowledge Bases** — List of RAG knowledge bases scoped to the current workspace. Each base shows its collection slug. Users can create new bases, toggle which ones are active in chat, and upload documents through the UI.
|
|
368
|
+
|
|
369
|
+

|
|
370
|
+
|
|
371
|
+
### Billing
|
|
372
|
+
|
|
373
|
+
**Billing** — Workspace billing dashboard showing current plan, storage usage (chat attachments + indexed RAG documents), quick links to usage breakdown, invoices, payment methods, and subscription management. "Manage in Stripe" opens the Stripe customer portal.
|
|
374
|
+
|
|
375
|
+

|
|
376
|
+
|
|
377
|
+
### Profile & Settings
|
|
378
|
+
|
|
379
|
+
**Profile** — Personal info tab: avatar upload, display name, email, and active session list with per-device revoke buttons. Visibility note explains which fields are shown to teammates.
|
|
380
|
+
|
|
381
|
+

|
|
382
|
+
|
|
383
|
+
**Account & Security** — Change password form with strength guidance, "Sign out everywhere" button, and danger zone for permanent account deletion.
|
|
384
|
+
|
|
385
|
+

|
|
386
|
+
|
|
387
|
+
**Slash Commands** — Customize the `/command` palette in chat. Toggle built-in commands (`/clear`, `/regen`, `/settings`, `/summarize`, `/explain`) and create custom shortcuts that send a stored prompt with a few keystrokes.
|
|
388
|
+
|
|
389
|
+

|
|
390
|
+
|
|
391
|
+
**Appearance** — Theme switcher (light / dark / system) and brand color picker with four presets: Blue (Stripe/Vercel), Green (healthtech), Red (energetic), Orange (B2C), Violet (Anthropic-style). Brand color updates CSS variables across the entire workspace and is saved per-device.
|
|
392
|
+
|
|
393
|
+

|
|
394
|
+
|
|
395
|
+
**Notification Preferences** — Per-category notification controls with separate toggles for email and in-app delivery. Categories: Billing, Team activity, Security alerts, and Product updates. Preferences stored locally and synced to the backend via `/users/me/notifications`.
|
|
396
|
+
|
|
397
|
+

|
|
398
|
+
|
|
399
|
+
### Admin Panel
|
|
400
|
+
|
|
401
|
+
**Admin Overview** — Workspace-wide metrics (total users, active sessions last 24h, conversation count, MRR) plus a recent activity feed showing all conversations across all users. Requires the `admin` role.
|
|
402
|
+
|
|
403
|
+

|
|
404
|
+
|
|
405
|
+
**User Management** — Full user list with search by email or name. Shows role, status, join date, and an "Inspect" action to impersonate or suspend any user. Pagination built in.
|
|
406
|
+
|
|
407
|
+

|
|
408
|
+
|
|
409
|
+
**Conversation Browser** — Browse all conversations across the workspace. Filter by status and owner, sort by any column, open any conversation in a read-only view. Useful for support and quality review.
|
|
410
|
+
|
|
411
|
+

|
|
412
|
+
|
|
413
|
+
**Message Quality & Ratings** — Aggregated like/dislike feedback on AI responses over the last 30 days. Shows approval rate, daily chart, and a filterable table of individual ratings with optional user comments. Export to CSV.
|
|
414
|
+
|
|
415
|
+

|
|
416
|
+
|
|
417
|
+
**Stripe Events Log** — Webhook event browser for debugging Stripe billing flows. Lists all received events (type, customer, amount, status, timestamp) and lets admins manually replay any event via the backend `/admin/stripe-events/{id}/replay` endpoint.
|
|
418
|
+
|
|
419
|
+

|
|
420
|
+
|
|
421
|
+
**System Health** — Live readiness dashboard auto-refreshing every 30 seconds. Checks API, Database (PostgreSQL primary), Redis, Vector store, LLM provider, Background worker, and Stripe API. Shows uptime percentage per service.
|
|
422
|
+
|
|
423
|
+

|
|
424
|
+
|
|
425
|
+
### Observability
|
|
426
|
+
|
|
427
|
+
**Logfire (PydanticAI)** — Full distributed tracing for PydanticAI agent runs, FastAPI requests, database queries, Redis, Celery tasks, and HTTPX calls — all in one timeline.
|
|
428
|
+
|
|
429
|
+

|
|
430
|
+
|
|
431
|
+
**LangSmith (LangChain / LangGraph)** — Trace viewer for LangChain agent runs with step-by-step chain inspection, token usage, and feedback collection.
|
|
432
|
+
|
|
433
|
+

|
|
434
|
+
|
|
435
|
+
### Messaging Channels
|
|
436
|
+
|
|
437
|
+
**Telegram Bot** — Multi-bot integration with both polling and webhook modes. Each bot gets its own session, supports group concurrency control, and routes messages through the same agent pipeline as the web UI.
|
|
438
|
+
|
|
439
|
+

|
|
440
|
+
|
|
441
|
+
### Monitoring & API
|
|
442
|
+
|
|
443
|
+
**Celery Flower** — Real-time task queue monitor. Track worker status, task throughput, and failure rates for background jobs (document ingestion, email, webhooks).
|
|
444
|
+
|
|
445
|
+

|
|
446
|
+
|
|
447
|
+
**API Documentation** — Auto-generated OpenAPI / Swagger UI at `/docs`. All endpoints documented with request/response schemas, auth requirements, and example payloads.
|
|
448
|
+
|
|
449
|
+

|
|
450
|
+
|
|
451
|
+
---
|
|
452
|
+
|
|
453
|
+
## 🎯 Why This Template
|
|
454
|
+
|
|
455
|
+
Building AI/LLM applications requires more than just an API wrapper. You need:
|
|
456
|
+
|
|
457
|
+
- **Type-safe AI agents** with tool/function calling
|
|
458
|
+
- **Real-time streaming** responses via WebSocket
|
|
459
|
+
- **Conversation persistence** and history management
|
|
460
|
+
- **Production infrastructure** - auth, rate limiting, observability
|
|
461
|
+
- **Enterprise integrations** - background tasks, webhooks, admin panels
|
|
462
|
+
|
|
463
|
+
This template gives you all of that out of the box, with **20+ configurable integrations** so you can focus on building your AI product, not boilerplate.
|
|
464
|
+
|
|
465
|
+
### Perfect For
|
|
466
|
+
|
|
467
|
+
- 🤖 **AI Chatbots & Assistants** - PydanticAI or LangChain agents with streaming responses
|
|
468
|
+
- 📊 **ML Applications** - Background task processing with Celery/Taskiq
|
|
469
|
+
- 🏢 **Enterprise SaaS** - Full auth, admin panel, webhooks, and more
|
|
470
|
+
- 🚀 **Startups** - Ship fast with production-ready infrastructure
|
|
471
|
+
|
|
472
|
+
### AI-Agent Friendly
|
|
473
|
+
|
|
474
|
+
Generated projects include **CLAUDE.md** and **AGENTS.md** files optimized for AI coding assistants (Claude Code, Codex, Copilot, Cursor, Zed). Following [progressive disclosure](https://humanlayer.dev/blog/writing-a-good-claude-md) best practices - concise project overview with pointers to detailed docs when needed.
|
|
475
|
+
|
|
476
|
+
---
|
|
477
|
+
|
|
478
|
+
## ✨ Features
|
|
479
|
+
|
|
480
|
+
<p align="center">
|
|
481
|
+
<a href="https://ai.pydantic.dev"><img src="https://img.shields.io/badge/PydanticAI-E92063?logo=pydantic&logoColor=white" alt="PydanticAI"></a>
|
|
482
|
+
<a href="https://python.langchain.com"><img src="https://img.shields.io/badge/LangChain-1C3C3C?logo=langchain&logoColor=white" alt="LangChain"></a>
|
|
483
|
+
<a href="https://langchain-ai.github.io/langgraph/"><img src="https://img.shields.io/badge/LangGraph-005A9C?logo=langchain&logoColor=white" alt="LangGraph"></a>
|
|
484
|
+
<a href="https://www.crewai.com"><img src="https://img.shields.io/badge/CrewAI-FF6B35?logoColor=white" alt="CrewAI"></a>
|
|
485
|
+
<a href="https://milvus.io"><img src="https://img.shields.io/badge/Milvus-FF6B35?logoColor=white" alt="Milvus"></a>
|
|
486
|
+
<a href="https://openai.com"><img src="https://img.shields.io/badge/OpenAI-412991?logo=openai&logoColor=white" alt="OpenAI"></a>
|
|
487
|
+
<a href="https://anthropic.com"><img src="https://img.shields.io/badge/Anthropic-D4A373?logo=anthropic&logoColor=white" alt="Anthropic"></a>
|
|
488
|
+
<a href="https://ai.google.dev"><img src="https://img.shields.io/badge/Gemini-4285F4?logo=google&logoColor=white" alt="Google Gemini"></a>
|
|
489
|
+
<a href="https://openrouter.ai"><img src="https://img.shields.io/badge/OpenRouter-6366F1?logoColor=white" alt="OpenRouter"></a>
|
|
490
|
+
</p>
|
|
491
|
+
|
|
492
|
+
<p align="center">
|
|
493
|
+
<a href="https://fastapi.tiangolo.com"><img src="https://img.shields.io/badge/FastAPI-009688?logo=fastapi&logoColor=white" alt="FastAPI"></a>
|
|
494
|
+
<a href="https://nextjs.org"><img src="https://img.shields.io/badge/Next.js_15-000000?logo=next.js&logoColor=white" alt="Next.js 15"></a>
|
|
495
|
+
<a href="https://react.dev"><img src="https://img.shields.io/badge/React_19-61DAFB?logo=react&logoColor=black" alt="React 19"></a>
|
|
496
|
+
<a href="https://www.typescriptlang.org"><img src="https://img.shields.io/badge/TypeScript-3178C6?logo=typescript&logoColor=white" alt="TypeScript"></a>
|
|
497
|
+
<a href="https://tailwindcss.com"><img src="https://img.shields.io/badge/Tailwind_v4-06B6D4?logo=tailwindcss&logoColor=white" alt="Tailwind CSS"></a>
|
|
498
|
+
<a href="https://www.sqlalchemy.org"><img src="https://img.shields.io/badge/SQLAlchemy-D71F00?logo=sqlalchemy&logoColor=white" alt="SQLAlchemy"></a>
|
|
499
|
+
</p>
|
|
500
|
+
|
|
501
|
+
<p align="center">
|
|
502
|
+
<a href="https://www.postgresql.org"><img src="https://img.shields.io/badge/PostgreSQL-4169E1?logo=postgresql&logoColor=white" alt="PostgreSQL"></a>
|
|
503
|
+
<a href="https://www.mongodb.com"><img src="https://img.shields.io/badge/MongoDB-47A248?logo=mongodb&logoColor=white" alt="MongoDB"></a>
|
|
504
|
+
<a href="https://redis.io"><img src="https://img.shields.io/badge/Redis-DC382D?logo=redis&logoColor=white" alt="Redis"></a>
|
|
505
|
+
<a href="https://milvus.io"><img src="https://img.shields.io/badge/Milvus-00A1EA?logoColor=white" alt="Milvus"></a>
|
|
506
|
+
<a href="https://qdrant.tech"><img src="https://img.shields.io/badge/Qdrant-FF6B6B?logoColor=white" alt="Qdrant"></a>
|
|
507
|
+
<a href="https://www.trychroma.com"><img src="https://img.shields.io/badge/ChromaDB-FF6F61?logoColor=white" alt="ChromaDB"></a>
|
|
508
|
+
<a href="https://docs.celeryq.dev"><img src="https://img.shields.io/badge/Celery-37814A?logo=celery&logoColor=white" alt="Celery"></a>
|
|
509
|
+
<a href="https://logfire.pydantic.dev"><img src="https://img.shields.io/badge/Logfire-E92063?logo=pydantic&logoColor=white" alt="Logfire"></a>
|
|
510
|
+
<a href="https://sentry.io"><img src="https://img.shields.io/badge/Sentry-362D59?logo=sentry&logoColor=white" alt="Sentry"></a>
|
|
511
|
+
<a href="https://prometheus.io"><img src="https://img.shields.io/badge/Prometheus-E6522C?logo=prometheus&logoColor=white" alt="Prometheus"></a>
|
|
512
|
+
</p>
|
|
513
|
+
|
|
514
|
+
<p align="center">
|
|
515
|
+
<a href="https://www.docker.com"><img src="https://img.shields.io/badge/Docker-2496ED?logo=docker&logoColor=white" alt="Docker"></a>
|
|
516
|
+
<a href="https://kubernetes.io"><img src="https://img.shields.io/badge/Kubernetes-326CE5?logo=kubernetes&logoColor=white" alt="Kubernetes"></a>
|
|
517
|
+
<a href="https://github.com/features/actions"><img src="https://img.shields.io/badge/GitHub_Actions-2088FF?logo=githubactions&logoColor=white" alt="GitHub Actions"></a>
|
|
518
|
+
<a href="https://aws.amazon.com/s3/"><img src="https://img.shields.io/badge/S3-569A31?logo=amazons3&logoColor=white" alt="S3"></a>
|
|
519
|
+
</p>
|
|
520
|
+
|
|
521
|
+
### 🤖 AI/LLM First
|
|
522
|
+
|
|
523
|
+
- **6 AI Frameworks** - [PydanticAI](https://ai.pydantic.dev), [PydanticDeep](https://github.com/vstorm-co/pydantic-deep), [LangChain](https://python.langchain.com), [LangGraph](https://langchain-ai.github.io/langgraph/), [CrewAI](https://www.crewai.com), [DeepAgents](https://github.com/vstorm-co/pydantic-deepagents)
|
|
524
|
+
- **4 LLM Providers** - OpenAI, Anthropic, Google Gemini, OpenRouter
|
|
525
|
+
- **RAG** - Document ingestion, vector search, reranking (Milvus, Qdrant, ChromaDB, pgvector)
|
|
526
|
+
- **WebSocket Streaming** - Real-time responses with full event access
|
|
527
|
+
- **Messaging Channels** - Telegram and Slack multi-bot integration with polling, webhooks, per-thread sessions, group concurrency control
|
|
528
|
+
- **Conversation Sharing** - Share conversations with users or via public links, admin conversation browser
|
|
529
|
+
- **Conversation Persistence** - Save chat history to database
|
|
530
|
+
- **Message Ratings** - Like/dislike responses with feedback, admin analytics
|
|
531
|
+
- **Image Description** - Extract images from documents, describe via LLM vision
|
|
532
|
+
- **Multimodal Embeddings** - Google Gemini embedding model (text + images)
|
|
533
|
+
- **Document Sources** - Local files, API upload, Google Drive, S3/MinIO
|
|
534
|
+
- **Sync Sources** - Configurable connectors (Google Drive, S3) with scheduled sync
|
|
535
|
+
- **Observability** - Logfire for PydanticAI, LangSmith for LangChain/LangGraph/DeepAgents
|
|
536
|
+
|
|
537
|
+
### ⚡ Backend (FastAPI)
|
|
538
|
+
|
|
539
|
+
- **[FastAPI](https://fastapi.tiangolo.com)** + **[Pydantic v2](https://docs.pydantic.dev)** - High-performance async API
|
|
540
|
+
- **Multiple Databases** - PostgreSQL (async), MongoDB (async), SQLite
|
|
541
|
+
- **Authentication** - JWT + Refresh tokens, API Keys, OAuth2 (Google)
|
|
542
|
+
- **Background Tasks** - Celery, Taskiq, or ARQ
|
|
543
|
+
- **Django-style CLI** - Custom management commands with auto-discovery
|
|
544
|
+
|
|
545
|
+
### 🎨 Frontend (Next.js 15)
|
|
546
|
+
|
|
547
|
+
- **React 19** + **TypeScript** + **Tailwind CSS v4**
|
|
548
|
+
- **AI Chat Interface** - WebSocket streaming, tool call visualization
|
|
549
|
+
- **Authentication** - HTTP-only cookies, auto-refresh, password reset, magic link
|
|
550
|
+
- **Marketing Site** - hero, pricing, FAQ, blog, contact form, legal pages (PL + EN)
|
|
551
|
+
- **User Settings** - profile, API keys CRUD (`sk_*` tokens), onboarding tracking
|
|
552
|
+
- **Admin Panel** - workspace stats, Stripe events browser
|
|
553
|
+
- **SEO** - per-page metadata, OG image, sitemap, robots, manifest, favicons
|
|
554
|
+
- **Dark Mode** + **i18n** (PL/EN via next-intl, locale-prefixed routes)
|
|
555
|
+
|
|
556
|
+
### 🔌 20+ Enterprise Integrations
|
|
557
|
+
|
|
558
|
+
| Category | Integrations |
|
|
559
|
+
|----------|-------------|
|
|
560
|
+
| **AI Frameworks** | PydanticAI, PydanticDeep, LangChain, LangGraph, CrewAI, DeepAgents |
|
|
561
|
+
| **LLM Providers** | OpenAI, Anthropic, Google Gemini, OpenRouter |
|
|
562
|
+
| **RAG / Vector Stores** | Milvus, Qdrant, ChromaDB, pgvector |
|
|
563
|
+
| **RAG Sources** | Local files, API upload, Google Drive, S3/MinIO, Sync Sources (configurable, scheduled) |
|
|
564
|
+
| **Embeddings** | OpenAI, Voyage, Gemini (multimodal), SentenceTransformers |
|
|
565
|
+
| **Caching & State** | Redis, fastapi-cache2 |
|
|
566
|
+
| **Security** | Rate limiting, CORS, CSRF protection |
|
|
567
|
+
| **Observability** | Logfire, LangSmith, Sentry, Prometheus |
|
|
568
|
+
| **Admin** | SQLAdmin panel with auth |
|
|
569
|
+
| **Collaboration** | Conversation sharing (direct + link), admin conversation browser |
|
|
570
|
+
| **Messaging** | Telegram multi-bot (polling + webhook), Slack multi-bot (Events API + Socket Mode) |
|
|
571
|
+
| **Events** | Webhooks, WebSockets |
|
|
572
|
+
| **DevOps** | Docker, GitHub Actions, GitLab CI, Kubernetes |
|
|
573
|
+
|
|
574
|
+
### 🗺️ Architecture Overview
|
|
575
|
+
|
|
576
|
+
```
|
|
577
|
+
┌──────────────────────────────────────────────────────────────────────────┐
|
|
578
|
+
│ FRONTEND (Next.js 15) │
|
|
579
|
+
│ Chat UI · Knowledge Base · Dashboard · Settings · Dark Mode · i18n │
|
|
580
|
+
└──────────────┬───────────────────────────────────────────┬───────────────┘
|
|
581
|
+
│ REST / WebSocket │ Vercel
|
|
582
|
+
▼ ▼
|
|
583
|
+
┌──────────────────────────────────────────────────────────────────────────┐
|
|
584
|
+
│ BACKEND (FastAPI) │
|
|
585
|
+
│ │
|
|
586
|
+
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
587
|
+
│ │ AI AGENTS │ │
|
|
588
|
+
│ │ PydanticAI · LangChain · LangGraph · CrewAI · DeepAgents │ │
|
|
589
|
+
│ │ ──────────────────────────────────────────────────────────── │ │
|
|
590
|
+
│ │ Tools: datetime · web_search (Tavily) · search_knowledge_base │ │
|
|
591
|
+
│ │ Providers: OpenAI · Anthropic · Gemini · OpenRouter │ │
|
|
592
|
+
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
593
|
+
│ │
|
|
594
|
+
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
|
595
|
+
│ │ RAG PIPELINE │ │
|
|
596
|
+
│ │ │ │
|
|
597
|
+
│ │ Sources Parse Chunk Embed │ │
|
|
598
|
+
│ │ ───────── ────────── ────────── ────────────── │ │
|
|
599
|
+
│ │ Local files PyMuPDF recursive OpenAI │ │
|
|
600
|
+
│ │ API upload LiteParse markdown Voyage │ │
|
|
601
|
+
│ │ Google Drive LlamaParse fixed Gemini (multi) │ │
|
|
602
|
+
│ │ S3/MinIO python-docx SentenceTransf. │ │
|
|
603
|
+
│ │ Sync Sources │ │
|
|
604
|
+
│ │ │ │
|
|
605
|
+
│ │ Store Search Rank │ │
|
|
606
|
+
│ │ ────────────── ────────────── ────────────── │ │
|
|
607
|
+
│ │ Milvus Vector similarity Cohere reranker │ │
|
|
608
|
+
│ │ Qdrant BM25 + vector RRF CrossEncoder │ │
|
|
609
|
+
│ │ ChromaDB Multi-collection │ │
|
|
610
|
+
│ │ pgvector │ │
|
|
611
|
+
│ └─────────────────────────────────────────────────────────────────┘ │
|
|
612
|
+
│ │
|
|
613
|
+
│ Auth (JWT/API Key/OAuth) · Rate Limiting · Webhooks · Admin Panel │
|
|
614
|
+
│ Background Tasks (Celery/Taskiq/ARQ) · Django-style CLI │
|
|
615
|
+
│ Observability (Logfire/LangSmith/Sentry/Prometheus) │
|
|
616
|
+
└───────┬──────────────┬──────────────┬──────────────┬─────────────────────┘
|
|
617
|
+
│ │ │ │
|
|
618
|
+
▼ ▼ ▼ ▼
|
|
619
|
+
PostgreSQL Redis Vector DB LLM APIs
|
|
620
|
+
MongoDB (Milvus/ (OpenAI/
|
|
621
|
+
SQLite Qdrant/ Anthropic/
|
|
622
|
+
ChromaDB/ Gemini)
|
|
623
|
+
pgvector)
|
|
624
|
+
```
|
|
625
|
+
|
|
626
|
+
---
|
|
627
|
+
|
|
628
|
+
## 🏗️ Architecture
|
|
629
|
+
|
|
630
|
+
```mermaid
|
|
631
|
+
graph TB
|
|
632
|
+
subgraph Frontend["Frontend (Next.js 15)"]
|
|
633
|
+
UI[React Components]
|
|
634
|
+
WS[WebSocket Client]
|
|
635
|
+
Store[Zustand Stores]
|
|
636
|
+
end
|
|
637
|
+
|
|
638
|
+
subgraph Backend["Backend (FastAPI)"]
|
|
639
|
+
API[API Routes]
|
|
640
|
+
Services[Services Layer]
|
|
641
|
+
Repos[Repositories]
|
|
642
|
+
Agent[AI Agent]
|
|
643
|
+
end
|
|
644
|
+
|
|
645
|
+
subgraph Infrastructure
|
|
646
|
+
DB[(PostgreSQL/MongoDB)]
|
|
647
|
+
Redis[(Redis)]
|
|
648
|
+
Queue[Celery/Taskiq]
|
|
649
|
+
end
|
|
650
|
+
|
|
651
|
+
subgraph External
|
|
652
|
+
LLM[OpenAI/Anthropic]
|
|
653
|
+
Webhook[Webhook Endpoints]
|
|
654
|
+
end
|
|
655
|
+
|
|
656
|
+
UI --> API
|
|
657
|
+
WS <--> Agent
|
|
658
|
+
API --> Services
|
|
659
|
+
Services --> Repos
|
|
660
|
+
Services --> Agent
|
|
661
|
+
Repos --> DB
|
|
662
|
+
Agent --> LLM
|
|
663
|
+
Services --> Redis
|
|
664
|
+
Services --> Queue
|
|
665
|
+
Services --> Webhook
|
|
666
|
+
```
|
|
667
|
+
|
|
668
|
+
### Layered Architecture
|
|
669
|
+
|
|
670
|
+
The backend follows a clean **Repository + Service** pattern:
|
|
671
|
+
|
|
672
|
+
```mermaid
|
|
673
|
+
graph LR
|
|
674
|
+
A[API Routes] --> B[Services]
|
|
675
|
+
B --> C[Repositories]
|
|
676
|
+
C --> D[(Database)]
|
|
677
|
+
|
|
678
|
+
B --> E[External APIs]
|
|
679
|
+
B --> F[AI Agents]
|
|
680
|
+
```
|
|
681
|
+
|
|
682
|
+
| Layer | Responsibility |
|
|
683
|
+
|-------|---------------|
|
|
684
|
+
| **Routes** | HTTP handling, validation, auth |
|
|
685
|
+
| **Services** | Business logic, orchestration |
|
|
686
|
+
| **Repositories** | Data access, queries |
|
|
687
|
+
|
|
688
|
+
See [Architecture Documentation](https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/docs/architecture.md) for details.
|
|
689
|
+
|
|
690
|
+
---
|
|
691
|
+
|
|
692
|
+
## 🤖 AI Agent
|
|
693
|
+
|
|
694
|
+
Choose from **6 AI frameworks** and **4 LLM providers** when generating your project:
|
|
695
|
+
|
|
696
|
+
```bash
|
|
697
|
+
# PydanticAI with OpenAI (default)
|
|
698
|
+
fastapi-fullstack create my_app --ai-framework pydantic_ai
|
|
699
|
+
|
|
700
|
+
# LangGraph with Anthropic
|
|
701
|
+
fastapi-fullstack create my_app --ai-framework langgraph --llm-provider anthropic
|
|
702
|
+
|
|
703
|
+
# CrewAI with Google Gemini
|
|
704
|
+
fastapi-fullstack create my_app --ai-framework crewai --llm-provider google
|
|
705
|
+
|
|
706
|
+
# DeepAgents with OpenAI
|
|
707
|
+
fastapi-fullstack create my_app --ai-framework deepagents
|
|
708
|
+
|
|
709
|
+
# With RAG enabled
|
|
710
|
+
fastapi-fullstack create my_app --rag --database postgresql --task-queue celery
|
|
711
|
+
```
|
|
712
|
+
|
|
713
|
+
### Supported Combinations
|
|
714
|
+
|
|
715
|
+
| Framework | OpenAI | Anthropic | Gemini | OpenRouter |
|
|
716
|
+
|-----------|:------:|:---------:|:------:|:----------:|
|
|
717
|
+
| **PydanticAI** | ✓ | ✓ | ✓ | ✓ |
|
|
718
|
+
| **PydanticDeep** | ✓ | ✓ | ✓ | - |
|
|
719
|
+
| **LangChain** | ✓ | ✓ | ✓ | - |
|
|
720
|
+
| **LangGraph** | ✓ | ✓ | ✓ | - |
|
|
721
|
+
| **CrewAI** | ✓ | ✓ | ✓ | - |
|
|
722
|
+
| **DeepAgents** | ✓ | ✓ | ✓ | - |
|
|
723
|
+
|
|
724
|
+
### PydanticAI Integration
|
|
725
|
+
|
|
726
|
+
Type-safe agents with full dependency injection:
|
|
727
|
+
|
|
728
|
+
```python
|
|
729
|
+
# app/agents/assistant.py
|
|
730
|
+
from pydantic_ai import Agent, RunContext
|
|
731
|
+
|
|
732
|
+
@dataclass
|
|
733
|
+
class Deps:
|
|
734
|
+
user_id: str | None = None
|
|
735
|
+
db: AsyncSession | None = None
|
|
736
|
+
|
|
737
|
+
agent = Agent[Deps, str](
|
|
738
|
+
model="openai:gpt-4o-mini",
|
|
739
|
+
system_prompt="You are a helpful assistant.",
|
|
740
|
+
)
|
|
741
|
+
|
|
742
|
+
@agent.tool
|
|
743
|
+
async def search_database(ctx: RunContext[Deps], query: str) -> list[dict]:
|
|
744
|
+
"""Search the database for relevant information."""
|
|
745
|
+
# Access user context and database via ctx.deps
|
|
746
|
+
...
|
|
747
|
+
```
|
|
748
|
+
|
|
749
|
+
### LangChain Integration
|
|
750
|
+
|
|
751
|
+
Flexible agents with LangGraph:
|
|
752
|
+
|
|
753
|
+
```python
|
|
754
|
+
# app/agents/langchain_assistant.py
|
|
755
|
+
from langchain.tools import tool
|
|
756
|
+
from langgraph.prebuilt import create_react_agent
|
|
757
|
+
|
|
758
|
+
@tool
|
|
759
|
+
def search_database(query: str) -> list[dict]:
|
|
760
|
+
"""Search the database for relevant information."""
|
|
761
|
+
...
|
|
762
|
+
|
|
763
|
+
agent = create_react_agent(
|
|
764
|
+
model=ChatOpenAI(model="gpt-4o-mini"),
|
|
765
|
+
tools=[search_database],
|
|
766
|
+
prompt="You are a helpful assistant.",
|
|
767
|
+
)
|
|
768
|
+
```
|
|
769
|
+
|
|
770
|
+
### WebSocket Streaming
|
|
771
|
+
|
|
772
|
+
Both frameworks use the same WebSocket endpoint with real-time streaming:
|
|
773
|
+
|
|
774
|
+
```python
|
|
775
|
+
@router.websocket("/ws")
|
|
776
|
+
async def agent_ws(websocket: WebSocket):
|
|
777
|
+
await websocket.accept()
|
|
778
|
+
|
|
779
|
+
# Works with both PydanticAI and LangChain
|
|
780
|
+
async for event in agent.stream(user_input):
|
|
781
|
+
await websocket.send_json({
|
|
782
|
+
"type": "text_delta",
|
|
783
|
+
"content": event.content
|
|
784
|
+
})
|
|
785
|
+
```
|
|
786
|
+
|
|
787
|
+
### Observability
|
|
788
|
+
|
|
789
|
+
Each framework has its own observability solution:
|
|
790
|
+
|
|
791
|
+
| Framework | Observability | Dashboard |
|
|
792
|
+
|-----------|--------------|-----------|
|
|
793
|
+
| **PydanticAI** | [Logfire](https://logfire.pydantic.dev) | Agent runs, tool calls, token usage |
|
|
794
|
+
| **LangChain** | [LangSmith](https://smith.langchain.com) | Traces, feedback, datasets |
|
|
795
|
+
|
|
796
|
+
See [AI Agent Documentation](https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/docs/ai-agent.md) for more.
|
|
797
|
+
|
|
798
|
+
---
|
|
799
|
+
|
|
800
|
+
## 📄 RAG (Retrieval-Augmented Generation)
|
|
801
|
+
|
|
802
|
+
Enable RAG to give your AI agents access to a knowledge base built from your documents.
|
|
803
|
+
|
|
804
|
+
### Vector Store Backends
|
|
805
|
+
|
|
806
|
+
| Backend | Type | Docker Required | Best For |
|
|
807
|
+
|---------|------|:---:|---------|
|
|
808
|
+
| **Milvus** | Dedicated vector DB | Yes (3 services) | Production, large scale |
|
|
809
|
+
| **Qdrant** | Dedicated vector DB | Yes (1 service) | Production, simple setup |
|
|
810
|
+
| **ChromaDB** | Embedded / HTTP | No | Development, prototyping |
|
|
811
|
+
| **pgvector** | PostgreSQL extension | No (uses existing PG) | Already have PostgreSQL |
|
|
812
|
+
|
|
813
|
+
### Document Ingestion (CLI)
|
|
814
|
+
|
|
815
|
+
```bash
|
|
816
|
+
# Local files
|
|
817
|
+
uv run my_app rag-ingest /path/to/document.pdf --collection docs
|
|
818
|
+
uv run my_app rag-ingest /path/to/folder/ --recursive
|
|
819
|
+
|
|
820
|
+
# Google Drive (service account)
|
|
821
|
+
uv run my_app rag-sync-gdrive --collection docs --folder-id <drive_folder_id>
|
|
822
|
+
|
|
823
|
+
# S3/MinIO
|
|
824
|
+
uv run my_app rag-sync-s3 --collection docs --prefix reports/ --bucket my-bucket
|
|
825
|
+
```
|
|
826
|
+
|
|
827
|
+
### Embedding Providers
|
|
828
|
+
|
|
829
|
+
| Provider | Model | Dimensions | Multimodal |
|
|
830
|
+
|----------|-------|:---:|:---:|
|
|
831
|
+
| **OpenAI** | text-embedding-3-small | 1536 | - |
|
|
832
|
+
| **Voyage** | voyage-3 | 1024 | - |
|
|
833
|
+
| **Gemini** | gemini-embedding-exp-03-07 | 3072 | Text + Images |
|
|
834
|
+
| **SentenceTransformers** | all-MiniLM-L6-v2 | 384 | - |
|
|
835
|
+
|
|
836
|
+
### Features
|
|
837
|
+
|
|
838
|
+
- **Document parsing** - PDF (PyMuPDF with tables, headers/footers, OCR), DOCX, TXT, MD + 130+ formats via LlamaParse
|
|
839
|
+
- **Image description** - Extract images from documents, describe via LLM vision API (opt-in)
|
|
840
|
+
- **Chunking** - RecursiveCharacterTextSplitter with configurable size/overlap
|
|
841
|
+
- **Reranking** - Cohere API or local CrossEncoder for improved search quality
|
|
842
|
+
- **Agent integration** - All 6 AI frameworks get a `search_knowledge_base` tool automatically
|
|
843
|
+
|
|
844
|
+
---
|
|
845
|
+
|
|
846
|
+
## 📊 Observability
|
|
847
|
+
|
|
848
|
+
### Logfire (for PydanticAI)
|
|
849
|
+
|
|
850
|
+
[Logfire](https://logfire.pydantic.dev) provides complete observability for your application - from AI agents to database queries. Built by the Pydantic team, it offers first-class support for the entire Python ecosystem.
|
|
851
|
+
|
|
852
|
+
```mermaid
|
|
853
|
+
graph LR
|
|
854
|
+
subgraph Your App
|
|
855
|
+
API[FastAPI]
|
|
856
|
+
Agent[PydanticAI]
|
|
857
|
+
DB[(Database)]
|
|
858
|
+
Cache[(Redis)]
|
|
859
|
+
Queue[Celery/Taskiq]
|
|
860
|
+
HTTP[HTTPX]
|
|
861
|
+
end
|
|
862
|
+
|
|
863
|
+
subgraph Logfire
|
|
864
|
+
Traces[Traces]
|
|
865
|
+
Metrics[Metrics]
|
|
866
|
+
Logs[Logs]
|
|
867
|
+
end
|
|
868
|
+
|
|
869
|
+
API --> Traces
|
|
870
|
+
Agent --> Traces
|
|
871
|
+
DB --> Traces
|
|
872
|
+
Cache --> Traces
|
|
873
|
+
Queue --> Traces
|
|
874
|
+
HTTP --> Traces
|
|
875
|
+
```
|
|
876
|
+
|
|
877
|
+
| Component | What You See |
|
|
878
|
+
|-----------|-------------|
|
|
879
|
+
| **PydanticAI** | Agent runs, tool calls, LLM requests, token usage, streaming events |
|
|
880
|
+
| **FastAPI** | Request/response traces, latency, status codes, route performance |
|
|
881
|
+
| **PostgreSQL/MongoDB** | Query execution time, slow queries, connection pool stats |
|
|
882
|
+
| **Redis** | Cache hits/misses, command latency, key patterns |
|
|
883
|
+
| **Celery/Taskiq** | Task execution, queue depth, worker performance |
|
|
884
|
+
| **HTTPX** | External API calls, response times, error rates |
|
|
885
|
+
|
|
886
|
+
### LangSmith (for LangChain)
|
|
887
|
+
|
|
888
|
+
[LangSmith](https://smith.langchain.com) provides observability specifically designed for LangChain applications:
|
|
889
|
+
|
|
890
|
+
| Feature | Description |
|
|
891
|
+
|---------|-------------|
|
|
892
|
+
| **Traces** | Full execution traces for agent runs and chains |
|
|
893
|
+
| **Feedback** | Collect user feedback on agent responses |
|
|
894
|
+
| **Datasets** | Build evaluation datasets from production data |
|
|
895
|
+
| **Monitoring** | Track latency, errors, and token usage |
|
|
896
|
+
|
|
897
|
+
LangSmith is automatically configured when you choose LangChain:
|
|
898
|
+
|
|
899
|
+
```bash
|
|
900
|
+
# .env
|
|
901
|
+
LANGCHAIN_TRACING_V2=true
|
|
902
|
+
LANGCHAIN_API_KEY=your-api-key
|
|
903
|
+
LANGCHAIN_PROJECT=my_project
|
|
904
|
+
```
|
|
905
|
+
|
|
906
|
+
### Configuration
|
|
907
|
+
|
|
908
|
+
Enable Logfire and select which components to instrument:
|
|
909
|
+
|
|
910
|
+
```bash
|
|
911
|
+
fastapi-fullstack new
|
|
912
|
+
# ✓ Enable Logfire observability
|
|
913
|
+
# ✓ Instrument FastAPI
|
|
914
|
+
# ✓ Instrument Database
|
|
915
|
+
# ✓ Instrument Redis
|
|
916
|
+
# ✓ Instrument Celery
|
|
917
|
+
# ✓ Instrument HTTPX
|
|
918
|
+
```
|
|
919
|
+
|
|
920
|
+
### Usage
|
|
921
|
+
|
|
922
|
+
```python
|
|
923
|
+
# Automatic instrumentation in app/main.py
|
|
924
|
+
import logfire
|
|
925
|
+
|
|
926
|
+
logfire.configure()
|
|
927
|
+
logfire.instrument_fastapi(app)
|
|
928
|
+
logfire.instrument_asyncpg()
|
|
929
|
+
logfire.instrument_redis()
|
|
930
|
+
logfire.instrument_httpx()
|
|
931
|
+
```
|
|
932
|
+
|
|
933
|
+
```python
|
|
934
|
+
# Manual spans for custom logic
|
|
935
|
+
with logfire.span("process_order", order_id=order.id):
|
|
936
|
+
await validate_order(order)
|
|
937
|
+
await charge_payment(order)
|
|
938
|
+
await send_confirmation(order)
|
|
939
|
+
```
|
|
940
|
+
|
|
941
|
+
For more details, see [Logfire Documentation](https://logfire.pydantic.dev/docs/integrations/).
|
|
942
|
+
|
|
943
|
+
---
|
|
944
|
+
|
|
945
|
+
## 🛠️ Django-style CLI
|
|
946
|
+
|
|
947
|
+
Each generated project includes a powerful CLI inspired by Django's management commands:
|
|
948
|
+
|
|
949
|
+
### Built-in Commands
|
|
950
|
+
|
|
951
|
+
```bash
|
|
952
|
+
# Server
|
|
953
|
+
my_app server run --reload
|
|
954
|
+
my_app server routes
|
|
955
|
+
|
|
956
|
+
# Database (Alembic wrapper)
|
|
957
|
+
my_app db init
|
|
958
|
+
my_app db migrate -m "Add users"
|
|
959
|
+
my_app db upgrade
|
|
960
|
+
|
|
961
|
+
# Users
|
|
962
|
+
my_app user create --email admin@example.com --superuser
|
|
963
|
+
my_app user list
|
|
964
|
+
```
|
|
965
|
+
|
|
966
|
+
### Custom Commands
|
|
967
|
+
|
|
968
|
+
Create your own commands with auto-discovery:
|
|
969
|
+
|
|
970
|
+
```python
|
|
971
|
+
# app/commands/seed.py
|
|
972
|
+
from app.commands import command, success, error
|
|
973
|
+
import click
|
|
974
|
+
|
|
975
|
+
@command("seed", help="Seed database with test data")
|
|
976
|
+
@click.option("--count", "-c", default=10, type=int)
|
|
977
|
+
@click.option("--dry-run", is_flag=True)
|
|
978
|
+
def seed_database(count: int, dry_run: bool):
|
|
979
|
+
"""Seed the database with sample data."""
|
|
980
|
+
if dry_run:
|
|
981
|
+
info(f"[DRY RUN] Would create {count} records")
|
|
982
|
+
return
|
|
983
|
+
|
|
984
|
+
# Your logic here
|
|
985
|
+
success(f"Created {count} records!")
|
|
986
|
+
```
|
|
987
|
+
|
|
988
|
+
Commands are **automatically discovered** from `app/commands/` - just create a file and use the `@command` decorator.
|
|
989
|
+
|
|
990
|
+
```bash
|
|
991
|
+
my_app cmd seed --count 100
|
|
992
|
+
my_app cmd seed --dry-run
|
|
993
|
+
```
|
|
994
|
+
|
|
995
|
+
---
|
|
996
|
+
|
|
997
|
+
## 📁 Generated Project Structure
|
|
998
|
+
|
|
999
|
+
```
|
|
1000
|
+
my_project/
|
|
1001
|
+
├── backend/
|
|
1002
|
+
│ ├── app/
|
|
1003
|
+
│ │ ├── main.py # FastAPI app with lifespan
|
|
1004
|
+
│ │ ├── api/
|
|
1005
|
+
│ │ │ ├── routes/v1/ # Versioned API endpoints
|
|
1006
|
+
│ │ │ ├── deps.py # Dependency injection
|
|
1007
|
+
│ │ │ └── router.py # Route aggregation
|
|
1008
|
+
│ │ ├── core/ # Config, security, middleware
|
|
1009
|
+
│ │ ├── db/models/ # SQLAlchemy/MongoDB models
|
|
1010
|
+
│ │ ├── schemas/ # Pydantic schemas
|
|
1011
|
+
│ │ ├── repositories/ # Data access layer
|
|
1012
|
+
│ │ ├── services/ # Business logic
|
|
1013
|
+
│ │ ├── agents/ # AI agents with centralized prompts
|
|
1014
|
+
│ │ ├── rag/ # RAG module (vector store, embeddings, ingestion)
|
|
1015
|
+
│ │ ├── commands/ # Django-style CLI commands
|
|
1016
|
+
│ │ └── worker/ # Background tasks
|
|
1017
|
+
│ ├── cli/ # Project CLI
|
|
1018
|
+
│ ├── tests/ # pytest test suite
|
|
1019
|
+
│ └── alembic/ # Database migrations
|
|
1020
|
+
├── frontend/
|
|
1021
|
+
│ ├── src/
|
|
1022
|
+
│ │ ├── app/ # Next.js App Router
|
|
1023
|
+
│ │ ├── components/ # React components
|
|
1024
|
+
│ │ ├── hooks/ # useChat, useWebSocket, etc.
|
|
1025
|
+
│ │ └── stores/ # Zustand state management
|
|
1026
|
+
│ └── e2e/ # Playwright tests
|
|
1027
|
+
├── docker-compose.yml
|
|
1028
|
+
├── Makefile
|
|
1029
|
+
└── README.md
|
|
1030
|
+
```
|
|
1031
|
+
|
|
1032
|
+
Generated projects include version metadata in `pyproject.toml` for tracking:
|
|
1033
|
+
|
|
1034
|
+
```toml
|
|
1035
|
+
[tool.fastapi-fullstack]
|
|
1036
|
+
generator_version = "0.1.5"
|
|
1037
|
+
generated_at = "2024-12-21T10:30:00+00:00"
|
|
1038
|
+
```
|
|
1039
|
+
|
|
1040
|
+
---
|
|
1041
|
+
|
|
1042
|
+
## ⚙️ Configuration Options
|
|
1043
|
+
|
|
1044
|
+
### Core Options
|
|
1045
|
+
|
|
1046
|
+
| Option | Values | Description |
|
|
1047
|
+
|--------|--------|-------------|
|
|
1048
|
+
| **Database** | `postgresql`, `mongodb`, `sqlite`, `none` | Async by default |
|
|
1049
|
+
| **ORM** | `sqlalchemy`, `sqlmodel` | SQLModel for simplified syntax |
|
|
1050
|
+
| **Auth** | `jwt`, `api_key`, `both`, `none` | JWT includes user management |
|
|
1051
|
+
| **OAuth** | `none`, `google` | Social login |
|
|
1052
|
+
| **AI Framework** | `pydantic_ai`, `langchain`, `langgraph`, `crewai`, `deepagents` | Choose your AI agent framework |
|
|
1053
|
+
| **LLM Provider** | `openai`, `anthropic`, `google`, `openrouter` | OpenRouter only with PydanticAI |
|
|
1054
|
+
| **RAG** | `--rag` | Enable RAG with vector database |
|
|
1055
|
+
| **Vector Store** | `milvus`, `qdrant`, `chromadb`, `pgvector` | pgvector uses existing PostgreSQL |
|
|
1056
|
+
| **Background Tasks** | `none`, `celery`, `taskiq`, `arq` | Distributed queues |
|
|
1057
|
+
| **Frontend** | `none`, `nextjs` | Next.js 15 + React 19 |
|
|
1058
|
+
|
|
1059
|
+
### Presets
|
|
1060
|
+
|
|
1061
|
+
| Preset | Description |
|
|
1062
|
+
|--------|-------------|
|
|
1063
|
+
| `--preset production` | Full production setup with Redis, Sentry, Kubernetes, Prometheus |
|
|
1064
|
+
| `--preset ai-agent` | AI agent with WebSocket streaming and conversation persistence |
|
|
1065
|
+
| `--minimal` | Minimal project with no extras |
|
|
1066
|
+
|
|
1067
|
+
### Integrations
|
|
1068
|
+
|
|
1069
|
+
Select what you need:
|
|
1070
|
+
|
|
1071
|
+
```bash
|
|
1072
|
+
fastapi-fullstack new
|
|
1073
|
+
# ✓ Redis (caching/sessions)
|
|
1074
|
+
# ✓ Rate limiting (slowapi)
|
|
1075
|
+
# ✓ Pagination (fastapi-pagination)
|
|
1076
|
+
# ✓ Admin Panel (SQLAdmin)
|
|
1077
|
+
# ✓ AI Agent (PydanticAI or LangChain)
|
|
1078
|
+
# ✓ Webhooks
|
|
1079
|
+
# ✓ Sentry
|
|
1080
|
+
# ✓ Logfire / LangSmith
|
|
1081
|
+
# ✓ Prometheus
|
|
1082
|
+
# ... and more
|
|
1083
|
+
```
|
|
1084
|
+
|
|
1085
|
+
---
|
|
1086
|
+
|
|
1087
|
+
## 🔄 Comparison
|
|
1088
|
+
|
|
1089
|
+
### vs. Manual Setup
|
|
1090
|
+
|
|
1091
|
+
Setting up a production AI agent stack manually means wiring together 10+ tools yourself:
|
|
1092
|
+
|
|
1093
|
+
```bash
|
|
1094
|
+
# Without this template, you'd need to manually:
|
|
1095
|
+
# 1. Set up FastAPI project structure
|
|
1096
|
+
# 2. Configure SQLAlchemy + Alembic migrations
|
|
1097
|
+
# 3. Implement JWT auth with refresh tokens
|
|
1098
|
+
# 4. Build WebSocket streaming for AI responses
|
|
1099
|
+
# 5. Integrate PydanticAI/LangChain with tool calling
|
|
1100
|
+
# 6. Set up RAG pipeline (parsing, chunking, embedding, vector store)
|
|
1101
|
+
# 7. Configure Celery + Redis for background tasks
|
|
1102
|
+
# 8. Build Next.js frontend with auth and chat UI
|
|
1103
|
+
# 9. Write Docker Compose for all services
|
|
1104
|
+
# 10. Add observability, rate limiting, admin panel...
|
|
1105
|
+
|
|
1106
|
+
# With this template:
|
|
1107
|
+
pip install fastapi-fullstack
|
|
1108
|
+
fastapi-fullstack
|
|
1109
|
+
# Done. All of the above, configured and working.
|
|
1110
|
+
```
|
|
1111
|
+
|
|
1112
|
+
### vs. Alternatives
|
|
1113
|
+
|
|
1114
|
+
| Feature | **This Template** | [full-stack-fastapi-template](https://github.com/fastapi/full-stack-fastapi-template) | [create-t3-app](https://github.com/t3-oss/create-t3-app) |
|
|
1115
|
+
|---------|:-:|:-:|:-:|
|
|
1116
|
+
| **AI Agents** (5 frameworks) | ✅ | ❌ | ❌ |
|
|
1117
|
+
| **RAG Pipeline** (4 vector stores) | ✅ | ❌ | ❌ |
|
|
1118
|
+
| **WebSocket Streaming** | ✅ | ❌ | ❌ |
|
|
1119
|
+
| **Conversation Persistence** | ✅ | ❌ | ❌ |
|
|
1120
|
+
| **LLM Observability** (Logfire/LangSmith) | ✅ | ❌ | ❌ |
|
|
1121
|
+
| **FastAPI Backend** | ✅ | ✅ | ❌ |
|
|
1122
|
+
| **Next.js Frontend** | ✅ (v15) | ❌ | ✅ |
|
|
1123
|
+
| **JWT + OAuth Authentication** | ✅ | ✅ | ✅ (NextAuth) |
|
|
1124
|
+
| **Background Tasks** (Celery/Taskiq/ARQ) | ✅ | ✅ (Celery) | ❌ |
|
|
1125
|
+
| **Admin Panel** | ✅ (SQLAdmin) | ❌ | ❌ |
|
|
1126
|
+
| **Multiple Databases** (PG/Mongo/SQLite) | ✅ | PostgreSQL only | Prisma |
|
|
1127
|
+
| **Docker + K8s** | ✅ | ✅ | ❌ |
|
|
1128
|
+
| **Interactive CLI Wizard** | ✅ | ❌ | ✅ |
|
|
1129
|
+
| **Django-style Commands** | ✅ | ❌ | ❌ |
|
|
1130
|
+
| **Document Sources** (GDrive, S3, API) | ✅ | ❌ | ❌ |
|
|
1131
|
+
| **AI-Agent Friendly** (CLAUDE.md) | ✅ | ❌ | ❌ |
|
|
1132
|
+
|
|
1133
|
+
---
|
|
1134
|
+
|
|
1135
|
+
## ❓ FAQ
|
|
1136
|
+
|
|
1137
|
+
<details>
|
|
1138
|
+
<summary><b>How is this different from full-stack-fastapi-template?</b></summary>
|
|
1139
|
+
|
|
1140
|
+
[full-stack-fastapi-template](https://github.com/fastapi/full-stack-fastapi-template) by @tiangolo is a great starting point for FastAPI projects, but it focuses on traditional web apps. This template is purpose-built for **AI/LLM applications** — it adds AI agents (5 frameworks), RAG with 4 vector stores, WebSocket streaming, conversation persistence, LLM observability, and a Next.js chat UI out of the box.
|
|
1141
|
+
|
|
1142
|
+
</details>
|
|
1143
|
+
|
|
1144
|
+
<details>
|
|
1145
|
+
<summary><b>Can I use this without AI/LLM features?</b></summary>
|
|
1146
|
+
|
|
1147
|
+
Yes. The AI agent and RAG modules are optional. You can use this as a pure FastAPI + Next.js template with auth, admin panel, background tasks, and all other infrastructure — just skip the AI framework selection during setup.
|
|
1148
|
+
|
|
1149
|
+
</details>
|
|
1150
|
+
|
|
1151
|
+
<details>
|
|
1152
|
+
<summary><b>What Python and Node.js versions are required?</b></summary>
|
|
1153
|
+
|
|
1154
|
+
Python 3.11+ and Node.js 18+ (for the Next.js frontend). We recommend using [uv](https://docs.astral.sh/uv/) for Python and [bun](https://bun.sh) for the frontend.
|
|
1155
|
+
|
|
1156
|
+
</details>
|
|
1157
|
+
|
|
1158
|
+
<details>
|
|
1159
|
+
<summary><b>Can I add integrations after project generation?</b></summary>
|
|
1160
|
+
|
|
1161
|
+
The generated project is plain code — no lock-in or runtime dependency on the generator. You can add, remove, or modify any integration manually. The template just gives you a well-structured starting point.
|
|
1162
|
+
|
|
1163
|
+
</details>
|
|
1164
|
+
|
|
1165
|
+
<details>
|
|
1166
|
+
<summary><b>Can I use a different LLM provider than the one I selected?</b></summary>
|
|
1167
|
+
|
|
1168
|
+
Yes. The LLM provider is configured via environment variables (`AI_MODEL`, `OPENAI_API_KEY`, etc.). You can switch providers by changing the `.env` file and the model name — no code changes needed for PydanticAI (which supports all providers natively).
|
|
1169
|
+
|
|
1170
|
+
</details>
|
|
1171
|
+
|
|
1172
|
+
---
|
|
1173
|
+
|
|
1174
|
+
## 📚 Documentation
|
|
1175
|
+
|
|
1176
|
+
| Document | Description |
|
|
1177
|
+
|----------|-------------|
|
|
1178
|
+
| [Architecture](https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/docs/architecture.md) | Repository + Service pattern, layered design |
|
|
1179
|
+
| [Frontend](https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/docs/frontend.md) | Next.js setup, auth, state management |
|
|
1180
|
+
| [AI Agent](https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/docs/ai-agent.md) | PydanticAI, tools, WebSocket streaming |
|
|
1181
|
+
| [Observability](https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/docs/observability.md) | Logfire integration, tracing, metrics |
|
|
1182
|
+
| [Deployment](https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/docs/deployment.md) | Docker, Kubernetes, production setup |
|
|
1183
|
+
| [Development](https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/docs/development.md) | Local setup, testing, debugging |
|
|
1184
|
+
| [Changelog](https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/docs/CHANGELOG.md) | Version history and release notes |
|
|
1185
|
+
|
|
1186
|
+
---
|
|
1187
|
+
|
|
1188
|
+
## Star History
|
|
1189
|
+
|
|
1190
|
+
[](https://www.star-history.com/#vstorm-co/full-stack-fastapi-nextjs-llm-template&type=date&legend=top-left)
|
|
1191
|
+
|
|
1192
|
+
---
|
|
1193
|
+
|
|
1194
|
+
## 🙏 Inspiration
|
|
1195
|
+
|
|
1196
|
+
This project is inspired by:
|
|
1197
|
+
|
|
1198
|
+
- [full-stack-fastapi-template](https://github.com/fastapi/full-stack-fastapi-template) by @tiangolo
|
|
1199
|
+
- [fastapi-template](https://github.com/s3rius/fastapi-template) by @s3rius
|
|
1200
|
+
- [FastAPI Best Practices](https://github.com/zhanymkanov/fastapi-best-practices) by @zhanymkanov
|
|
1201
|
+
- Django's management commands system
|
|
1202
|
+
|
|
1203
|
+
---
|
|
1204
|
+
|
|
1205
|
+
## 🤝 Contributing
|
|
1206
|
+
|
|
1207
|
+
Contributions are welcome! Please read our [Contributing Guide](https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/CONTRIBUTING.md) for details.
|
|
1208
|
+
|
|
1209
|
+
<a href="https://github.com/vstorm-co/full-stack-ai-agent-template/graphs/contributors">
|
|
1210
|
+
<img src="https://contrib.rocks/image?repo=vstorm-co/full-stack-ai-agent-template" alt="Contributors" />
|
|
1211
|
+
</a>
|
|
1212
|
+
|
|
1213
|
+
---
|
|
1214
|
+
|
|
1215
|
+
## 📄 License
|
|
1216
|
+
|
|
1217
|
+
MIT License - see [LICENSE](https://github.com/vstorm-co/full-stack-ai-agent-template/blob/main/LICENSE) for details.
|
|
1218
|
+
|
|
1219
|
+
---
|
|
1220
|
+
|
|
1221
|
+
<div align="center">
|
|
1222
|
+
|
|
1223
|
+
### Need help implementing this in your company?
|
|
1224
|
+
|
|
1225
|
+
<p>We're <a href="https://vstorm.co"><b>Vstorm</b></a> — an Applied Agentic AI Engineering Consultancy<br>with 30+ production AI agent implementations.</p>
|
|
1226
|
+
|
|
1227
|
+
<a href="https://vstorm.co/contact-us/">
|
|
1228
|
+
<img src="https://img.shields.io/badge/Talk%20to%20us%20%E2%86%92-0066FF?style=for-the-badge&logoColor=white" alt="Talk to us">
|
|
1229
|
+
</a>
|
|
1230
|
+
|
|
1231
|
+
<br><br>
|
|
1232
|
+
|
|
1233
|
+
Made with ❤️ by <a href="https://vstorm.co"><b>Vstorm</b></a>
|
|
1234
|
+
|
|
1235
|
+
</div>
|