Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

43 changes: 28 additions & 15 deletions src/Pages/FaqPage/FAQ.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -93,38 +93,51 @@ interface FAQItemProps {

function FAQItem({ question, answer, isOpen, onClick, index, icon }: FAQItemProps) {
const contentRef = useRef<HTMLDivElement>(null);
const [hovered, setHovered] = useState(false);

return (
<motion.div
className={`rounded-xl overflow-hidden transition-all duration-300
Comment on lines +96 to 100
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new hovered React state is only used to drive hover styling. This can be expressed with Tailwind hover:/group-hover: classes (and conditional classes based on isOpen) without triggering re-renders on mouse enter/leave. Consider removing hovered state + mouse handlers and implementing the hover styles purely via CSS classes.

Copilot uses AI. Check for mistakes.
bg-white dark:bg-black
border
${isOpen
? 'border- 6 border-pink-500 dark:border-grey-500'
: 'border- 6 - dark:border-grey-500'}
`}
bg-white dark:bg-black border
${isOpen
? 'border-pink-500 dark:border-grey-500'
: 'dark:border-grey-500'}
Comment on lines +103 to +104
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dark:border-grey-500 isn’t a valid Tailwind color token (Tailwind uses gray, not grey), so the dark-mode border color won’t apply. Use dark:border-gray-500 (or whatever shade matches the design) and consider also setting an explicit non-dark border color for the collapsed state for consistency.

Suggested change
? 'border-pink-500 dark:border-grey-500'
: 'dark:border-grey-500'}
? 'border-pink-500 dark:border-gray-500'
: 'border-gray-200 dark:border-gray-500'}

Copilot uses AI. Check for mistakes.
`}
initial={{ opacity: 0, y: 30 }}
whileInView={{ opacity: 1, y: 0 }}
transition={{ duration: 0.5, delay: index * 0.1 }}
viewport={{ once: true }}
>
<button
className="flex justify-between items-center w-full text-left p-6 group"
className={`flex justify-between items-center w-full text-left p-6 group
transition-colors duration-300 rounded-xl
${hovered && !isOpen ? 'bg-green-50 dark:bg-green-900/10' : ''}
`}
onClick={onClick}
onMouseEnter={() => setHovered(true)}
onMouseLeave={() => setHovered(false)}
aria-expanded={isOpen}
>
<div className="flex items-center">
<div className={`mr-4 p-2 rounded-full
${isOpen ? 'bg-green-100 text-green-600 dark:bg-green-900/50 dark:text-green-300' :
'bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400 group-hover:bg-green-50 group-hover:text-green-500 dark:group-hover:bg-green-900/30 dark:group-hover:text-green-300'}
transition-colors duration-300`}>
<div className={`mr-4 p-2 rounded-full transition-colors duration-300
${isOpen
? 'bg-green-100 text-green-600 dark:bg-green-900/50 dark:text-green-300'
: 'bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400 group-hover:bg-green-50 group-hover:text-green-500 dark:group-hover:bg-green-900/30 dark:group-hover:text-green-300'}
`}>
{icon}
</div>
<span className="font-semibold text-lg">{question}</span>
<span className={`font-semibold text-lg transition-colors duration-300
${hovered && !isOpen ? 'text-green-600 dark:text-green-400' : ''}
${isOpen ? 'text-green-600 dark:text-green-400' : ''}
`}>
{question}
</span>
</div>
<div className={`p-1 rounded-full transition-colors duration-300
${isOpen ? 'bg-green-100 text-green-600 dark:bg-green-900/50 dark:text-green-300' :
'bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400 group-hover:bg-green-50 group-hover:text-green-500 dark:group-hover:bg-green-900/30 dark:group-hover:text-green-300'}`}>
${isOpen
? 'bg-green-100 text-green-600 dark:bg-green-900/50 dark:text-green-300'
: 'bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400 group-hover:bg-green-50 group-hover:text-green-500 dark:group-hover:bg-green-900/30 dark:group-hover:text-green-300'}
`}>
{isOpen ? <ChevronUp className="w-5 h-5" /> : <ChevronDown className="w-5 h-5" />}
</div>
</button>
Expand Down Expand Up @@ -180,4 +193,4 @@ function BackgroundAnimation({ darkMode }: { darkMode: boolean }) {
</div>
</div>
);
}
}
230 changes: 205 additions & 25 deletions src/Pages/Footer/Footer.tsx
Original file line number Diff line number Diff line change
@@ -1,38 +1,218 @@
import type React from "react"
import { FaDiscord } from 'react-icons/fa' // Import Discord icon from React Icons
import type React from "react";
import { motion } from "framer-motion";
import { FaDiscord, FaGithub, FaTwitter } from "react-icons/fa";
import { ExternalLink } from "lucide-react";

