Index: ChapterX.API/Controllers/ChaptersController.cs
===================================================================
--- ChapterX.API/Controllers/ChaptersController.cs	(revision b373fea3e2c9d404606002f8e7ba265a82d68187)
+++ ChapterX.API/Controllers/ChaptersController.cs	(revision 0b502c2664f4d6c64626f3394b4f1dc540e0aa9b)
@@ -5,5 +5,4 @@
 using Microsoft.AspNetCore.Mvc;
 using Microsoft.Extensions.Logging;
-using System.IdentityModel.Tokens.Jwt;
 using System.Security.Claims;
 
@@ -60,5 +59,5 @@
             }
 
-            var callerId = int.Parse(User.FindFirstValue(JwtRegisteredClaimNames.Sub)!);
+            var callerId = int.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier)!);
             var response = await _mediator.Send(request with { CallerId = callerId });
             return Ok(response);
@@ -70,5 +69,5 @@
         {
             _logger.LogInformation("Deleting chapter with ID: {ChapterId}", id);
-            var callerId = int.Parse(User.FindFirstValue(JwtRegisteredClaimNames.Sub)!);
+            var callerId = int.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier)!);
             var response = await _mediator.Send(new DeleteRequest(id, callerId));
             return Ok(response);
Index: ChapterX.API/Controllers/CommentsController.cs
===================================================================
--- ChapterX.API/Controllers/CommentsController.cs	(revision b373fea3e2c9d404606002f8e7ba265a82d68187)
+++ ChapterX.API/Controllers/CommentsController.cs	(revision 0b502c2664f4d6c64626f3394b4f1dc540e0aa9b)
@@ -6,5 +6,4 @@
 using Microsoft.AspNetCore.Mvc;
 using Microsoft.Extensions.Logging;
-using System.IdentityModel.Tokens.Jwt;
 using System.Security.Claims;
 
@@ -65,5 +64,5 @@
         public async Task<ActionResult> Add([FromBody] AddRequest request)
         {
-            var callerId = int.Parse(User.FindFirstValue(JwtRegisteredClaimNames.Sub)!);
+            var callerId = int.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier)!);
             _logger.LogInformation("Adding a new comment");
             var response = await _mediator.Send(request with { UserId = callerId });
@@ -81,5 +80,5 @@
             }
 
-            var callerId = int.Parse(User.FindFirstValue(JwtRegisteredClaimNames.Sub)!);
+            var callerId = int.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier)!);
             var response = await _mediator.Send(request with { CallerId = callerId });
             return Ok(response);
@@ -91,5 +90,5 @@
         {
             _logger.LogInformation("Deleting comment with ID: {CommentId}", id);
-            var callerId = int.Parse(User.FindFirstValue(JwtRegisteredClaimNames.Sub)!);
+            var callerId = int.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier)!);
             var response = await _mediator.Send(new DeleteRequest(id, callerId));
             return Ok(response);
Index: ChapterX.API/Controllers/StoriesController.cs
===================================================================
--- ChapterX.API/Controllers/StoriesController.cs	(revision b373fea3e2c9d404606002f8e7ba265a82d68187)
+++ ChapterX.API/Controllers/StoriesController.cs	(revision 0b502c2664f4d6c64626f3394b4f1dc540e0aa9b)
@@ -5,5 +5,4 @@
 using Microsoft.AspNetCore.Mvc;
 using Microsoft.Extensions.Logging;
-using System.IdentityModel.Tokens.Jwt;
 using System.Security.Claims;
 
@@ -48,5 +47,5 @@
         public async Task<ActionResult> Add([FromBody] AddRequest request)
         {
-            var callerId = int.Parse(User.FindFirstValue(JwtRegisteredClaimNames.Sub)!);
+            var callerId = int.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier)!);
             _logger.LogInformation("Adding a new story for UserId: {UserId}", callerId);
             var response = await _mediator.Send(request with { UserId = callerId });
@@ -65,5 +64,5 @@
             }
 
-            var callerId = int.Parse(User.FindFirstValue(JwtRegisteredClaimNames.Sub)!);
+            var callerId = int.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier)!);
             var response = await _mediator.Send(request with { CallerId = callerId });
             return Ok(response);
