diff --git a/package-lock.json b/package-lock.json
index 5ab691b..5039467 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,6 +11,7 @@
         "dotenv": "^16.4.5",
         "express": "^4.19.2",
         "jsonwebtoken": "^9.0.2",
+        "pino": "^9.3.2",
         "prisma": "^5.17.0",
         "sharp": "^0.33.4",
         "socket.io": "^4.7.5",
@@ -667,6 +668,18 @@
         "@types/send": "*"
       }
     },
+    "node_modules/abort-controller": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
+      "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
+      "license": "MIT",
+      "dependencies": {
+        "event-target-shim": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=6.5"
+      }
+    },
     "node_modules/accepts": {
       "version": "1.3.8",
       "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
@@ -730,6 +743,15 @@
       "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
       "license": "MIT"
     },
+    "node_modules/atomic-sleep": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
+      "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8.0.0"
+      }
+    },
     "node_modules/balanced-match": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -737,6 +759,26 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/base64-js": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT"
+    },
     "node_modules/base64id": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
@@ -813,6 +855,30 @@
         "node": ">=8"
       }
     },
+    "node_modules/buffer": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+      "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "base64-js": "^1.3.1",
+        "ieee754": "^1.2.1"
+      }
+    },
     "node_modules/buffer-equal-constant-time": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
@@ -1172,6 +1238,24 @@
         "node": ">= 0.6"
       }
     },
+    "node_modules/event-target-shim": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
+      "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/events": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+      "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.8.x"
+      }
+    },
     "node_modules/express": {
       "version": "4.19.2",
       "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
@@ -1214,6 +1298,15 @@
         "node": ">= 0.10.0"
       }
     },
+    "node_modules/fast-redact": {
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz",
+      "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/fill-range": {
       "version": "7.1.1",
       "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
@@ -1417,6 +1510,26 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/ieee754": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "BSD-3-Clause"
+    },
     "node_modules/ignore-by-default": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
@@ -1758,6 +1871,15 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/on-exit-leak-free": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz",
+      "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
     "node_modules/on-finished": {
       "version": "2.4.1",
       "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
@@ -1798,6 +1920,44 @@
         "url": "https://github.com/sponsors/jonschlinkert"
       }
     },
+    "node_modules/pino": {
+      "version": "9.3.2",
+      "resolved": "https://registry.npmjs.org/pino/-/pino-9.3.2.tgz",
+      "integrity": "sha512-WtARBjgZ7LNEkrGWxMBN/jvlFiE17LTbBoH0konmBU684Kd0uIiDwBXlcTCW7iJnA6HfIKwUssS/2AC6cDEanw==",
+      "license": "MIT",
+      "dependencies": {
+        "atomic-sleep": "^1.0.0",
+        "fast-redact": "^3.1.1",
+        "on-exit-leak-free": "^2.1.0",
+        "pino-abstract-transport": "^1.2.0",
+        "pino-std-serializers": "^7.0.0",
+        "process-warning": "^4.0.0",
+        "quick-format-unescaped": "^4.0.3",
+        "real-require": "^0.2.0",
+        "safe-stable-stringify": "^2.3.1",
+        "sonic-boom": "^4.0.1",
+        "thread-stream": "^3.0.0"
+      },
+      "bin": {
+        "pino": "bin.js"
+      }
+    },
+    "node_modules/pino-abstract-transport": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz",
+      "integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==",
+      "license": "MIT",
+      "dependencies": {
+        "readable-stream": "^4.0.0",
+        "split2": "^4.0.0"
+      }
+    },
+    "node_modules/pino-std-serializers": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz",
+      "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==",
+      "license": "MIT"
+    },
     "node_modules/prettier": {
       "version": "3.3.3",
       "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
@@ -1830,6 +1990,21 @@
         "node": ">=16.13"
       }
     },
+    "node_modules/process": {
+      "version": "0.11.10",
+      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+      "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6.0"
+      }
+    },
+    "node_modules/process-warning": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.0.tgz",
+      "integrity": "sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==",
+      "license": "MIT"
+    },
     "node_modules/proxy-addr": {
       "version": "2.0.7",
       "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
@@ -1865,6 +2040,12 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/quick-format-unescaped": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz",
+      "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==",
+      "license": "MIT"
+    },
     "node_modules/range-parser": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
@@ -1889,6 +2070,22 @@
         "node": ">= 0.8"
       }
     },
+    "node_modules/readable-stream": {
+      "version": "4.5.2",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz",
+      "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==",
+      "license": "MIT",
+      "dependencies": {
+        "abort-controller": "^3.0.0",
+        "buffer": "^6.0.3",
+        "events": "^3.3.0",
+        "process": "^0.11.10",
+        "string_decoder": "^1.3.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      }
+    },
     "node_modules/readdirp": {
       "version": "3.6.0",
       "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@@ -1902,6 +2099,15 @@
         "node": ">=8.10.0"
       }
     },
+    "node_modules/real-require": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz",
+      "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 12.13.0"
+      }
+    },
     "node_modules/safe-buffer": {
       "version": "5.2.1",
       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -1922,6 +2128,15 @@
       ],
       "license": "MIT"
     },
+    "node_modules/safe-stable-stringify": {
+      "version": "2.4.3",
+      "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz",
+      "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/safer-buffer": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -2197,6 +2412,24 @@
       "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
       "license": "MIT"
     },
