diff --git a/frontend/public/content/about-us.md b/frontend/public/content/about-us.md index 5c5ba71..01c4287 100644 --- a/frontend/public/content/about-us.md +++ b/frontend/public/content/about-us.md @@ -1,9 +1,33 @@ -Hi, I’m Radek – a software engineer, a West Coast Swing dancer and the person behind **spotlight.cam**. +Hi, I'm Radek – a software engineer, a West Coast Swing dancer and the person behind **spotlight.cam**. -Spotlight.cam is a project built by someone who actually stands in the same registration lines, dances in the same heats and scrolls through the same event pages as you :P +Spotlight.cam is a project built by someone who actually stands in the same registration lines, dances in the same heats and scrolls through the same event pages as you :P -If we ever meet at an event, I’ll probably be somewhere near the dance floor, probably pressing “record” on someone’s spotlight. +If we ever meet at an event, I'll probably be somewhere near the dance floor, probably pressing "record" on someone's spotlight. -To be fair, the original idea for this service was actually dropped on me by a friend who was tired of hunting for someone to film her dances – I just did what any backend developer / DevOps / Linux admin would do: said “okay, that shouldn’t be that hard… right?”, opened my editor, set up a few servers and scripts… and suddenly we had a new project on our hands 😅 I also had a not-so-secret teammate: AI. Without it, this would probably still be stuck in my “one day” folder for about a year 😄 \ No newline at end of file +To be fair, the original idea for this service was actually dropped on me by a friend who was tired of hunting for someone to film her dances – I just did what any backend developer / DevOps / Linux admin would do: said "okay, that shouldn't be that hard… right?", opened my editor, set up a few servers and scripts… and suddenly we had a new project on our hands 😅 I also had a not-so-secret teammate: AI. Without it, this would probably still be stuck in my "one day" folder for about a year 😄 + +--- + +## Privacy & Cookies + +We use cookies and similar technologies to provide you with a better experience. Here's what you should know: + +### What cookies do we use? + +- **Essential cookies**: Required for authentication and core functionality (login sessions, security) +- **Analytics**: To understand how people use the platform and improve it +- **Preferences**: To remember your settings and preferences + +### Your data + +We respect your privacy and comply with GDPR/RODO regulations. We: +- Only collect data necessary for the service to function +- Never sell your personal information to third parties +- Store your data securely +- Allow you to delete your account and data at any time + +### Contact + +If you have any questions about privacy or cookies, feel free to reach out through our [contact page](/contact). \ No newline at end of file diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 8e7f5e0..9a69c50 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -26,6 +26,7 @@ import HowItWorksPage from './pages/HowItWorksPage'; import NotFoundPage from './pages/NotFoundPage'; import VerificationBanner from './components/common/VerificationBanner'; import InstallPWA from './components/pwa/InstallPWA'; +import CookieConsent from './components/common/CookieConsent'; // Protected Route Component with Verification Banner const ProtectedRoute = ({ children }) => { @@ -77,6 +78,9 @@ function App() { {/* PWA Install Prompt */} + {/* Cookie Consent Banner */} + + {/* Toast Notifications */} { + const [isVisible, setIsVisible] = useState(false); + + useEffect(() => { + // Check if user has already consented + const hasConsented = localStorage.getItem('cookieConsent'); + if (!hasConsented) { + // Show banner after a short delay for better UX + setTimeout(() => setIsVisible(true), 1000); + } + }, []); + + const handleAccept = () => { + localStorage.setItem('cookieConsent', 'accepted'); + setIsVisible(false); + }; + + const handleDecline = () => { + localStorage.setItem('cookieConsent', 'declined'); + setIsVisible(false); + }; + + if (!isVisible) return null; + + return ( +
+
+
+
+ {/* Icon */} +
+
+ +
+
+ + {/* Content */} +
+

+ We use cookies +

+

+ We use cookies and similar technologies to enhance your experience, analyze site traffic, + and for authentication purposes. By clicking "Accept", you consent to our use of cookies.{' '} + + Learn more + +

+
+ + {/* Actions */} +
+ + +
+
+
+
+
+ ); +}; + +export default CookieConsent;