@@ -76,5 +75,5 @@
         {
             _logger.LogInformation("Deleting story with ID: {StoryId}", id);
-            var callerId = int.Parse(User.FindFirstValue(JwtRegisteredClaimNames.Sub)!);
+            var callerId = int.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier)!);
             var response = await _mediator.Send(new DeleteRequest(id, callerId));
             return Ok(response);
Index: ChapterX.API/Controllers/UsersController.cs
===================================================================
--- ChapterX.API/Controllers/UsersController.cs	(revision b373fea3e2c9d404606002f8e7ba265a82d68187)
+++ ChapterX.API/Controllers/UsersController.cs	(revision 0b502c2664f4d6c64626f3394b4f1dc540e0aa9b)
@@ -5,5 +5,4 @@
 using Microsoft.AspNetCore.Mvc;
 using Microsoft.Extensions.Logging;
-using System.IdentityModel.Tokens.Jwt;
 using System.Security.Claims;
 
@@ -69,5 +68,5 @@
             }
 
-            var callerId = int.Parse(User.FindFirstValue(JwtRegisteredClaimNames.Sub)!);
+            var callerId = int.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier)!);
             var isAdmin = User.IsInRole("Admin");
             if (callerId != id && !isAdmin)
@@ -83,5 +82,5 @@
         {
             _logger.LogInformation("Deleting user with ID: {UserId}", id);
-            var callerId = int.Parse(User.FindFirstValue(JwtRegisteredClaimNames.Sub)!);
+            var callerId = int.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier)!);
             var isAdmin = User.IsInRole("Admin");
             if (callerId != id && !isAdmin)
Index: ChapterX.API/Program.cs
===================================================================
--- ChapterX.API/Program.cs	(revision b373fea3e2c9d404606002f8e7ba265a82d68187)
+++ ChapterX.API/Program.cs	(revision 0b502c2664f4d6c64626f3394b4f1dc540e0aa9b)
@@ -9,5 +9,5 @@
 
 var jwtKey = builder.Configuration["Jwt:Key"];
-if (string.IsNullOrWhiteSpace(jwtKey) || jwtKey.StartsWith("change-this"))
+if (string.IsNullOrWhiteSpace(jwtKey))
     throw new InvalidOperationException("Jwt:Key is not configured. Set it via environment variable DOTNET_Jwt__Key before starting the application.");
 
@@ -17,5 +17,6 @@
         policy.WithOrigins("http://localhost:5173", "https://localhost:5173")
               .AllowAnyHeader()
-              .AllowAnyMethod());
+              .AllowAnyMethod()
+              .AllowCredentials());
 });
 
Index: ChapterX.Infrastructure/Data/DataContext/ApplicationDbContext.cs
===================================================================
--- ChapterX.Infrastructure/Data/DataContext/ApplicationDbContext.cs	(revision b373fea3e2c9d404606002f8e7ba265a82d68187)
+++ ChapterX.Infrastructure/Data/DataContext/ApplicationDbContext.cs	(revision 0b502c2664f4d6c64626f3394b4f1dc540e0aa9b)
@@ -187,6 +187,6 @@
                 e.Property(x => x.IsPublic).HasColumnName("is_public");
                 e.Property(x => x.UserId).HasColumnName("user_id");
-                e.Property(x => x.CreatedAt).HasColumnName("created_at");
-                e.Property(x => x.UpdatedAt).HasColumnName("updated_at");
+                e.Property(x => x.CreatedAt).HasColumnName("list_created_at");
+                e.Property(x => x.UpdatedAt).HasColumnName("list_updated_at");
                 e.HasOne(x => x.User).WithMany(u => u.ReadingLists).HasForeignKey(x => x.UserId);
             });
Index: ChapterX.Infrastructure/Repositories/StoryRepository.cs
===================================================================
--- ChapterX.Infrastructure/Repositories/StoryRepository.cs	(revision b373fea3e2c9d404606002f8e7ba265a82d68187)
+++ ChapterX.Infrastructure/Repositories/StoryRepository.cs	(revision 0b502c2664f4d6c64626f3394b4f1dc540e0aa9b)
@@ -19,4 +19,7 @@
                 .Include(s => s.Writer)
                     .ThenInclude(w => w!.User)
