From c75ea75787329a813b90a49d854a52ff2a5f91d4 Mon Sep 17 00:00:00 2001 From: Bana0516 Date: Fri, 16 Jan 2026 15:46:42 -0500 Subject: [PATCH 01/33] feat: enhance homepage with open source section and versioning - Added OpenSource component to highlight privacy-first architecture and GitHub presence. - Updated HomePage to include the new Open Source & Privacy section. - Integrated automated version display in Footer by importing package.json. - Improved Footer layout with a dedicated local storage info block and GitHub links. --- src/app/page.tsx | 5 ++ .../features/welcome/OpenSource.tsx | 57 ++++++++++++ src/components/layout/Footer.tsx | 86 ++++++++++++------- 3 files changed, 116 insertions(+), 32 deletions(-) create mode 100644 src/components/features/welcome/OpenSource.tsx diff --git a/src/app/page.tsx b/src/app/page.tsx index 0b24842..2952978 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,6 +1,7 @@ import React from 'react'; import { ChallengeProvider } from '@/context/ChallengeContext'; import Welcome from '@/components/features/welcome/Welcome'; +import OpenSource from '@/components/features/welcome/OpenSource'; import Header from '@/components/layout/Header'; import Footer from '@/components/layout/Footer'; @@ -14,7 +15,11 @@ export default function HomePage() {
+ {/* Hero and Rules Section */} + + {/* Open Source and Privacy Details */} +
diff --git a/src/components/features/welcome/OpenSource.tsx b/src/components/features/welcome/OpenSource.tsx new file mode 100644 index 0000000..d12a53c --- /dev/null +++ b/src/components/features/welcome/OpenSource.tsx @@ -0,0 +1,57 @@ +'use client'; + +import React from 'react'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { faGithub } from '@fortawesome/free-brands-svg-icons'; +import { faCode, faShieldAlt } from '@fortawesome/free-solid-svg-icons'; + +/** + * Renders the Open Source and Privacy information section. + * Highlights the project's transparency and GitHub presence. + */ +const OpenSource = () => { + return ( +
+
+
+ {/* Privacy Column */} +
+
+ +

Privacy First

+
+

+ Grit is built on a "Local-First" architecture. We do not have servers, and we do not + sell your data. Everything you track exists solely on your device in an encrypted + PouchDB database. +

+
+ + {/* Open Source Column */} +
+
+ +

Open Source

+
+

+ We believe in transparency. You can inspect our code, contribute features, or report + issues directly on GitHub. Built with TypeScript, Next.js, and Tailwind. +

+ +
+
+
+
+ ); +}; + +export default OpenSource; diff --git a/src/components/layout/Footer.tsx b/src/components/layout/Footer.tsx index c2ba1c3..f99da41 100644 --- a/src/components/layout/Footer.tsx +++ b/src/components/layout/Footer.tsx @@ -1,49 +1,71 @@ import React from 'react'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { faInfoCircle } from '@fortawesome/free-solid-svg-icons'; +import { faInfoCircle, faCodeBranch } from '@fortawesome/free-solid-svg-icons'; +import packageInfo from '../../../package.json'; +/** + * Global footer component displaying copyright, links, and the current app version. + */ const Footer = () => { const startYear = 2025; const currentYear = new Date().getFullYear(); const yearDisplay = startYear === currentYear ? startYear : `${startYear} - ${currentYear}`; return ( -