From 90ffa3c98add94f3eea169b2b198f375e0171099 Mon Sep 17 00:00:00 2001
From: Jack Tench <79285604+JackTench@users.noreply.github.com>
Date: Mon, 3 Nov 2025 17:43:44 +0000
Subject: [PATCH 1/5] [berlix] Install text scramble
---
src/components/ui/text-scramble.tsx | 62 +++++++++++++++++++++++++++++
1 file changed, 62 insertions(+)
create mode 100644 src/components/ui/text-scramble.tsx
diff --git a/src/components/ui/text-scramble.tsx b/src/components/ui/text-scramble.tsx
new file mode 100644
index 0000000..e302061
--- /dev/null
+++ b/src/components/ui/text-scramble.tsx
@@ -0,0 +1,62 @@
+"use client";
+
+import { useEffect, useState } from "react";
+
+import { motion } from "framer-motion";
+
+interface TextScrambleProps {
+ children: string;
+ speed?: number;
+ characterSet?: string;
+ className?: string;
+}
+
+const DEFAULT_CHARS =
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+
+function getRandomChar(charSet: string) {
+ return charSet[Math.floor(Math.random() * charSet.length)];
+}
+
+export const TextScramble = ({
+ children,
+ speed = 50,
+ characterSet = DEFAULT_CHARS,
+ className,
+ ...motionProps
+}: TextScrambleProps) => {
+ const [text, setText] = useState(children);
+
+ useEffect(() => {
+ let step = 0;
+ const interval = setInterval(() => {
+ let scrambled = "";
+
+ for (let i = 0; i < children.length; i++) {
+ if (i < step) {
+ scrambled += children[i];
+ } else if (children[i] === " ") {
+ scrambled += " ";
+ } else {
+ scrambled += getRandomChar(characterSet);
+ }
+ }
+
+ setText(scrambled);
+ step++;
+
+ if (step > children.length) {
+ clearInterval(interval);
+ setText(children);
+ }
+ }, speed);
+
+ return () => clearInterval(interval);
+ }, [children, speed, characterSet]);
+
+ return (
+
+ {text}
+
+ );
+};
From d393f4b76b850f2ff79b218cb2b0925077d9070d Mon Sep 17 00:00:00 2001
From: Jack Tench <79285604+JackTench@users.noreply.github.com>
Date: Mon, 3 Nov 2025 17:51:32 +0000
Subject: [PATCH 2/5] Add hero component
---
src/app/home.tsx | 4 +++-
src/components/libresplit/AppHero.tsx | 12 ++++++++++++
2 files changed, 15 insertions(+), 1 deletion(-)
create mode 100644 src/components/libresplit/AppHero.tsx
diff --git a/src/app/home.tsx b/src/app/home.tsx
index 003fabb..a04dc54 100644
--- a/src/app/home.tsx
+++ b/src/app/home.tsx
@@ -1,8 +1,10 @@
import { AppGitHubReadme } from "@/components/libresplit/AppGitHubReadme";
+import { AppHero } from "@/components/libresplit/AppHero";
export function Home() {
return (
-
+
);
diff --git a/src/components/libresplit/AppHero.tsx b/src/components/libresplit/AppHero.tsx
new file mode 100644
index 0000000..3b84fb0
--- /dev/null
+++ b/src/components/libresplit/AppHero.tsx
@@ -0,0 +1,12 @@
+import { TextScramble } from "../ui/text-scramble";
+
+export function AppHero() {
+ return (
+
+
LibreSplit
+
+ Free speedrun timer with auto splitting and load removal for Linux.
+
+
+ );
+}
From 3830e60651c97c8873a2498dd1644fdc657df3da Mon Sep 17 00:00:00 2001
From: Jack Tench <79285604+JackTench@users.noreply.github.com>
Date: Mon, 3 Nov 2025 17:53:42 +0000
Subject: [PATCH 3/5] Add image to hero
---
src/components/libresplit/AppHero.tsx | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/components/libresplit/AppHero.tsx b/src/components/libresplit/AppHero.tsx
index 3b84fb0..85171aa 100644
--- a/src/components/libresplit/AppHero.tsx
+++ b/src/components/libresplit/AppHero.tsx
@@ -3,6 +3,11 @@ import { TextScramble } from "../ui/text-scramble";
export function AppHero() {
return (
+
LibreSplit
Free speedrun timer with auto splitting and load removal for Linux.
From 7bc4a8e9be4a38524a442e5799f56c0306d2cebf Mon Sep 17 00:00:00 2001
From: Jack Tench <79285604+JackTench@users.noreply.github.com>
Date: Mon, 3 Nov 2025 17:55:02 +0000
Subject: [PATCH 4/5] Fix centering on main page
---
src/app/home.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/app/home.tsx b/src/app/home.tsx
index a04dc54..c11e654 100644
--- a/src/app/home.tsx
+++ b/src/app/home.tsx
@@ -3,7 +3,7 @@ import { AppHero } from "@/components/libresplit/AppHero";
export function Home() {
return (
-
+
From 91c4749ca37c7113af5065e4e32443de7e1d7148 Mon Sep 17 00:00:00 2001
From: Jack Tench <79285604+JackTench@users.noreply.github.com>
Date: Mon, 3 Nov 2025 17:56:42 +0000
Subject: [PATCH 5/5] Fix centering on nav bar
---
src/components/libresplit/AppNav.tsx | 30 +++++++++++++++-------------
1 file changed, 16 insertions(+), 14 deletions(-)
diff --git a/src/components/libresplit/AppNav.tsx b/src/components/libresplit/AppNav.tsx
index fee0ea7..88a6061 100644
--- a/src/components/libresplit/AppNav.tsx
+++ b/src/components/libresplit/AppNav.tsx
@@ -15,21 +15,23 @@ export function AppNav() {
-
-
-
-
- Home
-
-
+
+
+
+
+
+ Home
+
+
-
-
- Converter
-
-
-
-
+
+
+ Converter
+
+
+
+
+