diff --git a/app/api/messages/route.ts b/app/api/messages/route.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e051b55ecc48f76cddfc9f5b1fd62483f6d56fa7
--- /dev/null
+++ b/app/api/messages/route.ts
@@ -0,0 +1,56 @@
+import {PrismaClient} from "@prisma/client"
+import { NextApiRequest, NextApiResponse } from "next"
+import { NextRequest, NextResponse } from "next/server"
+import { prisma } from './../../../prisma/db'
+
+export async function GET(req: NextRequest){
+	return NextResponse.json("")
+}
+
+export async function POST(req: NextRequest, res: NextResponse){
+	const data = await req.json()
+	console.log("router data: " + data, "status:")
+	
+	console.log(data)
+	try {
+		await prisma.message.create({
+	    data: data
+		})
+		
+		return NextResponse.json({status: 201, message: 'Message Created'})
+		//res.status(200).json({message: 'Message Created'})
+		//res.status(200).json({message: 'Message Created'})
+	} catch (error) {
+		console.log("Failure" + error);
+		// res.status(400)
+	}
+	console.log("post")
+	
+	
+}
+
+/* 
+export default async function handler(req: NextApiRequest, res: NextApiResponse){
+	const data = (req.body)
+
+	try {
+		await prisma.message.create({
+	    data
+		})
+		res.status(200).json({message: 'Note Created'})
+	} catch (error) {
+		console.log("Failure");
+	}
+} */
+
+/* export const postMessage = async(req: NextApiRequest , res: NextApiResponse) => {
+const data = (req.body)
+
+console.log("router data: " + data)
+
+const createdMessage = await prisma.message.create({
+    data
+})
+
+res.status(201)
+} */
\ No newline at end of file
diff --git a/app/messages/PostMessageForm.tsx b/app/messages/PostMessageForm.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..3a10ea81f4fd8f3e851f7a1f436eb1c019764822
--- /dev/null
+++ b/app/messages/PostMessageForm.tsx
@@ -0,0 +1,29 @@
+"use client"
+
+import { useState } from "react"
+import { PrismaClient, Message } from "@prisma/client"
+
+export default function PostMessageForm(props: {data: Message[]}){
+    const [formData, setFormData] = useState({}) 
+    const [messagesState, setMessages] = useState(props.data)
+  
+    async function postMessage(e:any) {
+      e.preventDefault()
+      /* setMessages([...messagesState, formData]) */
+      console.log(formData)
+      const response = await fetch('http://localhost:3000/api/messages', {
+          method: 'POST',
+          body: JSON.stringify(formData)
+      })
+      return await response.json()
+    }
+
+    return (<div>
+        <form onSubmit={postMessage}>
+        <input type="text" placeholder="content" name="content" onChange={e => setFormData({ ...formData, content : e.target.value })}/>
+        <textarea name="content" id="" cols={30} rows={10} placeholder="content" onChange={e => setFormData({ ...formData, content: e.target.value })} />
+        <button type="submit">Post Message</button>
+        </form>
+        
+        </div>)
+}
\ No newline at end of file
diff --git a/app/messages/page.tsx b/app/messages/page.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..f8ad89acdba6a504e91ff9b768a77b41db5b2053
--- /dev/null
+++ b/app/messages/page.tsx
@@ -0,0 +1,42 @@
+import { Message } from "@prisma/client"
+import React from "react"
+import PostMessageForm from "./PostMessageForm";
+import { prisma } from "@/prisma/db";
+
+// Define a type for our props
+interface MessageProps {
+  data: Message[];
+}
+
+export default async function MessageList({data}:MessageProps) {
+
+  const messages = await prisma.message.findMany()
+
+    return (
+        <div>
+            Message List Page
+            {messages.map((msg) => (
+               <li key = {msg.id}> author: {msg.author} message: {msg.content} sentAt: {msg.sentAt?.toString()} </li>
+            ))}
+
+            <PostMessageForm data={messages}></PostMessageForm>
+        </div>
+    )
+}
+
+export async function getServerSideProps() {
+  const formData = {description: 'sdfsdf', content: 'sdfsdf'}
+  const response = await fetch('/api/messages', {
+    method: 'POST',
+    body: JSON.stringify(formData)
+})
+  console.log("answer:" + await response.json())
+
+  const messages = await prisma.message.findMany()
+
+  return {
+      props: {
+          data: messages
+      }
+  }
+}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 275e0d9dad69792f5c1549fa76b80eea72554fb8..0dfe3c726fc174ea479bc054358fa7f344a51a40 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1021,6 +1021,26 @@
         "url": "https://opencollective.com/popperjs"
       }
     },
