Index: chapterx-frontend/src/components/writer/StoryAnalytics.tsx
===================================================================
--- chapterx-frontend/src/components/writer/StoryAnalytics.tsx	(revision b62cefc14094ca5ac7154f7d48797a1e6c444935)
+++ chapterx-frontend/src/components/writer/StoryAnalytics.tsx	(revision 99c1e45f4ac45a164229bc6f60f3b05bc26df047)
@@ -1,6 +1,4 @@
 import React from 'react'
 import {
-  LineChart,
-  Line,
   BarChart,
   Bar,
@@ -11,15 +9,19 @@
   ResponsiveContainer,
 } from 'recharts'
-import { Eye, Heart, MessageCircle, TrendingUp, Clock, BarChart2 } from 'lucide-react'
-import { mockAnalytics } from '../../data/mockData'
+import { Heart, MessageCircle, BookOpen } from 'lucide-react'
+import { Story } from '../../types'
+
+interface Props {
+  stories: Story[]
+}
 
 const StatCard: React.FC<{ icon: React.ReactNode; label: string; value: string | number; color: string }> = ({
   icon, label, value, color,
 }) => (
-  <div className={`p-4 bg-slate-800 rounded-xl border border-slate-700`}>
+  <div className="p-4 bg-slate-800 rounded-xl border border-slate-700">
     <div className={`w-10 h-10 rounded-xl ${color} flex items-center justify-center mb-3`}>
       {icon}
     </div>
-    <p className="text-2xl font-bold text-white">{value.toLocaleString()}</p>
+    <p className="text-2xl font-bold text-white">{typeof value === 'number' ? value.toLocaleString() : value}</p>
     <p className="text-slate-400 text-sm mt-0.5">{label}</p>
   </div>
@@ -42,35 +44,35 @@
 }
 
