diff --git a/frontend/404.html b/frontend/404.html
index 381fa674..dbc21861 100644
--- a/frontend/404.html
+++ b/frontend/404.html
@@ -1,3 +1,53 @@
+
+
+
+
+
+ 404 - Page Not Found
+
+
+
+
+
guest@codepvg:~$ cd /that-page
+
bash: /that-page: No such file or directory
+
+
+
+
404: Route not found.
+
This route doesn't exist. Unlike your rank, which does.
+
+
→ Leaderboard
+
→ Registration
+
+
+
diff --git a/frontend/index.html b/frontend/index.html
index 3255d3b0..58629b16 100644
--- a/frontend/index.html
+++ b/frontend/index.html
@@ -92,8 +92,13 @@
+
+
+
+
+
diff --git a/frontend/js/custom_cursor.js b/frontend/js/custom_cursor.js
new file mode 100644
index 00000000..0a0d6d70
--- /dev/null
+++ b/frontend/js/custom_cursor.js
@@ -0,0 +1,26 @@
+const cursor = document.querySelector(".custom-cursor");
+
+let lastTrail = 0;
+
+document.addEventListener("mousemove", (e) => {
+ cursor.style.left = e.clientX + "px";
+ cursor.style.top = e.clientY + "px";
+
+ const now = Date.now();
+
+ if (now - lastTrail > 20) {
+ lastTrail = now;
+
+ const trail = document.createElement("div");
+ trail.className = "trail";
+
+ trail.style.left = e.clientX + "px";
+ trail.style.top = e.clientY + "px";
+
+ document.body.appendChild(trail);
+
+ setTimeout(() => {
+ trail.remove();
+ }, 500);
+ }
+});
\ No newline at end of file
diff --git a/frontend/styles/main.css b/frontend/styles/main.css
index cc6604b3..d33214f4 100644
--- a/frontend/styles/main.css
+++ b/frontend/styles/main.css
@@ -2575,6 +2575,56 @@ body::-webkit-scrollbar-thumb {
color: var(--text-muted);
}
+
+
+.custom-cursor {
+ position: fixed;
+ width: 18px;
+ height: 18px;
+ border-radius: 50%;
+ background: #00ff66;
+ box-shadow:
+ 0 0 10px #00ff66,
+ 0 0 20px #00ff66,
+ 0 0 40px #00ff66;
+ pointer-events: none;
+ transform: translate(-50%, -50%);
+ z-index: 9999;
+ transition: transform 0.08s linear;
+}
+
+.trail {
+ position: fixed;
+ width: 8px;
+ height: 8px;
+ border-radius: 50%;
+ background: #00ff66;
+ box-shadow:
+ 0 0 10px #00ff66,
+ 0 0 20px #00ff66,
+ 0 0 30px #00ff66;
+ pointer-events: none;
+ transform: translate(-50%, -50%);
+ animation: fadeTrail 0.8s linear forwards;
+ z-index: 9998;
+}
+
+@keyframes fadeTrail {
+ from {
+ opacity: 1;
+ transform: translate(-50%, -50%) scale(1);
+ }
+
+ to {
+ opacity: 0;
+ transform: translate(-50%, -50%) scale(0.2);
+ }
+}
+
+body{
+ cursor: none;
+}
+=======
/* scroll to top button */
#scroll-top-btn {
display: none;
diff --git a/server.js b/server.js
index 8ab527e7..d32dafc0 100644
--- a/server.js
+++ b/server.js
@@ -171,3 +171,10 @@ app.use((req, res) => {
app.listen(PORT, () => {
console.log(`Server running at http://localhost:${PORT}`);
});
+
+// Must be last route
+app.use((req, res) => {
+ res
+ .status(404)
+ .sendFile(path.join(__dirname, "frontend", "404.html"));
+});
\ No newline at end of file