+                .Include(s => s.Likes)
+                .Include(s => s.Comments)
+                .Include(s => s.Chapters)
                 .ToListAsync(cancellationToken);
         }
Index: chapterx-frontend/src/App.tsx
===================================================================
--- chapterx-frontend/src/App.tsx	(revision b373fea3e2c9d404606002f8e7ba265a82d68187)
+++ chapterx-frontend/src/App.tsx	(revision 0b502c2664f4d6c64626f3394b4f1dc540e0aa9b)
@@ -8,5 +8,4 @@
 import { Footer } from './components/layout/Footer'
 import { ToastContainer } from './components/ui/Toast'
-import { DevSwitcher } from './components/DevSwitcher'
 import { Spinner } from './components/ui/Spinner'
 
@@ -188,5 +187,4 @@
       <Footer />
       <ToastContainer />
-      <DevSwitcher />
     </div>
   )
Index: chapterx-frontend/src/components/layout/Footer.tsx
===================================================================
--- chapterx-frontend/src/components/layout/Footer.tsx	(revision b373fea3e2c9d404606002f8e7ba265a82d68187)
+++ chapterx-frontend/src/components/layout/Footer.tsx	(revision 0b502c2664f4d6c64626f3394b4f1dc540e0aa9b)
@@ -14,7 +14,4 @@
             <span className="font-serif font-bold text-white">ChapterX</span>
           </Link>
-          <p className="text-slate-500 text-sm">
-            A collaborative storytelling platform for writers and readers.
-          </p>
         </div>
         <div>
Index: chapterx-frontend/src/data/mockData.ts
===================================================================
--- chapterx-frontend/src/data/mockData.ts	(revision b373fea3e2c9d404606002f8e7ba265a82d68187)
+++ chapterx-frontend/src/data/mockData.ts	(revision 0b502c2664f4d6c64626f3394b4f1dc540e0aa9b)
@@ -406,14 +406,14 @@
 
 export const mockGenres: Genre[] = [
-  { genre_id: 1, name: 'Fantasy', story_count: 4 },
-  { genre_id: 2, name: 'Adventure', story_count: 2 },
-  { genre_id: 3, name: 'Romance', story_count: 3 },
-  { genre_id: 4, name: 'Sci-Fi', story_count: 1 },
-  { genre_id: 5, name: 'Historical Fiction', story_count: 2 },
-  { genre_id: 6, name: 'Thriller', story_count: 1 },
-  { genre_id: 7, name: 'Mystery', story_count: 0 },
-  { genre_id: 8, name: 'Horror', story_count: 0 },
-  { genre_id: 9, name: 'Contemporary', story_count: 0 },
-  { genre_id: 10, name: 'Poetry', story_count: 0 },
+  { genre_id: 1, name: 'Fantasy' },
+  { genre_id: 2, name: 'Adventure' },
+  { genre_id: 3, name: 'Romance' },
+  { genre_id: 4, name: 'Sci-Fi' },
+  { genre_id: 5, name: 'Historical Fiction' },
+  { genre_id: 6, name: 'Thriller' },
+  { genre_id: 7, name: 'Mystery' },
+  { genre_id: 8, name: 'Horror' },
+  { genre_id: 9, name: 'Contemporary' },
+  { genre_id: 10, name: 'Poetry' },
 ]
 
Index: chapterx-frontend/src/pages/LandingPage.tsx
===================================================================
--- chapterx-frontend/src/pages/LandingPage.tsx	(revision b373fea3e2c9d404606002f8e7ba265a82d68187)
+++ chapterx-frontend/src/pages/LandingPage.tsx	(revision 0b502c2664f4d6c64626f3394b4f1dc540e0aa9b)
@@ -1,5 +1,5 @@
 import React from 'react'
 import { useNavigate } from 'react-router-dom'
-import { Feather, Star, BookOpen, Users, Sparkles, ArrowRight, ChevronRight } from 'lucide-react'
+import { Feather, BookOpen, Users, Sparkles, ArrowRight, ChevronRight } from 'lucide-react'
 import logo from '../assets/chapterX-removebg-preview.png'
 import { useStoryStore } from '../store/storyStore'