-export const StoryAnalytics: React.FC = () => {
-  const analytics = mockAnalytics
-  const viewsData = analytics.views_over_time.filter((_, i) => i % 5 === 0)
-  const likesData = analytics.likes_over_time.filter((_, i) => i % 5 === 0)
+export const StoryAnalytics: React.FC<Props> = ({ stories }) => {
+  const published = stories.filter(s => s.status === 'published')
+
+  const totalLikes = stories.reduce((a, s) => a + s.total_likes, 0)
+  const totalComments = stories.reduce((a, s) => a + s.total_comments, 0)
+  const totalChapters = stories.reduce((a, s) => a + s.total_chapters, 0)
+
+  // Likes per story (sorted by created_at)
+  const likesData = [...published]
+    .sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime())
+    .map(s => ({
+      date: new Date(s.created_at).toLocaleDateString('en-US', { month: 'short', year: '2-digit' }),
+      likes: s.total_likes,
+      story: s.title,
+    }))
+
+  if (published.length === 0) {
+    return (
+      <div className="text-center py-12 text-slate-500">
+        <p>No published stories yet — analytics will appear here once you publish.</p>
+      </div>
+    )
+  }
 
   return (
     <div className="space-y-6">
       {/* Stat cards */}
-      <div className="grid grid-cols-2 lg:grid-cols-5 gap-4">
-        <StatCard icon={<Eye size={18} className="text-blue-300" />} label="Total Views" value={analytics.total_views} color="bg-blue-500/20" />
-        <StatCard icon={<Heart size={18} className="text-rose-300" />} label="Total Likes" value={analytics.total_likes} color="bg-rose-500/20" />
-        <StatCard icon={<MessageCircle size={18} className="text-violet-300" />} label="Comments" value={analytics.total_comments} color="bg-violet-500/20" />
-        <StatCard icon={<Clock size={18} className="text-amber-300" />} label="Avg Read (min)" value={analytics.avg_read_time} color="bg-amber-500/20" />
-        <StatCard icon={<BarChart2 size={18} className="text-emerald-300" />} label="Completion %" value={`${analytics.completion_rate}%`} color="bg-emerald-500/20" />
-      </div>
-
-      {/* Views chart */}
-      <div className="bg-slate-800 border border-slate-700 rounded-2xl p-6">
-        <div className="flex items-center gap-2 mb-4">
-          <TrendingUp size={16} className="text-blue-400" />
-          <h3 className="text-white font-semibold">Views Over Time</h3>
-        </div>
-        <ResponsiveContainer width="100%" height={200}>
-          <LineChart data={viewsData}>
-            <CartesianGrid strokeDasharray="3 3" stroke="#334155" />
-            <XAxis dataKey="date" tick={{ fill: '#64748b', fontSize: 11 }} tickLine={false} axisLine={false} />
-            <YAxis tick={{ fill: '#64748b', fontSize: 11 }} tickLine={false} axisLine={false} />
-            <Tooltip content={<CustomTooltip />} />
-            <Line type="monotone" dataKey="views" stroke="#6366f1" strokeWidth={2} dot={false} name="Views" />
-          </LineChart>
-        </ResponsiveContainer>
+      <div className="grid grid-cols-2 lg:grid-cols-3 gap-4">
+        <StatCard icon={<Heart size={18} className="text-rose-300" />} label="Total Likes" value={totalLikes} color="bg-rose-500/20" />
+        <StatCard icon={<MessageCircle size={18} className="text-violet-300" />} label="Total Comments" value={totalComments} color="bg-violet-500/20" />
+        <StatCard icon={<BookOpen size={18} className="text-emerald-300" />} label="Total Chapters" value={totalChapters} color="bg-emerald-500/20" />
       </div>
 
@@ -79,16 +81,40 @@
         <div className="flex items-center gap-2 mb-4">
           <Heart size={16} className="text-rose-400" />
-          <h3 className="text-white font-semibold">Likes Over Time</h3>
+          <h3 className="text-white font-semibold">Likes per Story</h3>
         </div>
-        <ResponsiveContainer width="100%" height={200}>
-          <BarChart data={likesData}>
-            <CartesianGrid strokeDasharray="3 3" stroke="#334155" />
-            <XAxis dataKey="date" tick={{ fill: '#64748b', fontSize: 11 }} tickLine={false} axisLine={false} />
-            <YAxis tick={{ fill: '#64748b', fontSize: 11 }} tickLine={false} axisLine={false} />
-            <Tooltip content={<CustomTooltip />} />
-            <Bar dataKey="likes" fill="#f43f5e" radius={[4, 4, 0, 0]} name="Likes" />
-          </BarChart>
-        </ResponsiveContainer>
+        {likesData.length > 0 ? (
+          <ResponsiveContainer width="100%" height={200}>
+            <BarChart data={likesData}>
+              <CartesianGrid strokeDasharray="3 3" stroke="#334155" />
+              <XAxis dataKey="date" tick={{ fill: '#64748b', fontSize: 11 }} tickLine={false} axisLine={false} />
+              <YAxis tick={{ fill: '#64748b', fontSize: 11 }} tickLine={false} axisLine={false} />
+              <Tooltip content={<CustomTooltip />} />
+              <Bar dataKey="likes" fill="#f43f5e" radius={[4, 4, 0, 0]} name="Likes" />
+            </BarChart>
+          </ResponsiveContainer>
+        ) : (
+          <p className="text-slate-500 text-sm text-center py-8">No likes data yet</p>
+        )}
       </div>
+
+      {/* Per-story breakdown */}
+      {published.length > 1 && (
+        <div className="bg-slate-800 border border-slate-700 rounded-2xl p-6">
+          <h3 className="text-white font-semibold mb-4">Story Breakdown</h3>
+          <div className="space-y-3">
+            {[...published]
+              .sort((a, b) => b.total_likes - a.total_likes)
+              .map(s => (
+                <div key={s.story_id} className="flex items-center justify-between text-sm">
+                  <span className="text-slate-300 truncate max-w-xs">{s.title}</span>
+                  <div className="flex items-center gap-4 text-slate-400 flex-shrink-0">
+                    <span className="flex items-center gap-1"><Heart size={12} /> {s.total_likes}</span>
+                    <span className="flex items-center gap-1"><MessageCircle size={12} /> {s.total_comments}</span>
+                  </div>
+                </div>
+              ))}
+          </div>
+        </div>
+      )}
     </div>
   )