+    "node_modules/@prisma/client": {
+      "version": "4.13.0",
+      "resolved": "https://registry.npmjs.org/@prisma/client/-/client-4.13.0.tgz",
+      "integrity": "sha512-YaiiICcRB2hatxsbnfB66uWXjcRw3jsZdlAVxmx0cFcTc/Ad/sKdHCcWSnqyDX47vAewkjRFwiLwrOUjswVvmA==",
+      "hasInstallScript": true,
+      "dependencies": {
+        "@prisma/engines-version": "4.13.0-50.1e7af066ee9cb95cf3a403c78d9aab3e6b04f37a"
+      },
+      "engines": {
+        "node": ">=14.17"
+      },
+      "peerDependencies": {
+        "prisma": "*"
+      },
+      "peerDependenciesMeta": {
+        "prisma": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/@prisma/engines": {
       "version": "4.14.1",
       "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-4.14.1.tgz",
@@ -1028,6 +1048,11 @@
       "dev": true,
       "hasInstallScript": true
     },
+    "node_modules/@prisma/engines-version": {
+      "version": "4.13.0-50.1e7af066ee9cb95cf3a403c78d9aab3e6b04f37a",
+      "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.13.0-50.1e7af066ee9cb95cf3a403c78d9aab3e6b04f37a.tgz",
+      "integrity": "sha512-fsQlbkhPJf08JOzKoyoD9atdUijuGBekwoOPZC3YOygXEml1MTtgXVpnUNchQlRSY82OQ6pSGQ9PxUe4arcSLQ=="
+    },
     "node_modules/@rushstack/eslint-patch": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz",
diff --git a/package.json b/package.json
index 1f745ec8a5b40a32eecd12e7116567040af440e3..bdaa2dcca07cf94008b15a86362b2d13910376dc 100644
--- a/package.json
+++ b/package.json
@@ -29,4 +29,4 @@
   "devDependencies": {
     "prisma": "^4.14.1"
   }
-}
\ No newline at end of file
+}
diff --git a/prisma/db.ts b/prisma/db.ts
new file mode 100644
index 0000000000000000000000000000000000000000..51426edb3a8b60e8b1790015eec12a05d3693d94
--- /dev/null
+++ b/prisma/db.ts
@@ -0,0 +1,13 @@
+import { PrismaClient } from '@prisma/client'
+
+const globalForPrisma = global as unknown as {
+  prisma: PrismaClient | undefined
+}
+
+export const prisma =
+  globalForPrisma.prisma ??
+  new PrismaClient({
+    log: ['query'],
+  })
+
+if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma
\ No newline at end of file
diff --git a/prisma/dev.db b/prisma/dev.db
new file mode 100644
index 0000000000000000000000000000000000000000..2e1fad2ef8afc8f7be55d1de65ec98f11b426a62
Binary files /dev/null and b/prisma/dev.db differ
diff --git a/prisma/migrations/20230512042440_first_migration_message_schema/migration.sql b/prisma/migrations/20230512042440_first_migration_message_schema/migration.sql
new file mode 100644
index 0000000000000000000000000000000000000000..226e0e7ceac31028ab4399db2ac4f840a7d0c2e1
--- /dev/null
+++ b/prisma/migrations/20230512042440_first_migration_message_schema/migration.sql
@@ -0,0 +1,10 @@
+-- CreateTable
+CREATE TABLE "Message" (
+    "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+    "author" TEXT NOT NULL,
+    "gameId" TEXT NOT NULL,
+    "title" TEXT NOT NULL,
+    "content" TEXT NOT NULL,
+    "sentAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+    "updatedAt" DATETIME
+);
diff --git a/prisma/migrations/20230512134632_message_change_required_fields/migration.sql b/prisma/migrations/20230512134632_message_change_required_fields/migration.sql
new file mode 100644
index 0000000000000000000000000000000000000000..377bf2b554c72a099334896114888a817bac9d16
--- /dev/null
+++ b/prisma/migrations/20230512134632_message_change_required_fields/migration.sql
@@ -0,0 +1,16 @@
+-- RedefineTables
+PRAGMA foreign_keys=OFF;
+CREATE TABLE "new_Message" (
+    "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+    "author" TEXT,
+    "gameId" TEXT,
+    "title" TEXT,
+    "content" TEXT NOT NULL,
+    "sentAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+    "updatedAt" DATETIME
+);
+INSERT INTO "new_Message" ("author", "content", "gameId", "id", "sentAt", "title", "updatedAt") SELECT "author", "content", "gameId", "id", "sentAt", "title", "updatedAt" FROM "Message";
+DROP TABLE "Message";
+ALTER TABLE "new_Message" RENAME TO "Message";
+PRAGMA foreign_key_check;
+PRAGMA foreign_keys=ON;
diff --git a/prisma/migrations/20230512142522_/migration.sql b/prisma/migrations/20230512142522_/migration.sql
new file mode 100644
index 0000000000000000000000000000000000000000..1c2d1c7b51b6a4aa7af3f8edcedc8fa2ce941fc8
--- /dev/null
+++ b/prisma/migrations/20230512142522_/migration.sql
@@ -0,0 +1,16 @@
+-- RedefineTables
+PRAGMA foreign_keys=OFF;
+CREATE TABLE "new_Message" (
+    "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+    "author" TEXT,
+    "gameId" TEXT,
+    "title" TEXT,
+    "content" TEXT NOT NULL,
+    "sentAt" DATETIME DEFAULT CURRENT_TIMESTAMP,
+    "updatedAt" DATETIME
+);
+INSERT INTO "new_Message" ("author", "content", "gameId", "id", "sentAt", "title", "updatedAt") SELECT "author", "content", "gameId", "id", "sentAt", "title", "updatedAt" FROM "Message";
+DROP TABLE "Message";
+ALTER TABLE "new_Message" RENAME TO "Message";
+PRAGMA foreign_key_check;
+PRAGMA foreign_keys=ON;
diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml
new file mode 100644
index 0000000000000000000000000000000000000000..e5e5c4705ab084270b7de6f45d5291ba01666948
--- /dev/null
+++ b/prisma/migrations/migration_lock.toml
@@ -0,0 +1,3 @@
+# Please do not edit this file manually
+# It should be added in your version-control system (i.e. Git)
+provider = "sqlite"
\ No newline at end of file
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index d205f42a46dfcedcfcb3b895322b158b60074cf1..ba5b3522bffb80144e6db7595ac1d287277ec829 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -6,6 +6,16 @@ generator client {
 }
 
 datasource db {
-  provider = "postgresql"
+  provider = "sqlite"
   url      = env("DATABASE_URL")
 }
+
+model Message{
+  id Int @id @default(autoincrement())
+  author String?
+  gameId String?
+  title String?
+  content String
+  sentAt DateTime? @default(now())
+  updatedAt DateTime? @updatedAt
+}
\ No newline at end of file