Skip to content

Latest commit

 

History

History
398 lines (331 loc) · 10.9 KB

File metadata and controls

398 lines (331 loc) · 10.9 KB

📝 Question History Implementation Plan

🎯 Overview

Instead of full chat history, we'll implement a focused Question History system that allows users to:

  • Save and revisit their spiritual questions
  • Categorize questions by type (spiritual, practical, metaphysical)
  • Search and filter past questions
  • Bookmark favorite questions
  • Export question collections

🏗️ Technical Architecture

Data Structure

interface QuestionHistory {
  id: string;
  question: string;
  category: 'spiritual' | 'practical' | 'metaphysical' | 'personal' | 'general';
  timestamp: Date;
  isBookmarked: boolean;
  tags: string[];
  responsePreview?: string; // First 100 chars of response
  source?: string; // Which Holmes text was referenced
}

interface QuestionFilters {
  category?: string;
  dateRange?: { start: Date; end: Date };
  searchTerm?: string;
  bookmarkedOnly?: boolean;
}

Storage Strategy

// localStorage keys
const STORAGE_KEYS = {
  QUESTIONS: 'holmes_questions',
  SETTINGS: 'holmes_settings',
  CATEGORIES: 'holmes_categories'
};

// Data structure in localStorage
{
  "holmes_questions": [
    {
      "id": "q_1234567890",
      "question": "How can I apply the Science of Mind to my daily challenges?",
      "category": "practical",
      "timestamp": "2025-07-28T10:30:00Z",
      "isBookmarked": true,
      "tags": ["daily practice", "challenges", "application"],
      "responsePreview": "Dear friend, the Science of Mind teaches us that every challenge...",
      "source": "The Science of Mind"
    }
  ]
}

🎨 User Interface Design

Question History Panel

