diff --git a/backend/src/routes/pure_sql_posts.js b/backend/src/routes/pure_sql_posts.js
new file mode 100644
index 0000000..ea4c8f0
--- /dev/null
+++ b/backend/src/routes/pure_sql_posts.js
@@ -0,0 +1,16 @@
+const express = require('express');
+const router = express.Router();
+const { sequelize } = require('../db/models');
+
+// Endpoint to fetch posts using a pure SQL query
+router.get('/pure-sql-posts', async (req, res) => {
+ try {
+ const [rows] = await sequelize.query('SELECT * FROM posts ORDER BY posted_at DESC');
+ res.json(rows);
+ } catch (error) {
+ console.error('Error fetching posts:', error);
+ res.status(500).json({ error: 'Internal server error' });
+ }
+});
+
+module.exports = router;
diff --git a/frontend/src/components/AsideMenuItem.tsx b/frontend/src/components/AsideMenuItem.tsx
index c5a8b8a..fa5a7d2 100644
--- a/frontend/src/components/AsideMenuItem.tsx
+++ b/frontend/src/components/AsideMenuItem.tsx
@@ -85,7 +85,7 @@ const AsideMenuItem = ({ item, isDropdownList = false }: Props) => {
].join(' ');
return (
-
+
{item.withDevider &&
}
{item.href && (
diff --git a/frontend/src/pages/posts.tsx b/frontend/src/pages/posts.tsx
new file mode 100644
index 0000000..be64738
--- /dev/null
+++ b/frontend/src/pages/posts.tsx
@@ -0,0 +1,18 @@
+import React from 'react';
+import { ReactElement } from 'react';
+import LayoutGuest from '../layouts/Guest';
+
+const PostsPage = () => {
+ return (
+
+
Posts
+
This is a static posts page. Content coming soon!
+
+ );
+};
+
+PostsPage.getLayout = function getLayout(page: ReactElement) {
+ return {page};
+};
+
+export default PostsPage;
diff --git a/frontend/src/pages/web_pages/home.tsx b/frontend/src/pages/web_pages/home.tsx
index f869936..d2cd457 100644
--- a/frontend/src/pages/web_pages/home.tsx
+++ b/frontend/src/pages/web_pages/home.tsx
@@ -41,6 +41,7 @@ export default function WebSite() {
label: 'home',
},
+ { href: '/posts', label: 'posts' },
{
href: '/about',
label: 'about',
diff --git a/frontend/src/pages/web_pages/posts.tsx b/frontend/src/pages/web_pages/posts.tsx
new file mode 100644
index 0000000..435126e
--- /dev/null
+++ b/frontend/src/pages/web_pages/posts.tsx
@@ -0,0 +1,48 @@
+import React, { useEffect, useState } from "react";
+import WebsiteHeader from "../components/WebsiteHeader";
+import WebsiteFooter from "../components/WebsiteFooter";
+
+const PostsPage = () => {
+ const [posts, setPosts] = useState([]);
+
+ useEffect(() => {
+ const fetchPosts = async () => {
+ try {
+ const response = await fetch('/api/pure-sql-posts');
+ if (response.ok) {
+ const data = await response.json();
+ setPosts(data);
+ } else {
+ console.error('Failed to fetch posts');
+ }
+ } catch (error) {
+ console.error('Error fetching posts:', error);
+ }
+ };
+
+ fetchPosts();
+ }, []);
+
+ return (
+ <>
+
+
+
Posts
+
+ {posts.map((post) => (
+
+ {/* Display content of the post and posted date. Adjust accordingly if more fields are needed. */}
+
{post.content}
+
+ {new Date(post.posted_at).toLocaleString()}
+
+
+ ))}
+
+
+
+ >
+ );
+};
+
+export default PostsPage;