+    "node_modules/sonic-boom": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.0.1.tgz",
+      "integrity": "sha512-hTSD/6JMLyT4r9zeof6UtuBDpjJ9sO08/nmS5djaA9eozT9oOlNdpXSnzcgj4FTqpk3nkLrs61l4gip9r1HCrQ==",
+      "license": "MIT",
+      "dependencies": {
+        "atomic-sleep": "^1.0.0"
+      }
+    },
+    "node_modules/split2": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
+      "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
+      "license": "ISC",
+      "engines": {
+        "node": ">= 10.x"
+      }
+    },
     "node_modules/statuses": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
@@ -2206,6 +2439,15 @@
         "node": ">= 0.8"
       }
     },
+    "node_modules/string_decoder": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "~5.2.0"
+      }
+    },
     "node_modules/supports-color": {
       "version": "5.5.0",
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -2219,6 +2461,15 @@
         "node": ">=4"
       }
     },
+    "node_modules/thread-stream": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz",
+      "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==",
+      "license": "MIT",
+      "dependencies": {
+        "real-require": "^0.2.0"
+      }
+    },
     "node_modules/to-regex-range": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
diff --git a/package.json b/package.json
index d5d6a60..739ec9a 100644
--- a/package.json
+++ b/package.json
@@ -12,6 +12,7 @@
     "dotenv": "^16.4.5",
     "express": "^4.19.2",
     "jsonwebtoken": "^9.0.2",
+    "pino": "^9.3.2",
     "prisma": "^5.17.0",
     "sharp": "^0.33.4",
     "socket.io": "^4.7.5",
diff --git a/src/commands/listZones.ts b/src/commands/listZones.ts
index ef77824..766ca06 100644
--- a/src/commands/listZones.ts
+++ b/src/commands/listZones.ts
@@ -1,5 +1,5 @@
 import { Server } from 'socket.io'
-import ZoneManager from '../managers/ZoneManager'
+import ZoneManager from '../managers/zoneManager'
 
 type CommandInput = string[]
 
diff --git a/src/events/character/Connect.ts b/src/events/character/connect.ts
similarity index 81%
rename from src/events/character/Connect.ts
rename to src/events/character/connect.ts
index 2b4f7a7..8f177db 100644
--- a/src/events/character/Connect.ts
+++ b/src/events/character/connect.ts
@@ -1,6 +1,6 @@
 import { Server } from 'socket.io'