const fadeUp = {
hidden: { opacity: 0, y: 20 },
visible: (i: number) => ({
opacity: 1,
y: 0,
transition: { duration: 0.5, delay: i * 0.1 },
}),
};

const Footer: React.FC = () => {
const year = new Date().getFullYear();

return (
<footer className="relative bg-white dark:bg-black text-black dark:text-white py-8 overflow-hidden border-t border-black dark:border-white transition-colors duration-300">
<div className="relative container mx-auto px-6">
<div className="flex justify-between items-center">
{/* Left-aligned PictoPy text */}
<div className="flex items-center space-x-2">
<p className="text-xl font-medium text-transparent bg-clip-text bg-gradient-to-r from-yellow-400 to-green-400 hover:scale-105 transition-all duration-300 ease-in-out">
<footer className="bg-white dark:bg-black text-gray-700 dark:text-gray-300 border-t border-gray-200 dark:border-gray-800 transition-colors duration-300">
{/* Main grid */}
<div className="container mx-auto px-6 py-16">
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-12">
Comment on lines +19 to +22
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR title/description and linked issue talk about improving landing page download/docs button hover contrast, but this PR’s code changes are in Footer/FAQ (and package-lock). Either include the hero/download-button contrast changes in this PR, or update the PR title/description (and issue link) to match the actual scope.

Copilot uses AI. Check for mistakes.
{/* Column 1 — PictoPy brand */}
<motion.div
custom={0}
initial="hidden"
whileInView="visible"
viewport={{ once: true }}
variants={fadeUp}
>
<h3 className="text-2xl font-bold text-transparent bg-clip-text bg-gradient-to-r from-yellow-500 to-green-500 mb-3">
PictoPy
</h3>
<p className="text-sm leading-relaxed mb-4">
A privacy-first, AI-powered desktop gallery application built with
Tauri, React, and Rust — keeping your data entirely on your
device.
</p>
</div>

{/* Right-aligned Discord Icon and "Made with love" text */}
<div className="flex items-center space-x-2">
<a
href="https://discord.com/channels/1022871757289422898/1311271974630330388"
target="_blank"
rel="noopener noreferrer"
className="text-sm font-medium text-transparent bg-clip-text bg-gradient-to-r from-yellow-400 to-green-400 hover:bg-gradient-to-r hover:from-yellow-500 hover:to-green-500 transition duration-300 ease-in-out"
<a
href="https://github.com/AOSSIE-Org/PictoPy"
target="_blank"
rel="noopener noreferrer"
className="inline-flex items-center gap-1.5 text-sm font-medium text-yellow-500 hover:text-green-500 transition-colors duration-200"
>
<FaDiscord className="inline-block mr-2 text-yellow-400 hover:text-green-400 transition duration-300 ease-in-out transform scale-150" /> {/* Scale it to 1.5x */}
<span>Made with love by AOSSIE team</span>
<FaGithub className="text-base" />
View on GitHub
<ExternalLink className="w-3 h-3" />
</a>
</div>
</motion.div>

{/* Column 2 — About AOSSIE */}
<motion.div
custom={1}
initial="hidden"
whileInView="visible"
viewport={{ once: true }}
variants={fadeUp}
className="lg:col-span-1"
>
<h4 className="text-sm font-semibold uppercase tracking-wider text-gray-900 dark:text-white mb-3">
About AOSSIE
</h4>
<p className="text-sm leading-relaxed mb-3">
<span className="font-semibold text-gray-900 dark:text-white">
Australian Open Source Software Innovation and Education
(AOSSIE)
</span>{" "}
is an Australian not-for-profit umbrella organisation for
open-source projects. AOSSIE mentors students and contributors
through programs like Google Summer of Code and Outreachy,
fostering innovation in open-source software across the globe.
</p>
<a
href="https://aossie.org"
target="_blank"
rel="noopener noreferrer"
className="inline-flex items-center gap-1.5 text-sm font-medium text-yellow-500 hover:text-green-500 transition-colors duration-200"
>
aossie.org
<ExternalLink className="w-3 h-3" />
</a>
</motion.div>

{/* Column 3 — Quick Links */}
<motion.div
custom={2}
initial="hidden"
whileInView="visible"
viewport={{ once: true }}
variants={fadeUp}
>
<h4 className="text-sm font-semibold uppercase tracking-wider text-gray-900 dark:text-white mb-3">
Quick Links
</h4>
<ul className="space-y-2 text-sm">
{[
{
label: "Documentation",
href: "https://aossie-org.github.io/PictoPy/",
},
{
label: "Releases",
href: "https://github.com/AOSSIE-Org/PictoPy/releases",
},
{
label: "Issue Tracker",
href: "https://github.com/AOSSIE-Org/PictoPy/issues",
},
{
label: "Contributing Guide",
href: "https://github.com/AOSSIE-Org/PictoPy/blob/main/CONTRIBUTING.md",
},
{
label: "AOSSIE Projects",
href: "https://aossie.org/#projects",
},
{
label: "Google Summer of Code",
href: "https://summerofcode.withgoogle.com/",
},
].map(({ label, href }) => (
<li key={label}>
<a
href={href}
target="_blank"
rel="noopener noreferrer"
className="hover:text-yellow-500 dark:hover:text-green-400 transition-colors duration-200"
>
{label}
</a>
</li>
))}
</ul>
</motion.div>

{/* Column 4 — Community */}
<motion.div
custom={3}
initial="hidden"
whileInView="visible"
viewport={{ once: true }}
variants={fadeUp}
>
<h4 className="text-sm font-semibold uppercase tracking-wider text-gray-900 dark:text-white mb-3">
Community
</h4>
<p className="text-sm leading-relaxed mb-4">
Join our community to report bugs, request features, chat with
contributors, and follow AOSSIE's open-source journey.
</p>
<div className="flex flex-col gap-3">
<a
href="https://discord.com/channels/1022871757289422898/1311271974630330388"
target="_blank"
rel="noopener noreferrer"
className="inline-flex items-center gap-2 text-sm font-medium hover:text-yellow-500 dark:hover:text-green-400 transition-colors duration-200"
>
<FaDiscord className="text-lg text-indigo-500" />
Discord Server
</a>
<a
href="https://github.com/AOSSIE-Org"
target="_blank"
rel="noopener noreferrer"
className="inline-flex items-center gap-2 text-sm font-medium hover:text-yellow-500 dark:hover:text-green-400 transition-colors duration-200"
>
<FaGithub className="text-lg" />
AOSSIE on GitHub
</a>
<a
href="https://twitter.com/aossie_org"
target="_blank"
rel="noopener noreferrer"
className="inline-flex items-center gap-2 text-sm font-medium hover:text-yellow-500 dark:hover:text-green-400 transition-colors duration-200"
>
<FaTwitter className="text-lg text-sky-500" />
@aossie_org
</a>
</div>
</motion.div>
</div>
</div>

<div className="mt-4 text-center border-t border-white pt-2">
{/* You can add any content here if needed */}
{/* Bottom bar */}
<div className="border-t border-gray-200 dark:border-gray-800">
<div className="container mx-auto px-6 py-5 flex flex-col sm:flex-row items-center justify-between gap-3 text-xs text-gray-500 dark:text-gray-500">
<p>
{`© ${year} `}
<a
href="https://aossie.org"
target="_blank"
rel="noopener noreferrer"
className="hover:text-yellow-500 transition-colors duration-200"
>
{"AOSSIE"}
</a>
{
". PictoPy is open-source software released under the MIT License."
}
</p>
<p className="flex items-center gap-1">
{"Made with ♥ by the "}
<a
href="https://aossie.org"
target="_blank"
rel="noopener noreferrer"
className="ml-1 font-medium text-transparent bg-clip-text bg-gradient-to-r from-yellow-500 to-green-500 hover:opacity-80 transition-opacity duration-200"
>
{"AOSSIE Team"}
</a>
</p>
</div>
</div>
</footer>
)
}
);
};

export default Footer
export default Footer;
Loading
Loading