Index: backend/controllers/forumController.js
===================================================================
--- backend/controllers/forumController.js	(revision c5eb6c411fda602bce3df7b94bd5a81184aeb0f3)
+++ backend/controllers/forumController.js	(revision 005a72ba4d8bb9e622edd0ee4162c830ab665f0a)
@@ -10,4 +10,5 @@
 
 const createForumPost = async (req, res) => {
+  console.log('Creating forum post', req.body, res.body);
   const { title, content, authorId, authorName } = req.body;
 
@@ -47,15 +48,10 @@
         try {
           const aiResponse = await analyzePostContent(post.title, post.content);
-          console.log(aiResponse);
-          if (aiResponse.aiResponse === 'APPROPRIATE') {
-            console.log('AI analysis passed');
-          } else if (aiResponse.aiResponse === 'INAPPROPRIATE') {
-            console.log('AI analysis failed:', aiResponse.reason);
+          if (aiResponse.aiResponse === 'INAPPROPRIATE') {
+            console.log('AI analysis says INAPPROPRIATE:', aiResponse.reason);
             return res.status(400).json({
               error: 'Content is not appropriate for the forum',
             });
-          } else {
-            console.log('AI analysis inconclusive:', aiResponse.reason);
-          }
+          } 
         } catch (error) {
           console.error('AI analysis error:', error);
Index: backend/controllers/reviewController.js
===================================================================
--- backend/controllers/reviewController.js	(revision c5eb6c411fda602bce3df7b94bd5a81184aeb0f3)
+++ backend/controllers/reviewController.js	(revision 005a72ba4d8bb9e622edd0ee4162c830ab665f0a)
@@ -30,32 +30,39 @@
 const getReviewPosts = async (req, res) => {
   try {
-    console.log('Fetching to be reviewed posts ');
+    console.log('Fetching to be reviewed posts');
     const page = parseInt(req.query.page) || 0;
     const limit = parseInt(req.query.limit) || 5;
     const skip = page * limit;
 
-    // Use Prisma to fetch posts with pagination
-    const posts = await prisma.to_be_reviewed.findMany({
-      skip,
-      take: limit,
-      orderBy: {
-        date_created: 'desc',
-      },
-    });
+    try {
+      const posts = await prisma.to_be_reviewed.findMany({
+        skip,
+        take: limit,
+        orderBy: {
+          created_at: 'desc',
+        },
+      });
 
-    // Convert to domain objects
-    const forumPosts = posts.map(
-      (post) =>
-        new ForumPost({
-          id: post.id,
-          title: post.title,
-          content: post.content,
-          authorName: post.author_name,
-          dateCreated: post.date_created,
-          commentCount: post.comment_count,
-        })
-    );
+      console.log('Found review posts:', posts.length);
 
-    res.status(200).json(forumPosts);
+      const forumPosts = posts.map(
+        (post) =>
+          new ForumPost({
+            id: post.id,
+            title: post.title,
+            content: post.content,
+            authorName: post.author_name,
+            dateCreated: post.created_at,
+            commentCount: post.comment_count || 0,
+          })
+      );
+
+      console.log('Formatted posts:', forumPosts.length);
+
+      res.status(200).json(forumPosts);
+    } catch (dbError) {
+      console.error('Database query error:', dbError);
+      res.status(500).json({ error: 'Error fetching posts from database' });
+    }
   } catch (err) {
     console.error('Server error:', err);
@@ -85,6 +92,41 @@
 
 const approveReviewPost = async (req, res) => {
-  await ForumController.createApprovedForumPost(req, res);
-  await deleteReviewPost(req, res);
+  try {
+    console.log('Approving review post', req.params.id);
+    const { id } = req.params;
+
+    // 1. Get the post to be approved
+    const postToApprove = await prisma.to_be_reviewed.findUnique({
+      where: { id },
+    });
+
+    if (!postToApprove) {
+      return res.status(404).json({ error: 'Post not found' });
+    }
+
+    // 2. Create a new forum post with the same data
+    const newForumPost = await prisma.forum_posts.create({
+      data: {
+        title: postToApprove.title,
+        content: postToApprove.content,
+        author_id: postToApprove.author_id,
+        author_name: postToApprove.author_name,
+      },
+    });
+
+    // 3. Delete the post from to_be_reviewed
+    await prisma.to_be_reviewed.delete({
+      where: { id },
+    });
+
+    // 4. Send success response with the created post
+    res.status(200).json({
+      message: 'Post approved and published successfully',
+      post: newForumPost,
+    });
+  } catch (err) {
+    console.error('Error approving post:', err);
+    res.status(500).json({ error: 'Failed to approve post' });
+  }
 };
 
Index: backend/node_modules/.package-lock.json
===================================================================
--- backend/node_modules/.package-lock.json	(revision c5eb6c411fda602bce3df7b94bd5a81184aeb0f3)
+++ backend/node_modules/.package-lock.json	(revision 005a72ba4d8bb9e622edd0ee4162c830ab665f0a)
@@ -526,4 +526,19 @@
       }
     },
+    "node_modules/fsevents": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+      }
+    },
     "node_modules/function-bind": {
       "version": "1.1.2",
@@ -912,4 +927,25 @@
       "dependencies": {
         "wrappy": "1"
+      }
+    },
+    "node_modules/openai": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/openai/-/openai-5.1.1.tgz",
+      "integrity": "sha512-lgIdLqvpLpz8xPUKcEIV6ml+by74mbSBz8zv/AHHebtLn/WdpH4kdXT3/Q5uUKDHg3vHV/z9+G9wZINRX6rkDg==",
+      "license": "Apache-2.0",
+      "bin": {
+        "openai": "bin/cli"
+      },
+      "peerDependencies": {
+        "ws": "^8.18.0",
+        "zod": "^3.23.8"
+      },
+      "peerDependenciesMeta": {
+        "ws": {
+          "optional": true
+        },
+        "zod": {
+          "optional": true
+        }
       }
     },
