Problem: Bible study questions often build on each other — "What does John 3:16 mean?" → "How does that connect to Romans 5:8?" → "Can you explain the Greek word for 'love' there?". A single Q&A without memory would force users to repeat context.
Solution: Persistent conversation threads stored in localStorage. Each conversation maintains message history, so the AI has context from previous questions. Users can create multiple conversations, switch between them, and delete old ones.
Not included: Cloud sync of conversations, sharing conversations, or conversation search. Conversations are local to the browser.
User flow:
/ask → sees their conversations in a left sidebarEdge cases:
beforeunloadSidebar:
Message list: Scrollable area showing alternating user/AI messages with clear visual distinction.
Store: apps/web/src/lib/stores/chat.svelte.ts — Svelte 5 runes $state
{ conversations: Conversation[], activeConversationId: string | null }Conversation: { id, title, messages[], createdAt }localStorage under key bibleweb_chatbeforeunloadAPI integration: Last 10 messages sent as history[] to /api/ask. Server rebuilds full message array prepending system prompt each time.
Components:
ConversationSidebar.svelte — conversation list, new/select/deleteMessageList.svelte — renders messagesChatInput.svelte — text input with Enter to sendFiles:
apps/web/src/lib/stores/chat.svelte.ts — conversation storeapps/web/src/lib/components/ask/ConversationSidebar.svelteapps/web/src/lib/components/ask/MessageList.svelteapps/web/src/lib/components/ask/ChatInput.svelteapps/web/src/routes/(app)/ask/+page.svelte — page componentCurrent: DONE Milestone: v3 Priority: High — essential for natural conversation flow
History:
Dependencies: