gitextract__wbx865y/ ├── .editorconfig ├── .gitignore ├── CLAUDE.md ├── Caddyfile ├── DEVELOPMENT.md ├── LICENSE ├── README.md ├── SECURITY.md ├── SETUP.md ├── docker-compose.production.yml ├── go-b2b-starter/ │ ├── .air.toml │ ├── .claude/ │ │ └── CLAUDE.md │ ├── .dockerignore │ ├── .gitignore │ ├── .gitlab-ci.yml │ ├── Dockerfile │ ├── Makefile │ ├── README.md │ ├── cmd/ │ │ └── api/ │ │ └── main.go │ ├── deps/ │ │ ├── Dockerfile │ │ └── docker-compose.yml │ ├── docs/ │ │ ├── README.md │ │ ├── adding-a-module.md │ │ ├── api-development.md │ │ ├── architecture.md │ │ ├── authentication.md │ │ ├── billing.md │ │ ├── database.md │ │ ├── event-bus.md │ │ └── file-manager.md │ ├── example.env │ ├── go.mod │ ├── go.sum │ ├── internal/ │ │ ├── api/ │ │ │ └── provider.go │ │ ├── bootstrap/ │ │ │ ├── init_mods.go │ │ │ └── root.go │ │ ├── db/ │ │ │ ├── README.md │ │ │ ├── adapters/ │ │ │ │ ├── cognitive_store.go │ │ │ │ ├── document_store.go │ │ │ │ ├── file_asset_store.go │ │ │ │ ├── organization_store.go │ │ │ │ └── subscription_store.go │ │ │ ├── cmd/ │ │ │ │ ├── init.go │ │ │ │ └── providers.go │ │ │ ├── core/ │ │ │ │ ├── connection.go │ │ │ │ ├── errors.go │ │ │ │ └── transaction.go │ │ │ ├── helpers/ │ │ │ │ └── helpers.go │ │ │ ├── inject.go │ │ │ └── postgres/ │ │ │ ├── adapter_impl/ │ │ │ │ ├── cognitive_store.go │ │ │ │ ├── document_store.go │ │ │ │ ├── file_asset_store.go │ │ │ │ ├── organization_store.go │ │ │ │ └── subscription_store.go │ │ │ ├── connection.go │ │ │ ├── db_config.go │ │ │ ├── init.go │ │ │ ├── postgres_manager.go │ │ │ ├── retry.go │ │ │ ├── sqlc/ │ │ │ │ ├── gen/ │ │ │ │ │ ├── cognitive.sql.go │ │ │ │ │ ├── db.go │ │ │ │ │ ├── documents.sql.go │ │ │ │ │ ├── error.go │ │ │ │ │ ├── example_resource.sql.go │ │ │ │ │ ├── exec.go │ │ │ │ │ ├── file_manager.sql.go │ │ │ │ │ ├── models.go │ │ │ │ │ ├── organizations.sql.go │ │ │ │ │ ├── querier.go │ │ │ │ │ ├── resource_embeddings.sql.go │ │ │ │ │ ├── store.go │ │ │ │ │ └── subscription_billing.sql.go │ │ │ │ ├── migrations/ │ │ │ │ │ ├── 000001_create_file_manager_schema.down.sql │ │ │ │ │ ├── 000001_create_file_manager_schema.up.sql │ │ │ │ │ ├── 000002_create_organizations_schema.down.sql │ │ │ │ │ ├── 000002_create_organizations_schema.up.sql │ │ │ │ │ ├── 000003_enforce_role_enum.down.sql │ │ │ │ │ ├── 000003_enforce_role_enum.up.sql │ │ │ │ │ ├── 000004_create_subscription_billing_schema.down.sql │ │ │ │ │ ├── 000004_create_subscription_billing_schema.up.sql │ │ │ │ │ ├── 000005_update_quota_tracking_schema.down.sql │ │ │ │ │ ├── 000005_update_quota_tracking_schema.up.sql │ │ │ │ │ ├── 000006_create_example_resources.down.sql │ │ │ │ │ ├── 000006_create_example_resources.up.sql │ │ │ │ │ ├── 000007_create_resource_embeddings.down.sql │ │ │ │ │ ├── 000007_create_resource_embeddings.up.sql │ │ │ │ │ ├── 000008_create_documents_schema.down.sql │ │ │ │ │ ├── 000008_create_documents_schema.up.sql │ │ │ │ │ ├── 000009_create_cognitive_schema.down.sql │ │ │ │ │ └── 000009_create_cognitive_schema.up.sql │ │ │ │ ├── query/ │ │ │ │ │ ├── cognitive.sql │ │ │ │ │ ├── documents.sql │ │ │ │ │ ├── example_resource.sql │ │ │ │ │ ├── file_manager.sql │ │ │ │ │ ├── organizations.sql │ │ │ │ │ └── subscription_billing.sql │ │ │ │ └── sqlc.yml │ │ │ └── types_transform.go │ │ ├── docs/ │ │ │ ├── api/ │ │ │ │ ├── handler.go │ │ │ │ └── routes.go │ │ │ ├── cmd/ │ │ │ │ └── init.go │ │ │ └── gen/ │ │ │ ├── docs.go │ │ │ ├── swagger.json │ │ │ └── swagger.yaml │ │ ├── modules/ │ │ │ ├── auth/ │ │ │ │ ├── README.md │ │ │ │ ├── adapters/ │ │ │ │ │ └── stytch/ │ │ │ │ │ ├── adapter.go │ │ │ │ │ ├── config.go │ │ │ │ │ ├── jwks_cache.go │ │ │ │ │ ├── jwt_parser.go │ │ │ │ │ ├── mock_adapter.go │ │ │ │ │ ├── rbac_policy.go │ │ │ │ │ └── token_verifier.go │ │ │ │ ├── auth.go │ │ │ │ ├── cmd/ │ │ │ │ │ └── init.go │ │ │ │ ├── context.go │ │ │ │ ├── errors.go │ │ │ │ ├── handler.go │ │ │ │ ├── middleware.go │ │ │ │ ├── permissions.go │ │ │ │ ├── provider.go │ │ │ │ ├── rbac.go │ │ │ │ ├── resolvers.go │ │ │ │ ├── roles.go │ │ │ │ └── routes.go │ │ │ ├── billing/ │ │ │ │ ├── README.md │ │ │ │ ├── app/ │ │ │ │ │ └── services/ │ │ │ │ │ ├── check_quota_availability_service.go │ │ │ │ │ ├── consume_invoice_quota_service.go │ │ │ │ │ ├── get_billing_status_service.go │ │ │ │ │ ├── module.go │ │ │ │ │ ├── process_webhook_event_service.go │ │ │ │ │ ├── refresh_subscription_status_service.go │ │ │ │ │ ├── subscription_service_dec.go │ │ │ │ │ ├── sync_subscription_service.go │ │ │ │ │ ├── verify_and_consume_quota_service.go │ │ │ │ │ └── verify_payment_service.go │ │ │ │ ├── cmd/ │ │ │ │ │ ├── init.go │ │ │ │ │ └── provider.go │ │ │ │ ├── domain/ │ │ │ │ │ ├── errors.go │ │ │ │ │ ├── repository.go │ │ │ │ │ └── types.go │ │ │ │ ├── handler.go │ │ │ │ ├── infra/ │ │ │ │ │ ├── adapters/ │ │ │ │ │ │ └── status_provider.go │ │ │ │ │ ├── polar/ │ │ │ │ │ │ └── polar_adapter.go │ │ │ │ │ └── repositories/ │ │ │ │ │ ├── organization_adapter.go │ │ │ │ │ └── subscription_repository.go │ │ │ │ ├── provider.go │ │ │ │ └── routes.go │ │ │ ├── cognitive/ │ │ │ │ ├── app/ │ │ │ │ │ └── services/ │ │ │ │ │ ├── document_listener.go │ │ │ │ │ ├── embedding_service.go │ │ │ │ │ ├── interface.go │ │ │ │ │ └── rag_service.go │ │ │ │ ├── cmd/ │ │ │ │ │ └── init.go │ │ │ │ ├── domain/ │ │ │ │ │ ├── ai_provider.go │ │ │ │ │ ├── entity.go │ │ │ │ │ ├── errors.go │ │ │ │ │ └── repository.go │ │ │ │ ├── handler.go │ │ │ │ ├── infra/ │ │ │ │ │ ├── ai/ │ │ │ │ │ │ ├── assistant_provider.go │ │ │ │ │ │ └── text_vectorizer.go │ │ │ │ │ └── repositories/ │ │ │ │ │ ├── chat_repository.go │ │ │ │ │ ├── embedding_repository.go │ │ │ │ │ └── helpers.go │ │ │ │ ├── module.go │ │ │ │ ├── provider.go │ │ │ │ └── routes.go │ │ │ ├── documents/ │ │ │ │ ├── app/ │ │ │ │ │ └── services/ │ │ │ │ │ ├── document_service.go │ │ │ │ │ └── interface.go │ │ │ │ ├── cmd/ │ │ │ │ │ └── init.go │ │ │ │ ├── domain/ │ │ │ │ │ ├── entity.go │ │ │ │ │ ├── errors.go │ │ │ │ │ ├── events/ │ │ │ │ │ │ └── document_events.go │ │ │ │ │ └── repository.go │ │ │ │ ├── handler.go │ │ │ │ ├── infra/ │ │ │ │ │ └── repositories/ │ │ │ │ │ └── document_repository.go │ │ │ │ ├── module.go │ │ │ │ ├── provider.go │ │ │ │ └── routes.go │ │ │ ├── files/ │ │ │ │ ├── README.md │ │ │ │ ├── cmd/ │ │ │ │ │ ├── init.go │ │ │ │ │ └── provider.go │ │ │ │ ├── config/ │ │ │ │ │ └── config.go │ │ │ │ ├── constants.go │ │ │ │ ├── domain/ │ │ │ │ │ ├── entity.go │ │ │ │ │ ├── helpers.go │ │ │ │ │ ├── repository.go │ │ │ │ │ ├── service.go │ │ │ │ │ └── validator.go │ │ │ │ ├── infra/ │ │ │ │ │ └── file_metadata_repository.go │ │ │ │ └── internal/ │ │ │ │ └── infra/ │ │ │ │ ├── composite_repository.go │ │ │ │ ├── db_repository.go │ │ │ │ ├── mock_r2_repository.go │ │ │ │ └── r2_repository.go │ │ │ ├── organizations/ │ │ │ │ ├── account_handler.go │ │ │ │ ├── app/ │ │ │ │ │ └── services/ │ │ │ │ │ ├── member_service.go │ │ │ │ │ ├── member_service_impl.go │ │ │ │ │ ├── organization_service.go │ │ │ │ │ └── organization_service_interface.go │ │ │ │ ├── cmd/ │ │ │ │ │ └── init.go │ │ │ │ ├── domain/ │ │ │ │ │ ├── auth_provider.go │ │ │ │ │ ├── entity.go │ │ │ │ │ ├── errors.go │ │ │ │ │ ├── events/ │ │ │ │ │ │ └── organization_events.go │ │ │ │ │ └── repository.go │ │ │ │ ├── infra/ │ │ │ │ │ └── repositories/ │ │ │ │ │ ├── account_repository.go │ │ │ │ │ ├── organization_repository.go │ │ │ │ │ ├── slug_generator.go │ │ │ │ │ ├── stytch_member_repository.go │ │ │ │ │ ├── stytch_organization_repository.go │ │ │ │ │ └── stytch_role_repository.go │ │ │ │ ├── member_handler.go │ │ │ │ ├── module.go │ │ │ │ ├── organization_handler.go │ │ │ │ ├── provider.go │ │ │ │ └── routes.go │ │ │ └── paywall/ │ │ │ ├── README.md │ │ │ ├── cmd/ │ │ │ │ └── init.go │ │ │ ├── context.go │ │ │ ├── errors.go │ │ │ ├── middleware.go │ │ │ ├── provider.go │ │ │ └── subscription.go │ │ └── platform/ │ │ ├── eventbus/ │ │ │ ├── bus.go │ │ │ ├── cmd/ │ │ │ │ ├── init.go │ │ │ │ └── provider.go │ │ │ ├── event.go │ │ │ ├── events.go │ │ │ └── middleware.go │ │ ├── llm/ │ │ │ ├── README.md │ │ │ ├── cmd/ │ │ │ │ └── init.go │ │ │ ├── domain/ │ │ │ │ ├── errors.go │ │ │ │ └── service.go │ │ │ └── infra/ │ │ │ └── openai_client.go │ │ ├── logger/ │ │ │ ├── cmd/ │ │ │ │ ├── init.go │ │ │ │ └── provider.go │ │ │ ├── domain/ │ │ │ │ ├── logger.go │ │ │ │ └── options.go │ │ │ ├── factory.go │ │ │ └── internal/ │ │ │ └── zerologger/ │ │ │ ├── factory.go │ │ │ └── logger.go │ │ ├── ocr/ │ │ │ ├── README.md │ │ │ ├── cmd/ │ │ │ │ └── init.go │ │ │ ├── domain/ │ │ │ │ ├── entity.go │ │ │ │ ├── errors.go │ │ │ │ └── service.go │ │ │ └── infra/ │ │ │ ├── config.go │ │ │ ├── mistral_ocr_client.go │ │ │ └── mock_ocr_client.go │ │ ├── polar/ │ │ │ ├── client.go │ │ │ ├── cmd/ │ │ │ │ └── init.go │ │ │ ├── config.go │ │ │ ├── inject.go │ │ │ └── webhook.go │ │ ├── redis/ │ │ │ ├── README.md │ │ │ ├── cmd/ │ │ │ │ ├── init.go │ │ │ │ └── provider.go │ │ │ ├── config.go │ │ │ ├── init.go │ │ │ ├── redis.go │ │ │ └── store.go │ │ ├── server/ │ │ │ ├── cmd/ │ │ │ │ ├── di.go │ │ │ │ └── init.go │ │ │ ├── config/ │ │ │ │ └── config.go │ │ │ ├── domain/ │ │ │ │ ├── health.go │ │ │ │ ├── http_server.go │ │ │ │ ├── middleware.go │ │ │ │ ├── middleware_resolver.go │ │ │ │ ├── server.go │ │ │ │ └── server_.go │ │ │ ├── errors/ │ │ │ │ └── errors.go │ │ │ ├── gin/ │ │ │ │ └── gin.go │ │ │ ├── logging/ │ │ │ │ ├── logger.go │ │ │ │ └── security_logger.go │ │ │ ├── metrics/ │ │ │ │ └── prometheus.go │ │ │ └── middleware/ │ │ │ ├── cors.go │ │ │ ├── ip_protection.go │ │ │ ├── ratelimit.go │ │ │ ├── recovery.go │ │ │ ├── request_id.go │ │ │ ├── request_size_limit.go │ │ │ ├── sanatization.go │ │ │ ├── security_headers.go │ │ │ ├── timeout.go │ │ │ └── validator.go │ │ └── stytch/ │ │ ├── client.go │ │ ├── cmd/ │ │ │ └── provider.go │ │ ├── config.go │ │ ├── errors.go │ │ ├── inject.go │ │ └── rbac_policy.go │ ├── pkg/ │ │ ├── httperr/ │ │ │ ├── errors.go │ │ │ └── http_error.go │ │ ├── pagination/ │ │ │ ├── pagination.go │ │ │ ├── pramas.go │ │ │ └── util.go │ │ ├── response/ │ │ │ └── response.go │ │ └── slugify/ │ │ └── slugify.go │ └── scripts/ │ ├── migrate_down.sh │ ├── migrate_up.sh │ └── run_tests_with_coverage.sh ├── next_b2b_starter/ │ ├── .claude/ │ │ └── CLAUDE.md │ ├── .dockerignore │ ├── .env.example │ ├── .eslintrc.json │ ├── .npmrc │ ├── Dockerfile │ ├── README.md │ ├── STYTCH_CONFIGURATION.md │ ├── app/ │ │ ├── api/ │ │ │ ├── auth/ │ │ │ │ └── session/ │ │ │ │ └── refresh/ │ │ │ │ └── route.ts │ │ │ └── billing/ │ │ │ └── webhook/ │ │ │ └── route.ts │ │ ├── auth/ │ │ │ └── page.tsx │ │ ├── authenticate/ │ │ │ └── page.tsx │ │ ├── dashboard/ │ │ │ ├── knowledge/ │ │ │ │ ├── components/ │ │ │ │ │ ├── chat-interface.tsx │ │ │ │ │ ├── chat-message.tsx │ │ │ │ │ ├── document-list.tsx │ │ │ │ │ ├── document-sources.tsx │ │ │ │ │ ├── document-upload.tsx │ │ │ │ │ ├── knowledge-content.tsx │ │ │ │ │ └── knowledge-sidebar.tsx │ │ │ │ ├── layout.tsx │ │ │ │ └── page.tsx │ │ │ ├── layout.tsx │ │ │ ├── page.tsx │ │ │ └── settings/ │ │ │ ├── components/ │ │ │ │ ├── invite-member.tsx │ │ │ │ ├── member-list.tsx │ │ │ │ ├── profile-section.tsx │ │ │ │ ├── profile-tab.tsx │ │ │ │ ├── settings-content.tsx │ │ │ │ └── subscription-tab.tsx │ │ │ ├── layout.tsx │ │ │ └── page.tsx │ │ ├── globals.css │ │ ├── head.tsx │ │ ├── layout.tsx │ │ ├── not-found.tsx │ │ ├── page.tsx │ │ ├── robots.ts │ │ ├── signup/ │ │ │ └── page.tsx │ │ └── sitemap.ts │ ├── components/ │ │ ├── auth/ │ │ │ ├── can.tsx │ │ │ ├── permission-gate.tsx │ │ │ └── stytch-provider.tsx │ │ ├── billing/ │ │ │ ├── plans-modal.tsx │ │ │ ├── subscription-alerts.tsx │ │ │ └── subscription-paywall.tsx │ │ ├── common/ │ │ │ └── obfuscated-email.tsx │ │ ├── layout/ │ │ │ ├── dashboard-layout.tsx │ │ │ ├── header.tsx │ │ │ ├── sidebar.tsx │ │ │ └── user-menu.tsx │ │ ├── seo/ │ │ │ └── jsonld.tsx │ │ └── ui/ │ │ ├── accordion.tsx │ │ ├── alert.tsx │ │ ├── avatar.tsx │ │ ├── badge.tsx │ │ ├── button.tsx │ │ ├── calendar.tsx │ │ ├── card.tsx │ │ ├── checkbox.tsx │ │ ├── date-picker.tsx │ │ ├── dialog.tsx │ │ ├── dropdown-menu.tsx │ │ ├── form.tsx │ │ ├── input.tsx │ │ ├── label.tsx │ │ ├── popover.tsx │ │ ├── progress.tsx │ │ ├── scroll-area.tsx │ │ ├── select.tsx │ │ ├── separator.tsx │ │ ├── sheet-header.tsx │ │ ├── sheet.tsx │ │ ├── skeleton.tsx │ │ ├── slider.tsx │ │ ├── switch.tsx │ │ ├── table.tsx │ │ ├── tabs.tsx │ │ └── textarea.tsx │ ├── components.json │ ├── docs/ │ │ ├── 01-getting-started.md │ │ ├── 02-authentication.md │ │ ├── 03-permissions-and-roles.md │ │ ├── 04-payments-and-billing.md │ │ ├── 05-making-api-requests.md │ │ ├── 06-creating-pages.md │ │ ├── 07-creating-apis.md │ │ ├── 08-using-hooks.md │ │ ├── 09-adding-a-feature.md │ │ ├── 10-server-actions.md │ │ ├── 11-feature-guards.md │ │ ├── 12-subscription-patterns.md │ │ ├── API-LOGGING.md │ │ └── README.md │ ├── hooks/ │ │ ├── use-signup-flow.ts │ │ └── use-toast.ts │ ├── lib/ │ │ ├── actions/ │ │ │ ├── auth/ │ │ │ │ ├── consume-magic-link.ts │ │ │ │ ├── logout.ts │ │ │ │ └── send-magic-link.ts │ │ │ └── billing/ │ │ │ ├── cancel-subscription.ts │ │ │ ├── create-checkout.ts │ │ │ ├── get-products.ts │ │ │ ├── get-subscription-status.ts │ │ │ └── verify-payment.ts │ │ ├── api/ │ │ │ └── api/ │ │ │ ├── client/ │ │ │ │ └── api-client.ts │ │ │ ├── dto/ │ │ │ │ ├── auth.dto.ts │ │ │ │ ├── cognitive.dto.ts │ │ │ │ ├── document.dto.ts │ │ │ │ ├── member.dto.ts │ │ │ │ ├── organization.dto.ts │ │ │ │ ├── profile.dto.ts │ │ │ │ └── rbac.dto.ts │ │ │ └── repositories/ │ │ │ ├── cognitive-repository.ts │ │ │ ├── document-repository.ts │ │ │ ├── member-repository.ts │ │ │ ├── profile-repository.ts │ │ │ ├── rbac-repository.ts │ │ │ └── signup-repository.ts │ │ ├── auth/ │ │ │ ├── README.md │ │ │ ├── bootstrap.ts │ │ │ ├── config-types.ts │ │ │ ├── constants.ts │ │ │ ├── permission-utils.ts │ │ │ ├── permissions.ts │ │ │ ├── server-constants.ts │ │ │ ├── server-permissions.ts │ │ │ ├── stytch/ │ │ │ │ └── server.ts │ │ │ ├── stytch-client.ts │ │ │ ├── stytch-server.ts │ │ │ ├── stytch.ts │ │ │ ├── subscription.ts │ │ │ └── token-utils.ts │ │ ├── contexts/ │ │ │ ├── auth-context.tsx │ │ │ └── stytch-config-context.tsx │ │ ├── hooks/ │ │ │ ├── mutations/ │ │ │ │ ├── use-chat.ts │ │ │ │ ├── use-delete-document.ts │ │ │ │ ├── use-invite-member.ts │ │ │ │ ├── use-remove-member.ts │ │ │ │ ├── use-resend-invitation.ts │ │ │ │ ├── use-update-profile.ts │ │ │ │ └── use-upload-document.ts │ │ │ ├── queries/ │ │ │ │ ├── query-keys.ts │ │ │ │ ├── use-documents-query.ts │ │ │ │ ├── use-members-query.ts │ │ │ │ ├── use-products-query.ts │ │ │ │ ├── use-profile-query.ts │ │ │ │ ├── use-sessions-query.ts │ │ │ │ └── use-subscription-query.ts │ │ │ └── use-permissions.ts │ │ ├── models/ │ │ │ ├── cognitive.model.ts │ │ │ ├── document.model.ts │ │ │ ├── member.model.ts │ │ │ └── signup.model.ts │ │ ├── polar/ │ │ │ ├── client.ts │ │ │ ├── config.ts │ │ │ ├── current-subscription.ts │ │ │ ├── plans.ts │ │ │ ├── server-meters.ts │ │ │ ├── server-products.ts │ │ │ ├── subscription.ts │ │ │ └── usage.ts │ │ ├── providers/ │ │ │ └── query-provider.tsx │ │ ├── stores/ │ │ │ └── sidebar-store.ts │ │ ├── types/ │ │ │ └── loadable.ts │ │ ├── utils/ │ │ │ ├── api-logger.ts │ │ │ ├── password-generator.ts │ │ │ └── server-action-helpers.ts │ │ └── utils.ts │ ├── lint/ │ │ └── README.md │ ├── next-env.d.ts │ ├── next.config.ts │ ├── package.json │ ├── postcss.config.js │ ├── proxy.ts │ ├── scripts/ │ │ ├── convert-svg-to-png.js │ │ ├── generate-favicons.js │ │ └── generate-og-images.js │ ├── stores/ │ │ └── ui-store.ts │ ├── tailwind.config.ts │ └── tsconfig.json └── setup.sh