Index: chapterx-frontend/src/pages/admin/AdminContentPage.tsx
===================================================================
--- chapterx-frontend/src/pages/admin/AdminContentPage.tsx	(revision b62cefc14094ca5ac7154f7d48797a1e6c444935)
+++ chapterx-frontend/src/pages/admin/AdminContentPage.tsx	(revision b62cefc14094ca5ac7154f7d48797a1e6c444935)
@@ -0,0 +1,32 @@
+import React from 'react'
+import { useNavigate } from 'react-router-dom'
+import { ArrowLeft, BookOpen } from 'lucide-react'
+import { useStoryStore } from '../../store/storyStore'
+import { ContentModerationTable } from '../../components/admin/ContentModerationTable'
+
+export const AdminContentPage: React.FC = () => {
+  const navigate = useNavigate()
+  const { stories } = useStoryStore()
+
+  return (
+    <div className="max-w-7xl mx-auto px-4 py-8">
+      <div className="flex items-center gap-3 mb-8">
+        <button onClick={() => navigate('/admin')} className="text-slate-400 hover:text-white transition-colors">
+          <ArrowLeft size={20} />
+        </button>
+        <div>
+          <h1 className="font-serif text-2xl font-bold text-white">Content Moderation</h1>
+          <p className="text-slate-400 text-sm mt-0.5">{stories.length} total stories</p>
+        </div>
+      </div>
+
+      <div className="bg-slate-900 border border-slate-700 rounded-2xl p-6">
+        <div className="flex items-center gap-2 mb-6">
+          <BookOpen size={18} className="text-violet-400" />
+          <h2 className="text-white font-semibold">All Stories</h2>
+        </div>
+        <ContentModerationTable />
+      </div>
+    </div>
+  )
+}
Index: chapterx-frontend/src/pages/admin/AdminDashboard.tsx
===================================================================
--- chapterx-frontend/src/pages/admin/AdminDashboard.tsx	(revision b62cefc14094ca5ac7154f7d48797a1e6c444935)
+++ chapterx-frontend/src/pages/admin/AdminDashboard.tsx	(revision b62cefc14094ca5ac7154f7d48797a1e6c444935)
@@ -0,0 +1,130 @@
+import React from 'react'
+import { useNavigate } from 'react-router-dom'
+import { Shield, Users, BookOpen, AlertTriangle, Settings, ChevronRight } from 'lucide-react'
+import { useAuthStore } from '../../store/authStore'
+import { useStoryStore } from '../../store/storyStore'
+import { useNotificationStore } from '../../store/notificationStore'
+import { PlatformStats } from '../../components/admin/PlatformStats'
+import { Button } from '../../components/ui/Button'
+import { RoleBadge } from '../../components/ui/Badge'
+import { Avatar } from '../../components/ui/Avatar'
+
+function timeAgo(str: string): string {
+  const diff = Date.now() - new Date(str).getTime()
+  const m = Math.floor(diff / 60000)
+  if (m < 1) return 'just now'
+  if (m < 60) return `${m}m ago`
+  const h = Math.floor(m / 60)
+  if (h < 24) return `${h}h ago`
+  return `${Math.floor(h / 24)}d ago`
+}
+
+export const AdminDashboard: React.FC = () => {
+  const navigate = useNavigate()
+  const { allUsers } = useAuthStore()
+  const { stories } = useStoryStore()
+  const { notifications } = useNotificationStore()
+
+  const recentUsers = [...allUsers].sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()).slice(0, 5)
+  const recentStories = [...stories].sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()).slice(0, 5)
+
+  const adminLinks = [
+    { to: '/admin/users', icon: <Users size={20} className="text-blue-400" />, label: 'Manage Users', desc: `${allUsers.length} registered users`, color: 'bg-blue-500/10 border-blue-500/20' },
+    { to: '/admin/content', icon: <BookOpen size={20} className="text-violet-400" />, label: 'Content Moderation', desc: `${stories.length} total stories`, color: 'bg-violet-500/10 border-violet-500/20' },
+    { to: '/admin/genres', icon: <Settings size={20} className="text-amber-400" />, label: 'Manage Genres', desc: 'Add or remove genres', color: 'bg-amber-500/10 border-amber-500/20' },
+  ]
+
+  return (
+    <div className="max-w-7xl mx-auto px-4 py-8">
+      {/* Header */}
+      <div className="flex items-center gap-3 mb-8">
+        <div className="w-10 h-10 rounded-xl bg-rose-500/20 flex items-center justify-center">
+          <Shield size={20} className="text-rose-400" />
+        </div>
+        <div>
+          <h1 className="font-serif text-3xl font-bold text-white">Admin Dashboard</h1>
+          <p className="text-slate-400 text-sm mt-0.5">Platform management and moderation</p>
+        </div>
+      </div>
+
+      {/* Platform stats */}
+      <div className="mb-8">
+        <h2 className="font-serif text-xl font-bold text-white mb-4">Platform Overview</h2>
+        <PlatformStats />
+      </div>
+
+      {/* Quick links */}
+      <div className="grid grid-cols-1 sm:grid-cols-3 gap-4 mb-8">
+        {adminLinks.map(link => (
+          <button
+            key={link.to}
+            onClick={() => navigate(link.to)}
+            className={`flex items-center gap-4 p-5 rounded-2xl border ${link.color} hover:scale-105 transition-all group text-left`}
+          >
+            <div className="w-12 h-12 rounded-xl bg-slate-800 flex items-center justify-center">
+              {link.icon}
+            </div>
+            <div className="flex-1">
+              <p className="text-white font-semibold">{link.label}</p>
+              <p className="text-slate-400 text-sm">{link.desc}</p>
+            </div>
+            <ChevronRight size={16} className="text-slate-500 group-hover:text-white transition-colors" />
+          </button>
+        ))}
+      </div>
+
+      <div className="grid grid-cols-1 lg:grid-cols-2 gap-8">
+        {/* Recent users */}
+        <div className="bg-slate-800 border border-slate-700 rounded-2xl p-6">
+          <div className="flex items-center justify-between mb-4">
+            <h3 className="font-serif text-lg font-bold text-white">Recent Users</h3>
+            <Button size="sm" variant="ghost" onClick={() => navigate('/admin/users')}>
+              View all <ChevronRight size={14} />
+            </Button>
+          </div>
+          <div className="space-y-3">
+            {recentUsers.map(user => (
+              <div key={user.user_id} className="flex items-center gap-3">
+                <Avatar name={user.name} size="sm" />
+                <div className="flex-1 min-w-0">
+                  <p className="text-white text-sm font-medium">{user.name} {user.surname}</p>
+                  <p className="text-slate-500 text-xs">@{user.username}</p>
+                </div>
+                <RoleBadge role={user.role} />
+              </div>
+            ))}
+          </div>
+        </div>
+
+        {/* Recent stories */}
+        <div className="bg-slate-800 border border-slate-700 rounded-2xl p-6">
+          <div className="flex items-center justify-between mb-4">
+            <h3 className="font-serif text-lg font-bold text-white">Recent Stories</h3>
+            <Button size="sm" variant="ghost" onClick={() => navigate('/admin/content')}>
+              View all <ChevronRight size={14} />
+            </Button>
+          </div>
+          <div className="space-y-3">
+            {recentStories.map(story => (
+              <div key={story.story_id} className="flex items-center gap-3">
+                <div className="flex-1 min-w-0">
+                  <p className="text-white text-sm font-medium truncate">{story.title}</p>
+                  <p className="text-slate-500 text-xs">by @{story.author_username}</p>
+                </div>
+                <span className={`text-xs px-2 py-0.5 rounded-full ${
+                  story.status === 'published'
+                    ? 'bg-emerald-500/20 text-emerald-400'
+                    : story.status === 'draft'
+                    ? 'bg-amber-500/20 text-amber-400'
+                    : 'bg-slate-500/20 text-slate-400'
+                }`}>
+                  {story.status}
+                </span>
+              </div>
+            ))}
+          </div>
+        </div>
+      </div>
+    </div>
+  )
+}
Index: chapterx-frontend/src/pages/admin/AdminGenresPage.tsx
===================================================================
--- chapterx-frontend/src/pages/admin/AdminGenresPage.tsx	(revision b62cefc14094ca5ac7154f7d48797a1e6c444935)
+++ chapterx-frontend/src/pages/admin/AdminGenresPage.tsx	(revision b62cefc14094ca5ac7154f7d48797a1e6c444935)
@@ -0,0 +1,126 @@
+import React, { useState } from 'react'
+import { useNavigate } from 'react-router-dom'
+import { ArrowLeft, Plus, Trash2, Tag } from 'lucide-react'
+import { useStoryStore } from '../../store/storyStore'
+import { useUIStore } from '../../store/uiStore'
+import { Button } from '../../components/ui/Button'
+import { Modal } from '../../components/ui/Modal'
+import { Genre } from '../../types'
+
+export const AdminGenresPage: React.FC = () => {
+  const navigate = useNavigate()
+  const { genres, addGenre, deleteGenre } = useStoryStore()
+  const { addToast } = useUIStore()
+  const [addOpen, setAddOpen] = useState(false)
+  const [newName, setNewName] = useState('')
+  const [deleteTarget, setDeleteTarget] = useState<Genre | null>(null)
+
+  const handleAdd = () => {
+    if (!newName.trim()) return
+    if (genres.some(g => g.name.toLowerCase() === newName.trim().toLowerCase())) {
+      addToast('Genre already exists', 'error')
+      return
+    }
+    addGenre({ genre_id: Date.now(), name: newName.trim(), story_count: 0 })
+    addToast(`Genre "${newName.trim()}" added!`)
+    setNewName('')
+    setAddOpen(false)
+  }
+
+  const handleDelete = (genre: Genre) => {
+    if (genre.story_count > 0) {
+      addToast('Cannot delete genre with associated stories', 'error')
+      return
+    }
+    deleteGenre(genre.genre_id)
+    addToast(`Genre "${genre.name}" deleted`, 'info')
+    setDeleteTarget(null)
+  }
+
+  return (
+    <div className="max-w-4xl mx-auto px-4 py-8">
+      <div className="flex items-center justify-between mb-8">
+        <div className="flex items-center gap-3">
+          <button onClick={() => navigate('/admin')} className="text-slate-400 hover:text-white transition-colors">
+            <ArrowLeft size={20} />
+          </button>
+          <div>
+            <h1 className="font-serif text-2xl font-bold text-white">Manage Genres</h1>
+            <p className="text-slate-400 text-sm mt-0.5">{genres.length} genres</p>
+          </div>
+        </div>
+        <Button onClick={() => setAddOpen(true)}>
+          <Plus size={16} />
+          Add Genre
+        </Button>
+      </div>
+
+      <div className="bg-slate-900 border border-slate-700 rounded-2xl overflow-hidden">
+        <div className="flex items-center gap-2 px-6 py-4 border-b border-slate-700">
+          <Tag size={18} className="text-amber-400" />
+          <h2 className="text-white font-semibold">All Genres</h2>
+        </div>
+        <div className="divide-y divide-slate-800">
+          {genres.map(genre => (
+            <div key={genre.genre_id} className="flex items-center justify-between px-6 py-4 hover:bg-slate-800/50 transition-colors">
+              <div className="flex items-center gap-4">
+                <div className="w-2 h-2 rounded-full bg-indigo-500" />
+                <span className="text-white font-medium">{genre.name}</span>
+              </div>
+              <div className="flex items-center gap-4">
+                <span className="text-slate-500 text-sm">{genre.story_count} stories</span>
+                <button
+                  onClick={() => setDeleteTarget(genre)}
+                  className={`transition-colors p-1 rounded ${
+                    genre.story_count > 0
+                      ? 'text-slate-700 cursor-not-allowed'
+                      : 'text-slate-500 hover:text-rose-400 hover:bg-rose-500/10'
+                  }`}
+                  disabled={genre.story_count > 0}
+                  title={genre.story_count > 0 ? 'Cannot delete genre with stories' : 'Delete genre'}
+                >
+                  <Trash2 size={14} />
+                </button>
+              </div>
+            </div>
+          ))}
+        </div>
+      </div>
+
+      {/* Add modal */}
+      <Modal isOpen={addOpen} onClose={() => setAddOpen(false)} title="Add Genre" size="sm">
+        <div className="space-y-4">
+          <div>
+            <label className="block text-sm text-slate-400 mb-1.5">Genre Name</label>
+            <input
+              value={newName}
+              onChange={e => setNewName(e.target.value)}
+              onKeyDown={e => e.key === 'Enter' && handleAdd()}
+              placeholder="e.g., Dystopia..."
+              className="w-full px-4 py-3 bg-slate-800 border border-slate-700 rounded-xl text-white placeholder-slate-500 focus:outline-none focus:border-indigo-500"
+            />
+          </div>
+          <div className="flex gap-3">
+            <Button variant="secondary" className="flex-1" onClick={() => setAddOpen(false)}>Cancel</Button>
+            <Button className="flex-1" onClick={handleAdd} disabled={!newName.trim()}>Add Genre</Button>
+          </div>
+        </div>
+      </Modal>
+
+      {/* Delete confirm */}
+      <Modal isOpen={!!deleteTarget} onClose={() => setDeleteTarget(null)} title="Delete Genre" size="sm">
+        {deleteTarget && (
+          <div className="space-y-4">
+            <p className="text-slate-300 text-sm">
+              Delete the genre <strong className="text-white">"{deleteTarget.name}"</strong>? This action cannot be undone.
+            </p>
+            <div className="flex gap-3">
+              <Button variant="secondary" className="flex-1" onClick={() => setDeleteTarget(null)}>Cancel</Button>
+              <Button variant="danger" className="flex-1" onClick={() => handleDelete(deleteTarget)}>Delete</Button>
+            </div>
+          </div>
+        )}
+      </Modal>
+    </div>
+  )
+}
Index: chapterx-frontend/src/pages/admin/AdminUsersPage.tsx
===================================================================
--- chapterx-frontend/src/pages/admin/AdminUsersPage.tsx	(revision b62cefc14094ca5ac7154f7d48797a1e6c444935)
+++ chapterx-frontend/src/pages/admin/AdminUsersPage.tsx	(revision b62cefc14094ca5ac7154f7d48797a1e6c444935)
@@ -0,0 +1,33 @@
+import React from 'react'
+import { useNavigate } from 'react-router-dom'
+import { ArrowLeft, Users } from 'lucide-react'
+import { useAuthStore } from '../../store/authStore'
+import { UserTable } from '../../components/admin/UserTable'
+import { Button } from '../../components/ui/Button'
+
+export const AdminUsersPage: React.FC = () => {
+  const navigate = useNavigate()
+  const { allUsers } = useAuthStore()
+
+  return (
+    <div className="max-w-7xl mx-auto px-4 py-8">
+      <div className="flex items-center gap-3 mb-8">
+        <button onClick={() => navigate('/admin')} className="text-slate-400 hover:text-white transition-colors">
+          <ArrowLeft size={20} />
+        </button>
+        <div>
+          <h1 className="font-serif text-2xl font-bold text-white">User Management</h1>
+          <p className="text-slate-400 text-sm mt-0.5">{allUsers.length} registered users</p>
+        </div>
+      </div>
+
+      <div className="bg-slate-900 border border-slate-700 rounded-2xl p-6">
+        <div className="flex items-center gap-2 mb-6">
+          <Users size={18} className="text-blue-400" />
+          <h2 className="text-white font-semibold">All Users</h2>
+        </div>
+        <UserTable />
+      </div>
+    </div>
+  )
+}
