fastapi-fullstack 0.1.1__tar.gz → 0.1.3__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.1.1 → fastapi_fullstack-0.1.3}/PKG-INFO +52 -26
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/README.md +48 -22
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/pyproject.toml +5 -5
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/hooks/post_gen_project.py +8 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/Makefile +6 -1
- fastapi_fullstack-0.1.3/template/{{cookiecutter.project_slug}}/backend/app/admin.py +356 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/agent.py +77 -61
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_exceptions.py +3 -3
- fastapi_fullstack-0.1.1/template/{{cookiecutter.project_slug}}/backend/app/admin.py +0 -115
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/.gitignore +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/LICENSE +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/fastapi_gen/__init__.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/fastapi_gen/cli.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/fastapi_gen/config.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/fastapi_gen/generator.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/fastapi_gen/prompts.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/cookiecutter.json +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/.env.example +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/.github/workflows/ci.yml +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/.gitignore +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/CLAUDE.md +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/README.md +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/.dockerignore +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/.pre-commit-config.yaml +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/Dockerfile +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/alembic/env.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/alembic/script.py.mako +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/.gitkeep +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/alembic.ini +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/__init__.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/agents/__init__.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/agents/assistant.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/__init__.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/datetime_tool.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/api/__init__.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/api/deps.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/api/exception_handlers.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/api/router.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/__init__.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/__init__.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/auth.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/conversations.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/health.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/items.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/oauth.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/sessions.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/users.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/webhooks.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/ws.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/api/versioning.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/clients/__init__.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/clients/redis.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/commands/__init__.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/commands/cleanup.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/commands/example.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/commands/seed.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/core/__init__.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/core/cache.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/core/config.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/core/csrf.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/core/exceptions.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/core/logfire_setup.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/core/middleware.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/core/oauth.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/core/rate_limit.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/core/sanitize.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/core/security.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/db/__init__.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/db/base.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/db/models/__init__.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/db/models/conversation.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/db/models/item.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/db/models/session.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/db/models/user.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/db/models/webhook.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/db/session.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/main.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/pipelines/__init__.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/pipelines/base.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/repositories/__init__.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/repositories/base.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/repositories/conversation.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/repositories/item.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/repositories/session.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/repositories/user.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/repositories/webhook.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/schemas/__init__.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/schemas/base.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/schemas/conversation.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/schemas/item.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/schemas/session.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/schemas/token.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/schemas/user.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/schemas/webhook.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/services/__init__.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/services/conversation.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/services/item.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/services/session.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/services/user.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/services/webhook.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/worker/__init__.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/worker/celery_app.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/worker/taskiq_app.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/__init__.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/examples.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/schedules.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/taskiq_examples.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/cli/__init__.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/cli/commands.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/pyproject.toml +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/scripts/.gitkeep +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/tests/__init__.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/tests/api/__init__.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_auth.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_health.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_items.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_users.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/tests/conftest.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/tests/test_agents.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/tests/test_clients.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/tests/test_commands.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/tests/test_core.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/tests/test_pipelines.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/tests/test_repositories.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/tests/test_security.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/tests/test_services.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/backend/tests/test_worker.py +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/docker-compose.dev.yml +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/docker-compose.frontend.yml +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/docker-compose.prod.yml +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/docker-compose.yml +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/.env.example +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/.gitignore +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/.prettierignore +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/.prettierrc +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/Dockerfile +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/README.md +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/e2e/auth.setup.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/e2e/auth.spec.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/e2e/chat.spec.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/e2e/home.spec.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/instrumentation.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/messages/en.json +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/messages/pl.json +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/next.config.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/package.json +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/playwright.config.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/postcss.config.mjs +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/app/(auth)/layout.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/app/(auth)/login/page.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/app/(auth)/register/page.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/app/(dashboard)/chat/page.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/app/(dashboard)/dashboard/page.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/app/(dashboard)/layout.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/app/(dashboard)/profile/page.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/login/route.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/logout/route.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/me/route.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/oauth-callback/route.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/refresh/route.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/register/route.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/messages/route.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/route.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/route.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/health/route.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/app/auth/callback/page.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/app/globals.css +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/app/layout.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/app/page.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/app/providers.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/index.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/login-form.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/register-form.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-container.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-input.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/conversation-sidebar.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/index.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-item.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-list.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-call-card.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/google-icon.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/index.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/language-switcher.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/header.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/index.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/sidebar.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/index.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-provider.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-toggle.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/badge.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.test.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/card.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/index.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/input.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/label.tsx +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/index.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-auth.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-chat.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversations.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-websocket.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/i18n.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/lib/api-client.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/lib/constants.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/lib/server-api.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.test.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/middleware.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.test.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-store.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/stores/conversation-store.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/stores/index.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/stores/theme-store.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/types/api.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/types/auth.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/types/chat.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/types/conversation.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/src/types/index.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/tsconfig.json +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/vitest.config.ts +0 -0
- {fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/frontend/vitest.setup.ts +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fastapi-fullstack
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.3
|
|
4
4
|
Summary: Interactive FastAPI project generator with Logfire observability
|
|
5
|
-
Project-URL: Homepage, https://github.com/
|
|
6
|
-
Project-URL: Documentation, https://github.com/
|
|
7
|
-
Project-URL: Repository, https://github.com/
|
|
5
|
+
Project-URL: Homepage, https://github.com/vstorm-co/full-stack-fastapi-nextjs-llm-template
|
|
6
|
+
Project-URL: Documentation, https://github.com/vstorm-co/full-stack-fastapi-nextjs-llm-template#readme
|
|
7
|
+
Project-URL: Repository, https://github.com/vstorm-co/full-stack-fastapi-nextjs-llm-template
|
|
8
8
|
Author-email: Your Name <your@email.com>
|
|
9
9
|
License: MIT
|
|
10
10
|
License-File: LICENSE
|
|
@@ -39,7 +39,7 @@ Description-Content-Type: text/markdown
|
|
|
39
39
|
<a href="https://github.com/vstorm-co/full-stack-fastapi-nextjs-llm-template/stargazers"><img src="https://img.shields.io/github/stars/vstorm-co/full-stack-fastapi-nextjs-llm-template?style=flat&logo=github&color=yellow" alt="GitHub Stars"></a>
|
|
40
40
|
<a href="https://github.com/vstorm-co/full-stack-fastapi-nextjs-llm-template/blob/main/LICENSE"><img src="https://img.shields.io/github/license/vstorm-co/full-stack-fastapi-nextjs-llm-template?color=blue" alt="License"></a>
|
|
41
41
|
<a href="https://www.python.org/"><img src="https://img.shields.io/badge/python-3.11%20%7C%203.12%20%7C%203.13-blue?logo=python&logoColor=white" alt="Python"></a>
|
|
42
|
-
<a href="https://pypi.org/project/fastapi-
|
|
42
|
+
<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>
|
|
43
43
|
<img src="https://img.shields.io/badge/integrations-20%2B-brightgreen" alt="20+ Integrations">
|
|
44
44
|
</p>
|
|
45
45
|
|
|
@@ -51,6 +51,7 @@ Description-Content-Type: text/markdown
|
|
|
51
51
|
<p align="center">
|
|
52
52
|
<a href="#-why-this-template">Why This Template</a> •
|
|
53
53
|
<a href="#-features">Features</a> •
|
|
54
|
+
<a href="#-demo">Demo</a> •
|
|
54
55
|
<a href="#-quick-start">Quick Start</a> •
|
|
55
56
|
<a href="#-architecture">Architecture</a> •
|
|
56
57
|
<a href="#-ai-agent">AI Agent</a> •
|
|
@@ -58,20 +59,6 @@ Description-Content-Type: text/markdown
|
|
|
58
59
|
<a href="#-documentation">Documentation</a>
|
|
59
60
|
</p>
|
|
60
61
|
|
|
61
|
-
---
|
|
62
|
-
|
|
63
|
-
## Star History
|
|
64
|
-
|
|
65
|
-
<a href="https://www.star-history.com/#vstorm-co/full-stack-fastapi-nextjs-llm-template&type=Date&legend=top-left">
|
|
66
|
-
<picture>
|
|
67
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=vstorm-co/full-stack-fastapi-nextjs-llm-template&type=Date&theme=dark" />
|
|
68
|
-
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=vstorm-co/full-stack-fastapi-nextjs-llm-template&type=Date" />
|
|
69
|
-
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=vstorm-co/full-stack-fastapi-nextjs-llm-template&type=Date" />
|
|
70
|
-
</picture>
|
|
71
|
-
</a>
|
|
72
|
-
|
|
73
|
-
---
|
|
74
|
-
|
|
75
62
|
## 🎯 Why This Template
|
|
76
63
|
|
|
77
64
|
Building AI/LLM applications requires more than just an API wrapper. You need:
|
|
@@ -131,6 +118,25 @@ This template gives you all of that out of the box, with **20+ configurable inte
|
|
|
131
118
|
|
|
132
119
|
---
|
|
133
120
|
|
|
121
|
+
## 🎬 Demo
|
|
122
|
+
|
|
123
|
+
<p align="center">
|
|
124
|
+
<img src="assets/app_start.gif" alt="FastAPI Fullstack Generator Demo" width="800">
|
|
125
|
+
</p>
|
|
126
|
+
|
|
127
|
+
### Screenshots
|
|
128
|
+
|
|
129
|
+
<p align="center">
|
|
130
|
+
<img src="assets/docs_2.png" alt="API Documentation" width="700"><br><br>
|
|
131
|
+
<img src="assets/admin.png" alt="Admin Panel" width="700"><br><br>
|
|
132
|
+
<img src="assets/chat_view_light.png" alt="Chat Interface - Light Mode" width="700"><br><br>
|
|
133
|
+
<img src="assets/chat_view_dark.png" alt="Chat Interface - Dark Mode" width="700"><br><br>
|
|
134
|
+
<img src="assets/login.png" alt="Login Page" width="700"><br><br>
|
|
135
|
+
<img src="assets/register.png" alt="Register Page" width="700">
|
|
136
|
+
</p>
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
134
140
|
## 🏗️ Architecture
|
|
135
141
|
|
|
136
142
|
```mermaid
|
|
@@ -201,23 +207,23 @@ See [Architecture Documentation](./docs/architecture.md) for details.
|
|
|
201
207
|
|
|
202
208
|
```bash
|
|
203
209
|
# pip
|
|
204
|
-
pip install fastapi-
|
|
210
|
+
pip install fastapi-fullstack
|
|
205
211
|
|
|
206
212
|
# uv (recommended)
|
|
207
|
-
uv tool install fastapi-
|
|
213
|
+
uv tool install fastapi-fullstack
|
|
208
214
|
|
|
209
215
|
# pipx
|
|
210
|
-
pipx install fastapi-
|
|
216
|
+
pipx install fastapi-fullstack
|
|
211
217
|
```
|
|
212
218
|
|
|
213
219
|
### Create Your Project
|
|
214
220
|
|
|
215
221
|
```bash
|
|
216
222
|
# Interactive wizard (recommended)
|
|
217
|
-
fastapi-
|
|
223
|
+
fastapi-fullstack new
|
|
218
224
|
|
|
219
225
|
# Quick mode with options
|
|
220
|
-
fastapi-
|
|
226
|
+
fastapi-fullstack create my_ai_app \
|
|
221
227
|
--database postgresql \
|
|
222
228
|
--auth jwt \
|
|
223
229
|
--frontend nextjs
|
|
@@ -233,6 +239,11 @@ cd backend
|
|
|
233
239
|
uv sync
|
|
234
240
|
cp .env.example .env
|
|
235
241
|
alembic upgrade head
|
|
242
|
+
|
|
243
|
+
# Create admin user
|
|
244
|
+
uv run my_ai_app user create --email admin@example.com --password secret123 --superuser
|
|
245
|
+
|
|
246
|
+
# Start server
|
|
236
247
|
uv run uvicorn app.main:app --reload
|
|
237
248
|
|
|
238
249
|
# Frontend (new terminal)
|
|
@@ -241,9 +252,12 @@ bun install
|
|
|
241
252
|
bun dev
|
|
242
253
|
```
|
|
243
254
|
|
|
255
|
+
> **Note:** The admin user is required to access the SQLAdmin panel at `/admin`. Use the `--superuser` flag to grant full admin privileges.
|
|
256
|
+
|
|
244
257
|
**Access:**
|
|
245
258
|
- API: http://localhost:8000
|
|
246
259
|
- Docs: http://localhost:8000/docs
|
|
260
|
+
- Admin Panel: http://localhost:8000/admin
|
|
247
261
|
- Frontend: http://localhost:3000
|
|
248
262
|
|
|
249
263
|
---
|
|
@@ -352,7 +366,7 @@ graph LR
|
|
|
352
366
|
Enable Logfire and select which components to instrument:
|
|
353
367
|
|
|
354
368
|
```bash
|
|
355
|
-
fastapi-
|
|
369
|
+
fastapi-fullstack new
|
|
356
370
|
# ✓ Enable Logfire observability
|
|
357
371
|
# ✓ Instrument FastAPI
|
|
358
372
|
# ✓ Instrument Database
|
|
@@ -491,7 +505,7 @@ my_project/
|
|
|
491
505
|
Select what you need:
|
|
492
506
|
|
|
493
507
|
```bash
|
|
494
|
-
fastapi-
|
|
508
|
+
fastapi-fullstack new
|
|
495
509
|
# ✓ Redis (caching/sessions)
|
|
496
510
|
# ✓ Rate limiting (slowapi)
|
|
497
511
|
# ✓ Pagination (fastapi-pagination)
|
|
@@ -519,6 +533,18 @@ fastapi-gen new
|
|
|
519
533
|
|
|
520
534
|
---
|
|
521
535
|
|
|
536
|
+
## Star History
|
|
537
|
+
|
|
538
|
+
<a href="https://www.star-history.com/#vstorm-co/full-stack-fastapi-nextjs-llm-template&type=Date&legend=top-left">
|
|
539
|
+
<picture>
|
|
540
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=vstorm-co/full-stack-fastapi-nextjs-llm-template&type=Date&theme=dark" />
|
|
541
|
+
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=vstorm-co/full-stack-fastapi-nextjs-llm-template&type=Date" />
|
|
542
|
+
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=vstorm-co/full-stack-fastapi-nextjs-llm-template&type=Date" />
|
|
543
|
+
</picture>
|
|
544
|
+
</a>
|
|
545
|
+
|
|
546
|
+
---
|
|
547
|
+
|
|
522
548
|
## 🙏 Inspiration
|
|
523
549
|
|
|
524
550
|
This project is inspired by:
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<a href="https://github.com/vstorm-co/full-stack-fastapi-nextjs-llm-template/stargazers"><img src="https://img.shields.io/github/stars/vstorm-co/full-stack-fastapi-nextjs-llm-template?style=flat&logo=github&color=yellow" alt="GitHub Stars"></a>
|
|
5
5
|
<a href="https://github.com/vstorm-co/full-stack-fastapi-nextjs-llm-template/blob/main/LICENSE"><img src="https://img.shields.io/github/license/vstorm-co/full-stack-fastapi-nextjs-llm-template?color=blue" alt="License"></a>
|
|
6
6
|
<a href="https://www.python.org/"><img src="https://img.shields.io/badge/python-3.11%20%7C%203.12%20%7C%203.13-blue?logo=python&logoColor=white" alt="Python"></a>
|
|
7
|
-
<a href="https://pypi.org/project/fastapi-
|
|
7
|
+
<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>
|
|
8
8
|
<img src="https://img.shields.io/badge/integrations-20%2B-brightgreen" alt="20+ Integrations">
|
|
9
9
|
</p>
|
|
10
10
|
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
<p align="center">
|
|
17
17
|
<a href="#-why-this-template">Why This Template</a> •
|
|
18
18
|
<a href="#-features">Features</a> •
|
|
19
|
+
<a href="#-demo">Demo</a> •
|
|
19
20
|
<a href="#-quick-start">Quick Start</a> •
|
|
20
21
|
<a href="#-architecture">Architecture</a> •
|
|
21
22
|
<a href="#-ai-agent">AI Agent</a> •
|
|
@@ -23,20 +24,6 @@
|
|
|
23
24
|
<a href="#-documentation">Documentation</a>
|
|
24
25
|
</p>
|
|
25
26
|
|
|
26
|
-
---
|
|
27
|
-
|
|
28
|
-
## Star History
|
|
29
|
-
|
|
30
|
-
<a href="https://www.star-history.com/#vstorm-co/full-stack-fastapi-nextjs-llm-template&type=Date&legend=top-left">
|
|
31
|
-
<picture>
|
|
32
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=vstorm-co/full-stack-fastapi-nextjs-llm-template&type=Date&theme=dark" />
|
|
33
|
-
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=vstorm-co/full-stack-fastapi-nextjs-llm-template&type=Date" />
|
|
34
|
-
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=vstorm-co/full-stack-fastapi-nextjs-llm-template&type=Date" />
|
|
35
|
-
</picture>
|
|
36
|
-
</a>
|
|
37
|
-
|
|
38
|
-
---
|
|
39
|
-
|
|
40
27
|
## 🎯 Why This Template
|
|
41
28
|
|
|
42
29
|
Building AI/LLM applications requires more than just an API wrapper. You need:
|
|
@@ -96,6 +83,25 @@ This template gives you all of that out of the box, with **20+ configurable inte
|
|
|
96
83
|
|
|
97
84
|
---
|
|
98
85
|
|
|
86
|
+
## 🎬 Demo
|
|
87
|
+
|
|
88
|
+
<p align="center">
|
|
89
|
+
<img src="assets/app_start.gif" alt="FastAPI Fullstack Generator Demo" width="800">
|
|
90
|
+
</p>
|
|
91
|
+
|
|
92
|
+
### Screenshots
|
|
93
|
+
|
|
94
|
+
<p align="center">
|
|
95
|
+
<img src="assets/docs_2.png" alt="API Documentation" width="700"><br><br>
|
|
96
|
+
<img src="assets/admin.png" alt="Admin Panel" width="700"><br><br>
|
|
97
|
+
<img src="assets/chat_view_light.png" alt="Chat Interface - Light Mode" width="700"><br><br>
|
|
98
|
+
<img src="assets/chat_view_dark.png" alt="Chat Interface - Dark Mode" width="700"><br><br>
|
|
99
|
+
<img src="assets/login.png" alt="Login Page" width="700"><br><br>
|
|
100
|
+
<img src="assets/register.png" alt="Register Page" width="700">
|
|
101
|
+
</p>
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
99
105
|
## 🏗️ Architecture
|
|
100
106
|
|
|
101
107
|
```mermaid
|
|
@@ -166,23 +172,23 @@ See [Architecture Documentation](./docs/architecture.md) for details.
|
|
|
166
172
|
|
|
167
173
|
```bash
|
|
168
174
|
# pip
|
|
169
|
-
pip install fastapi-
|
|
175
|
+
pip install fastapi-fullstack
|
|
170
176
|
|
|
171
177
|
# uv (recommended)
|
|
172
|
-
uv tool install fastapi-
|
|
178
|
+
uv tool install fastapi-fullstack
|
|
173
179
|
|
|
174
180
|
# pipx
|
|
175
|
-
pipx install fastapi-
|
|
181
|
+
pipx install fastapi-fullstack
|
|
176
182
|
```
|
|
177
183
|
|
|
178
184
|
### Create Your Project
|
|
179
185
|
|
|
180
186
|
```bash
|
|
181
187
|
# Interactive wizard (recommended)
|
|
182
|
-
fastapi-
|
|
188
|
+
fastapi-fullstack new
|
|
183
189
|
|
|
184
190
|
# Quick mode with options
|
|
185
|
-
fastapi-
|
|
191
|
+
fastapi-fullstack create my_ai_app \
|
|
186
192
|
--database postgresql \
|
|
187
193
|
--auth jwt \
|
|
188
194
|
--frontend nextjs
|
|
@@ -198,6 +204,11 @@ cd backend
|
|
|
198
204
|
uv sync
|
|
199
205
|
cp .env.example .env
|
|
200
206
|
alembic upgrade head
|
|
207
|
+
|
|
208
|
+
# Create admin user
|
|
209
|
+
uv run my_ai_app user create --email admin@example.com --password secret123 --superuser
|
|
210
|
+
|
|
211
|
+
# Start server
|
|
201
212
|
uv run uvicorn app.main:app --reload
|
|
202
213
|
|
|
203
214
|
# Frontend (new terminal)
|
|
@@ -206,9 +217,12 @@ bun install
|
|
|
206
217
|
bun dev
|
|
207
218
|
```
|
|
208
219
|
|
|
220
|
+
> **Note:** The admin user is required to access the SQLAdmin panel at `/admin`. Use the `--superuser` flag to grant full admin privileges.
|
|
221
|
+
|
|
209
222
|
**Access:**
|
|
210
223
|
- API: http://localhost:8000
|
|
211
224
|
- Docs: http://localhost:8000/docs
|
|
225
|
+
- Admin Panel: http://localhost:8000/admin
|
|
212
226
|
- Frontend: http://localhost:3000
|
|
213
227
|
|
|
214
228
|
---
|
|
@@ -317,7 +331,7 @@ graph LR
|
|
|
317
331
|
Enable Logfire and select which components to instrument:
|
|
318
332
|
|
|
319
333
|
```bash
|
|
320
|
-
fastapi-
|
|
334
|
+
fastapi-fullstack new
|
|
321
335
|
# ✓ Enable Logfire observability
|
|
322
336
|
# ✓ Instrument FastAPI
|
|
323
337
|
# ✓ Instrument Database
|
|
@@ -456,7 +470,7 @@ my_project/
|
|
|
456
470
|
Select what you need:
|
|
457
471
|
|
|
458
472
|
```bash
|
|
459
|
-
fastapi-
|
|
473
|
+
fastapi-fullstack new
|
|
460
474
|
# ✓ Redis (caching/sessions)
|
|
461
475
|
# ✓ Rate limiting (slowapi)
|
|
462
476
|
# ✓ Pagination (fastapi-pagination)
|
|
@@ -484,6 +498,18 @@ fastapi-gen new
|
|
|
484
498
|
|
|
485
499
|
---
|
|
486
500
|
|
|
501
|
+
## Star History
|
|
502
|
+
|
|
503
|
+
<a href="https://www.star-history.com/#vstorm-co/full-stack-fastapi-nextjs-llm-template&type=Date&legend=top-left">
|
|
504
|
+
<picture>
|
|
505
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=vstorm-co/full-stack-fastapi-nextjs-llm-template&type=Date&theme=dark" />
|
|
506
|
+
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=vstorm-co/full-stack-fastapi-nextjs-llm-template&type=Date" />
|
|
507
|
+
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=vstorm-co/full-stack-fastapi-nextjs-llm-template&type=Date" />
|
|
508
|
+
</picture>
|
|
509
|
+
</a>
|
|
510
|
+
|
|
511
|
+
---
|
|
512
|
+
|
|
487
513
|
## 🙏 Inspiration
|
|
488
514
|
|
|
489
515
|
This project is inspired by:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "fastapi-fullstack"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.3"
|
|
4
4
|
description = "Interactive FastAPI project generator with Logfire observability"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
@@ -38,12 +38,12 @@ dev = [
|
|
|
38
38
|
]
|
|
39
39
|
|
|
40
40
|
[project.scripts]
|
|
41
|
-
fastapi-
|
|
41
|
+
fastapi-fullstack = "fastapi_gen.cli:main"
|
|
42
42
|
|
|
43
43
|
[project.urls]
|
|
44
|
-
Homepage = "https://github.com/
|
|
45
|
-
Documentation = "https://github.com/
|
|
46
|
-
Repository = "https://github.com/
|
|
44
|
+
Homepage = "https://github.com/vstorm-co/full-stack-fastapi-nextjs-llm-template"
|
|
45
|
+
Documentation = "https://github.com/vstorm-co/full-stack-fastapi-nextjs-llm-template#readme"
|
|
46
|
+
Repository = "https://github.com/vstorm-co/full-stack-fastapi-nextjs-llm-template"
|
|
47
47
|
|
|
48
48
|
[build-system]
|
|
49
49
|
requires = ["hatchling"]
|
|
@@ -9,6 +9,7 @@ import sys
|
|
|
9
9
|
# Get cookiecutter variables
|
|
10
10
|
use_frontend = "{{ cookiecutter.use_frontend }}" == "True"
|
|
11
11
|
generate_env = "{{ cookiecutter.generate_env }}" == "True"
|
|
12
|
+
enable_i18n = "{{ cookiecutter.enable_i18n }}" == "True"
|
|
12
13
|
|
|
13
14
|
# Remove frontend folder if not using frontend
|
|
14
15
|
if not use_frontend:
|
|
@@ -17,6 +18,13 @@ if not use_frontend:
|
|
|
17
18
|
shutil.rmtree(frontend_dir)
|
|
18
19
|
print("Removed frontend/ directory (frontend not enabled)")
|
|
19
20
|
|
|
21
|
+
# Remove middleware.ts if i18n is not enabled (Next.js requires middleware to export a function)
|
|
22
|
+
if use_frontend and not enable_i18n:
|
|
23
|
+
middleware_file = os.path.join(os.getcwd(), "frontend", "src", "middleware.ts")
|
|
24
|
+
if os.path.exists(middleware_file):
|
|
25
|
+
os.remove(middleware_file)
|
|
26
|
+
print("Removed middleware.ts (i18n not enabled)")
|
|
27
|
+
|
|
20
28
|
# Remove .env files if generate_env is false
|
|
21
29
|
if not generate_env:
|
|
22
30
|
backend_env = os.path.join(os.getcwd(), "backend", ".env")
|
{fastapi_fullstack-0.1.1 → fastapi_fullstack-0.1.3}/template/{{cookiecutter.project_slug}}/Makefile
RENAMED
|
@@ -4,7 +4,12 @@
|
|
|
4
4
|
install:
|
|
5
5
|
uv sync --directory backend --dev
|
|
6
6
|
{%- if cookiecutter.enable_precommit %}
|
|
7
|
-
|
|
7
|
+
@if git rev-parse --git-dir > /dev/null 2>&1; then \
|
|
8
|
+
uv run --directory backend pre-commit install; \
|
|
9
|
+
else \
|
|
10
|
+
echo "⚠️ Not a git repository - skipping pre-commit install"; \
|
|
11
|
+
echo " Run 'git init && make install' to set up pre-commit hooks"; \
|
|
12
|
+
fi
|
|
8
13
|
{%- endif %}
|
|
9
14
|
@echo ""
|
|
10
15
|
@echo "✅ Installation complete!"
|