From 7bf0984698e43b9aa2dd879f65951318ed410390 Mon Sep 17 00:00:00 2001 From: Maze <167211895+mazeincoding@users.noreply.github.com> Date: Sat, 31 Jan 2026 00:20:04 +0100 Subject: codebase overhaul (#697) --- apps/web/src/components/footer.tsx | 234 ++++++++++++++++++------------------- 1 file changed, 113 insertions(+), 121 deletions(-) (limited to 'apps/web/src/components/footer.tsx') diff --git a/apps/web/src/components/footer.tsx b/apps/web/src/components/footer.tsx index 176452cd..7c78fc57 100644 --- a/apps/web/src/components/footer.tsx +++ b/apps/web/src/components/footer.tsx @@ -1,130 +1,122 @@ -"use client"; - -import { motion } from "motion/react"; import Link from "next/link"; import { RiDiscordFill, RiTwitterXLine } from "react-icons/ri"; import { FaGithub } from "react-icons/fa6"; import Image from "next/image"; +import { DEFAULT_LOGO_URL, SOCIAL_LINKS } from "@/constants/site-constants"; +import { capitalizeFirstLetter } from "@/utils/string"; -export function Footer() { - return ( - -
-
- {/* Brand Section */} -
-
- OpenCut - OpenCut -
-

- The open source video editor that gets the job done. Simple, - powerful, and works on any platform. -

-
- - - - - - - - - -
-
+type Category = "resources" | "company"; + +interface FooterLink { + label: string; + href: string; +} -
-
-

Resources

-
    -
  • - - Roadmap - -
  • -
  • - - Privacy policy - -
  • -
  • - - Terms of use - -
  • -
-
+type CategoryLinks = Record; + +const links: CategoryLinks = { + resources: [ + { label: "Roadmap", href: "/roadmap" }, + { label: "Blog", href: "/blog" }, + { label: "Privacy", href: "/privacy" }, + { label: "Terms of use", href: "/terms" }, + ], + company: [ + { label: "Contributors", href: "/contributors" }, + { label: "Sponsors", href: "/sponsors" }, + { label: "Branding", href: "/branding" }, + { label: "About", href: `${SOCIAL_LINKS.github}/blob/main/README.md` }, + ], +}; + +export function Footer() { + return ( +
+
+
+ {/* Brand Section */} +
+
+ OpenCut + OpenCut +
+

+ The privacy-first video editor that feels simple to use. +

+
+ + + + + + + + + +
+
- {/* Company Links */} -
-

Company

-
    -
  • - - Contributors - -
  • -
  • - - About - -
  • -
-
-
-
+
+ {(Object.keys(links) as Category[]).map((category) => ( +
+

+ {capitalizeFirstLetter({ string: category })} +

+
    + {links[category].map((link) => ( +
  • + + {link.label} + +
  • + ))} +
+
+ ))} +
+
- {/* Bottom Section */} -
-
- © 2025 OpenCut, All Rights Reserved -
-
-
- - ); + {/* Bottom Section */} +
+
+ + © {new Date().getFullYear()} OpenCut, All Rights Reserved + +
+
+
+ + ); } -- cgit v1.3.1