Index: backend/package-lock.json
===================================================================
--- backend/package-lock.json	(revision c5eb6c411fda602bce3df7b94bd5a81184aeb0f3)
+++ backend/package-lock.json	(revision 005a72ba4d8bb9e622edd0ee4162c830ab665f0a)
@@ -14,5 +14,6 @@
         "dotenv": "^16.5.0",
         "express": "^5.1.0",
-        "leo-profanity": "^1.7.0"
+        "leo-profanity": "^1.7.0",
+        "openai": "^5.1.1"
       },
       "devDependencies": {
@@ -944,4 +945,25 @@
       }
     },
+    "node_modules/openai": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/openai/-/openai-5.1.1.tgz",
+      "integrity": "sha512-lgIdLqvpLpz8xPUKcEIV6ml+by74mbSBz8zv/AHHebtLn/WdpH4kdXT3/Q5uUKDHg3vHV/z9+G9wZINRX6rkDg==",
+      "license": "Apache-2.0",
+      "bin": {
+        "openai": "bin/cli"
+      },
+      "peerDependencies": {
+        "ws": "^8.18.0",
+        "zod": "^3.23.8"
+      },
+      "peerDependenciesMeta": {
+        "ws": {
+          "optional": true
+        },
+        "zod": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/parseurl": {
       "version": "1.3.3",
Index: backend/package.json
===================================================================
--- backend/package.json	(revision c5eb6c411fda602bce3df7b94bd5a81184aeb0f3)
+++ backend/package.json	(revision 005a72ba4d8bb9e622edd0ee4162c830ab665f0a)
@@ -17,5 +17,6 @@
     "dotenv": "^16.5.0",
     "express": "^5.1.0",
-    "leo-profanity": "^1.7.0"
+    "leo-profanity": "^1.7.0",
+    "openai": "^5.1.1"
   },
   "devDependencies": {
Index: client/src/Dashboard/components/Forum.jsx
===================================================================
--- client/src/Dashboard/components/Forum.jsx	(revision c5eb6c411fda602bce3df7b94bd5a81184aeb0f3)
+++ client/src/Dashboard/components/Forum.jsx	(revision 005a72ba4d8bb9e622edd0ee4162c830ab665f0a)
@@ -1,7 +1,7 @@
-import React, { useState, useEffect } from 'react';
-import { useNavigate } from 'react-router-dom';
-import commentIcon from '../../assets/images/comment.svg';
-import trashIcon from '../../assets/images/delete.svg'; // Add this import
-import Navbar from './Navbar';
+import React, { useState, useEffect } from "react";
+import { useNavigate } from "react-router-dom";
+import commentIcon from "../../assets/images/comment.svg";
+import trashIcon from "../../assets/images/delete.svg"; // Add this import
+import Navbar from "./Navbar";
 const Forum = () => {
   const navigate = useNavigate();
@@ -10,5 +10,5 @@
   const [hasMore, setHasMore] = useState(true);
   const postsPerPage = 5;
-  const user = JSON.parse(localStorage.getItem('user'));
+  const user = JSON.parse(localStorage.getItem("user"));
 
   useEffect(() => {
@@ -27,5 +27,5 @@
       if (page === 0) {
         setPosts(data);
-        console.log('Fetched posts:', data);
+        console.log("Fetched posts:", data);
       } else {
         setPosts((prevPosts) => [...prevPosts, ...data]);
@@ -35,5 +35,5 @@
       }
     } catch (error) {
-      console.error('Error fetching forum posts:', error);
+      console.error("Error fetching forum posts:", error);
     }
   };
@@ -42,7 +42,7 @@
     try {
       const response = await fetch(`/forum/posts/${postId}`, {
-        method: 'DELETE',
+        method: "DELETE",
         headers: {
-          'Content-Type': 'application/json',
+          "Content-Type": "application/json",
         },
       });
@@ -51,7 +51,7 @@
       }
       setPosts((prevPosts) => prevPosts.filter((post) => post.id !== postId));
-      console.log('Post deleted successfully');
+      console.log("Post deleted successfully");
     } catch (error) {
-      console.error('Error deleting post:', error);
+      console.error("Error deleting post:", error);
     }
   };