@@ -34,9 +34,4 @@
 
         <div className="relative max-w-7xl mx-auto px-4 text-center">
-          <div className="inline-flex items-center gap-2 px-4 py-2 rounded-full glass text-sm text-indigo-300 mb-8 border border-indigo-500/20">
-            <Star size={14} className="text-amber-400 fill-amber-400" />
-            The collaborative storytelling platform
-          </div>
-
           <div className="flex justify-center mb-6">
             <img src={logo} alt="ChapterX" className="h-32 w-32 object-contain" />
Index: chapterx-frontend/src/pages/admin/AdminGenresPage.tsx
===================================================================
--- chapterx-frontend/src/pages/admin/AdminGenresPage.tsx	(revision b373fea3e2c9d404606002f8e7ba265a82d68187)
+++ chapterx-frontend/src/pages/admin/AdminGenresPage.tsx	(revision 0b502c2664f4d6c64626f3394b4f1dc540e0aa9b)
@@ -10,5 +10,6 @@
 export const AdminGenresPage: React.FC = () => {
   const navigate = useNavigate()
-  const { genres, fetchGenres, addGenre, deleteGenre } = useStoryStore()
+  const { genres, fetchGenres, addGenre, deleteGenre, stories } = useStoryStore()
+  const publishedStories = stories.filter(s => s.status === 'published')
   const { addToast } = useUIStore()
   const [addOpen, setAddOpen] = useState(false)
@@ -75,14 +76,14 @@
               </div>
               <div className="flex items-center gap-4">
-                <span className="text-slate-500 text-sm">{genre.story_count} stories</span>
+                <span className="text-slate-500 text-sm">{publishedStories.filter(s => s.genres.some(g => g.toLowerCase() === genre.name.toLowerCase())).length} stories</span>
                 <button
                   onClick={() => setDeleteTarget(genre)}
                   className={`transition-colors p-1 rounded ${
-                    genre.story_count > 0
+                    publishedStories.some(s => s.genres.some(g => g.toLowerCase() === genre.name.toLowerCase()))
                       ? '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'}
+                  disabled={publishedStories.some(s => s.genres.some(g => g.toLowerCase() === genre.name.toLowerCase()))}
+                  title={publishedStories.some(s => s.genres.some(g => g.toLowerCase() === genre.name.toLowerCase())) ? 'Cannot delete genre with stories' : 'Delete genre'}
                 >
                   <Trash2 size={14} />
Index: chapterx-frontend/src/pages/auth/LoginPage.tsx
===================================================================
--- chapterx-frontend/src/pages/auth/LoginPage.tsx	(revision b373fea3e2c9d404606002f8e7ba265a82d68187)
+++ chapterx-frontend/src/pages/auth/LoginPage.tsx	(revision 0b502c2664f4d6c64626f3394b4f1dc540e0aa9b)
@@ -6,17 +6,8 @@
 import { useUIStore } from '../../store/uiStore'
 import { Button } from '../../components/ui/Button'
-import { Avatar } from '../../components/ui/Avatar'
-import { RoleBadge } from '../../components/ui/Badge'
-
-const quickUsers = [
-  { username: 'admin_alex', name: 'Alex Admin', role: 'admin' as const },
-  { username: 'elena_writes', name: 'Elena Dimitrova', role: 'writer' as const },
-  { username: 'boris_writer', name: 'Boris Nikolov', role: 'writer' as const },
-  { username: 'sara_reader', name: 'Sara Petkovska', role: 'regular' as const },
-]
 
 export const LoginPage: React.FC = () => {
   const navigate = useNavigate()
-  const { login, switchUser } = useAuthStore()
+  const { login } = useAuthStore()
   const { addToast } = useUIStore()
   const [email, setEmail] = useState('')
@@ -49,14 +40,4 @@
   }
 
-  const handleQuickLogin = (username: string) => {
-    const { allUsers } = useAuthStore.getState()
-    const user = allUsers.find(u => u.username === username)
-    if (user) {
-      switchUser(user.user_id)
-      addToast(`Signed in as ${user.name}`)
-      navigate('/')
-    }
-  }
-
   return (
     <div className="min-h-[80vh] flex items-center justify-center px-4 py-12">
@@ -69,30 +50,4 @@
           <h1 className="font-serif text-2xl font-bold text-white">Welcome back</h1>
           <p className="text-slate-400 text-sm mt-2">Sign in to your account</p>
-        </div>
-
-        {/* Quick login */}
-        <div className="mb-6">
-          <p className="text-xs text-slate-500 text-center mb-3">Quick demo login</p>
-          <div className="grid grid-cols-2 gap-2">
-            {quickUsers.map(u => (
-              <button
-                key={u.username}
-                onClick={() => handleQuickLogin(u.username)}
-                className="flex items-center gap-2 p-3 bg-slate-800 border border-slate-700 rounded-xl hover:border-indigo-500/50 hover:bg-slate-700/50 transition-all group"
-              >
-                <Avatar name={u.name} size="sm" />
-                <div className="text-left min-w-0">
-                  <p className="text-white text-xs font-medium truncate">{u.name}</p>
-                  <RoleBadge role={u.role} />
-                </div>
-              </button>
-            ))}
-          </div>
-        </div>
-
-        <div className="flex items-center gap-3 mb-6">
-          <div className="flex-1 h-px bg-slate-700" />
-          <span className="text-slate-600 text-xs">or sign in with email</span>
-          <div className="flex-1 h-px bg-slate-700" />
         </div>
 
Index: chapterx-frontend/src/pages/browse/BrowsePage.tsx
===================================================================
--- chapterx-frontend/src/pages/browse/BrowsePage.tsx	(revision b373fea3e2c9d404606002f8e7ba265a82d68187)
+++ chapterx-frontend/src/pages/browse/BrowsePage.tsx	(revision 0b502c2664f4d6c64626f3394b4f1dc540e0aa9b)
@@ -10,5 +10,4 @@
   { value: 'recent', label: 'Most Recent' },
   { value: 'views', label: 'Most Viewed' },
-  { value: 'comments', label: 'Most Discussed' },
 ]
 
@@ -26,5 +25,5 @@
     let list = stories.filter(s => s.status === 'published')
 
-    if (!showMatureContent && !currentUser) {
+    if (!showMatureContent) {
       list = list.filter(s => !s.mature_content)
     }
@@ -47,6 +46,5 @@
       case 'recent': return [...list].sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime())
       case 'views': return [...list].sort((a, b) => b.total_views - a.total_views)
-      case 'comments': return [...list].sort((a, b) => b.total_comments - a.total_comments)
-      default: return list
+default: return list
     }
   }, [stories, search, selectedGenres, sort, showMatureContent, currentUser])
Index: chapterx-frontend/src/pages/browse/GenrePage.tsx
===================================================================
--- chapterx-frontend/src/pages/browse/GenrePage.tsx	(revision b373fea3e2c9d404606002f8e7ba265a82d68187)
+++ chapterx-frontend/src/pages/browse/GenrePage.tsx	(revision 0b502c2664f4d6c64626f3394b4f1dc540e0aa9b)
@@ -49,5 +49,6 @@
 export const GenresListPage: React.FC = () => {
   const navigate = useNavigate()
-  const { genres } = useStoryStore()
+  const { genres, stories } = useStoryStore()
+  const publishedStories = stories.filter(s => s.status === 'published')
 
   return (
@@ -68,5 +69,5 @@
               <div className="absolute inset-0 flex flex-col items-center justify-center p-4">
                 <p className="font-serif font-semibold text-white text-center">{genre.name}</p>
-                <p className="text-white/60 text-xs mt-1">{genre.story_count} stories</p>
+                <p className="text-white/60 text-xs mt-1">{publishedStories.filter(s => s.genres.some(g => g.toLowerCase() === genre.name.toLowerCase())).length} stories</p>
               </div>
               <div className="absolute inset-0 bg-black/20 group-hover:bg-black/10 transition-colors" />
Index: chapterx-frontend/src/pages/profile/ProfilePage.tsx
===================================================================
--- chapterx-frontend/src/pages/profile/ProfilePage.tsx	(revision b373fea3e2c9d404606002f8e7ba265a82d68187)
+++ chapterx-frontend/src/pages/profile/ProfilePage.tsx	(revision 0b502c2664f4d6c64626f3394b4f1dc540e0aa9b)
@@ -1,11 +1,14 @@
-import React, { useState } from 'react'
+import React, { useState, useEffect } from 'react'
 import { useParams, useNavigate } from 'react-router-dom'
 import { BookOpen, Heart, Users, Calendar, MessageCircle, Eye } from 'lucide-react'
 import { useAuthStore } from '../../store/authStore'
 import { useStoryStore } from '../../store/storyStore'
+import { useUIStore } from '../../store/uiStore'
 import { Avatar } from '../../components/ui/Avatar'
 import { RoleBadge, StatusBadge } from '../../components/ui/Badge'
 import { StoryCard } from '../../components/ui/StoryCard'
 import { GenreBadge } from '../../components/ui/Badge'
+import { Modal } from '../../components/ui/Modal'
+import { Button } from '../../components/ui/Button'
 
 type Tab = 'stories' | 'about'
@@ -14,9 +17,50 @@
   const { username } = useParams<{ username: string }>()
   const navigate = useNavigate()
-  const { allUsers, currentUser } = useAuthStore()
+  const { allUsers, currentUser, fetchAllUsers, updateUser } = useAuthStore()
   const { stories, comments } = useStoryStore()
+  const { addToast } = useUIStore()
   const [tab, setTab] = useState<Tab>('stories')
+  const [loading, setLoading] = useState(false)
+  const [editOpen, setEditOpen] = useState(false)
+  const [editForm, setEditForm] = useState({ username: '', email: '', name: '', surname: '' })
+  const [saving, setSaving] = useState(false)
+
+  useEffect(() => {
+    if (allUsers.length === 0) {
+      setLoading(true)
+      fetchAllUsers().finally(() => setLoading(false))
+    }
+  }, [])
 
   const user = allUsers.find(u => u.username === username)
+
+  const openEdit = () => {
+    if (!user) return
+    setEditForm({ username: user.username, email: user.email, name: user.name, surname: user.surname })
+    setEditOpen(true)
+  }
+
+  const handleEditSave = async () => {
+    if (!user) return
+    setSaving(true)
+    try {
+      await updateUser(user.user_id, editForm)
+      addToast('Profile updated successfully!')
+      setEditOpen(false)
+      navigate(`/profile/${editForm.username}`, { replace: true })
+    } catch (err: any) {
+      addToast(err.response?.data?.message ?? 'Failed to update profile.', 'error')
+    } finally {
+      setSaving(false)
+    }
+  }
+
+  if (loading) {
+    return (
+      <div className="max-w-4xl mx-auto px-4 py-20 text-center">
+        <p className="text-slate-400">Loading profile...</p>
+      </div>
+    )
+  }
 
   if (!user) {
@@ -50,5 +94,5 @@
           <Avatar name={`${user.name} ${user.surname}`} size="xl" className="ring-4 ring-slate-950" />
           {currentUser?.user_id === user.user_id && (
-            <button className="mb-2 text-sm text-indigo-400 hover:text-indigo-300 transition-colors">
+            <button onClick={openEdit} className="mb-2 text-sm text-indigo-400 hover:text-indigo-300 transition-colors">
               Edit Profile
             </button>
@@ -159,4 +203,29 @@
         </div>
       )}
+
+      <Modal isOpen={editOpen} onClose={() => setEditOpen(false)} title="Edit Profile">
+        <div className="space-y-4">
+          {[
+            { label: 'First Name', key: 'name' },
+            { label: 'Last Name', key: 'surname' },
+            { label: 'Username', key: 'username' },
+            { label: 'Email', key: 'email' },
+          ].map(({ label, key }) => (
+            <div key={key}>
+              <label className="block text-sm text-slate-400 mb-1.5">{label}</label>
+              <input
+                type={key === 'email' ? 'email' : 'text'}
+                value={editForm[key as keyof typeof editForm]}
+                onChange={e => setEditForm(p => ({ ...p, [key]: e.target.value }))}
+                className="w-full px-4 py-2.5 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 pt-2">
+            <Button variant="ghost" className="flex-1" onClick={() => setEditOpen(false)}>Cancel</Button>
+            <Button className="flex-1" loading={saving} onClick={handleEditSave}>Save Changes</Button>
+          </div>
+        </div>
+      </Modal>
     </div>
   )
Index: chapterx-frontend/src/store/authStore.ts
===================================================================
--- chapterx-frontend/src/store/authStore.ts	(revision b373fea3e2c9d404606002f8e7ba265a82d68187)
+++ chapterx-frontend/src/store/authStore.ts	(revision 0b502c2664f4d6c64626f3394b4f1dc540e0aa9b)
@@ -18,4 +18,5 @@
   setShowMatureContent: (show: boolean) => void
   updateUserRole: (userId: number, role: UserRole) => void
+  updateUser: (userId: number, data: { username: string; email: string; name: string; surname: string }) => Promise<void>
   addUser: (user: User) => void
   fetchAllUsers: () => Promise<void>
@@ -66,5 +67,5 @@
         )
         if (!user) throw new Error('User not found. Try using a quick-login option.')
-        set({ currentUser: user, token: 'mock-token' })
+        set({ currentUser: user, token: null })
       },
 
@@ -110,5 +111,5 @@
           allUsers: [...state.allUsers, newUser],
           currentUser: newUser,
-          token: 'mock-token',
+          token: null,
         }))
       },
@@ -120,5 +121,5 @@
         }
         const user = get().allUsers.find(u => u.user_id === userId)
-        if (user) set({ currentUser: user, token: 'mock-token' })
+        if (user) set({ currentUser: user, token: null })
       },
 
@@ -133,4 +134,15 @@
               : state.currentUser,
         })),
+
+      updateUser: async (userId, data) => {
+        const { token } = get()
+        await axios.put(`${API_BASE}/users/${userId}`, { id: userId, ...data }, {
+          headers: token ? { Authorization: `Bearer ${token}` } : {},
+        })
+        set(state => ({
+          allUsers: state.allUsers.map(u => u.user_id === userId ? { ...u, ...data } : u),
+          currentUser: state.currentUser?.user_id === userId ? { ...state.currentUser, ...data } : state.currentUser,
+        }))
+      },
 
       addUser: (user: User) =>
Index: chapterx-frontend/src/store/storyStore.ts
===================================================================
--- chapterx-frontend/src/store/storyStore.ts	(revision b373fea3e2c9d404606002f8e7ba265a82d68187)
+++ chapterx-frontend/src/store/storyStore.ts	(revision 0b502c2664f4d6c64626f3394b4f1dc540e0aa9b)
@@ -49,5 +49,6 @@
   try {
     const token = JSON.parse(localStorage.getItem('chapterx-auth') || '{}')?.state?.token
-    return token ? { Authorization: `Bearer ${token}` } : {}
+    if (!token || token === 'mock-token') return {}
+    return { Authorization: `Bearer ${token}` }
   } catch {
     return {}
@@ -145,8 +146,8 @@
         created_at: s.createdAt,
         updated_at: s.updatedAt,
-        total_likes: 0,
-        total_comments: 0,
-        total_chapters: 0,
-        total_views: 0,
+        total_likes: s.likes?.length ?? 0,
+        total_comments: s.comments?.length ?? 0,
+        total_chapters: s.chapters?.length ?? 0,
+        total_views: s.chapters?.reduce((sum: number, c: any) => sum + (c.viewCount ?? 0), 0) ?? 0,
         genres: (s.hasGenres ?? []).map((hg: any) => hg.genre?.name ?? hg.name).filter(Boolean),
       }))
Index: chapterx-frontend/src/types/index.ts
===================================================================
--- chapterx-frontend/src/types/index.ts	(revision b373fea3e2c9d404606002f8e7ba265a82d68187)
+++ chapterx-frontend/src/types/index.ts	(revision 0b502c2664f4d6c64626f3394b4f1dc540e0aa9b)
@@ -120,5 +120,4 @@
   genre_id: number
   name: string
-  story_count: number
 }
 
