Index: chapterx-frontend/src/components/admin/ContentModerationTable.tsx
===================================================================
--- chapterx-frontend/src/components/admin/ContentModerationTable.tsx	(revision b62cefc14094ca5ac7154f7d48797a1e6c444935)
+++ chapterx-frontend/src/components/admin/ContentModerationTable.tsx	(revision b62cefc14094ca5ac7154f7d48797a1e6c444935)
@@ -0,0 +1,124 @@
+import React, { useState } from 'react'
+import { Trash2, Eye, AlertTriangle } from 'lucide-react'
+import { useStoryStore } from '../../store/storyStore'
+import { useNotificationStore } from '../../store/notificationStore'
+import { useUIStore } from '../../store/uiStore'
+import { Story } from '../../types'
+import { StatusBadge, GenreBadge } from '../ui/Badge'
+import { Button } from '../ui/Button'
+import { Modal } from '../ui/Modal'
+import { useNavigate } from 'react-router-dom'
+
+export const ContentModerationTable: React.FC = () => {
+  const { stories, deleteStory } = useStoryStore()
+  const { addNotification } = useNotificationStore()
+  const { addToast } = useUIStore()
+  const navigate = useNavigate()
+  const [confirmStory, setConfirmStory] = useState<Story | null>(null)
+
+  const handleDelete = (story: Story) => {
+    deleteStory(story.story_id)
+    addNotification({
+      user_id: story.user_id,
+      type: 'system',
+      title: 'Story Removed',
+      message: `Your story "${story.title}" has been removed by an administrator.`,
+    })
+    addToast(`"${story.title}" removed from platform`, 'info')
+    setConfirmStory(null)
+  }
+
+  const formatDate = (str: string) =>
+    new Date(str).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })
+
+  return (
+    <div>
+      <div className="overflow-x-auto rounded-xl border border-slate-700">
+        <table className="w-full text-sm">
+          <thead>
+            <tr className="border-b border-slate-700 bg-slate-800">
+              <th className="text-left px-4 py-3 text-slate-400 font-medium">Story</th>
+              <th className="text-left px-4 py-3 text-slate-400 font-medium hidden md:table-cell">Author</th>
+              <th className="text-left px-4 py-3 text-slate-400 font-medium hidden lg:table-cell">Genres</th>
+              <th className="text-left px-4 py-3 text-slate-400 font-medium">Status</th>
+              <th className="text-left px-4 py-3 text-slate-400 font-medium hidden sm:table-cell">Published</th>
+              <th className="text-right px-4 py-3 text-slate-400 font-medium">Actions</th>
+            </tr>
+          </thead>
+          <tbody className="divide-y divide-slate-800">
+            {stories.map(story => (
+              <tr key={story.story_id} className="hover:bg-slate-800/50 transition-colors">
+                <td className="px-4 py-3">
+                  <div>
+                    <p className="text-white font-medium line-clamp-1">{story.title}</p>
+                    {story.mature_content && (
+                      <span className="text-xs text-rose-400">18+</span>
+                    )}
+                  </div>
+                </td>
+                <td className="px-4 py-3 text-slate-400 hidden md:table-cell">@{story.author_username}</td>
+                <td className="px-4 py-3 hidden lg:table-cell">
+                  <div className="flex flex-wrap gap-1">
+                    {story.genres.slice(0, 2).map(g => <GenreBadge key={g} genre={g} />)}
+                  </div>
+                </td>
+                <td className="px-4 py-3"><StatusBadge status={story.status} /></td>
+                <td className="px-4 py-3 text-slate-500 hidden sm:table-cell">{formatDate(story.created_at)}</td>
+                <td className="px-4 py-3">
+                  <div className="flex items-center justify-end gap-2">
+                    <button
+                      onClick={() => navigate(`/story/${story.story_id}`)}
+                      className="text-slate-400 hover:text-white transition-colors p-1"
+                    >
+                      <Eye size={14} />
+                    </button>
+                    <button
+                      onClick={() => setConfirmStory(story)}
+                      className="text-slate-400 hover:text-rose-400 transition-colors p-1"
+                    >
+                      <Trash2 size={14} />
+                    </button>
+                  </div>
+                </td>
+              </tr>
+            ))}
+          </tbody>
+        </table>
+        {stories.length === 0 && (
+          <div className="text-center py-10 text-slate-500">No stories to moderate.</div>
+        )}
+      </div>
+
+      {/* Confirm modal */}
+      <Modal
+        isOpen={!!confirmStory}
+        onClose={() => setConfirmStory(null)}
+        title="Remove Story"
+        size="sm"
+      >
+        {confirmStory && (
+          <div className="space-y-4">
+            <div className="flex items-start gap-3 p-3 bg-rose-500/10 rounded-xl border border-rose-500/20">
+              <AlertTriangle size={18} className="text-rose-400 flex-shrink-0 mt-0.5" />
+              <div>
+                <p className="text-white font-medium text-sm">"{confirmStory.title}"</p>
+                <p className="text-slate-400 text-xs mt-1">
+                  This will permanently remove the story and notify the author. This action cannot be undone.
+                </p>
+              </div>
+            </div>
+            <div className="flex gap-3">
+              <Button variant="secondary" className="flex-1" onClick={() => setConfirmStory(null)}>
+                Cancel
+              </Button>
+              <Button variant="danger" className="flex-1" onClick={() => handleDelete(confirmStory)}>
+                <Trash2 size={14} />
+                Remove Story
+              </Button>
+            </div>
+          </div>
+        )}
+      </Modal>
+    </div>
+  )
+}
Index: chapterx-frontend/src/components/admin/PlatformStats.tsx
===================================================================
--- chapterx-frontend/src/components/admin/PlatformStats.tsx	(revision b62cefc14094ca5ac7154f7d48797a1e6c444935)
+++ chapterx-frontend/src/components/admin/PlatformStats.tsx	(revision b62cefc14094ca5ac7154f7d48797a1e6c444935)
@@ -0,0 +1,37 @@
+import React from 'react'
+import { Users, BookOpen, FileText, Heart, Eye, MessageCircle } from 'lucide-react'
+import { useAuthStore } from '../../store/authStore'
+import { useStoryStore } from '../../store/storyStore'
+
+export const PlatformStats: React.FC = () => {
+  const { allUsers } = useAuthStore()
+  const { stories, comments } = useStoryStore()
+
+  const totalViews = stories.reduce((acc, s) => acc + s.total_views, 0)
+  const totalLikes = stories.reduce((acc, s) => acc + s.total_likes, 0)
+  const published = stories.filter(s => s.status === 'published').length
+
+  const stats = [
+    { icon: <Users size={24} className="text-blue-300" />, label: 'Total Users', value: allUsers.length, color: 'bg-blue-500/20', change: '+12 this month' },
+    { icon: <BookOpen size={24} className="text-violet-300" />, label: 'Total Stories', value: stories.length, color: 'bg-violet-500/20', change: `${published} published` },
+    { icon: <FileText size={24} className="text-emerald-300" />, label: 'Comments', value: comments.length, color: 'bg-emerald-500/20', change: 'Platform-wide' },
+    { icon: <Heart size={24} className="text-rose-300" />, label: 'Total Likes', value: totalLikes.toLocaleString(), color: 'bg-rose-500/20', change: 'Across all stories' },
+    { icon: <Eye size={24} className="text-amber-300" />, label: 'Total Views', value: totalViews.toLocaleString(), color: 'bg-amber-500/20', change: 'All time' },
+    { icon: <MessageCircle size={24} className="text-cyan-300" />, label: 'Writers', value: allUsers.filter(u => u.role === 'writer').length, color: 'bg-cyan-500/20', change: 'Active creators' },
+  ]
+
+  return (
+    <div className="grid grid-cols-2 md:grid-cols-3 gap-4">
+      {stats.map(stat => (
+        <div key={stat.label} className="bg-slate-800 border border-slate-700 rounded-2xl p-6">
+          <div className={`w-12 h-12 rounded-xl ${stat.color} flex items-center justify-center mb-4`}>
+            {stat.icon}
+          </div>
+          <p className="text-3xl font-bold text-white mb-1">{stat.value}</p>
+          <p className="text-slate-400 text-sm font-medium">{stat.label}</p>
+          <p className="text-slate-600 text-xs mt-1">{stat.change}</p>
+        </div>
+      ))}
+    </div>
+  )
+}
Index: chapterx-frontend/src/components/admin/UserTable.tsx
===================================================================
--- chapterx-frontend/src/components/admin/UserTable.tsx	(revision b62cefc14094ca5ac7154f7d48797a1e6c444935)
+++ chapterx-frontend/src/components/admin/UserTable.tsx	(revision b62cefc14094ca5ac7154f7d48797a1e6c444935)
@@ -0,0 +1,153 @@
+import React, { useState } from 'react'
+import { Search, Shield, UserX, UserCheck } from 'lucide-react'
+import { useAuthStore } from '../../store/authStore'
+import { useNotificationStore } from '../../store/notificationStore'
+import { useUIStore } from '../../store/uiStore'
+import { User, UserRole } from '../../types'
+import { Avatar } from '../ui/Avatar'
+import { RoleBadge } from '../ui/Badge'
+import { Button } from '../ui/Button'
+import { Modal } from '../ui/Modal'
+
+export const UserTable: React.FC = () => {
+  const { allUsers, updateUserRole, currentUser } = useAuthStore()
+  const { addNotification } = useNotificationStore()
+  const { addToast } = useUIStore()
+  const [search, setSearch] = useState('')
+  const [confirmUser, setConfirmUser] = useState<User | null>(null)
+  const [confirmAction, setConfirmAction] = useState<'promote' | 'demote' | null>(null)
+
+  const filtered = allUsers.filter(
+    u =>
+      u.username.toLowerCase().includes(search.toLowerCase()) ||
+      u.email.toLowerCase().includes(search.toLowerCase()) ||
+      u.name.toLowerCase().includes(search.toLowerCase())
+  )
+
+  const handlePromote = (user: User) => {
+    const newRole: UserRole = user.role === 'regular' ? 'writer' : user.role === 'writer' ? 'admin' : 'admin'
+    updateUserRole(user.user_id, newRole)
+    addNotification({
+      user_id: user.user_id,
+      type: 'system',
+      title: 'Role Updated',
+      message: `Your account has been promoted to ${newRole}.`,
+    })
+    addToast(`${user.username} promoted to ${newRole}`)
+    setConfirmUser(null)
+  }
+
+  const handleDemote = (user: User) => {
+    const newRole: UserRole = user.role === 'admin' ? 'writer' : 'regular'
+    updateUserRole(user.user_id, newRole)
+    addToast(`${user.username} role changed to ${newRole}`, 'info')
+    setConfirmUser(null)
+  }
+
+  const formatDate = (str: string) =>
+    new Date(str).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })
+
+  return (
+    <div>
+      {/* Search */}
+      <div className="relative mb-4">
+        <Search size={16} className="absolute left-3 top-1/2 -translate-y-1/2 text-slate-500" />
+        <input
+          value={search}
+          onChange={e => setSearch(e.target.value)}
+          placeholder="Search users..."
+          className="w-full pl-9 pr-4 py-2.5 bg-slate-800 border border-slate-700 rounded-xl text-sm text-white placeholder-slate-500 focus:outline-none focus:border-indigo-500"
+        />
+      </div>
+
+      {/* Table */}
+      <div className="overflow-x-auto rounded-xl border border-slate-700">
+        <table className="w-full text-sm">
+          <thead>
+            <tr className="border-b border-slate-700 bg-slate-800">
+              <th className="text-left px-4 py-3 text-slate-400 font-medium">User</th>
+              <th className="text-left px-4 py-3 text-slate-400 font-medium hidden md:table-cell">Email</th>
+              <th className="text-left px-4 py-3 text-slate-400 font-medium">Role</th>
+              <th className="text-left px-4 py-3 text-slate-400 font-medium hidden sm:table-cell">Joined</th>
+              <th className="text-right px-4 py-3 text-slate-400 font-medium">Actions</th>
+            </tr>
+          </thead>
+          <tbody className="divide-y divide-slate-800">
+            {filtered.map(user => (
+              <tr key={user.user_id} className="hover:bg-slate-800/50 transition-colors">
+                <td className="px-4 py-3">
+                  <div className="flex items-center gap-3">
+                    <Avatar name={user.name} size="sm" />
+                    <div>
+                      <p className="text-white font-medium">{user.name} {user.surname}</p>
+                      <p className="text-slate-500 text-xs">@{user.username}</p>
+                    </div>
+                  </div>
+                </td>
+                <td className="px-4 py-3 text-slate-400 hidden md:table-cell">{user.email}</td>
+                <td className="px-4 py-3"><RoleBadge role={user.role} /></td>
+                <td className="px-4 py-3 text-slate-500 hidden sm:table-cell">{formatDate(user.created_at)}</td>
+                <td className="px-4 py-3">
+                  <div className="flex items-center justify-end gap-2">
+                    {user.user_id !== currentUser?.user_id && user.role !== 'admin' && (
+                      <button
+                        onClick={() => { setConfirmUser(user); setConfirmAction('promote') }}
+                        className="flex items-center gap-1 text-xs text-indigo-400 hover:text-indigo-300 px-2 py-1 rounded bg-indigo-500/10 hover:bg-indigo-500/20 transition-colors"
+                      >
+                        <UserCheck size={12} />
+                        Promote
+                      </button>
+                    )}
+                    {user.user_id !== currentUser?.user_id && user.role !== 'regular' && (
+                      <button
+                        onClick={() => { setConfirmUser(user); setConfirmAction('demote') }}
+                        className="flex items-center gap-1 text-xs text-rose-400 hover:text-rose-300 px-2 py-1 rounded bg-rose-500/10 hover:bg-rose-500/20 transition-colors"
+                      >
+                        <UserX size={12} />
+                        Demote
+                      </button>
+                    )}
+                  </div>
+                </td>
+              </tr>
+            ))}
+          </tbody>
+        </table>
+        {filtered.length === 0 && (
+          <div className="text-center py-10 text-slate-500">No users found.</div>
+        )}
+      </div>
+
+      {/* Confirm modal */}
+      <Modal
+        isOpen={!!confirmUser && !!confirmAction}
+        onClose={() => { setConfirmUser(null); setConfirmAction(null) }}
+        title={confirmAction === 'promote' ? 'Promote User' : 'Demote User'}
+        size="sm"
+      >
+        {confirmUser && (
+          <div className="space-y-4">
+            <p className="text-slate-300 text-sm">
+              {confirmAction === 'promote'
+                ? `Promote @${confirmUser.username} to the next role tier?`
+                : `Demote @${confirmUser.username} to a lower role?`}
+            </p>
+            <div className="flex gap-3">
+              <Button variant="secondary" className="flex-1" onClick={() => { setConfirmUser(null); setConfirmAction(null) }}>
+                Cancel
+              </Button>
+              <Button
+                variant={confirmAction === 'promote' ? 'primary' : 'danger'}
+                className="flex-1"
+                onClick={() => confirmAction === 'promote' ? handlePromote(confirmUser) : handleDemote(confirmUser)}
+              >
+                <Shield size={14} />
+                Confirm
+              </Button>
+            </div>
+          </div>
+        )}
+      </Modal>
+    </div>
+  )
+}
