ritesh19180 commited on
Commit
98c9dc0
·
verified ·
1 Parent(s): 6fe73ac

Upload folder using huggingface_hub

Browse files
Frontend/src/App.jsx CHANGED
@@ -47,6 +47,14 @@ import Notifications from "./user/pages/Notifications";
47
  import Help from "./user/pages/Help";
48
  import DocsPortal from "./docs/pages/DocsPortal";
49
 
 
 
 
 
 
 
 
 
50
  // NEW Admin Pages (Refactored)
51
  import AdminDashboard from "./admin/pages/AdminDashboard";
52
  import AdminTickets from "./admin/pages/AdminTickets";
@@ -112,6 +120,12 @@ function TitleUpdater() {
112
  else if (path === '/profile') title = 'User Profile';
113
  else if (path === '/notifications') title = 'Notifications';
114
  else if (path === '/docs') title = 'Documentation';
 
 
 
 
 
 
115
  // Public / Lobby Routes
116
  else if (path === '/login') title = 'Login';
117
  else if (path === '/signup') title = 'Create Account';
@@ -228,6 +242,12 @@ function App() {
228
  <Route path="/not-approved" element={<NotApproved />} />
229
  <Route path="/contact-sales" element={<ContactSales />} />
230
  <Route path="/docs" element={<DocsPortal />} />
 
 
 
 
 
 
231
 
232
  {/* Feature Pages */}
233
  <Route path="/features/categorization" element={<AutoCategorizationFeature />} />
 
47
  import Help from "./user/pages/Help";
48
  import DocsPortal from "./docs/pages/DocsPortal";
49
 
50
+ // New Showcase Pages
51
+ import ApiReference from "./pages/ApiReference";
52
+ import Changelog from "./pages/Changelog";
53
+ import StatusPage from "./pages/StatusPage";
54
+ import AboutUs from "./pages/AboutUs";
55
+ import Careers from "./pages/Careers";
56
+ import CookiePolicy from "./pages/legal/CookiePolicy";
57
+
58
  // NEW Admin Pages (Refactored)
59
  import AdminDashboard from "./admin/pages/AdminDashboard";
60
  import AdminTickets from "./admin/pages/AdminTickets";
 
120
  else if (path === '/profile') title = 'User Profile';
121
  else if (path === '/notifications') title = 'Notifications';
122
  else if (path === '/docs') title = 'Documentation';
123
+ else if (path === '/api-reference') title = 'API Reference';
124
+ else if (path === '/changelog') title = 'Changelog';
125
+ else if (path === '/status') title = 'Status';
126
+ else if (path === '/about') title = 'About Us';
127
+ else if (path === '/careers') title = 'Careers';
128
+ else if (path === '/cookie-policy') title = 'Cookie Policy';
129
  // Public / Lobby Routes
130
  else if (path === '/login') title = 'Login';
131
  else if (path === '/signup') title = 'Create Account';
 
242
  <Route path="/not-approved" element={<NotApproved />} />
243
  <Route path="/contact-sales" element={<ContactSales />} />
244
  <Route path="/docs" element={<DocsPortal />} />
245
+ <Route path="/api-reference" element={<ApiReference />} />
246
+ <Route path="/changelog" element={<Changelog />} />
247
+ <Route path="/status" element={<StatusPage />} />
248
+ <Route path="/about" element={<AboutUs />} />
249
+ <Route path="/careers" element={<Careers />} />
250
+ <Route path="/cookie-policy" element={<CookiePolicy />} />
251
 
252
  {/* Feature Pages */}
253
  <Route path="/features/categorization" element={<AutoCategorizationFeature />} />
Frontend/src/pages/AboutUs.jsx ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React from 'react';
2
+ import { useNavigate } from 'react-router-dom';
3
+ import { ShieldCheck, Heart, Sparkles, ArrowLeft, Target, Award } from 'lucide-react';
4
+ import { Card } from '../components/ui/card';
5
+
6
+ export default function AboutUs() {
7
+ const navigate = useNavigate();
8
+
9
+ return (
10
+ <div className="min-h-screen bg-[#f6f8f7] pb-20">
11
+ {/* Header */}
12
+ <header className="w-full bg-white border-b border-gray-200 sticky top-0 z-50">
13
+ <div className="max-w-[1100px] mx-auto px-4 md:px-6 h-16 flex items-center justify-between">
14
+ <div className="flex items-center gap-3 cursor-pointer" onClick={() => navigate('/')}>
15
+ <img src="/favicon.png" alt="HELPDESK.AI Logo" className="w-7 h-7 object-contain" />
16
+ <div className="flex items-baseline gap-2">
17
+ <h1 className="text-xl font-black tracking-tighter text-gray-900 italic">HELPDESK.AI</h1>
18
+ <span className="px-2 py-0.5 text-[10px] font-black bg-emerald-100 text-emerald-800 rounded-md uppercase tracking-wider">About</span>
19
+ </div>
20
+ </div>
21
+ <button
22
+ onClick={() => navigate('/')}
23
+ className="flex items-center gap-2 text-xs font-bold text-gray-600 hover:text-emerald-600 transition-colors bg-gray-50 hover:bg-emerald-50 px-3.5 py-2 rounded-xl border border-gray-200"
24
+ >
25
+ <ArrowLeft size={14} /> Back to Home
26
+ </button>
27
+ </div>
28
+ </header>
29
+
30
+ <div className="max-w-[800px] mx-auto px-4 md:px-6 mt-12 space-y-12">
31
+ <div className="space-y-4">
32
+ <div className="inline-flex items-center gap-2 px-3 py-1 bg-emerald-500/10 border border-emerald-500/20 rounded-full text-emerald-700 text-xs font-bold">
33
+ <Heart size={14} /> Our Mission
34
+ </div>
35
+ <h1 className="text-4xl font-black text-slate-900 tracking-tight">Pioneering Intelligent Triage</h1>
36
+ <p className="text-slate-600 text-base leading-relaxed">
37
+ At HELPDESK.AI, we strive to build local machine learning workflows that eliminate manual ticket tagging, priority guessing, and routing bottlenecks for modern Indian businesses.
38
+ </p>
39
+ </div>
40
+
41
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-6">
42
+ <Card className="p-6 rounded-[2rem] border border-slate-200 bg-white space-y-3">
43
+ <div className="w-8 h-8 rounded-xl bg-emerald-50 text-emerald-600 flex items-center justify-center">
44
+ <Target size={16} />
45
+ </div>
46
+ <h4 className="font-extrabold text-slate-800 text-sm">Self-Healing Backups</h4>
47
+ <p className="text-xs text-slate-500 leading-relaxed font-semibold">
48
+ By backing up offline sentence embeddings with fast Gemini failover pipelines, we achieve 100% platform availability under tight network margins.
49
+ </p>
50
+ </Card>
51
+
52
+ <Card className="p-6 rounded-[2rem] border border-slate-200 bg-white space-y-3">
53
+ <div className="w-8 h-8 rounded-xl bg-blue-50 text-blue-600 flex items-center justify-center">
54
+ <Award size={16} />
55
+ </div>
56
+ <h4 className="font-extrabold text-slate-800 text-sm">100% Indian Data Sovereignty</h4>
57
+ <p className="text-xs text-slate-500 leading-relaxed font-semibold">
58
+ All ticket summaries, OCR attachments, and database timelines remain securely locked under regional cloud networks.
59
+ </p>
60
+ </Card>
61
+ </div>
62
+ </div>
63
+ </div>
64
+ );
65
+ }
Frontend/src/pages/ApiReference.jsx ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React from 'react';
2
+ import { useNavigate } from 'react-router-dom';
3
+ import { Terminal, Shield, Cpu, Key, ArrowLeft, Check, Copy } from 'lucide-react';
4
+ import { Card } from '../components/ui/card';
5
+
6
+ export default function ApiReference() {
7
+ const navigate = useNavigate();
8
+ const [copied, setCopied] = React.useState(null);
9
+
10
+ const handleCopy = (text, key) => {
11
+ navigator.clipboard.writeText(text);
12
+ setCopied(key);
13
+ setTimeout(() => setCopied(null), 2000);
14
+ };
15
+
16
+ return (
17
+ <div className="min-h-screen bg-[#f6f8f7] pb-20">
18
+ {/* Header */}
19
+ <header className="w-full bg-white border-b border-gray-200 sticky top-0 z-50">
20
+ <div className="max-w-[1100px] mx-auto px-4 md:px-6 h-16 flex items-center justify-between">
21
+ <div className="flex items-center gap-3 cursor-pointer" onClick={() => navigate('/')}>
22
+ <img src="/favicon.png" alt="HELPDESK.AI Logo" className="w-7 h-7 object-contain" />
23
+ <div className="flex items-baseline gap-2">
24
+ <h1 className="text-xl font-black tracking-tighter text-gray-900 italic">HELPDESK.AI</h1>
25
+ <span className="px-2 py-0.5 text-[10px] font-black bg-blue-100 text-blue-800 rounded-md uppercase tracking-wider">API</span>
26
+ </div>
27
+ </div>
28
+ <button
29
+ onClick={() => navigate('/')}
30
+ className="flex items-center gap-2 text-xs font-bold text-gray-600 hover:text-emerald-600 transition-colors bg-gray-50 hover:bg-emerald-50 px-3.5 py-2 rounded-xl border border-gray-200"
31
+ >
32
+ <ArrowLeft size={14} /> Back to Home
33
+ </button>
34
+ </div>
35
+ </header>
36
+
37
+ <div className="max-w-[900px] mx-auto px-4 md:px-6 mt-12 space-y-12">
38
+ <div className="space-y-4">
39
+ <div className="inline-flex items-center gap-2 px-3 py-1 bg-blue-500/10 border border-blue-500/20 rounded-full text-blue-700 text-xs font-bold">
40
+ <Terminal size={14} /> Developer API Reference v1
41
+ </div>
42
+ <h1 className="text-4xl font-black text-slate-900 tracking-tight">Integrate Automation Workflows</h1>
43
+ <p className="text-slate-600 text-base leading-relaxed">
44
+ Connect your existing CRM, Slack bots, or internal tools directly to the HELPDESK.AI triage engine. Classify incoming tickets and generate timelines instantly.
45
+ </p>
46
+ </div>
47
+
48
+ {/* Authentication Card */}
49
+ <Card className="p-8 rounded-[2rem] border border-slate-200/80 bg-white space-y-6 shadow-sm">
50
+ <div className="flex items-center gap-3">
51
+ <div className="w-10 h-10 rounded-2xl bg-blue-50 flex items-center justify-center text-blue-600">
52
+ <Key size={20} />
53
+ </div>
54
+ <div>
55
+ <h3 className="font-extrabold text-slate-900 text-lg">Authentication</h3>
56
+ <p className="text-xs text-slate-500 font-medium">Secure request header formats</p>
57
+ </div>
58
+ </div>
59
+ <p className="text-slate-600 text-sm leading-relaxed">
60
+ All incoming API calls must contain a valid Bearer Token in the authorization header. Generate your API key inside the Admin Dashboard Settings panel.
61
+ </p>
62
+ <div className="bg-slate-950 p-4 rounded-xl font-mono text-xs text-slate-300 border border-slate-900 relative">
63
+ <span className="absolute top-2 right-2 text-[10px] uppercase font-bold text-slate-500">Headers</span>
64
+ Authorization: Bearer hk_live_xxxxxxxxxxxxxxxxxxxxxxxx
65
+ </div>
66
+ </Card>
67
+
68
+ {/* Endpoint Section */}
69
+ <div className="space-y-6">
70
+ <h2 className="text-2xl font-black text-slate-900 tracking-tight">Endpoint Catalog</h2>
71
+
72
+ {/* Create Ticket Endpoint */}
73
+ <Card className="p-8 rounded-[2rem] border border-slate-200/80 bg-white space-y-6 shadow-sm">
74
+ <div className="flex items-center justify-between flex-wrap gap-2">
75
+ <div className="flex items-center gap-3">
76
+ <span className="bg-emerald-600 text-white font-black text-xs px-2.5 py-1 rounded-lg">POST</span>
77
+ <code className="text-sm font-extrabold text-slate-800">/api/v1/tickets/classify</code>
78
+ </div>
79
+ <span className="text-xs font-semibold text-slate-400">Classify & Save Incident</span>
80
+ </div>
81
+
82
+ <p className="text-slate-600 text-sm leading-relaxed">
83
+ Sends raw issue strings or base64 files for immediate NLP categorizing, priority detection, and routing.
84
+ </p>
85
+
86
+ <div className="space-y-3">
87
+ <span className="text-[10px] font-black text-slate-400 uppercase tracking-widest block">Request Body (JSON)</span>
88
+ <div className="relative">
89
+ <pre className="bg-slate-950 p-5 rounded-2xl font-mono text-xs text-emerald-400 overflow-x-auto border border-slate-900 select-text">
90
+ {`{
91
+ "text": "VPN connecting error 789 on router downstairs",
92
+ "meta": {
93
+ "source": "Slack Integration",
94
+ "reporter_email": "user@company.com"
95
+ }
96
+ }`}
97
+ </pre>
98
+ <button
99
+ onClick={() => handleCopy(`{\n "text": "VPN connecting error 789 on router downstairs",\n "meta": {\n "source": "Slack Integration",\n "reporter_email": "user@company.com"\n }\n}`, 'req')}
100
+ className="absolute top-3 right-3 text-slate-500 hover:text-white p-2 bg-slate-900 border border-slate-800 rounded-lg hover:bg-slate-800 transition-colors"
101
+ >
102
+ {copied === 'req' ? <Check size={14} className="text-emerald-400" /> : <Copy size={14} />}
103
+ </button>
104
+ </div>
105
+ </div>
106
+
107
+ <div className="space-y-3">
108
+ <span className="text-[10px] font-black text-slate-400 uppercase tracking-widest block">Response payload (JSON)</span>
109
+ <pre className="bg-slate-950 p-5 rounded-2xl font-mono text-xs text-slate-300 overflow-x-auto border border-slate-900">
110
+ {`{
111
+ "status": "success",
112
+ "ticket_id": "7cc6e8ef-b5d9-4615-a349-1d629154e7c6",
113
+ "classification": {
114
+ "category": "Network",
115
+ "priority": "High",
116
+ "assigned_team": "Network Ops",
117
+ "confidence": 0.96
118
+ }
119
+ }`}
120
+ </pre>
121
+ </div>
122
+ </Card>
123
+ </div>
124
+ </div>
125
+ </div>
126
+ );
127
+ }
Frontend/src/pages/Careers.jsx ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React from 'react';
2
+ import { useNavigate } from 'react-router-dom';
3
+ import { Briefcase, ArrowLeft, ArrowRight, Star } from 'lucide-react';
4
+ import { Card } from '../components/ui/card';
5
+
6
+ export default function Careers() {
7
+ const navigate = useNavigate();
8
+
9
+ const jobs = [
10
+ { title: 'Senior NLP Architect', location: 'Bengaluru / Remote', type: 'Full-Time', scale: '₹24L - ₹32L' },
11
+ { title: 'Lead Full-Stack Engineer (React / Node)', location: 'Mumbai / Hybrid', type: 'Full-Time', scale: '₹18L - ₹26L' },
12
+ { title: 'AI Support Specialist (Tier 2 Override Ops)', location: 'Bengaluru', type: 'Full-Time', scale: '₹8L - ₹12L' }
13
+ ];
14
+
15
+ return (
16
+ <div className="min-h-screen bg-[#f6f8f7] pb-20">
17
+ {/* Header */}
18
+ <header className="w-full bg-white border-b border-gray-200 sticky top-0 z-50">
19
+ <div className="max-w-[1100px] mx-auto px-4 md:px-6 h-16 flex items-center justify-between">
20
+ <div className="flex items-center gap-3 cursor-pointer" onClick={() => navigate('/')}>
21
+ <img src="/favicon.png" alt="HELPDESK.AI Logo" className="w-7 h-7 object-contain" />
22
+ <div className="flex items-baseline gap-2">
23
+ <h1 className="text-xl font-black tracking-tighter text-gray-900 italic">HELPDESK.AI</h1>
24
+ <span className="px-2 py-0.5 text-[10px] font-black bg-blue-100 text-blue-800 rounded-md uppercase tracking-wider">Careers</span>
25
+ </div>
26
+ </div>
27
+ <button
28
+ onClick={() => navigate('/')}
29
+ className="flex items-center gap-2 text-xs font-bold text-gray-600 hover:text-emerald-600 transition-colors bg-gray-50 hover:bg-emerald-50 px-3.5 py-2 rounded-xl border border-gray-200"
30
+ >
31
+ <ArrowLeft size={14} /> Back to Home
32
+ </button>
33
+ </div>
34
+ </header>
35
+
36
+ <div className="max-w-[800px] mx-auto px-4 md:px-6 mt-12 space-y-12">
37
+ <div className="space-y-4">
38
+ <div className="inline-flex items-center gap-2 px-3 py-1 bg-blue-500/10 border border-blue-500/20 rounded-full text-blue-700 text-xs font-bold">
39
+ <Briefcase size={14} /> Open Positions
40
+ </div>
41
+ <h1 className="text-4xl font-black text-slate-900 tracking-tight">Shape the Future of IT Triage</h1>
42
+ <p className="text-slate-600 text-base leading-relaxed">
43
+ Join our engineering-first team. We build self-healing pipelines, Tesseract OCR integrations, and dynamic telemetry mapping products.
44
+ </p>
45
+ </div>
46
+
47
+ <div className="space-y-4">
48
+ {jobs.map((job, idx) => (
49
+ <Card key={idx} className="p-6 rounded-[1.5rem] border border-slate-200/80 bg-white flex items-center justify-between shadow-sm flex-wrap gap-4 hover:border-emerald-300 transition-all cursor-pointer">
50
+ <div className="space-y-1">
51
+ <h4 className="font-extrabold text-slate-900 text-sm">{job.title}</h4>
52
+ <p className="text-xs text-slate-400 font-semibold">{job.location} · {job.type}</p>
53
+ </div>
54
+ <div className="flex items-center gap-4">
55
+ <span className="text-xs font-bold text-emerald-700">{job.scale}</span>
56
+ <button className="p-2 bg-gray-50 hover:bg-emerald-50 rounded-lg border border-gray-100 hover:border-emerald-100 text-slate-500 hover:text-emerald-700 transition-colors">
57
+ <ArrowRight size={16} />
58
+ </button>
59
+ </div>
60
+ </Card>
61
+ ))}
62
+ </div>
63
+ </div>
64
+ </div>
65
+ );
66
+ }
Frontend/src/pages/Changelog.jsx CHANGED
@@ -1,297 +1,116 @@
1
- import React from "react";
2
- import {
3
- Rocket,
4
- Sparkles,
5
- Bug,
6
- ShieldCheck,
7
- CalendarDays,
8
- GitCommitHorizontal,
9
- } from "lucide-react";
10
-
11
- import { motion } from "framer-motion";
12
-
13
- const releases = [
14
- {
15
- version: "v2.1.0",
16
- date: "May 20, 2026",
17
- type: "Major Release",
18
- status: "Live",
19
- features: [
20
- "Introduced AI-powered smart ticket routing engine",
21
- "Added enterprise analytics dashboard with live metrics",
22
- "Integrated multilingual support for global organizations",
23
- ],
24
- enhancements: [
25
- "Improved dashboard loading performance by 35%",
26
- "Enhanced accessibility contrast and readability",
27
- "Optimized backend request caching for faster responses",
28
- ],
29
- fixes: [
30
- "Fixed session timeout issue after inactivity",
31
- "Resolved notification synchronization bug",
32
- "Fixed mobile sidebar overlap on smaller devices",
33
- ],
34
- },
35
-
36
- {
37
- version: "v2.0.2",
38
- date: "May 10, 2026",
39
- type: "Patch Update",
40
- status: "Stable",
41
- features: [
42
- "Added bulk export functionality for support tickets",
43
- "Introduced advanced ticket filtering system",
44
- ],
45
- enhancements: [
46
- "Improved authentication flow security",
47
- "Optimized API request handling",
48
- ],
49
- fixes: [
50
- "Resolved login redirect issue",
51
- "Fixed navbar responsiveness on tablets",
52
- ],
53
- },
54
-
55
- {
56
- version: "v2.0.0",
57
- date: "April 28, 2026",
58
- type: "Platform Launch",
59
- status: "Released",
60
- features: [
61
- "Official launch of HelpDesk.AI platform",
62
- "AI-based issue auto-categorization system",
63
- "Role-based admin management implementation",
64
- ],
65
- enhancements: [
66
- "Modernized UI architecture using Tailwind CSS",
67
- "Improved dark mode consistency",
68
- ],
69
- fixes: [
70
- "Initial stability improvements",
71
- "Security hardening patches",
72
- ],
73
- },
74
- ];
75
-
76
- const FadeIn = {
77
- hidden: {
78
- opacity: 0,
79
- y: 40,
80
- },
81
- visible: {
82
- opacity: 1,
83
- y: 0,
84
- },
85
- };
86
-
87
- const Section = ({
88
- title,
89
- icon,
90
- items,
91
- glow,
92
- }) => {
93
- return (
94
- <div className="mb-8">
95
-
96
- <div className="flex items-center gap-3 mb-4">
97
- <div
98
- className={`p-2 rounded-xl ${glow}`}
99
- >
100
- {icon}
101
- </div>
102
-
103
- <h3 className="text-2xl font-semibold text-white">
104
- {title}
105
- </h3>
106
- </div>
107
-
108
- <div className="space-y-3">
109
- {items.map((item, index) => (
110
- <motion.div
111
- key={index}
112
- whileHover={{ x: 6 }}
113
- className="flex gap-3 text-gray-300 leading-relaxed"
114
- >
115
- <span className="text-green-400 mt-1">
116
-
117
- </span>
118
-
119
- <p>{item}</p>
120
- </motion.div>
121
- ))}
122
- </div>
123
- </div>
124
- );
125
- };
126
-
127
- const Changelog = () => {
128
- return (
129
- <div className="min-h-screen bg-[#021510] overflow-hidden text-white relative">
130
-
131
- {/* Background Glow Effects */}
132
- <div className="absolute top-0 left-0 w-[400px] h-[400px] bg-green-500/10 blur-[120px]" />
133
-
134
- <div className="absolute bottom-0 right-0 w-[400px] h-[400px] bg-emerald-400/10 blur-[120px]" />
135
-
136
- {/* Hero Section */}
137
- <section className="relative z-10 px-6 pt-24 pb-16">
138
-
139
- <motion.div
140
- initial="hidden"
141
- animate="visible"
142
- variants={FadeIn}
143
- transition={{ duration: 0.7 }}
144
- className="max-w-6xl mx-auto text-center"
145
- >
146
-
147
- {/* Badge */}
148
- <div className="inline-flex items-center gap-2 bg-green-500/10 border border-green-500/20 px-5 py-2 rounded-full text-green-400 mb-8 backdrop-blur-md">
149
-
150
- <GitCommitHorizontal size={16} />
151
-
152
- <span className="text-sm font-medium tracking-wide">
153
- PRODUCT RELEASE NOTES
154
- </span>
155
- </div>
156
-
157
- {/* Heading */}
158
- <h1 className="text-5xl md:text-7xl font-bold mb-6 tracking-tight">
159
-
160
- Platform
161
- <span className="text-green-400">
162
- {" "}Changelog
163
- </span>
164
- </h1>
165
-
166
- {/* Description */}
167
- <p className="text-gray-400 text-lg md:text-xl max-w-3xl mx-auto leading-relaxed">
168
-
169
- Stay updated with the latest platform improvements,
170
- AI enhancements, security patches, and feature
171
- releases across HelpDesk.AI.
172
- </p>
173
-
174
- </motion.div>
175
- </section>
176
-
177
- {/* Timeline */}
178
- <section className="relative z-10 px-6 pb-24">
179
-
180
- <div className="max-w-5xl mx-auto relative">
181
-
182
- {/* Vertical Line */}
183
- <div className="absolute left-4 top-0 w-[2px] h-full bg-gradient-to-b from-green-500/70 via-green-500/20 to-transparent" />
184
-
185
- {/* Release Cards */}
186
- <div className="space-y-16">
187
-
188
- {releases.map((release, index) => (
189
- <motion.div
190
- key={index}
191
- initial="hidden"
192
- whileInView="visible"
193
- viewport={{ once: true }}
194
- variants={FadeIn}
195
- transition={{
196
- duration: 0.6,
197
- delay: index * 0.1,
198
- }}
199
- className="relative pl-14"
200
- >
201
-
202
- {/* Timeline Dot */}
203
- <div className="absolute left-0 top-8">
204
-
205
- <div className="w-8 h-8 rounded-full bg-green-500 border-4 border-[#021510] shadow-[0_0_25px_rgba(34,197,94,0.8)]" />
206
-
207
- </div>
208
-
209
- {/* Card */}
210
- <motion.div
211
- whileHover={{
212
- scale: 1.01,
213
- }}
214
- transition={{
215
- duration: 0.3,
216
- }}
217
- className="relative bg-white/5 border border-white/10 backdrop-blur-xl rounded-3xl p-8 md:p-10 shadow-2xl overflow-hidden"
218
- >
219
-
220
- {/* Gradient Overlay */}
221
- <div className="absolute inset-0 bg-gradient-to-br from-green-500/5 to-transparent pointer-events-none" />
222
-
223
- {/* Header */}
224
- <div className="relative flex flex-wrap items-center justify-between gap-4 mb-10">
225
-
226
- <div className="flex items-center gap-4 flex-wrap">
227
-
228
- {/* Version */}
229
- <div className="bg-green-500 text-black font-bold px-5 py-2 rounded-full text-sm shadow-lg">
230
- {release.version}
231
- </div>
232
-
233
- {/* Type */}
234
- <div className="bg-white/10 border border-white/10 text-gray-300 px-4 py-2 rounded-full text-sm">
235
- {release.type}
236
- </div>
237
-
238
- {/* Status */}
239
- <div className="flex items-center gap-2 text-green-400 text-sm">
240
-
241
- <ShieldCheck size={16} />
242
-
243
- {release.status}
244
- </div>
245
  </div>
 
 
 
 
 
 
 
 
246
 
247
- {/* Date */}
248
- <div className="flex items-center gap-2 text-gray-400">
249
-
250
- <CalendarDays size={18} />
251
-
252
- <span>{release.date}</span>
253
  </div>
254
- </div>
255
-
256
- {/* Sections */}
257
- <div className="relative">
258
-
259
- <Section
260
- title="New Features"
261
- glow="bg-green-500/20"
262
- icon={
263
- <Rocket className="text-green-400" />
264
- }
265
- items={release.features}
266
- />
267
-
268
- <Section
269
- title="Enhancements"
270
- glow="bg-blue-500/20"
271
- icon={
272
- <Sparkles className="text-blue-400" />
273
- }
274
- items={release.enhancements}
275
- />
276
-
277
- <Section
278
- title="Bug Fixes"
279
- glow="bg-red-500/20"
280
- icon={
281
- <Bug className="text-red-400" />
282
- }
283
- items={release.fixes}
284
- />
285
 
286
- </div>
287
- </motion.div>
288
- </motion.div>
289
- ))}
290
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
291
  </div>
292
- </section>
293
- </div>
294
- );
295
- };
296
-
297
- export default Changelog;
 
1
+ import React from 'react';
2
+ import { useNavigate } from 'react-router-dom';
3
+ import { Calendar, GitCommit, ArrowLeft, Heart, Zap, Sparkles } from 'lucide-react';
4
+ import { Card } from '../components/ui/card';
5
+
6
+ export default function Changelog() {
7
+ const navigate = useNavigate();
8
+
9
+ const changes = [
10
+ {
11
+ version: 'v1.2.0',
12
+ date: 'May 2026',
13
+ badge: 'Latest Release',
14
+ highlight: 'Standalone Docs Portal & Dynamic Search',
15
+ items: [
16
+ 'Created complete standalone Docs Portal (/docs) outside authenticated routing grids.',
17
+ 'Integrated interactive on-screen endpoint payload simulation and terminal output logs.',
18
+ 'Resolved jsconfig compiler issues by deprecating outdated ignoreDeprecations keys.',
19
+ 'Optimized responsive layout transitions across both mobile drawer and desktop headers.'
20
+ ]
21
+ },
22
+ {
23
+ version: 'v1.1.0',
24
+ date: 'April 2026',
25
+ badge: 'Update',
26
+ highlight: 'Local Tesseract.js OCR and Siri Voice Recognition',
27
+ items: [
28
+ 'Added client-side webkitSpeechRecognition API dictation assistant with live amplitude waveforms.',
29
+ 'Implemented offline image OCR with local Tesseract.js engine parsing image attachment telemetry.',
30
+ 'Connected Supabase tables to log AI entities scanned directly from ticket descriptions.',
31
+ 'Enacted dynamic SLA fallback computations based on category routing priorities.'
32
+ ]
33
+ },
34
+ {
35
+ version: 'v1.0.0',
36
+ date: 'March 2026',
37
+ badge: 'Major Release',
38
+ highlight: 'Core AI Routing Engine Deployment',
39
+ items: [
40
+ 'Launched main multi-tenant portal with full dashboard telemetry, tracking, and company lobbies.',
41
+ 'Connected Gemini API fallback interfaces to self-heal local database load degradation issues.',
42
+ 'Created admin console enabling support agents to claim, claim-override, or resolve tickets live.'
43
+ ]
44
+ }
45
+ ];
46
+
47
+ return (
48
+ <div className="min-h-screen bg-[#f6f8f7] pb-20">
49
+ {/* Header */}
50
+ <header className="w-full bg-white border-b border-gray-200 sticky top-0 z-50">
51
+ <div className="max-w-[1100px] mx-auto px-4 md:px-6 h-16 flex items-center justify-between">
52
+ <div className="flex items-center gap-3 cursor-pointer" onClick={() => navigate('/')}>
53
+ <img src="/favicon.png" alt="HELPDESK.AI Logo" className="w-7 h-7 object-contain" />
54
+ <div className="flex items-baseline gap-2">
55
+ <h1 className="text-xl font-black tracking-tighter text-gray-900 italic">HELPDESK.AI</h1>
56
+ <span className="px-2 py-0.5 text-[10px] font-black bg-indigo-100 text-indigo-800 rounded-md uppercase tracking-wider">Changelog</span>
57
+ </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  </div>
59
+ <button
60
+ onClick={() => navigate('/')}
61
+ className="flex items-center gap-2 text-xs font-bold text-gray-600 hover:text-emerald-600 transition-colors bg-gray-50 hover:bg-emerald-50 px-3.5 py-2 rounded-xl border border-gray-200"
62
+ >
63
+ <ArrowLeft size={14} /> Back to Home
64
+ </button>
65
+ </div>
66
+ </header>
67
 
68
+ <div className="max-w-[800px] mx-auto px-4 md:px-6 mt-12 space-y-12">
69
+ <div className="space-y-4">
70
+ <div className="inline-flex items-center gap-2 px-3 py-1 bg-indigo-500/10 border border-indigo-500/20 rounded-full text-indigo-700 text-xs font-bold">
71
+ <Sparkles size={14} /> System Changelog
 
 
72
  </div>
73
+ <h1 className="text-4xl font-black text-slate-900 tracking-tight">Product Updates & Features</h1>
74
+ <p className="text-slate-600 text-base leading-relaxed">
75
+ Stay informed about system features, framework optimizations, and local AI training models introduced into HELPDESK.AI.
76
+ </p>
77
+ </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
 
79
+ {/* Timeline */}
80
+ <div className="relative border-l border-slate-200 pl-6 ml-4 space-y-12">
81
+ {changes.map((change, idx) => (
82
+ <div key={change.version} className="relative">
83
+ {/* Dot icon */}
84
+ <span className="absolute -left-[35px] top-1.5 w-6 h-6 rounded-full bg-indigo-50 border border-indigo-300 flex items-center justify-center text-indigo-600">
85
+ <GitCommit size={14} />
86
+ </span>
87
+
88
+ <div className="space-y-4">
89
+ <div className="flex items-center gap-3 flex-wrap">
90
+ <span className="text-xl font-extrabold text-slate-900">{change.version}</span>
91
+ <span className="text-xs font-bold text-slate-400 flex items-center gap-1">
92
+ <Calendar size={12} /> {change.date}
93
+ </span>
94
+ <span className="px-2 py-0.5 rounded bg-emerald-50 border border-emerald-100 text-[10px] font-black text-emerald-800 uppercase tracking-widest">
95
+ {change.badge}
96
+ </span>
97
+ </div>
98
+
99
+ <Card className="p-6 rounded-[2rem] border border-slate-100 shadow-sm bg-white space-y-4">
100
+ <h4 className="font-extrabold text-slate-800 text-sm flex items-center gap-2">
101
+ <Zap size={14} className="text-indigo-500" /> {change.highlight}
102
+ </h4>
103
+ <ul className="list-disc pl-5 text-xs text-slate-600 space-y-2 leading-relaxed">
104
+ {change.items.map((item, itemIdx) => (
105
+ <li key={itemIdx}>{item}</li>
106
+ ))}
107
+ </ul>
108
+ </Card>
109
+ </div>
110
+ </div>
111
+ ))}
112
+ </div>
113
+ </div>
114
  </div>
115
+ );
116
+ }
 
 
 
 
Frontend/src/pages/LandingPage.jsx CHANGED
@@ -862,17 +862,17 @@ export default function LandingPage() {
862
  {
863
  heading: 'Resources',
864
  links: [
865
- { label: 'Documentation', href: '#' },
866
- { label: 'API Reference', href: '#' },
867
- { label: 'Changelog', href: '#' },
868
- { label: 'Status Page', href: '#' },
869
  ]
870
  },
871
  {
872
  heading: 'Company',
873
  links: [
874
- { label: 'About Us', href: '#' },
875
- { label: 'Careers', href: '#' },
876
  { label: 'Privacy Policy', href: '/privacy' },
877
  { label: 'Terms of Service', href: '/terms' },
878
  ]
@@ -883,7 +883,7 @@ export default function LandingPage() {
883
  { label: 'Security Overview', href: '/security' },
884
  { label: 'Privacy Policy', href: '/privacy' },
885
  { label: 'Terms of Service', href: '/terms' },
886
- { label: 'Cookie Policy', href: '#' },
887
  ]
888
  },
889
  ].map(({ heading, links }) => (
 
862
  {
863
  heading: 'Resources',
864
  links: [
865
+ { label: 'Documentation', href: '/docs' },
866
+ { label: 'API Reference', href: '/api-reference' },
867
+ { label: 'Changelog', href: '/changelog' },
868
+ { label: 'Status Page', href: '/status' },
869
  ]
870
  },
871
  {
872
  heading: 'Company',
873
  links: [
874
+ { label: 'About Us', href: '/about' },
875
+ { label: 'Careers', href: '/careers' },
876
  { label: 'Privacy Policy', href: '/privacy' },
877
  { label: 'Terms of Service', href: '/terms' },
878
  ]
 
883
  { label: 'Security Overview', href: '/security' },
884
  { label: 'Privacy Policy', href: '/privacy' },
885
  { label: 'Terms of Service', href: '/terms' },
886
+ { label: 'Cookie Policy', href: '/cookie-policy' },
887
  ]
888
  },
889
  ].map(({ heading, links }) => (
Frontend/src/pages/StatusPage.jsx ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React from 'react';
2
+ import { useNavigate } from 'react-router-dom';
3
+ import { Activity, CheckCircle, AlertTriangle, ArrowLeft, RefreshCw } from 'lucide-react';
4
+ import { Card } from '../components/ui/card';
5
+
6
+ export default function StatusPage() {
7
+ const navigate = useNavigate();
8
+ const [isRefreshing, setIsRefreshing] = React.useState(false);
9
+
10
+ const handleRefresh = () => {
11
+ setIsRefreshing(true);
12
+ setTimeout(() => setIsRefreshing(false), 1000);
13
+ };
14
+
15
+ const services = [
16
+ { name: 'AI Triage Engine (NER & Categorization)', status: 'Operational', desc: 'Active pipeline & Gemini Model backup failovers' },
17
+ { name: 'Supabase Data Gateway', status: 'Operational', desc: 'Secure database endpoints & real-time socket connections' },
18
+ { name: 'Speech Dictation Interface', status: 'Operational', desc: 'Local Web Speech Recognition browser framework compatibility' },
19
+ { name: 'Client-Side OCR Telemetry', status: 'Operational', desc: 'Tesseract.js script injection & parallel image worker processes' },
20
+ { name: 'Stripe Payment Processor Integration', status: 'Operational', desc: 'Live billing checkout links & dynamic upgrade callbacks' }
21
+ ];
22
+
23
+ return (
24
+ <div className="min-h-screen bg-[#f6f8f7] pb-20">
25
+ {/* Header */}
26
+ <header className="w-full bg-white border-b border-gray-200 sticky top-0 z-50">
27
+ <div className="max-w-[1100px] mx-auto px-4 md:px-6 h-16 flex items-center justify-between">
28
+ <div className="flex items-center gap-3 cursor-pointer" onClick={() => navigate('/')}>
29
+ <img src="/favicon.png" alt="HELPDESK.AI Logo" className="w-7 h-7 object-contain" />
30
+ <div className="flex items-baseline gap-2">
31
+ <h1 className="text-xl font-black tracking-tighter text-gray-900 italic">HELPDESK.AI</h1>
32
+ <span className="px-2 py-0.5 text-[10px] font-black bg-emerald-100 text-emerald-800 rounded-md uppercase tracking-wider">Status</span>
33
+ </div>
34
+ </div>
35
+ <button
36
+ onClick={() => navigate('/')}
37
+ className="flex items-center gap-2 text-xs font-bold text-gray-600 hover:text-emerald-600 transition-colors bg-gray-50 hover:bg-emerald-50 px-3.5 py-2 rounded-xl border border-gray-200"
38
+ >
39
+ <ArrowLeft size={14} /> Back to Home
40
+ </button>
41
+ </div>
42
+ </header>
43
+
44
+ <div className="max-w-[800px] mx-auto px-4 md:px-6 mt-12 space-y-10">
45
+ {/* Hero Banner */}
46
+ <div className="bg-emerald-950 text-white rounded-[2rem] p-8 md:p-10 shadow-2xl relative overflow-hidden flex flex-col md:flex-row md:items-center justify-between gap-6">
47
+ <div className="absolute -right-10 -top-10 w-44 h-44 bg-emerald-500/10 rounded-full blur-3xl" />
48
+
49
+ <div className="space-y-3 z-10">
50
+ <div className="inline-flex items-center gap-2 px-3 py-1 bg-emerald-500/20 rounded-full border border-emerald-500/30">
51
+ <div className="w-2.5 h-2.5 rounded-full bg-emerald-400 animate-ping" />
52
+ <span className="text-[10px] font-black uppercase tracking-widest text-emerald-300">Live Status Radar</span>
53
+ </div>
54
+ <h2 className="text-3xl font-black italic tracking-tight">All Systems Operational</h2>
55
+ <p className="text-slate-300 text-xs font-semibold">100% of microservices running successfully within target parameters.</p>
56
+ </div>
57
+
58
+ <button
59
+ onClick={handleRefresh}
60
+ disabled={isRefreshing}
61
+ className="self-start md:self-auto px-4 py-2.5 rounded-xl bg-white/10 hover:bg-white/20 font-bold text-xs uppercase tracking-wider flex items-center gap-1.5 border border-white/15 transition-all active:scale-95 disabled:opacity-50"
62
+ >
63
+ <RefreshCw size={14} className={isRefreshing ? 'animate-spin' : ''} /> {isRefreshing ? 'Checking...' : 'Refresh Status'}
64
+ </button>
65
+ </div>
66
+
67
+ {/* Service Cards */}
68
+ <div className="space-y-4">
69
+ <h3 className="text-xs font-black text-slate-400 uppercase tracking-widest">Active Services</h3>
70
+ <div className="space-y-3">
71
+ {services.map((service, idx) => (
72
+ <Card key={idx} className="p-6 rounded-[1.5rem] border border-slate-200/80 bg-white flex items-center justify-between shadow-sm flex-wrap gap-4">
73
+ <div className="space-y-1">
74
+ <h4 className="font-extrabold text-slate-900 text-sm">{service.name}</h4>
75
+ <p className="text-xs text-slate-400 font-semibold">{service.desc}</p>
76
+ </div>
77
+ <span className="inline-flex items-center gap-1.5 px-3 py-1 rounded-full bg-emerald-50 border border-emerald-100 text-emerald-700 text-[10px] font-black uppercase tracking-widest">
78
+ <CheckCircle size={10} /> {service.status}
79
+ </span>
80
+ </Card>
81
+ ))}
82
+ </div>
83
+ </div>
84
+ </div>
85
+ </div>
86
+ );
87
+ }
Frontend/src/pages/legal/CookiePolicy.jsx ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React from 'react';
2
+ import { useNavigate } from 'react-router-dom';
3
+ import { ShieldAlert, ArrowLeft } from 'lucide-react';
4
+ import { Card } from '../../components/ui/card';
5
+
6
+ export default function CookiePolicy() {
7
+ const navigate = useNavigate();
8
+
9
+ return (
10
+ <div className="min-h-screen bg-[#f6f8f7] pb-20">
11
+ {/* Header */}
12
+ <header className="w-full bg-white border-b border-gray-200 sticky top-0 z-50">
13
+ <div className="max-w-[1100px] mx-auto px-4 md:px-6 h-16 flex items-center justify-between">
14
+ <div className="flex items-center gap-3 cursor-pointer" onClick={() => navigate('/')}>
15
+ <img src="/favicon.png" alt="HELPDESK.AI Logo" className="w-7 h-7 object-contain" />
16
+ <div className="flex items-baseline gap-2">
17
+ <h1 className="text-xl font-black tracking-tighter text-gray-900 italic">HELPDESK.AI</h1>
18
+ <span className="px-2 py-0.5 text-[10px] font-black bg-slate-100 text-slate-800 rounded-md uppercase tracking-wider">Legal</span>
19
+ </div>
20
+ </div>
21
+ <button
22
+ onClick={() => navigate('/')}
23
+ className="flex items-center gap-2 text-xs font-bold text-gray-600 hover:text-emerald-600 transition-colors bg-gray-50 hover:bg-emerald-50 px-3.5 py-2 rounded-xl border border-gray-200"
24
+ >
25
+ <ArrowLeft size={14} /> Back to Home
26
+ </button>
27
+ </div>
28
+ </header>
29
+
30
+ <div className="max-w-[800px] mx-auto px-4 md:px-6 mt-12 space-y-8">
31
+ <div className="space-y-4">
32
+ <div className="inline-flex items-center gap-2 px-3 py-1 bg-slate-500/10 border border-slate-500/20 rounded-full text-slate-700 text-xs font-bold">
33
+ <ShieldAlert size={14} /> Compliance Guide
34
+ </div>
35
+ <h1 className="text-4xl font-black text-slate-900 tracking-tight">Cookie Policy</h1>
36
+ <p className="text-slate-400 text-xs font-semibold">Last Updated: May 2026</p>
37
+ </div>
38
+
39
+ <Card className="p-8 rounded-[2rem] border border-slate-200 bg-white space-y-6 shadow-sm text-sm text-slate-600 leading-relaxed font-medium">
40
+ <h3 className="text-lg font-black text-slate-800 tracking-tight">1. Why We Use Cookies</h3>
41
+ <p>
42
+ HELPDESK.AI uses secure, essential first-party cookies to manage active user sessions, retain user preferences, and authenticate client tokens accessing our Supabase data gateway.
43
+ </p>
44
+
45
+ <h3 className="text-lg font-black text-slate-800 tracking-tight">2. Third-Party Trackers</h3>
46
+ <p>
47
+ We do not run external tracking scripts or advertising scripts. Stripe cookies are injected solely during active checkouts to maintain secure payment processing integrity.
48
+ </p>
49
+
50
+ <h3 className="text-lg font-black text-slate-800 tracking-tight">3. Managing Preferences</h3>
51
+ <p>
52
+ You can clean, block, or disable active cookies via your browser's security panel settings at any time.
53
+ </p>
54
+ </Card>
55
+ </div>
56
+ </div>
57
+ );
58
+ }