Index: backend/scripts/hourlyCheckForDailyChallengePosts.js
===================================================================
--- backend/scripts/hourlyCheckForDailyChallengePosts.js	(revision 1e3d82503382ae48646e42a0bf7b8549a7af9ca5)
+++ backend/scripts/hourlyCheckForDailyChallengePosts.js	(revision 1e3d82503382ae48646e42a0bf7b8549a7af9ca5)
@@ -0,0 +1,98 @@
+require('dotenv').config({
+  path: require('path').resolve(__dirname, '../.env'),
+});
+const { sendHourlyReviewNotification } = require('../services/emailService');
+const schedule = require('node-schedule');
+const prisma = require('../lib/prisma');
+
+async function checkForNewReviews() {
+  const scriptExecutionTime = new Date();
+  console.log(
+    `[${scriptExecutionTime.toISOString()}] Starting hourly review check process`
+  );
+
+  try {
+    const postsToReviewCount = await prisma.to_be_reviewed.count();
+
+    console.log(
+      `[${scriptExecutionTime.toISOString()}] Found ${postsToReviewCount} post(s) awaiting review.`
+    );
+
+    // If there are no posts, do nothing.
+    if (postsToReviewCount === 0) {
+      console.log(
+        `[${scriptExecutionTime.toISOString()}] No new posts to review. Skipping email notification.`
+      );
+      return;
+    }
+
+    const moderators = await prisma.users.findMany({
+      where: { isModerator: true },
+      select: { email: true },
+    });
+
+    if (moderators.length === 0) {
+      console.log(
+        `[${scriptExecutionTime.toISOString()}] Found posts, but no moderators are defined.`
+      );
+      return;
+    }
+
+    const moderatorEmails = moderators.map((m) => m.email);
+    console.log(
+      `[${scriptExecutionTime.toISOString()}] Sending hourly notifications to ${
+        moderatorEmails.length
+      } moderators.`
+    );
+
+    for (const email of moderatorEmails) {
+      try {
+        await sendHourlyReviewNotification(email, postsToReviewCount);
+        console.log(
+          `[${scriptExecutionTime.toISOString()}] Hourly notification sent to ${email}`
+        );
+      } catch (emailError) {
+        console.error(
+          `[${scriptExecutionTime.toISOString()}] Error sending hourly notification to ${email}:`,
+          emailError
+        );
+      }
+    }
+
+    console.log(
+      `[${scriptExecutionTime.toISOString()}] Hourly notification process completed.`
+    );
+  } catch (error) {
+    console.error(
+      `[${scriptExecutionTime.toISOString()}] Error in hourly review check script:`,
+      error
+    );
+    process.exitCode = 1;
+  } finally {
+    await prisma.$disconnect();
+    console.log(
+      `[${scriptExecutionTime.toISOString()}] Prisma client disconnected.`
+    );
+  }
+}
+
+// Schedule the job to run at the start of every hour ('0 * * * *')
+const job = schedule.scheduleJob('0 * * * *', function () {
+  console.log(
+    `[${new Date().toISOString()}] Running scheduled hourly review check`
+  );
+  checkForNewReviews();
+});
+
+console.log(
+  `[${new Date().toISOString()}] Hourly review check script initialized.`
+);
+console.log(
+  `[${new Date().toISOString()}] Next scheduled hourly run: ${job.nextInvocation()}`
+);
+
+process.on('SIGINT', function () {
+  job.cancel();
+  console.log(`[${new Date().toISOString()}] Hourly review scheduler stopped`);
+  process.exit(0);
+});
Index: backend/services/emailService.js
===================================================================
--- backend/services/emailService.js	(revision caa8bb6b1ad5e050504facdef2d3d2b96bee5eec)
+++ backend/services/emailService.js	(revision 1e3d82503382ae48646e42a0bf7b8549a7af9ca5)
@@ -1,8 +1,8 @@
-const nodemailer = require("nodemailer");
+const nodemailer = require('nodemailer');
 
 const transporter = nodemailer.createTransport({
   host: process.env.EMAIL_HOST,
   port: parseInt(process.env.EMAIL_PORT, 10),
-  secure: process.env.EMAIL_PORT === "465",
+  secure: process.env.EMAIL_PORT === '465',
   auth: {
     user: process.env.EMAIL_USER,
@@ -13,7 +13,7 @@
 const sendApprovalEmail = async (userEmail, postTitle) => {
   const mailOptions = {
-    from: "FinkiRanked",
-    to: userEmail,
-    subject: "Your Forum Post has been Approved!",
+    from: 'FinkiRanked',
+    to: userEmail,
+    subject: 'Your Forum Post has been Approved!',
     html: `
         <h1>Success!</h1>
@@ -36,7 +36,7 @@
 const sendDeletionEmail = async (userEmail, postTitle) => {
   const mailOptions = {
-    from: "FinkiRanked",
-    to: userEmail,
-    subject: "Your Forum Post has been discared",
+    from: 'FinkiRanked',
+    to: userEmail,
+    subject: 'Your Forum Post has been discared',
     html: `
         <h1>Your Forum Post contains harmfull or inappropriate language</h1>
@@ -59,7 +59,7 @@
 const sendDeletedFromForumEmail = async (userEmail, postTitle) => {
   const mailOptions = {
-    from: "FinkiRanked",
-    to: userEmail,
-    subject: "Your Forum Post has been deleted",
+    from: 'FinkiRanked',
+    to: userEmail,
+    subject: 'Your Forum Post has been deleted',
     html: `
         <h1>Your Forum Post contains harmfull or inappropriate language</h1>
@@ -87,7 +87,7 @@
 ) => {
   const mailOptions = {
-    from: "FinkiRanked",
-    to: userEmail,
-    subject: "Your Comment has been deleted",
+    from: 'FinkiRanked',
+    to: userEmail,
+    subject: 'Your Comment has been deleted',
     html: `
         <h1>Your Comment contains harmfull or inappropriate language</h1>
@@ -112,16 +112,16 @@
     .map((post, index) => {
       const date = new Date(post.created_at);
-      const formattedDate = date.toLocaleDateString("en-GB", {
-        day: "numeric",
-        month: "long",
-        year: "numeric",
+      const formattedDate = date.toLocaleDateString('en-GB', {
+        day: 'numeric',
+        month: 'long',
+        year: 'numeric',
       });
       return `<li style="margin-bottom: 8px;"><strong>${post.title}</strong> (Created: ${formattedDate})</li>`;
     })
-    .join("");
-  const mailOptions = {
-    from: "FinkiRanked",
-    to: userEmail,
-    subject: "Action Required: Posts Awaiting Review",
+    .join('');
+  const mailOptions = {
+    from: 'FinkiRanked',
+    to: userEmail,
+    subject: 'Action Required: Posts Awaiting Review',
     html: `
         <h1>Action Required: Posts Awaiting Review</h1>
@@ -150,11 +150,34 @@
 const sendModeratorManyPendingPostsEmail = async (userEmail, postsLength) => {
   const mailOptions = {
-    from: "FinkiRanked",
-    to: userEmail,
-    subject: "Action Required: Posts Awaiting Review",
+    from: 'FinkiRanked',
+    to: userEmail,
+    subject: 'Action Required: Posts Awaiting Review',
     html: `
         <h1>Action Required: Posts Awaiting Review</h1>
         <p>This is an automated notification to let you know that there are <strong>${postsLength}</strong> forum post(s) waiting for review.</p>
       
+        <p>Please log in to the moderator dashboard at your earliest convenience to review and approve or reject these submissions.</p>
+        <br>
+        <p>Thank you for your help in maintaining our community standards.</p>
+        <p>The FinkiRanked System</p>
+    `,
+  };
+
+  try {
+    await transporter.sendMail(mailOptions);
+    console.log(`Moderator email sent successfully to ${userEmail}`);
+  } catch (error) {
+    console.error(`Failed to send approval email to ${userEmail}:`, error);
+  }
+};
+const sendHourlyReviewNotification = async (userEmail, postsLength) => {
+  const mailOptions = {
+    from: 'FinkiRanked',
+    to: userEmail,
+    subject: 'Action Required: Posts Awaiting Review',
+    html: `
+        <h1>Action Required: Posts Awaiting Review</h1>
+        <p>This is an automated notification to let you know that there are <strong>${postsLength}</strong> forum post(s) waiting for review.</p>
+        <p>These posts are related to the daily challenge and need your attention ASAP!.</p>
         <p>Please log in to the moderator dashboard at your earliest convenience to review and approve or reject these submissions.</p>
         <br>
@@ -177,5 +200,5 @@
 ) => {
   const mailOptions = {
-    from: "FinkiRanked",
+    from: 'FinkiRanked',
     to: userEmail,
     subject: `New Comment on Your Post: "${postTitle}"`,
@@ -203,4 +226,5 @@
   sendDeletedCommentEmail,
   sendModeratorManyPendingPostsEmail,
+  sendHourlyReviewNotification,
   sendCommentedNotificationEmail,
 };
Index: ecosystem.config.js
===================================================================
--- ecosystem.config.js	(revision caa8bb6b1ad5e050504facdef2d3d2b96bee5eec)
+++ ecosystem.config.js	(revision 1e3d82503382ae48646e42a0bf7b8549a7af9ca5)
@@ -36,4 +36,13 @@
       env: backendEnv,
     },
+    {
+      name: 'hourly-review-check',
+      script: './backend/scripts/hourlyCheckForDailyChallengePosts.js',
+      autorestart: true,
+      watch: false,
+      instances: 1,
+      exec_mode: 'fork',
+      env: backendEnv,
+    },
   ],
 };
