Files
smoothschedule/legacy_reference/frontend/src/layouts/MarketingLayout.tsx
poduck 2e111364a2 Initial commit: SmoothSchedule multi-tenant scheduling platform
This commit includes:
- Django backend with multi-tenancy (django-tenants)
- React + TypeScript frontend with Vite
- Platform administration API with role-based access control
- Authentication system with token-based auth
- Quick login dev tools for testing different user roles
- CORS and CSRF configuration for local development
- Docker development environment setup

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 01:43:20 -05:00

44 lines
1.3 KiB
TypeScript

import React, { useState, useEffect } from 'react';
import { Outlet } from 'react-router-dom';
import Navbar from '../components/marketing/Navbar';
import Footer from '../components/marketing/Footer';
import { useScrollToTop } from '../hooks/useScrollToTop';
const MarketingLayout: React.FC = () => {
useScrollToTop();
const [darkMode, setDarkMode] = useState(() => {
// Check for saved preference or system preference
if (typeof window !== 'undefined') {
const saved = localStorage.getItem('darkMode');
if (saved !== null) {
return JSON.parse(saved);
}
return window.matchMedia('(prefers-color-scheme: dark)').matches;
}
return false;
});
useEffect(() => {
document.documentElement.classList.toggle('dark', darkMode);
localStorage.setItem('darkMode', JSON.stringify(darkMode));
}, [darkMode]);
const toggleTheme = () => setDarkMode((prev: boolean) => !prev);
return (
<div className="min-h-screen flex flex-col bg-white dark:bg-gray-900 transition-colors duration-200">
<Navbar darkMode={darkMode} toggleTheme={toggleTheme} />
{/* Main Content - with padding for fixed navbar */}
<main className="flex-1 pt-16 lg:pt-20">
<Outlet />
</main>
<Footer />
</div>
);
};
export default MarketingLayout;