<!-- Component: src/lib/components/QuestionHistory.svelte -->
<div class="question-history-panel">
  <!-- Header -->
  <div class="history-header">
    <h3>Your Spiritual Questions</h3>
    <button class="export-btn">Export</button>
  </div>
  
  <!-- Filters -->
  <div class="filters">
    <select bind:value={selectedCategory}>
      <option value="">All Categories</option>
      <option value="spiritual">Spiritual</option>
      <option value="practical">Practical</option>
      <option value="metaphysical">Metaphysical</option>
      <option value="personal">Personal</option>
    </select>
    
    <input 
      type="text" 
      placeholder="Search questions..." 
      bind:value={searchTerm}
    />
    
    <label>
      <input type="checkbox" bind:checked={bookmarkedOnly} />
      Bookmarked only
    </label>
  </div>
  
  <!-- Question List -->
  <div class="question-list">
    {#each filteredQuestions as question}
      <div class="question-item" class:bookmarked={question.isBookmarked}>
        <div class="question-header">
          <span class="category-badge">{question.category}</span>
          <span class="timestamp">{formatDate(question.timestamp)}</span>
          <button 
            class="bookmark-btn" 
            on:click={() => toggleBookmark(question.id)}
          >
            {question.isBookmarked ? '' : ''}
          </button>
        </div>
        
        <div class="question-text" on:click={() => loadQuestion(question)}>
          {question.question}
        </div>
        
        {#if question.responsePreview}
          <div class="response-preview">
            "{question.responsePreview}..."
          </div>
        {/if}
        
        {#if question.source}
          <div class="source-info">
            Source: {question.source}
          </div>
        {/if}
      </div>
    {/each}
  </div>
</div>

Question Input Enhancement

<!-- Enhanced MessageInput.svelte -->
<div class="message-input-container">
  <div class="input-header">
    <button class="history-btn" on:click={toggleHistory}>
      📚 Question History
    </button>
    <span class="question-count">
      {questionCount} questions saved
    </span>
  </div>
  
  <div class="input-area">
    <textarea 
      bind:value={message} 
      placeholder="Ask Ernest Holmes a spiritual question..."
    />
    
    <div class="input-actions">
      <select bind:value={selectedCategory}>
        <option value="general">General</option>
        <option value="spiritual">Spiritual</option>
        <option value="practical">Practical</option>
        <option value="metaphysical">Metaphysical</option>
        <option value="personal">Personal</option>
      </select>
      
      <button class="send-btn" on:click={handleSend}>
        Send
      </button>
    </div>
  </div>
</div>

🔧 Implementation Steps

Step 1: Create Storage Utilities

// File: src/lib/utils/questionStorage.ts
export class QuestionStorage {
  private static STORAGE_KEY = 'holmes_questions';
  
  static saveQuestion(question: Omit<QuestionHistory, 'id' | 'timestamp'>): void {
    const questions = this.getQuestions();
    const newQuestion: QuestionHistory = {
      ...question,
      id: this.generateId(),
      timestamp: new Date()
    };
    
    questions.unshift(newQuestion); // Add to beginning
    this.saveQuestions(questions);
  }
  
  static getQuestions(): QuestionHistory[] {
    const stored = localStorage.getItem(this.STORAGE_KEY);
    return stored ? JSON.parse(stored) : [];
  }
  
  static searchQuestions(filters: QuestionFilters): QuestionHistory[] {
    let questions = this.getQuestions();
    
    if (filters.category) {
      questions = questions.filter(q => q.category === filters.category);
    }
    
    if (filters.searchTerm) {
      const term = filters.searchTerm.toLowerCase();
      questions = questions.filter(q => 
        q.question.toLowerCase().includes(term) ||
        q.tags.some(tag => tag.toLowerCase().includes(term))
      );
    }
    
    if (filters.bookmarkedOnly) {
      questions = questions.filter(q => q.isBookmarked);
    }
    
    return questions;
  }
  
  static toggleBookmark(questionId: string): void {
    const questions = this.getQuestions();
    const question = questions.find(q => q.id === questionId);
    if (question) {
      question.isBookmarked = !question.isBookmarked;
      this.saveQuestions(questions);
    }
  }
  
  static exportQuestions(): string {
    const questions = this.getQuestions();
    return JSON.stringify(questions, null, 2);
  }
  
  private static generateId(): string {
    return 'q_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);
  }
  
  private static saveQuestions(questions: QuestionHistory[]): void {
    localStorage.setItem(this.STORAGE_KEY, JSON.stringify(questions));
  }
}

Step 2: Update Chat Interface

// File: src/routes/+page.svelte
import { QuestionStorage } from '$lib/utils/questionStorage';

// Add to existing script
let showHistory = false;
let selectedCategory = 'general';

async function handleSendMessage(content: string) {
  if (!content.trim()) return;
  
  // Save question to history
  QuestionStorage.saveQuestion({
    question: content,
    category: selectedCategory,
    isBookmarked: false,
    tags: extractTags(content) // Simple tag extraction
  });
  
  // ... existing send logic
}

function extractTags(question: string): string[] {
  const tags = [];
  const lowerQuestion = question.toLowerCase();
  
  if (lowerQuestion.includes('principle')) tags.push('principle');
  if (lowerQuestion.includes('meditation')) tags.push('meditation');
  if (lowerQuestion.includes('prayer')) tags.push('prayer');
  if (lowerQuestion.includes('healing')) tags.push('healing');
  if (lowerQuestion.includes('success')) tags.push('success');
  
  return tags;
}

Step 3: Create Question History Component

<!-- File: src/lib/components/QuestionHistory.svelte -->
<script lang="ts">
  import { QuestionStorage } from '$lib/utils/questionStorage';
  import { formatDistanceToNow } from 'date-fns';
  
  export let onQuestionSelect: (question: string) => void;
  
  let questions: QuestionHistory[] = [];
  let selectedCategory = '';
  let searchTerm = '';
  let bookmarkedOnly = false;
  
  $: filteredQuestions = QuestionStorage.searchQuestions({
    category: selectedCategory || undefined,
    searchTerm: searchTerm || undefined,
    bookmarkedOnly
  });
  
  function loadQuestion(question: QuestionHistory) {
    onQuestionSelect(question.question);
  }
  
  function toggleBookmark(questionId: string) {
    QuestionStorage.toggleBookmark(questionId);
    questions = QuestionStorage.getQuestions();
  }
  
  function exportQuestions() {
    const data = QuestionStorage.exportQuestions();
    const blob = new Blob([data], { type: 'application/json' });
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = 'holmes-questions.json';
    a.click();
  }
  
  function formatDate(date: Date): string {
    return formatDistanceToNow(new Date(date), { addSuffix: true });
  }
</script>

<!-- Template from above -->

🎯 User Experience Features

Smart Categorization

  • Automatic tagging based on question content
  • Category suggestions as user types
  • Smart search across questions and tags

Question Insights

  • Most asked questions tracking
  • Spiritual growth patterns over time
  • Favorite topics identification

Export & Sharing

  • JSON export for backup
  • CSV export for analysis
  • Question collections for sharing

📊 Analytics & Insights

Question Analytics

interface QuestionAnalytics {
  totalQuestions: number;
  questionsByCategory: Record<string, number>;
  mostCommonTags: Array<{ tag: string; count: number }>;
  questionsByTime: Array<{ date: string; count: number }>;
  averageQuestionsPerDay: number;
}

Growth Tracking

  • Questions asked per week/month
  • Category preferences over time
  • Spiritual topic evolution
  • Engagement patterns

🚀 Future Enhancements

Advanced Features

  • Question templates for common spiritual topics
  • Question scheduling for daily practice
  • Question sharing with spiritual community
  • AI-powered question suggestions

Integration Opportunities

  • Calendar integration for question reminders
  • Journal integration for spiritual reflection
  • Community features for shared questions
  • Progress tracking for spiritual development

📋 Implementation Checklist

Week 1: Core Functionality

  • Create QuestionStorage utility class
  • Implement basic save/load functionality
  • Add question categorization
  • Create QuestionHistory component
  • Integrate with existing chat interface

Week 2: Enhanced Features

  • Add search and filtering
  • Implement bookmarking
  • Add export functionality
  • Create question analytics
  • Add smart tagging

Week 3: Polish & Testing

  • Mobile responsiveness
  • Performance optimization
  • User testing
  • Bug fixes
  • Documentation

This focused approach on question history will provide much more value than full chat history, allowing users to build a personal library of spiritual inquiries and track their spiritual journey over time.