Barclays-banner-builder/backend
Vadym Samoilenko 7e82a535a9 Add conversational brief interface (AC1 chat-style)
Replaces the one-shot form with a Copygen-style chat at
/conversations/:id. Each turn is classified as generate / refine /
clarify by a lightweight LLM intent router; generate and refine intents
enqueue an RQ job that produces a new BannerSet, while clarify returns
an inline reply without touching banners.

New backend:
- Conversation + ConversationMessage models + migration 0005
- intent_router service (chat_structured, 3-intent schema)
- chat_turn RQ task with _persist_banner_set helper extracted from
  _generate_copy_async for reuse
- /api/conversations CRUD + POST /messages endpoint
- JobType.CHAT_TURN added

New frontend:
- ChatBrief page: message bubbles, inline BannerPreview cards with
  checkbox selection and "Open banner editor" CTA (same Medium+Large
  validation rule as VariantsGrid)
- ConversationLanding: /conversations/new creates and redirects
- conversationId added to journey store
- "New Brief" nav now points to /conversations/new
- Default route redirects to /conversations/new

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 21:53:17 +01:00
..
alembic Add conversational brief interface (AC1 chat-style) 2026-04-28 21:53:17 +01:00
app Add conversational brief interface (AC1 chat-style) 2026-04-28 21:53:17 +01:00
scripts Replace passlib with bcrypt directly — passlib incompatible with bcrypt>=4.0 2026-04-17 12:15:06 +01:00
alembic.ini Add full Sprint 0+1 implementation: Docker, FastAPI, React, RAG, deploy 2026-04-17 12:01:42 +01:00
Dockerfile Fix Docker build: hatchling can't find app package before COPY 2026-04-17 12:08:40 +01:00
pyproject.toml Replace passlib with bcrypt directly — passlib incompatible with bcrypt>=4.0 2026-04-17 12:15:06 +01:00