-import { TSocket, ExtendedCharacter } from '../../utilities/Types'
-import CharacterRepository from '../../repositories/CharacterRepository'
+import { TSocket, ExtendedCharacter } from '../../utilities/types'
+import CharacterRepository from '../../repositories/characterRepository'
 
 type SocketResponseT = {
   character_id: number
diff --git a/src/events/character/Create.ts b/src/events/character/create.ts
similarity index 74%
rename from src/events/character/Create.ts
rename to src/events/character/create.ts
index bfc9924..b66d78b 100644
--- a/src/events/character/Create.ts
+++ b/src/events/character/create.ts
@@ -1,9 +1,10 @@
 import { Server } from 'socket.io'
-import { TSocket } from '../../utilities/Types'
+import { TSocket } from '../../utilities/types'
 import { Character } from '@prisma/client'
-import CharacterRepository from '../../repositories/CharacterRepository'
-import { ZCharacterCreate } from '../../utilities/ZodTypes'
-import prisma from '../../utilities/Prisma'
+import CharacterRepository from '../../repositories/characterRepository'
+import { ZCharacterCreate } from '../../utilities/zodTypes'
+import prisma from '../../utilities/prisma'
+import logger from '../../utilities/logger'
 
 export default function (socket: TSocket, io: Server) {
   socket.on('character:create', async (data: any) => {
@@ -30,7 +31,7 @@ export default function (socket: TSocket, io: Server) {
         data: {
           name: data.name,
           userId: user_id,
-          characterTypeId: 1 // @TODO set to chosen character type
+          // characterTypeId: 1 // @TODO set to chosen character type
         }
       })
 
@@ -38,8 +39,10 @@ export default function (socket: TSocket, io: Server) {
 
       socket.emit('character:create:success')
       socket.emit('character:list', characters)
+
+      logger.info('character:create success')
     } catch (error: any) {
-      console.log('character:create error', error)
+      logger.error('character:create error', error)
       return socket.emit('notification', { message: 'Could not create character. Please try again (later).' })
     }
   })
diff --git a/src/events/character/Delete.ts b/src/events/character/delete.ts
similarity index 88%
rename from src/events/character/Delete.ts
rename to src/events/character/delete.ts
index 5622f3c..0fdbb64 100644
--- a/src/events/character/Delete.ts
+++ b/src/events/character/delete.ts
@@ -1,7 +1,7 @@
 import { Server } from 'socket.io'
-import { TSocket } from '../../utilities/Types'
+import { TSocket } from '../../utilities/types'
 import { Character, Zone } from '@prisma/client'
-import CharacterRepository from '../../repositories/CharacterRepository'
+import CharacterRepository from '../../repositories/characterRepository'
 
 type TypePayload = {
   character_id: number
diff --git a/src/events/character/List.ts b/src/events/character/list.ts
similarity index 83%
rename from src/events/character/List.ts
rename to src/events/character/list.ts
index 17531f0..d994aea 100644
--- a/src/events/character/List.ts
+++ b/src/events/character/list.ts
@@ -1,7 +1,7 @@
 import { Socket, Server } from 'socket.io'
-import { TSocket } from '../../utilities/Types'
+import { TSocket } from '../../utilities/types'
 import { Character } from '@prisma/client'
-import CharacterRepository from '../../repositories/CharacterRepository'
+import CharacterRepository from '../../repositories/characterRepository'
 
 export default function CharacterList(socket: TSocket, io: Server) {
   socket.on('character:list', async (data: any) => {
diff --git a/src/events/character/Move.ts b/src/events/character/move.ts
similarity index 93%
rename from src/events/character/Move.ts
rename to src/events/character/move.ts
index ecea3cd..956c9db 100644
--- a/src/events/character/Move.ts
+++ b/src/events/character/move.ts
@@ -1,9 +1,9 @@
 import { Server } from 'socket.io'
-import { TSocket, ExtendedCharacter } from '../../utilities/Types'
-import ZoneManager from '../../managers/ZoneManager'
-import prisma from '../../utilities/Prisma'
-import { AStar } from '../../utilities/Player/AStar'
-import Rotation from '../../utilities/Player/Rotation'
+import { TSocket, ExtendedCharacter } from '../../utilities/types'
+import ZoneManager from '../../managers/zoneManager'
+import prisma from '../../utilities/prisma'
+import { AStar } from '../../utilities/player/aStar'
+import Rotation from '../../utilities/player/rotation'
 
 const moveTokens = new Map<number, symbol>()
 
diff --git a/src/events/character/ZoneLeave.ts b/src/events/character/zoneLeave.ts
similarity index 87%
rename from src/events/character/ZoneLeave.ts
rename to src/events/character/zoneLeave.ts
index 6adba2f..4665269 100644
--- a/src/events/character/ZoneLeave.ts
+++ b/src/events/character/zoneLeave.ts
@@ -1,7 +1,7 @@
 import { Server } from 'socket.io'
-import { TSocket } from '../../utilities/Types'
-import ZoneRepository from '../../repositories/ZoneRepository'
-import ZoneManager from '../../managers/ZoneManager'
+import { TSocket } from '../../utilities/types'
+import ZoneRepository from '../../repositories/zoneRepository'
+import ZoneManager from '../../managers/zoneManager'
 import { Character, Zone } from '@prisma/client'
 
 /**
diff --git a/src/events/character/ZoneRequest.ts b/src/events/character/zoneRequest.ts
similarity index 87%
rename from src/events/character/ZoneRequest.ts
rename to src/events/character/zoneRequest.ts
index fd11d4f..790631e 100644
--- a/src/events/character/ZoneRequest.ts
+++ b/src/events/character/zoneRequest.ts
@@ -1,7 +1,7 @@
 import { Server } from 'socket.io'
-import { TSocket } from '../../utilities/Types'
-import ZoneRepository from '../../repositories/ZoneRepository'
-import ZoneManager from '../../managers/ZoneManager'
+import { TSocket } from '../../utilities/types'
+import ZoneRepository from '../../repositories/zoneRepository'
+import ZoneManager from '../../managers/zoneManager'
 import { Character, Zone } from '@prisma/client'
 
 interface IPayload {
diff --git a/src/events/chat/gm/AlertCommand.ts b/src/events/chat/gm/alertCommand.ts
similarity index 81%
rename from src/events/chat/gm/AlertCommand.ts
rename to src/events/chat/gm/alertCommand.ts
index 60be1ef..cbba29c 100644
--- a/src/events/chat/gm/AlertCommand.ts
+++ b/src/events/chat/gm/alertCommand.ts
@@ -1,7 +1,7 @@
 import { Server } from 'socket.io'
-import { TSocket } from '../../../utilities/Types'
-import { getArgs, isCommand } from '../../../utilities/Chat'
-import CharacterRepository from '../../../repositories/CharacterRepository'
+import { TSocket } from '../../../utilities/types'
+import { getArgs, isCommand } from '../../../utilities/chat'
+import CharacterRepository from '../../../repositories/characterRepository'
 
 type TypePayload = {
   message: string
diff --git a/src/events/chat/SendMessage.ts b/src/events/chat/sendMessage.ts
similarity index 78%
rename from src/events/chat/SendMessage.ts
rename to src/events/chat/sendMessage.ts
index e46ec8b..05601a8 100644
--- a/src/events/chat/SendMessage.ts
+++ b/src/events/chat/sendMessage.ts
@@ -1,8 +1,8 @@
 import { Server } from 'socket.io'
-import { TSocket } from '../../utilities/Types'
-import CharacterRepository from '../../repositories/CharacterRepository'
-import ZoneRepository from '../../repositories/ZoneRepository'
-import { isCommand } from '../../utilities/Chat'
+import { TSocket } from '../../utilities/types'
+import CharacterRepository from '../../repositories/characterRepository'
+import ZoneRepository from '../../repositories/zoneRepository'
+import { isCommand } from '../../utilities/chat'
 
 type TypePayload = {
   message: string
diff --git a/src/events/Disconnect.ts b/src/events/disconnect.ts
similarity index 88%
rename from src/events/Disconnect.ts
rename to src/events/disconnect.ts
index fa7012b..d6186a6 100644
--- a/src/events/Disconnect.ts
+++ b/src/events/disconnect.ts
@@ -1,6 +1,6 @@
 import { Server } from 'socket.io'
-import { TSocket } from '../utilities/Types'
-import ZoneManager from '../managers/ZoneManager'
+import { TSocket } from '../utilities/types'
+import ZoneManager from '../managers/zoneManager'
 
 export default function (socket: TSocket, io: Server) {
   socket.on('disconnect', (data: any) => {
diff --git a/src/events/gm/object/List.ts b/src/events/gm/object/list.ts
similarity index 83%
rename from src/events/gm/object/List.ts
rename to src/events/gm/object/list.ts
index d574848..1500103 100644
--- a/src/events/gm/object/List.ts
+++ b/src/events/gm/object/list.ts
@@ -1,7 +1,7 @@
 import { Server } from 'socket.io'
-import { TSocket } from '../../../utilities/Types'
+import { TSocket } from '../../../utilities/types'
 import { Object } from '@prisma/client'
-import ObjectRepository from '../../../repositories/ObjectRepository'
+import ObjectRepository from '../../../repositories/objectRepository'
 
 interface IPayload {}
 
diff --git a/src/events/gm/object/Remove.ts b/src/events/gm/object/remove.ts
similarity index 90%
rename from src/events/gm/object/Remove.ts
rename to src/events/gm/object/remove.ts
index d67563d..0417827 100644
--- a/src/events/gm/object/Remove.ts
+++ b/src/events/gm/object/remove.ts
@@ -1,8 +1,8 @@
 import { Server } from 'socket.io'
-import { TSocket } from '../../../utilities/Types'
+import { TSocket } from '../../../utilities/types'
 import path from 'path'
 import fs from 'fs'
-import prisma from '../../../utilities/Prisma'
+import prisma from '../../../utilities/prisma'
 
 interface IPayload {
   object: string
diff --git a/src/events/gm/object/Update.ts b/src/events/gm/object/update.ts
similarity index 91%
rename from src/events/gm/object/Update.ts
rename to src/events/gm/object/update.ts
index e32defd..fa7b74c 100644
--- a/src/events/gm/object/Update.ts
+++ b/src/events/gm/object/update.ts
@@ -1,6 +1,6 @@
 import { Server } from 'socket.io'
-import { TSocket } from '../../../utilities/Types'
-import prisma from '../../../utilities/Prisma'
+import { TSocket } from '../../../utilities/types'
+import prisma from '../../../utilities/prisma'
 
 type Payload = {
   id: string
diff --git a/src/events/gm/object/Upload.ts b/src/events/gm/object/upload.ts
similarity index 93%
rename from src/events/gm/object/Upload.ts
rename to src/events/gm/object/upload.ts
index d9725c8..f46f7af 100644
--- a/src/events/gm/object/Upload.ts
+++ b/src/events/gm/object/upload.ts
@@ -1,9 +1,9 @@
 import { Server } from 'socket.io'
-import { TSocket } from '../../../utilities/Types'
+import { TSocket } from '../../../utilities/types'
 import { writeFile } from 'node:fs/promises'
 import path from 'path'
 import fs from 'fs/promises'
-import prisma from '../../../utilities/Prisma'
+import prisma from '../../../utilities/prisma'
 
 interface IObjectData {
   [key: string]: Buffer
diff --git a/src/events/gm/sprite/Create.ts b/src/events/gm/sprite/create.ts
similarity index 91%
rename from src/events/gm/sprite/Create.ts
rename to src/events/gm/sprite/create.ts
index de71513..e1cbdae 100644
--- a/src/events/gm/sprite/Create.ts
+++ b/src/events/gm/sprite/create.ts
@@ -1,8 +1,8 @@
 import { Server } from 'socket.io'
-import { TSocket } from '../../../utilities/Types'
+import { TSocket } from '../../../utilities/types'
 import path from 'path'
 import fs from 'fs/promises'
-import prisma from '../../../utilities/Prisma'
+import prisma from '../../../utilities/prisma'
 
 /**
  * Handle game master new sprite event
diff --git a/src/events/gm/sprite/List.ts b/src/events/gm/sprite/list.ts
similarity index 83%
rename from src/events/gm/sprite/List.ts
rename to src/events/gm/sprite/list.ts
index 5b65f75..642dd49 100644
--- a/src/events/gm/sprite/List.ts
+++ b/src/events/gm/sprite/list.ts
@@ -1,7 +1,7 @@
 import { Server } from 'socket.io'
-import { TSocket } from '../../../utilities/Types'
+import { TSocket } from '../../../utilities/types'
 import { Sprite } from '@prisma/client'
-import SpriteRepository from '../../../repositories/SpriteRepository'
+import SpriteRepository from '../../../repositories/spriteRepository'
 
 interface IPayload {}
 
diff --git a/src/events/gm/sprite/Remove.ts b/src/events/gm/sprite/remove.ts
similarity index 90%
rename from src/events/gm/sprite/Remove.ts
rename to src/events/gm/sprite/remove.ts
index b4f1d5f..ea1710f 100644
--- a/src/events/gm/sprite/Remove.ts
+++ b/src/events/gm/sprite/remove.ts
@@ -1,8 +1,8 @@
 import { Server } from 'socket.io'
-import { TSocket } from '../../../utilities/Types'
+import { TSocket } from '../../../utilities/types'
 import fs from 'fs'
 import path from 'path'
-import prisma from '../../../utilities/Prisma'
+import prisma from '../../../utilities/prisma'
 
 type Payload = {
   id: string
diff --git a/src/events/gm/sprite/Update.ts b/src/events/gm/sprite/update.ts
similarity index 97%
rename from src/events/gm/sprite/Update.ts
rename to src/events/gm/sprite/update.ts
index 410aaf1..645a298 100644
--- a/src/events/gm/sprite/Update.ts
+++ b/src/events/gm/sprite/update.ts
@@ -1,6 +1,6 @@
 import { Server } from 'socket.io'
-import { TSocket } from '../../../utilities/Types'
-import prisma from '../../../utilities/Prisma'
+import { TSocket } from '../../../utilities/types'
+import prisma from '../../../utilities/prisma'
 import type { Prisma, SpriteAction } from '@prisma/client'
 import path from 'path'
 import { writeFile, mkdir } from 'node:fs/promises'
diff --git a/src/events/gm/tile/List.ts b/src/events/gm/tile/list.ts
similarity index 82%
rename from src/events/gm/tile/List.ts
rename to src/events/gm/tile/list.ts
index 155cc0b..f951bf5 100644
--- a/src/events/gm/tile/List.ts
+++ b/src/events/gm/tile/list.ts
@@ -1,7 +1,7 @@
 import { Server } from 'socket.io'
-import { TSocket } from '../../../utilities/Types'
+import { TSocket } from '../../../utilities/types'
 import { Tile } from '@prisma/client'
-import TileRepository from '../../../repositories/TileRepository'
+import TileRepository from '../../../repositories/tileRepository'
 
 interface IPayload {}
 
diff --git a/src/events/gm/tile/Remove.ts b/src/events/gm/tile/remove.ts
similarity index 90%
rename from src/events/gm/tile/Remove.ts
rename to src/events/gm/tile/remove.ts
index a784a56..3e999a6 100644
--- a/src/events/gm/tile/Remove.ts
+++ b/src/events/gm/tile/remove.ts
@@ -1,8 +1,8 @@
 import { Server } from 'socket.io'
-import { TSocket } from '../../../utilities/Types'
+import { TSocket } from '../../../utilities/types'
 import path from 'path'
 import fs from 'fs'
-import prisma from '../../../utilities/Prisma'
+import prisma from '../../../utilities/prisma'
 
 type Payload = {
   id: string
diff --git a/src/events/gm/tile/Update.ts b/src/events/gm/tile/update.ts
similarity index 87%
rename from src/events/gm/tile/Update.ts
rename to src/events/gm/tile/update.ts
index a276401..884333b 100644
--- a/src/events/gm/tile/Update.ts
+++ b/src/events/gm/tile/update.ts
@@ -1,6 +1,6 @@
 import { Server } from 'socket.io'
-import { TSocket } from '../../../utilities/Types'
-import prisma from '../../../utilities/Prisma'
+import { TSocket } from '../../../utilities/types'
+import prisma from '../../../utilities/prisma'
 
 type Payload = {
   id: string
diff --git a/src/events/gm/tile/Upload.ts b/src/events/gm/tile/upload.ts
similarity index 92%
rename from src/events/gm/tile/Upload.ts
rename to src/events/gm/tile/upload.ts
index a115bb5..fb1a086 100644
--- a/src/events/gm/tile/Upload.ts
+++ b/src/events/gm/tile/upload.ts
@@ -1,9 +1,9 @@
 import { Server } from 'socket.io'
-import { TSocket } from '../../../utilities/Types'
+import { TSocket } from '../../../utilities/types'
 import { writeFile } from 'node:fs/promises'
 import path from 'path'
 import fs from 'fs/promises'
-import prisma from '../../../utilities/Prisma'
+import prisma from '../../../utilities/prisma'
 
 interface ITileData {
   [key: string]: Buffer
diff --git a/src/events/gm/zone/Create.ts b/src/events/gm/zone/create.ts
similarity index 88%
rename from src/events/gm/zone/Create.ts
rename to src/events/gm/zone/create.ts
index 984e0e2..a55b563 100644
--- a/src/events/gm/zone/Create.ts
+++ b/src/events/gm/zone/create.ts
@@ -1,8 +1,8 @@
 import { Server } from 'socket.io'
-import { TSocket } from '../../../utilities/Types'
-import ZoneRepository from '../../../repositories/ZoneRepository'
+import { TSocket } from '../../../utilities/types'
+import ZoneRepository from '../../../repositories/zoneRepository'
 import { Zone } from '@prisma/client'
-import prisma from '../../../utilities/Prisma'
+import prisma from '../../../utilities/prisma'
 
 type Payload = {
   name: string
diff --git a/src/events/gm/zone/Delete.ts b/src/events/gm/zone/delete.ts
similarity index 84%
rename from src/events/gm/zone/Delete.ts
rename to src/events/gm/zone/delete.ts
index 830e67b..4e737f2 100644
--- a/src/events/gm/zone/Delete.ts
+++ b/src/events/gm/zone/delete.ts
@@ -1,7 +1,7 @@
 import { Server } from 'socket.io'
-import { TSocket } from '../../../utilities/Types'
-import ZoneRepository from '../../../repositories/ZoneRepository'
-import prisma from '../../../utilities/Prisma'
+import { TSocket } from '../../../utilities/types'
+import ZoneRepository from '../../../repositories/zoneRepository'
+import prisma from '../../../utilities/prisma'
 
 type Payload = {
   zoneId: number
diff --git a/src/events/gm/zone/List.ts b/src/events/gm/zone/list.ts
similarity index 86%
rename from src/events/gm/zone/List.ts
rename to src/events/gm/zone/list.ts
index 56cafe3..f417b06 100644
--- a/src/events/gm/zone/List.ts
+++ b/src/events/gm/zone/list.ts
@@ -1,7 +1,7 @@
 import { Server } from 'socket.io'
-import { TSocket } from '../../../utilities/Types'
+import { TSocket } from '../../../utilities/types'
 import { Zone } from '@prisma/client'
-import ZoneRepository from '../../../repositories/ZoneRepository'
+import ZoneRepository from '../../../repositories/zoneRepository'
 
 interface IPayload {}
 
diff --git a/src/events/gm/zone/Request.ts b/src/events/gm/zone/request.ts
similarity index 87%
rename from src/events/gm/zone/Request.ts
rename to src/events/gm/zone/request.ts
index f50d689..a5d35e2 100644
--- a/src/events/gm/zone/Request.ts
+++ b/src/events/gm/zone/request.ts
@@ -1,6 +1,6 @@
 import { Server } from 'socket.io'
-import { TSocket } from '../../../utilities/Types'
-import ZoneRepository from '../../../repositories/ZoneRepository'
+import { TSocket } from '../../../utilities/types'
+import ZoneRepository from '../../../repositories/zoneRepository'
 import { Zone } from '@prisma/client'
 
 interface IPayload {
diff --git a/src/events/gm/zone/Update.ts b/src/events/gm/zone/update.ts
similarity index 92%
rename from src/events/gm/zone/Update.ts
rename to src/events/gm/zone/update.ts
index 5f3a2bb..90d2d88 100644
--- a/src/events/gm/zone/Update.ts
+++ b/src/events/gm/zone/update.ts
@@ -1,9 +1,9 @@
 import { Server } from 'socket.io'
-import { TSocket } from '../../../utilities/Types'
-import ZoneRepository from '../../../repositories/ZoneRepository'
+import { TSocket } from '../../../utilities/types'
+import ZoneRepository from '../../../repositories/zoneRepository'
 import { ZoneEventTile, ZoneObject } from '@prisma/client'
-import prisma from '../../../utilities/Prisma'
-import zoneManager from '../../../managers/ZoneManager'
+import prisma from '../../../utilities/prisma'
+import zoneManager from '../../../managers/zoneManager'
 
 interface IPayload {
   zoneId: number
diff --git a/src/events/Login.ts b/src/events/login.ts
similarity index 81%
rename from src/events/Login.ts
rename to src/events/login.ts
index 423388d..009718b 100644
--- a/src/events/Login.ts
+++ b/src/events/login.ts
@@ -1,5 +1,5 @@
 import { Server } from 'socket.io'
-import { TSocket } from '../utilities/Types'
+import { TSocket } from '../utilities/types'
 
 export default function (socket: TSocket, io: Server) {
   socket.on('login', () => {
diff --git a/src/managers/CommandManager.ts b/src/managers/commandManager.ts
similarity index 100%
rename from src/managers/CommandManager.ts
rename to src/managers/commandManager.ts
diff --git a/src/managers/UserManager.ts b/src/managers/userManager.ts
similarity index 90%
rename from src/managers/UserManager.ts
rename to src/managers/userManager.ts
index 4c35935..3c1c29b 100644
--- a/src/managers/UserManager.ts
+++ b/src/managers/userManager.ts
@@ -1,4 +1,5 @@
 import { User } from '@prisma/client'
+import logger from '../utilities/logger'
 
 type TLoggedInUsers = {
   users: User[]
@@ -9,7 +10,7 @@ class UserManager {
 
   // Method to initialize user manager
   public async boot() {
-    console.log('[✅] User manager loaded')
+    logger.info('User manager loaded')
   }
 
   // Function that adds user to logged in users
diff --git a/src/managers/ZoneManager.ts b/src/managers/zoneManager.ts
similarity index 91%
rename from src/managers/ZoneManager.ts
rename to src/managers/zoneManager.ts
index 7c549c1..2245414 100644
--- a/src/managers/ZoneManager.ts
+++ b/src/managers/zoneManager.ts
@@ -1,7 +1,8 @@
 import { Character, Zone } from '@prisma/client'
-import ZoneRepository from '../repositories/ZoneRepository'
-import ZoneService from '../services/ZoneService'
-import zoneRepository from '../repositories/ZoneRepository'
+import ZoneRepository from '../repositories/zoneRepository'
+import ZoneService from '../services/zoneService'
+import zoneRepository from '../repositories/zoneRepository'
+import logger from '../utilities/logger'
 
 type TLoadedZone = {
   zone: Zone
@@ -25,7 +26,7 @@ class ZoneManager {
       await this.loadZone(zone)
     }
 
-    console.log('[✅] Zone manager loaded')
+    logger.info('Zone manager loaded')
   }
 
   // Method to handle individual zone loading
@@ -36,7 +37,7 @@ class ZoneManager {
       characters: [],
       grid
     })
-    console.log(`[✅] Zone ID ${zone.id} loaded`)
+    logger.info(`Zone ID ${zone.id} loaded`)
   }
 
   // Method to handle individual zone unloading
@@ -44,7 +45,7 @@ class ZoneManager {
     this.loadedZones = this.loadedZones.filter((loadedZone) => {
       return loadedZone.zone.id !== zoneId
     })
-    console.log(`[❌] Zone ID ${zoneId} unloaded`)
+    logger.info(`Zone ID ${zoneId} unloaded`)
   }
 
   // Getter for loaded zones
diff --git a/src/middleware/Authentication.ts b/src/middleware/authentication.ts
similarity index 86%
rename from src/middleware/Authentication.ts
rename to src/middleware/authentication.ts
index 98beaff..5109e09 100644
--- a/src/middleware/Authentication.ts
+++ b/src/middleware/authentication.ts
@@ -1,8 +1,8 @@
 // socket io jwt auth middleware
 import { verify } from 'jsonwebtoken'
-import { TSocket } from '../utilities/Types'
-import config from '../utilities/Config'
-import UserRepository from '../repositories/UserRepository'
+import { TSocket } from '../utilities/types'
+import config from '../utilities/config'
+import UserRepository from '../repositories/userRepository'
 import { User } from '@prisma/client'
 
 export async function Authentication(socket: TSocket, next: any) {
diff --git a/src/repositories/CharacterRepository.ts b/src/repositories/characterRepository.ts
similarity index 97%
rename from src/repositories/CharacterRepository.ts
rename to src/repositories/characterRepository.ts
index 94f50cf..4928fae 100644
--- a/src/repositories/CharacterRepository.ts
+++ b/src/repositories/characterRepository.ts
@@ -1,4 +1,4 @@
-import prisma from '../utilities/Prisma' // Import the global Prisma instance
+import prisma from '../utilities/prisma' // Import the global Prisma instance
 import { Character } from '@prisma/client'
 
 class CharacterRepository {
diff --git a/src/repositories/ObjectRepository.ts b/src/repositories/objectRepository.ts
similarity index 83%
rename from src/repositories/ObjectRepository.ts
rename to src/repositories/objectRepository.ts
index 44a4435..32bbd71 100644
--- a/src/repositories/ObjectRepository.ts
+++ b/src/repositories/objectRepository.ts
@@ -1,4 +1,4 @@
-import prisma from '../utilities/Prisma' // Import the global Prisma instance
+import prisma from '../utilities/prisma' // Import the global Prisma instance
 import { Object } from '@prisma/client'
 
 class ObjectRepository {
diff --git a/src/repositories/SpriteRepository.ts b/src/repositories/spriteRepository.ts
similarity index 89%
rename from src/repositories/SpriteRepository.ts
rename to src/repositories/spriteRepository.ts
index 02f1368..f773e85 100644
--- a/src/repositories/SpriteRepository.ts
+++ b/src/repositories/spriteRepository.ts
@@ -1,4 +1,4 @@
-import prisma from '../utilities/Prisma' // Import the global Prisma instance
+import prisma from '../utilities/prisma' // Import the global Prisma instance
 import { Sprite, SpriteAction } from '@prisma/client'
 
 class SpriteRepository {
diff --git a/src/repositories/TileRepository.ts b/src/repositories/tileRepository.ts
similarity index 82%
rename from src/repositories/TileRepository.ts
rename to src/repositories/tileRepository.ts
index 19476d4..edbfdb5 100644
--- a/src/repositories/TileRepository.ts
+++ b/src/repositories/tileRepository.ts
@@ -1,4 +1,4 @@
-import prisma from '../utilities/Prisma' // Import the global Prisma instance
+import prisma from '../utilities/prisma' // Import the global Prisma instance
 import { Tile } from '@prisma/client'
 
 class TileRepository {
diff --git a/src/repositories/UserRepository.ts b/src/repositories/userRepository.ts
similarity index 91%
rename from src/repositories/UserRepository.ts
rename to src/repositories/userRepository.ts
index 93f2b69..36dc280 100644
--- a/src/repositories/UserRepository.ts
+++ b/src/repositories/userRepository.ts
@@ -1,4 +1,4 @@
-import prisma from '../utilities/Prisma' // Import the global Prisma instance
+import prisma from '../utilities/prisma' // Import the global Prisma instance
 import { User } from '@prisma/client'
 
 class UserRepository {
diff --git a/src/repositories/ZoneRepository.ts b/src/repositories/zoneRepository.ts
similarity index 96%
rename from src/repositories/ZoneRepository.ts
rename to src/repositories/zoneRepository.ts
index b8190a4..79e06e6 100644
--- a/src/repositories/ZoneRepository.ts
+++ b/src/repositories/zoneRepository.ts
@@ -1,5 +1,5 @@
 import { Zone } from '@prisma/client'
-import prisma from '../utilities/Prisma' // Import the global Prisma instance
+import prisma from '../utilities/prisma' // Import the global Prisma instance
 
 class ZoneRepository {
   async getFirst(): Promise<Zone | null> {
diff --git a/src/server.ts b/src/server.ts
index 4573c28..9223bc6 100644
--- a/src/server.ts
+++ b/src/server.ts
@@ -1,22 +1,24 @@
 import fs from 'fs'
 import path from 'path'
 import express, { Application } from 'express'
-import { createServer as httpServer } from 'http'
-import { addHttpRoutes } from './utilities/Http'
+import { createServer as httpServer, Server as HTTPServer } from 'http'
+import { addHttpRoutes } from './utilities/http'
 import cors from 'cors'
 import { Server as SocketServer } from 'socket.io'
-import { TSocket } from './utilities/Types'
-import config from './utilities/Config'
-import prisma from './utilities/Prisma'
-import ZoneManager from './managers/ZoneManager'
-import UserManager from './managers/UserManager'
-import { Authentication } from './middleware/Authentication'
-import CommandManager from './managers/CommandManager'
+import { TSocket } from './utilities/types'
+import config from './utilities/config'
+import prisma from './utilities/prisma'
+import ZoneManager from './managers/zoneManager'
+import UserManager from './managers/userManager'
+import { Authentication } from './middleware/authentication'
+// import CommandManager from './managers/CommandManager'
 import { Dirent } from 'node:fs'
+import logger from './utilities/logger'
+
 
 export class Server {
   private readonly app: Application
-  private readonly http: any
+  private readonly http: HTTPServer
   private readonly io: SocketServer
 
   /**
@@ -39,17 +41,17 @@ export class Server {
     // Check prisma connection
     try {
       await prisma.$connect()
-      console.log('[✅] Database connected')
+      logger.info('Database connected')
     } catch (error: any) {
-      throw new Error(`[❌] Database connection failed: ${error.message}`)
+      logger.error(`Database connection failed: ${error.message}`)
     }
 
     // Start the server
     try {
       await this.http.listen(config.PORT, config.HOST)
-      console.log('[✅] Socket.IO running on port', config.PORT)
+      logger.info(`Socket.IO running on port ${config.PORT}`)
     } catch (error: any) {
-      throw new Error(`[❌] Socket.IO failed to start: ${error.message}`)
+      logger.error(`Socket.IO failed to start: ${error.message}`)
     }
 
     // Add http API routes
@@ -78,7 +80,7 @@ export class Server {
     try {
       await this.loadEventHandlers(eventsPath, socket)
     } catch (error: any) {
-      throw new Error('[❌] Failed to load event handlers: ' + error.message)
+      logger.error(`Failed to load event handlers: ${error.message}`)
     }
   }
 
@@ -101,3 +103,5 @@ export class Server {
 // Start the server
 const server = new Server()
 server.start()
+
+console.log('Server started')
\ No newline at end of file
diff --git a/src/services/AssetService.ts b/src/services/assetService.ts
similarity index 100%
rename from src/services/AssetService.ts
rename to src/services/assetService.ts
diff --git a/src/services/CharacterService.ts b/src/services/characterService.ts
similarity index 100%
rename from src/services/CharacterService.ts
rename to src/services/characterService.ts
diff --git a/src/services/UserService.ts b/src/services/userService.ts
similarity index 88%
rename from src/services/UserService.ts
rename to src/services/userService.ts
index 69e75d6..4215076 100644
--- a/src/services/UserService.ts
+++ b/src/services/userService.ts
@@ -1,6 +1,6 @@
 import bcrypt from 'bcryptjs'
-import UserRepository from '../repositories/UserRepository'
-import prisma from '../utilities/Prisma'
+import UserRepository from '../repositories/userRepository'
+import prisma from '../utilities/prisma'
 import { User } from '@prisma/client'
 
 class UserService {
diff --git a/src/services/ZoneService.ts b/src/services/zoneService.ts
similarity index 97%
rename from src/services/ZoneService.ts
rename to src/services/zoneService.ts
index 8955cc5..4a5d601 100644
--- a/src/services/ZoneService.ts
+++ b/src/services/zoneService.ts
@@ -1,4 +1,4 @@
-import prisma from '../utilities/Prisma'
+import prisma from '../utilities/prisma'
 
 class ZoneService {
   async createDemoZone(): Promise<boolean> {
diff --git a/src/utilities/Chat.ts b/src/utilities/chat.ts
similarity index 100%
rename from src/utilities/Chat.ts
rename to src/utilities/chat.ts
diff --git a/src/utilities/Config.ts b/src/utilities/config.ts
similarity index 100%
rename from src/utilities/Config.ts
rename to src/utilities/config.ts
diff --git a/src/utilities/Http.ts b/src/utilities/http.ts
similarity index 87%
rename from src/utilities/Http.ts
rename to src/utilities/http.ts
index 0e064d5..a582203 100644
--- a/src/utilities/Http.ts
+++ b/src/utilities/http.ts
@@ -1,14 +1,15 @@
 import { Application, Request, Response } from 'express'
-import UserService from '../services/UserService'
+import UserService from '../services/userService'
 import jwt from 'jsonwebtoken'
-import config from './Config'
-import { loginAccountSchema, registerAccountSchema } from './ZodTypes'
+import config from './config'
+import { loginAccountSchema, registerAccountSchema } from './zodTypes'
 import path from 'path'
-import { TAsset } from './Types'
-import tileRepository from '../repositories/TileRepository'
-import objectRepository from '../repositories/ObjectRepository'
-import spriteRepository from '../repositories/SpriteRepository'
+import { TAsset } from './types'
+import tileRepository from '../repositories/tileRepository'
+import objectRepository from '../repositories/objectRepository'
+import spriteRepository from '../repositories/spriteRepository'
 import fs from 'fs'
+import logger from './logger'
 
 async function addHttpRoutes(app: Application) {
   app.get('/assets', async (req: Request, res: Response) => {
@@ -60,8 +61,6 @@ async function addHttpRoutes(app: Application) {
       assetPath = path.join(process.cwd(), 'public', assetType, fileName)
     }
 
-    console.log(`Attempting to serve: ${assetPath}`)
-
     if (!fs.existsSync(assetPath)) {
       console.error(`File not found: ${assetPath}`)
       return res.status(404).send('Asset not found')
@@ -114,7 +113,7 @@ async function addHttpRoutes(app: Application) {
     return res.status(400).json({ message: 'Failed to register user' })
   })
 
-  console.log('[✅] Web routes added')
+  logger.info('Web routes added')
 }
 
 export { addHttpRoutes }
diff --git a/src/utilities/logger.ts b/src/utilities/logger.ts
new file mode 100644
index 0000000..c3f9cc1
--- /dev/null
+++ b/src/utilities/logger.ts
@@ -0,0 +1,20 @@
+import pino from 'pino'
+
+const logger = pino({
+  level: process.env.LOG_LEVEL || 'debug',
+  transport: {
+    target: 'pino/file',
+    options: {
+      destination: './logs/app.log',
+      mkdir: true
+    }
+  },
+  formatters: {
+    level: (label) => {
+      return { level: label.toUpperCase() }
+    },
+  },
+  timestamp: pino.stdTimeFunctions.isoTime
+})
+
+export default logger
\ No newline at end of file
diff --git a/src/utilities/Player/AStar.ts b/src/utilities/player/aStar.ts
similarity index 100%
rename from src/utilities/Player/AStar.ts
rename to src/utilities/player/aStar.ts
diff --git a/src/utilities/Player/Rotation.ts b/src/utilities/player/rotation.ts
similarity index 100%
rename from src/utilities/Player/Rotation.ts
rename to src/utilities/player/rotation.ts
diff --git a/src/utilities/Prisma.ts b/src/utilities/prisma.ts
similarity index 100%
rename from src/utilities/Prisma.ts
rename to src/utilities/prisma.ts
diff --git a/src/utilities/Types.ts b/src/utilities/types.ts
similarity index 100%
rename from src/utilities/Types.ts
rename to src/utilities/types.ts
diff --git a/src/utilities/ZodTypes.ts b/src/utilities/zodTypes.ts
similarity index 100%
rename from src/utilities/ZodTypes.ts
rename to src/utilities/zodTypes.ts