mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-07-22 23:31:12 +02:00
This commit implements a comprehensive database-driven site configuration system that allows administrators to control the visibility and behavior of homepage elements, navigation links, footer sections, and route availability without code changes. Backend Changes: - Added SiteConfiguration model with singleton pattern (id=1) - Created migration 38_add_site_configuration_table.py - Implemented site_configuration_routes.py with public + admin endpoints - Added Pydantic schemas for validation (Base, Update, Read, Public) - Registered routes in main app Frontend Changes: - Created SiteConfigContext.tsx for global state management - Updated app/layout.tsx to wrap app in SiteConfigProvider - Implemented RouteGuard component for disabled routes - Updated navbar with conditional rendering (pricing, docs, github, signin) - Updated hero-section with conditional buttons (get started, talk to us) - Updated footer with conditional sections and custom copyright - Applied route guards to pricing, contact, terms, privacy pages Admin Panel: - Created /dashboard/site-settings page with full UI - Visual toggle switches for all configuration options - Real-time updates via API with toast notifications - Organized by section (Header, Homepage, Footer, Routes, Text) - Dark mode support and responsive design Configuration Options: Header: show_pricing_link, show_docs_link, show_github_link, show_sign_in Homepage: show_get_started_button, show_talk_to_us_button Footer: show_pages_section, show_legal_section, show_register_section Routes: disable_pricing/docs/contact/terms/privacy_route Custom: custom_copyright text (max 200 chars) Security: - Superuser-only admin endpoints with JWT validation - Public read-only endpoint for frontend consumption - Input validation via Pydantic schemas - Singleton pattern with database constraints - Client-side route guards for disabled routes Documentation: - Added comprehensive section to claude.md - Includes API docs, migration guide, testing checklist - Example code snippets and configuration tables - Security considerations and future enhancements All configuration defaults to minimal/privacy-focused state (most features disabled by default). Administrators can enable features as needed via the admin panel. Files Changed: 16 files (6 backend, 10 frontend, 1 documentation)
37 lines
1.6 KiB
Python
37 lines
1.6 KiB
Python
from fastapi import APIRouter
|
|
|
|
from .airtable_add_connector_route import (
|
|
router as airtable_add_connector_router,
|
|
)
|
|
from .chats_routes import router as chats_router
|
|
from .documents_routes import router as documents_router
|
|
from .google_calendar_add_connector_route import (
|
|
router as google_calendar_add_connector_router,
|
|
)
|
|
from .google_gmail_add_connector_route import (
|
|
router as google_gmail_add_connector_router,
|
|
)
|
|
from .llm_config_routes import router as llm_config_router
|
|
from .logs_routes import router as logs_router
|
|
from .luma_add_connector_route import router as luma_add_connector_router
|
|
from .podcasts_routes import router as podcasts_router
|
|
from .search_source_connectors_routes import router as search_source_connectors_router
|
|
from .search_spaces_routes import router as search_spaces_router
|
|
from .site_configuration_routes import router as site_configuration_router
|
|
from .social_media_links_routes import router as social_media_links_router
|
|
|
|
router = APIRouter()
|
|
|
|
router.include_router(search_spaces_router)
|
|
router.include_router(documents_router)
|
|
router.include_router(podcasts_router)
|
|
router.include_router(chats_router)
|
|
router.include_router(search_source_connectors_router)
|
|
router.include_router(google_calendar_add_connector_router)
|
|
router.include_router(google_gmail_add_connector_router)
|
|
router.include_router(airtable_add_connector_router)
|
|
router.include_router(luma_add_connector_router)
|
|
router.include_router(llm_config_router)
|
|
router.include_router(logs_router)
|
|
router.include_router(site_configuration_router)
|
|
router.include_router(social_media_links_router)
|