diff --git a/config/booru.ts b/config/booru.ts
index a71f64c..d4162c7 100644
--- a/config/booru.ts
+++ b/config/booru.ts
@@ -18,9 +18,9 @@ export const booruConfig: IBooruConfigMap = {
 		autocomplete: "ac.rule34.xxx/autocomplete.php?q=",
 	},
 	"realbooru.com": {
-		enabled: false,
+		enabled: true,
 		name: "realbooru.com",
-		aliases: ["realbooru", "rb", "real34"],
+		aliases: ["realbooru", "rb", "real34", "realb"],
 		endpoint: "realbooru.com",
 		functions: booruDefaults,
 		autocomplete: "realbooru.com/index.php?page=autocomplete&term=",
diff --git a/config/environment.ts b/config/environment.ts
index 485d3c7..cdf6a3c 100644
--- a/config/environment.ts
+++ b/config/environment.ts
@@ -1,13 +1,5 @@
-import dotenv from "dotenv";
-
 import { logger } from "@/helpers/logger";
 
-try {
-	dotenv.config();
-} catch {
-	logger.error("No .env file found consider creating one");
-}
-
 export const environment: Environment = {
 	port: parseInt(process.env.PORT || "6600", 10),
 	host: process.env.HOST || "0.0.0.0",
diff --git a/src/routes/nsfw/[booru]/autocomplete/[tag].ts b/src/routes/[booru]/autocomplete/[tag].ts
similarity index 100%
rename from src/routes/nsfw/[booru]/autocomplete/[tag].ts
rename to src/routes/[booru]/autocomplete/[tag].ts
diff --git a/src/routes/nsfw/[booru]/id/[id].ts b/src/routes/[booru]/id/[id].ts
similarity index 100%
rename from src/routes/nsfw/[booru]/id/[id].ts
rename to src/routes/[booru]/id/[id].ts
diff --git a/src/routes/nsfw/[booru]/random.ts b/src/routes/[booru]/random.ts
similarity index 95%
rename from src/routes/nsfw/[booru]/random.ts
rename to src/routes/[booru]/random.ts
index a688488..a2f482a 100644
--- a/src/routes/nsfw/[booru]/random.ts
+++ b/src/routes/[booru]/random.ts
@@ -281,12 +281,16 @@ async function handler(
 			const parsedData: Data = data as Data;
 
 			let posts: BooruPost[] = [];
-			if (parsedData.post) {
-				posts = [parsedData.post];
-			} else if (parsedData.posts) {
-				posts = parsedData.posts;
+			if (booruConfig.name === "realbooru.com") {
+				posts = parsedData.post || [];
 			} else {
-				posts = Array.isArray(data) ? (data as BooruPost[]) : [];
+				if (parsedData.post) {
+					posts = [parsedData.post];
+				} else if (parsedData.posts) {
+					posts = parsedData.posts;
+				} else {
+					posts = Array.isArray(data) ? (data as BooruPost[]) : [];
+				}
 			}
 
 			if (posts.length === 0) continue;
diff --git a/src/routes/nsfw/[booru]/search.ts b/src/routes/[booru]/search.ts
similarity index 100%
rename from src/routes/nsfw/[booru]/search.ts
rename to src/routes/[booru]/search.ts
diff --git a/src/routes/index.ts b/src/routes/index.ts
index fffcb3f..913d56f 100644
--- a/src/routes/index.ts
+++ b/src/routes/index.ts
@@ -1,15 +1,25 @@
 const routeDef: RouteDef = {
 	method: "GET",
 	accepts: "*/*",
-	returns: "text/html",
+	returns: "application/json",
 };
 
 async function handler(): Promise<Response> {
-	return new Response("Hello, World!", {
-		headers: {
-			"content-type": "text/html",
+	return Response.json(
+		{
+			success: true,
+			code: 200,
+			message:
+				"Welcome to the booru API, check the documentation for more information",
+			links: {
+				forgejo: "https://forgejo.creations.works/creations/booru-api",
+				GitHub: "https://github.com/Creationsss/booru-api",
+			},
 		},
-	});
+		{
+			status: 200,
+		},
+	);
 }
 
 export { handler, routeDef };
diff --git a/src/server.ts b/src/server.ts
index 5d9ba31..20c4e01 100644
--- a/src/server.ts
+++ b/src/server.ts
@@ -149,11 +149,22 @@ class ServerHandler {
 			);
 		}
 
+		const headers: Headers = response.headers;
+		let ip: string | null = server.requestIP(request)?.address || null;
+
+		if (!ip) {
+			ip =
+				headers.get("CF-Connecting-IP") ||
+				headers.get("X-Real-IP") ||
+				headers.get("X-Forwarded-For") ||
+				null;
+		}
+
 		logger.info([
 			`[${request.method}]`,
 			request.url,
 			`${response.status}`,
-			server.requestIP(request)?.address || "unknown",
+			`(${ip || "unknown"})`,
 		]);
 
 		return response;