Files
smoothschedule/frontend/src/pages/HelpGuide.tsx
poduck dcb14503a2 feat: Dashboard redesign, plan permissions, and help docs improvements
Major updates including:
- Customizable dashboard with drag-and-drop widget grid layout
- Plan-based feature locking for plugins and tasks
- Comprehensive help documentation updates across all pages
- Plugin seeding in deployment process for all tenants
- Permission synchronization system for subscription plans
- QuotaOverageModal component and enhanced UX flows

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 13:02:44 -05:00

197 lines
8.1 KiB
TypeScript

/**
* Help Guide - Main Documentation Hub
*
* Comprehensive guide linking to all help pages and providing quick overviews.
*/
import React from 'react';
import { useTranslation } from 'react-i18next';
import { Link } from 'react-router-dom';
import {
BookOpen,
LayoutDashboard,
Calendar,
CheckSquare,
Users,
Briefcase,
ClipboardList,
UserCog,
MessageSquare,
Mail,
CreditCard,
Puzzle,
Settings,
ChevronRight,
HelpCircle,
} from 'lucide-react';
interface HelpSection {
title: string;
description: string;
links: {
label: string;
path: string;
icon: React.ReactNode;
}[];
}
const HelpGuide: React.FC = () => {
const { t } = useTranslation();
const sections: HelpSection[] = [
{
title: 'Core Features',
description: 'Essential tools for managing your scheduling business',
links: [
{ label: 'Dashboard', path: '/help/dashboard', icon: <LayoutDashboard size={18} /> },
{ label: 'Scheduler', path: '/help/scheduler', icon: <Calendar size={18} /> },
{ label: 'Tasks', path: '/help/tasks', icon: <CheckSquare size={18} /> },
],
},
{
title: 'Manage',
description: 'Organize your customers, services, and resources',
links: [
{ label: 'Customers', path: '/help/customers', icon: <Users size={18} /> },
{ label: 'Services', path: '/help/services', icon: <Briefcase size={18} /> },
{ label: 'Resources', path: '/help/resources', icon: <ClipboardList size={18} /> },
{ label: 'Staff', path: '/help/staff', icon: <UserCog size={18} /> },
],
},
{
title: 'Communicate',
description: 'Stay connected with your customers',
links: [
{ label: 'Messages', path: '/help/messages', icon: <MessageSquare size={18} /> },
{ label: 'Ticketing', path: '/help/ticketing', icon: <Mail size={18} /> },
],
},
{
title: 'Money',
description: 'Handle payments and track revenue',
links: [
{ label: 'Payments', path: '/help/payments', icon: <CreditCard size={18} /> },
],
},
{
title: 'Extend',
description: 'Add functionality with plugins',
links: [
{ label: 'Plugins', path: '/help/plugins', icon: <Puzzle size={18} /> },
],
},
{
title: 'Settings',
description: 'Configure your business settings',
links: [
{ label: 'General Settings', path: '/help/settings/general', icon: <Settings size={18} /> },
{ label: 'Resource Types', path: '/help/settings/resource-types', icon: <Settings size={18} /> },
{ label: 'Booking Settings', path: '/help/settings/booking', icon: <Settings size={18} /> },
{ label: 'Appearance', path: '/help/settings/appearance', icon: <Settings size={18} /> },
{ label: 'Email Templates', path: '/help/settings/email', icon: <Settings size={18} /> },
{ label: 'Custom Domains', path: '/help/settings/domains', icon: <Settings size={18} /> },
{ label: 'API Settings', path: '/help/settings/api', icon: <Settings size={18} /> },
{ label: 'Authentication', path: '/help/settings/auth', icon: <Settings size={18} /> },
{ label: 'Billing', path: '/help/settings/billing', icon: <Settings size={18} /> },
{ label: 'Usage & Quota', path: '/help/settings/quota', icon: <Settings size={18} /> },
],
},
];
return (
<div className="p-8 max-w-6xl mx-auto">
{/* Header */}
<div className="mb-8">
<div className="flex items-center gap-3 mb-4">
<div className="w-12 h-12 rounded-xl bg-brand-100 dark:bg-brand-900/30 flex items-center justify-center">
<BookOpen size={24} className="text-brand-600 dark:text-brand-400" />
</div>
<div>
<h1 className="text-3xl font-bold text-gray-900 dark:text-white">
{t('help.guide.title', 'Platform Guide')}
</h1>
<p className="text-gray-500 dark:text-gray-400">
{t('help.guide.subtitle', 'Learn how to use SmoothSchedule effectively')}
</p>
</div>
</div>
</div>
{/* Quick Start */}
<section className="mb-10">
<div className="bg-gradient-to-r from-brand-50 to-blue-50 dark:from-brand-900/20 dark:to-blue-900/20 rounded-xl border border-brand-200 dark:border-brand-800 p-6">
<h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Quick Start</h2>
<ol className="space-y-3">
<li className="flex items-start gap-3">
<span className="flex-shrink-0 w-6 h-6 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center">1</span>
<span className="text-gray-700 dark:text-gray-300">Set up your <Link to="/help/services" className="text-brand-600 hover:underline">services</Link> - what you offer to customers</span>
</li>
<li className="flex items-start gap-3">
<span className="flex-shrink-0 w-6 h-6 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center">2</span>
<span className="text-gray-700 dark:text-gray-300">Add your <Link to="/help/resources" className="text-brand-600 hover:underline">resources</Link> - staff, rooms, or equipment</span>
</li>
<li className="flex items-start gap-3">
<span className="flex-shrink-0 w-6 h-6 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center">3</span>
<span className="text-gray-700 dark:text-gray-300">Use the <Link to="/help/scheduler" className="text-brand-600 hover:underline">scheduler</Link> to manage appointments</span>
</li>
<li className="flex items-start gap-3">
<span className="flex-shrink-0 w-6 h-6 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center">4</span>
<span className="text-gray-700 dark:text-gray-300">Track your business with the <Link to="/help/dashboard" className="text-brand-600 hover:underline">dashboard</Link></span>
</li>
</ol>
</div>
</section>
{/* Help Sections */}
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
{sections.map((section, idx) => (
<div
key={idx}
className="bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 p-6"
>
<h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">
{section.title}
</h3>
<p className="text-sm text-gray-500 dark:text-gray-400 mb-4">
{section.description}
</p>
<ul className="space-y-2">
{section.links.map((link, linkIdx) => (
<li key={linkIdx}>
<Link
to={link.path}
className="flex items-center gap-2 p-2 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700/50 transition-colors text-gray-700 dark:text-gray-300 hover:text-brand-600 dark:hover:text-brand-400"
>
<span className="text-brand-500">{link.icon}</span>
<span className="flex-1">{link.label}</span>
<ChevronRight size={16} className="text-gray-400" />
</Link>
</li>
))}
</ul>
</div>
))}
</div>
{/* Need Help */}
<section className="mt-10 bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 p-6 text-center">
<HelpCircle size={32} className="mx-auto text-brand-500 mb-3" />
<h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">
Need More Help?
</h3>
<p className="text-gray-600 dark:text-gray-300 mb-4">
Can't find what you're looking for? Our support team is ready to help.
</p>
<Link
to="/tickets"
className="inline-flex items-center gap-2 px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors"
>
Contact Support
</Link>
</section>
</div>
);
};
export default HelpGuide;