@@ -70,5 +70,5 @@
         {/* Forum Posts */}
         <div className="flex-1 ml-8">
-          <h1 className="text-3xl font-bold mb-4">Forum Posts</h1>
+          <h1 className="text-4xl font-bold mb-10">Forum Posts</h1>
           <div className="space-y-4" w-300>
             {posts.map((post) => (
@@ -86,5 +86,5 @@
                       if (
                         window.confirm(
-                          'Are you sure you want to delete this post?'
+                          "Are you sure you want to delete this post?"
                         )
                       ) {
@@ -101,5 +101,5 @@
                     className="text-3xl font-semibold mb-2 cursor-pointer hover:underline"
                     onClick={() => {
-                      console.log('Post clicked:', post);
+                      console.log("Post clicked:", post);
                       navigate(`/dashboard/forum-detail/${post.id}`, {
                         state: { post },
@@ -112,10 +112,10 @@
 
                 <p className="text-m text-gray-500">
-                  By {post.authorName},{' '}
-                  <span>{post.dateCreated.split('T')[0]}</span>
+                  By {post.authorName},{" "}
+                  <span>{post.dateCreated.split("T")[0]}</span>
                 </p>
                 <p className="mt-2 text-gray-400 text-xl">
                   {post.content && post.content.length > 300
-                    ? post.content.slice(0, 300) + '...'
+                    ? post.content.slice(0, 300) + "..."
                     : post.content}
                 </p>
@@ -153,5 +153,5 @@
             <button
               onClick={() => {
-                navigate('/dashboard/create-post');
+                navigate("/dashboard/create-post");
               }}
               className="cursor-pointer px-6 py-3 bg-yellow-500 text-black rounded hover:bg-yellow-600"
Index: client/src/Dashboard/components/ManagePosts.jsx
===================================================================
--- client/src/Dashboard/components/ManagePosts.jsx	(revision c5eb6c411fda602bce3df7b94bd5a81184aeb0f3)
+++ client/src/Dashboard/components/ManagePosts.jsx	(revision 005a72ba4d8bb9e622edd0ee4162c830ab665f0a)
@@ -1,174 +1,179 @@
-import React, {useState, useEffect} from 'react';
-import {useNavigate} from 'react-router-dom';
-import doneAll from '../../assets/images/done-all.svg';
-import trashIcon from '../../assets/images/delete.svg'; // Add this import
-import Navbar from './Navbar';
+import React, { useState, useEffect } from "react";
+import { useNavigate } from "react-router-dom";
+import doneAll from "../../assets/images/done-all.svg";
+import trashIcon from "../../assets/images/delete.svg"; // Add this import
+import Navbar from "./Navbar";
 
 const ManagePosts = () => {
-    const navigate = useNavigate();
-    const [posts, setPosts] = useState([]);
-    const [page, setPage] = useState(0);
-    const [hasMore, setHasMore] = useState(true);
-    const postsPerPage = 5;
-    const user = JSON.parse(localStorage.getItem('user'));
+  const navigate = useNavigate();
+  const [posts, setPosts] = useState([]);
+  const [page, setPage] = useState(0);
+  const [hasMore, setHasMore] = useState(true);
+  const postsPerPage = 5;
+  const user = JSON.parse(localStorage.getItem("user"));
 
-    useEffect(() => {
-        fetchPosts();
-    }, [page]);
+  useEffect(() => {
+    fetchPosts();
+  }, [page]);
 
-    const fetchPosts = async () => {
-        try {
-            const response = await fetch(
-                `/review/posts?page=${page}&limit=${postsPerPage}`
-            );
-            if (!response.ok) {
-                throw new Error(`HTTP error! status: ${response.status}`);
-            }
-            const data = await response.json();
-            if (page === 0) {
-                setPosts(data);
-                console.log('Fetched posts:', data);
-            } else {
-                setPosts((prevPosts) => [...prevPosts, ...data]);
-            }
-            if (data.length < postsPerPage) {
-                setHasMore(false);
-            }
-        } catch (error) {
-            console.error('Error fetching forum posts:', error);
-        }
-    };
+  const fetchPosts = async () => {
+    try {
+      const response = await fetch(
+        `/review/posts?page=${page}&limit=${postsPerPage}`
+      );
+      console.log("Response status:", response.status);
 
-    const handleDeletePost = async (postId) => {
-        try {
-            const response = await fetch(`/review/posts/${postId}`, {
-                method: 'DELETE',
-                headers: {
-                    'Content-Type': 'application/json',
-                },
-            });
-            if (!response.ok) {
-                throw new Error(`HTTP error! status: ${response.status}`);
-            }
-            setPosts((prevPosts) => prevPosts.filter((post) => post.id !== postId));
-            console.log('Post deleted successfully');
-        } catch (error) {
-            console.error('Error deleting post:', error);
-        }
-    };
+      if (!response.ok) {
+        throw new Error(`HTTP error! status: ${response.status}`);
+      }
 
-    const handleApprovePost = async (postId) => {
-        try {
-            const response = await fetch(`/review/posts/${postId}`, {
-                method: 'POST',
-                headers: {
-                    'Content-Type': 'application/json',
-                },
-                body: JSON.stringify({
-                    authorId: user.id,
-                    authorName: user.name,
-                }),
-            });
-            if (!response.ok) {
-                throw new Error(`HTTP error! status: ${response.status}`);
-            }
-            setPosts((prevPosts) => prevPosts.filter((post) => post.id !== postId));
-            console.log('Post approved successfully');
-        } catch (error) {
-            console.error('Error approving post:', error);
-        }
+      const data = await response.json();
+      console.log("Fetched posts data:", data);
+
+      if (page === 0) {
+        setPosts(data);
+      } else {
+        setPosts((prevPosts) => [...prevPosts, ...data]);
+      }
+
+      if (data.length < postsPerPage) {
+        setHasMore(false);
+      }
+    } catch (error) {
+      console.error("Error fetching forum posts:", error);
     }
+  };
+  const handleDeletePost = async (postId) => {
+    try {
+      const response = await fetch(`/review/posts/${postId}`, {
+        method: "DELETE",
+        headers: {
+          "Content-Type": "application/json",
+        },
+      });
+      if (!response.ok) {
+        throw new Error(`HTTP error! status: ${response.status}`);
+      }
+      setPosts((prevPosts) => prevPosts.filter((post) => post.id !== postId));
+      console.log("Post deleted successfully");
+    } catch (error) {
+      console.error("Error deleting post:", error);
+    }
+  };
 
-    const handleLoadMore = () => {
-        setPage((prevPage) => prevPage + 1);
-    };
+  const handleApprovePost = async (post) => {
+    try {
+      const response = await fetch(`/review/posts/${post.id}`, {
+        method: "POST",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        body: JSON.stringify({
+          authorId: user.id,
+          authorName: user.name,
+          title: post.title,
+          content: post.content,
+        }),
+      });
+      if (!response.ok) {
+        throw new Error(`HTTP error! status: ${response.status}`);
+      }
+      setPosts((prevPosts) =>
+        prevPosts.filter((postce) => postce.id !== post.id)
+      );
+      console.log("Post approved successfully");
+    } catch (error) {
+      console.error("Error approving post:", error);
+    }
+  };
 
-    return (
-        <div
-            data-theme="luxury"
-            className="dashboard h-screen flex bg-base-100 overflow-none"
-        >
-            <Navbar></Navbar>
-            <div className="flex flex-col md:flex-row gap-6 p-6 h-full overflow-y-auto w-full">
-                <div className="flex-1 ml-8">
-                    <h1 className="text-3xl font-bold mb-4">Posts that need approval</h1>
-                    <div className="space-y-4" w-300>
-                        {posts.map((post) => (
-                            <div
-                                key={post.id}
-                                className="p-4 border rounded-lg shadow-sm hover:shadow-md transition  relative"
-                            >
+  const handleLoadMore = () => {
+    setPage((prevPage) => prevPage + 1);
+  };
 
-                                <button
-                                    className=" absolute top-2 right-20 p-1.5 cursor-pointer rounded-full hover:bg-gray-600 transition-colors"
-                                    onClick={(e) => {
-                                        e.stopPropagation();
+  return (
+    <div
+      data-theme="luxury"
+      className="dashboard h-screen flex bg-base-100 overflow-none"
+    >
+      <Navbar></Navbar>
+      <div className="flex flex-col md:flex-row gap-6 p-6 h-full overflow-y-auto w-full">
+        <div className="flex-1 ml-8">
+          <h1 className="text-4xl font-bold mb-10">Posts that need approval</h1>
+          <div className="space-y-4" w-300>
+            {posts.map((post) => (
+              <div
+                key={post.id}
+                className="p-4 border rounded-lg shadow-sm hover:shadow-md transition  relative"
+              >
+                <button
+                  className=" absolute top-2 right-20 p-1.5 cursor-pointer rounded-full hover:bg-gray-600 transition-colors"
+                  onClick={(e) => {
+                    e.stopPropagation();
 
+                    if (
+                      window.confirm(
+                        "Are you sure you want to approve this post?"
+                      )
+                    ) {
+                      handleApprovePost(post);
+                    }
+                  }}
+                >
+                  <img src={doneAll} alt="Approve" className="w-10 h-10" />
+                </button>
+                <button
+                  className=" absolute top-2 right-8 p-1.5 cursor-pointer rounded-full hover:bg-gray-600 transition-colors"
+                  onClick={(e) => {
+                    e.stopPropagation();
+                    if (
+                      window.confirm(
+                        "Are you sure you want to delete this post?"
+                      )
+                    ) {
+                      handleDeletePost(post.id);
+                    }
+                  }}
+                >
+                  <img src={trashIcon} alt="Delete" className="w-10 h-10" />
+                </button>
 
-                                        if (
-                                            window.confirm(
-                                                'Are you sure you want to delete this post?'
-                                            )
-                                        ) {
-                                            handleApprovePost(post.id);
-                                        }
-                                    }}
-                                >
-                                    <img src={doneAll} alt="Approve" className="w-10 h-10"/>
-                                </button>
-                                <button
-                                    className=" absolute top-2 right-8 p-1.5 cursor-pointer rounded-full hover:bg-gray-600 transition-colors"
-                                    onClick={(e) => {
-                                        e.stopPropagation();
-                                        if (
-                                            window.confirm(
-                                                'Are you sure you want to delete this post?'
-                                            )
-                                        ) {
-                                            handleDeletePost(post.id);
-                                        }
-                                    }}
-                                >
-                                    <img src={trashIcon} alt="Delete" className="w-10 h-10"/>
-                                </button>
+                <div className="flex items-center gap-4 mt-2">
+                  <h2
+                    className="text-3xl font-semibold mb-2 cursor-pointer hover:underline"
+                    onClick={() => {
+                      console.log("Post clicked:", post);
+                      navigate(`/dashboard/forum-detail/${post.id}`, {
+                        state: { post },
+                      });
+                    }}
+                  >
+                    {post.title}
+                  </h2>
+                </div>
 
-                                <div className="flex items-center gap-4 mt-2">
-                                    <h2
-                                        className="text-3xl font-semibold mb-2 cursor-pointer hover:underline"
-                                        onClick={() => {
-                                            console.log('Post clicked:', post);
-                                            navigate(`/dashboard/forum-detail/${post.id}`, {
-                                                state: {post},
-                                            });
-                                        }}
-                                    >
-                                        {post.title}
-                                    </h2>
-                                </div>
-
-                                <p className="text-m text-gray-500">
-                                    By {post.authorName},{' '}
-                                    <span>{post.dateCreated.split('T')[0]}</span>
-                                </p>
-                                <p className="mt-2 text-gray-400 text-xl">
-                                    {post.content && post.content.length > 300
-                                        ? post.content.slice(0, 300) + '...'
-                                        : post.content}
-                                </p>
-
-                            </div>
-                        ))}
-                    </div>
-                    {hasMore && (
-                        <div className="flex justify-center mt-6">
-                            <button onClick={handleLoadMore} className="btn btn-outline">
-                                Load More
-                            </button>
-                        </div>
-                    )}
-                </div>
+                <p className="text-m text-gray-500">
+                  By {post.authorName},{" "}
+                  <span>{post.dateCreated.split("T")[0]}</span>
+                </p>
+                <p className="mt-2 text-gray-400 text-xl">
+                  {post.content && post.content.length > 300
+                    ? post.content.slice(0, 300) + "..."
+                    : post.content}
+                </p>
+              </div>
+            ))}
+          </div>
+          {hasMore && (
+            <div className="flex justify-center mt-6">
+              <button onClick={handleLoadMore} className="btn btn-outline">
+                Load More
+              </button>
             </div>
+          )}
         </div>
-    );
+      </div>
+    </div>
+  );
 };
 
Index: client/vite.config.js
===================================================================
--- client/vite.config.js	(revision c5eb6c411fda602bce3df7b94bd5a81184aeb0f3)
+++ client/vite.config.js	(revision 005a72ba4d8bb9e622edd0ee4162c830ab665f0a)
@@ -24,4 +24,9 @@
         secure: false,
       },
+      "/review": {
+        target: "http://localhost:5001",
+        changeOrigin: true,
+        secure: false,
+      },
     },
   },
