Skip to content

Commit 35d0bc7

Browse files
Merge pull request #73 from NexGenStudioDev/dev
Dev
2 parents ce22e38 + 796c363 commit 35d0bc7

81 files changed

Lines changed: 2738 additions & 788 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,6 @@ An evolving desktop platform foundation to manage communities, events, hackathon
3737
- [Code of Conduct](#code-of-conduct)
3838
- [License](#license)
3939

40-
41-
42-
4340
## Nexus Spring of Code
4441

4542
## About

Security.md

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ The following versions of CommDesk are currently supported with security updates
66

77
| Version | Supported |
88
| ------- | --------- |
9-
| 0.1.x | ✅ Yes |
10-
| < 0.1 | ❌ No |
9+
| 0.1.x | ✅ Yes |
10+
| < 0.1 | ❌ No |
1111

1212
We recommend always using the latest release for security fixes and improvements.
1313

@@ -18,12 +18,14 @@ We recommend always using the latest release for security fixes and improvements
1818
If you discover a security vulnerability, please report it responsibly.
1919

2020
### 📩 How to Report
21-
- Email: **security@nexgenstudio.dev**
21+
22+
- Email: **security@nexgenstudio.dev**
2223
- Or open a **private security advisory** via GitHub:
2324
- Go to the repository
2425
- Click **Security → Advisories → Report a vulnerability**
2526

2627
### ❗ Please DO NOT:
28+
2729
- Open public issues for security vulnerabilities
2830
- Share exploits publicly before disclosure
2931

@@ -43,11 +45,11 @@ To help us respond quickly, include:
4345

4446
## ⏱️ Response Timeline
4547

46-
| Stage | Timeline |
47-
|-----------------------|---------------|
48-
| Acknowledgement | Within 48 hours |
49-
| Initial assessment | Within 3–5 days |
50-
| Fix & patch release | Depends on severity |
48+
| Stage | Timeline |
49+
| ------------------- | ------------------- |
50+
| Acknowledgement | Within 48 hours |
51+
| Initial assessment | Within 3–5 days |
52+
| Fix & patch release | Depends on severity |
5153

5254
We aim to resolve critical issues as quickly as possible.
5355

docs/CommDesk-theme.doc.md

Lines changed: 121 additions & 108 deletions
Large diffs are not rendered by default.

index.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99
<script>
1010
(function () {
1111
try {
12-
var stored = localStorage.getItem('commdesk-theme');
13-
var prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
14-
var isDark = stored === 'dark' || (!stored && prefersDark);
12+
var stored = localStorage.getItem("commdesk-theme");
13+
var prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
14+
var isDark = stored === "dark" || (!stored && prefersDark);
1515
if (isDark) {
16-
document.documentElement.classList.add('dark');
17-
document.documentElement.setAttribute('data-theme', 'dark');
16+
document.documentElement.classList.add("dark");
17+
document.documentElement.setAttribute("data-theme", "dark");
1818
}
1919
} catch (e) {}
2020
})();

src/App.css

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,12 @@ body {
2222
width: 100%;
2323
height: 100%;
2424
overflow-x: hidden;
25-
font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
25+
font-family:
26+
"Inter",
27+
-apple-system,
28+
BlinkMacSystemFont,
29+
"Segoe UI",
30+
sans-serif;
2631
}
2732

2833
#root {
@@ -212,11 +217,11 @@ body {
212217
--cd-secondary: #a855f7;
213218
--cd-accent: #22d3ee;
214219
--cd-success: #4ade80;
215-
--cd-success-subtle: rgba(74, 222, 128, 0.10);
220+
--cd-success-subtle: rgba(74, 222, 128, 0.1);
216221
--cd-warning: #facc15;
217-
--cd-warning-subtle: rgba(250, 204, 21, 0.10);
222+
--cd-warning-subtle: rgba(250, 204, 21, 0.1);
218223
--cd-danger: #f87171;
219-
--cd-danger-subtle: rgba(248, 113, 113, 0.10);
224+
--cd-danger-subtle: rgba(248, 113, 113, 0.1);
220225
--cd-hover: rgba(255, 255, 255, 0.05);
221226
--cd-shadow: rgba(0, 0, 0, 0.3);
222227
--cd-shadow-md: rgba(0, 0, 0, 0.4);
@@ -226,7 +231,10 @@ body {
226231
@layer base {
227232
* {
228233
@apply border-border outline-ring/50;
229-
transition: background-color 0.2s ease, border-color 0.2s ease, color 0.15s ease;
234+
transition:
235+
background-color 0.2s ease,
236+
border-color 0.2s ease,
237+
color 0.15s ease;
230238
}
231239
body {
232240
@apply bg-background text-foreground;
@@ -242,14 +250,16 @@ body {
242250
border-radius: 1rem;
243251
padding: 1.25rem;
244252
box-shadow: 0 1px 3px var(--cd-shadow);
245-
transition: box-shadow 0.2s ease, transform 0.2s ease;
253+
transition:
254+
box-shadow 0.2s ease,
255+
transform 0.2s ease;
246256
}
247257
.cd-card:hover {
248258
box-shadow: 0 4px 12px var(--cd-shadow-md);
249259
}
250260
.cd-card-hover:hover {
251-
transform: translateY(-2px);
252-
}
261+
transform: translateY(-2px);
262+
}
253263

254264
/* Section title */
255265
.cd-section-title {
@@ -360,7 +370,9 @@ body {
360370
font-size: 0.875rem;
361371
color: var(--cd-text);
362372
outline: none;
363-
transition: border-color 0.15s ease, box-shadow 0.15s ease;
373+
transition:
374+
border-color 0.15s ease,
375+
box-shadow 0.15s ease;
364376
}
365377
.cd-input::placeholder {
366378
color: var(--cd-text-muted);
@@ -455,14 +467,16 @@ body {
455467
}
456468

457469
/* Legacy aliases (keep old .card / .section-title working) */
458-
/* Legacy aliases */
470+
/* Legacy aliases */
459471
.card {
460472
background-color: var(--cd-surface);
461473
border: 1px solid var(--cd-border);
462474
border-radius: 1rem;
463475
padding: 1.25rem;
464476
box-shadow: 0 1px 3px var(--cd-shadow);
465-
transition: box-shadow 0.2s ease, transform 0.2s ease;
477+
transition:
478+
box-shadow 0.2s ease,
479+
transform 0.2s ease;
466480
}
467481
.section-title {
468482
font-size: 1rem;

src/App.tsx

Lines changed: 13 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,81 +1,33 @@
11
import { useEffect } from "react";
2-
import { BrowserRouter, Route, Routes } from "react-router-dom";
32

4-
import "./App.css";
3+
import { BrowserRouter } from "react-router-dom";
54

6-
import DashboardPage from "./features/Dashboard/v1/Pages/DashboardPage";
7-
import MemberPage from "./features/Member/v1/Pages/MemberPage";
8-
import LoginUserTemplate from "./features/template/LoginUserTemplate";
9-
import AddMemberPage from "./features/AddMember/v1/Page/AddMemberPage";
10-
import CreateNewEvent from "./features/Events/v1/Pages/CreateNewEvent";
11-
import Contact from "./features/Contact_And_Support/v1/Pages/Contact";
12-
import ViewEvent from "./features/Events/v1/Pages/ViewEvent";
13-
import LoginPage from "./features/Auth/v1/Pages/LoginPage";
14-
import SignUpPage from "./features/Auth/v1/Pages/SignUpPage";
5+
import "./App.css";
156

7+
import { dashboardData } from "./features/Member/v1/mock/dashboardData";
168
import { startAutoUpdater } from "./system/updater/autoUpdater";
17-
import ProtectedRoute from "./routes/ProtectedRoute";
18-
import { dashboardData } from "./features/Dashboard/mock/dashboardData";
9+
1910
import { ThemeProvider } from "next-themes";
11+
import OrgRoute from "./routes/OrgRoute";
12+
import MemberRoutes from "./routes/MemberRoutes";
2013

2114
function App() {
2215
useEffect(() => {
2316
void startAutoUpdater();
2417
}, []);
2518

26-
const user = dashboardData.user; // mock user
19+
const user = dashboardData.user;
2720

2821
return (
2922
<ThemeProvider attribute="class" defaultTheme="light">
23+
<BrowserRouter>
3024

31-
<BrowserRouter>
32-
<Routes>
33-
{/* Public Routes */}
34-
<Route path="/" element={<LoginPage />} />
35-
<Route path="/signup" element={<SignUpPage />} />
36-
37-
{/* Protected / Org Layout */}
38-
<Route path="/org" element={<LoginUserTemplate />}>
39-
{/* Protected Dashboard */}
40-
<Route
41-
index
42-
element={
43-
<ProtectedRoute user={user} allowedRoles={["Member", "Admin"]}>
44-
<DashboardPage />
45-
</ProtectedRoute>
46-
}
47-
/>
48-
49-
<Route
50-
path="dashboard"
51-
element={
52-
<ProtectedRoute user={user} allowedRoles={["Member", "Admin"]}>
53-
<DashboardPage />
54-
</ProtectedRoute>
55-
}
56-
/>
57-
58-
{/* Other routes (not restricted) */}
59-
<Route path="member" element={<MemberPage />} />
60-
<Route path="add-member" element={<AddMemberPage />} />
61-
<Route path="events" element={<ViewEvent />} />
62-
<Route path="create-event" element={<CreateNewEvent />} />
63-
<Route path="contact" element={<Contact />} />
64-
65-
<Route path="*" element={<div>404 Not Found</div>} />
66-
</Route>
25+
<OrgRoute />
6726

68-
<Route
69-
path="/unauthorized"
70-
element={
71-
<div className="flex items-center justify-center h-screen text-red-500 text-xl">
72-
Unauthorized Access
73-
</div>
74-
}
75-
/>
76-
</Routes>
77-
</BrowserRouter>
78-
</ThemeProvider>
27+
<MemberRoutes />
28+
29+
</BrowserRouter>
30+
</ThemeProvider>
7931
);
8032
}
8133

src/Component/ui/DropDown.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ const DropDown: React.FC<DropDownProps> = ({
2727
const containerRef = useRef<HTMLDivElement>(null);
2828

2929
useEffect(() => {
30-
if (value !== undefined) { setSelected(value); return; }
30+
if (value !== undefined) {
31+
setSelected(value);
32+
return;
33+
}
3134
setSelected((prev) => (prev && options.includes(prev) ? prev : (options[0] ?? "")));
3235
}, [options, value]);
3336

@@ -99,7 +102,8 @@ const DropDown: React.FC<DropDownProps> = ({
99102
}}
100103
onMouseEnter={(e) => {
101104
if (selected !== opt)
102-
(e.currentTarget as HTMLButtonElement).style.backgroundColor = theme.interactive.hover;
105+
(e.currentTarget as HTMLButtonElement).style.backgroundColor =
106+
theme.interactive.hover;
103107
}}
104108
onMouseLeave={(e) => {
105109
if (selected !== opt)

src/Component/ui/SearchableDropdown.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,7 @@ export function SearchableDropdown({
2323
const [search, setSearch] = useState("");
2424
const dropdownRef = useRef<HTMLDivElement>(null);
2525

26-
const filteredOptions = options.filter((opt) =>
27-
opt.toLowerCase().includes(search.toLowerCase())
28-
);
26+
const filteredOptions = options.filter((opt) => opt.toLowerCase().includes(search.toLowerCase()));
2927

3028
useEffect(() => {
3129
const handleClickOutside = (event: MouseEvent) => {
@@ -100,7 +98,7 @@ export function SearchableDropdown({
10098
className={cn(
10199
"flex h-[42px] w-full items-center justify-between rounded-lg border bg-white px-4 py-2.5 text-sm ring-offset-white focus:outline-none focus:ring-2 focus:ring-indigo-100 focus:border-indigo-500 transition-all cursor-pointer group inter",
102100
error ? "border-red-400" : "border-gray-300",
103-
!value && "text-gray-400"
101+
!value && "text-gray-400",
104102
)}
105103
>
106104
<span className="truncate">{value || placeholder}</span>
@@ -141,7 +139,7 @@ export function SearchableDropdown({
141139
className={cn(
142140
"relative flex w-full cursor-pointer select-none items-center rounded-lg py-2.5 px-9 text-sm outline-none transition-colors inter",
143141
index === activeIndex ? "bg-indigo-50 text-indigo-900" : "text-gray-700",
144-
value === option && "bg-indigo-50 font-semibold text-indigo-600"
142+
value === option && "bg-indigo-50 font-semibold text-indigo-600",
145143
)}
146144
>
147145
{value === option && (

src/config/sidebar.config.ts

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import {
2+
LayoutDashboard,
3+
MessageCircle,
4+
Briefcase,
5+
CheckSquare,
6+
Bell,
7+
BarChart3,
8+
CreditCard,
9+
Users,
10+
Settings,
11+
} from "lucide-react";
12+
13+
export const sidebarItems = [
14+
{
15+
title: "Dashboard",
16+
path: "/member/dashboard",
17+
icon: LayoutDashboard,
18+
},
19+
{
20+
title: "Workspace",
21+
path: "/member/workspace",
22+
icon: Briefcase,
23+
},
24+
{
25+
title: "Messages",
26+
path: "/org/messages",
27+
icon: MessageCircle,
28+
},
29+
{
30+
title: "Tasks",
31+
path: "/org/tasks",
32+
icon: CheckSquare,
33+
},
34+
{
35+
title: "Teams",
36+
path: "/org/teams",
37+
icon: Users,
38+
},
39+
{
40+
title: "Analytics",
41+
path: "/org/analytics",
42+
icon: BarChart3,
43+
},
44+
{
45+
title: "Notifications",
46+
path: "/org/notifications",
47+
icon: Bell,
48+
},
49+
50+
{
51+
title: "Billing",
52+
path: "/org/billing",
53+
icon: CreditCard,
54+
},
55+
56+
{
57+
title: "Settings",
58+
path: "/org/settings",
59+
icon: Settings,
60+
},
61+
];

0 commit comments

Comments
 (0)