Skip to content

Commit 9779264

Browse files
authored
Merge pull request #37 from mnaimfaizy/feature/backend-architecture-module
feat: Add Backend Architecture learning module
2 parents 6df1f1a + 55a41db commit 9779264

24 files changed

Lines changed: 5632 additions & 11 deletions

README.md

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
**🌐 Live Website**: [https://codexecutives.com](https://codexecutives.com)
66

7-
**✨ Now featuring 14 complete learning modules with 90+ interactive visualizations, root-level scenario quiz banks for every module, shared timed quizzes with local progress tracking, and a LeetCode-style playground with advanced debugging and gamification.**
7+
**✨ Now featuring 15 complete learning modules with 96+ interactive visualizations, root-level scenario quiz banks for every module, shared timed quizzes with local progress tracking, and a LeetCode-style playground with advanced debugging and gamification.**
88

99
> **📌 Repository Maintainers**: See [REPOSITORY-ABOUT-QUICK-REFERENCE.md](./docs/REPOSITORY-ABOUT-QUICK-REFERENCE.md) for GitHub repository About section configuration (description, website, and topics).
1010
@@ -23,6 +23,7 @@
2323
- **Node.js Ecosystem**: Deep dive into Event Loop, V8 memory, Streams, Clustering, module systems, package managers, frameworks, and runtime wars (Node vs Deno vs Bun)
2424
- **DevOps & Cloud Computing**: CI/CD pipelines, cloud service models (IaaS/PaaS/SaaS/FaaS), container orchestration with Kubernetes, Infrastructure as Code, observability, and modern DevOps roles
2525
- **Auth & Security**: Modern authentication and authorization — OAuth 2.0, OIDC, PKCE, WebAuthn/Passkeys, Zero Trust, BFF Pattern, and AI agent authentication
26+
- **Backend Architecture**: Architecture patterns (Monolithic, Layered, Microservices, Event-Driven, Hexagonal), resilience patterns (Circuit Breaker, Sidecar, Saga), API design (REST, GraphQL, gRPC), CAP theorem, ACID vs BASE, real-time communication, observability, and the complete request lifecycle
2627
- **Shared Timed Module Quizzes**: Every learning module ends with a 5-question, 10-minute scenario quiz backed by a root-level JSON bank and localStorage result history
2728
- **LeetCode-Style Playground**: Interactive coding environment with debugging, visualizations, and gamification
2829

@@ -381,6 +382,19 @@ Comprehensive DevOps and cloud computing module with 6 interactive visualization
381382

382383
Multi-language coding environment with AST-based instrumentation and live data-structure visualizations:
383384

385+
### 🏛️ **Backend Architecture (Complete)**
386+
387+
Comprehensive backend architecture module with 6+ interactive visualizations covering the full backend stack:
388+
389+
- **Backend Evolution**: Interactive timeline from 1950s hardware intimacy to modern containers and microservices
390+
- **Architecture Patterns**: Interactive comparison of Monolithic, Layered, Microservices, Event-Driven, and Hexagonal architectures with animated diagrams
391+
- **Resilience Patterns**: Circuit Breaker state machine simulation, Sidecar pattern visualization, and Saga pattern with compensating actions
392+
- **Database Theory**: Interactive CAP Theorem triangle with CP/AP toggle, ACID vs BASE tabbed comparison, and property deep-dives
393+
- **API Design**: REST vs GraphQL vs gRPC comparison with real-world analogies, code examples, and API evolution timeline
394+
- **Real-Time Communication**: Webhooks, WebSockets, and Server-Sent Events with data flow visualizations and comparison matrix
395+
- **Observability**: Three pillars (Logs, Metrics, Traces) with interactive triangle diagram, tool recommendations, and incident response workflow
396+
- **Request Lifecycle**: Animated "Buy Now" journey through DNS → TCP/TLS → Load Balancer → API Gateway → Cache → Database → Message Queue → Response with latency budgets
397+
384398
- **Multi-Language Execution**: JavaScript, TypeScript (transpiled), and Python (Pyodide WASM) — all in-browser, no server
385399
- **AST Instrumentation**: Acorn/Astring pipeline injects `__snapshot()` calls around every statement; Python uses `sys.settrace` wrapper with base64-encoded source
386400
- **Timeline Player**: Step forward/backward through execution snapshots, inspect variables and call stack at each point
@@ -466,7 +480,7 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
466480
- 📧 **Issues**: Report bugs or request features via GitHub Issues
467481
- 💬 **Discussions**: Join community discussions for questions and ideas
468482
- 📖 **Documentation**: Comprehensive docs available in the `/docs` directory
469-
- 🎓 **Learning Modules**: 13 complete interactive modules with 84+ visualizations
483+
- 🎓 **Learning Modules**: 15 complete interactive modules with 96+ visualizations
470484
- 🎯 **Playground**: LeetCode-style coding environment with debugging and gamification
471485

472486
---

docs/Backend Concepts Explained for Visualization.md

Lines changed: 384 additions & 0 deletions
Large diffs are not rendered by default.

src/App.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ const AIFundamentalsPage = lazy(() => import('./features/ai'));
3131
const NodeJSPage = lazy(() => import('./features/nodejs'));
3232
const AuthPage = lazy(() => import('./features/auth'));
3333
const DevOpsPage = lazy(() => import('./features/devops'));
34+
const BackendPage = lazy(() => import('./features/backend'));
3435

3536
// Standalone pages (rendered without main app layout)
3637
const PlaygroundEntry = lazy(() => import('./features/playground/PlaygroundEntry'));
@@ -211,6 +212,14 @@ const App: React.FC = () => {
211212
</SuspenseRoute>
212213
}
213214
/>
215+
<Route
216+
path="/backend"
217+
element={
218+
<SuspenseRoute>
219+
<BackendPage />
220+
</SuspenseRoute>
221+
}
222+
/>
214223
</Routes>
215224
</main>
216225
</div>

src/components/Header.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,12 @@ const Header: React.FC = () => {
138138
icon: <Shield className="w-4 h-4" />,
139139
description: 'Authentication & Authorization',
140140
},
141+
{
142+
label: 'Backend Architecture',
143+
path: '/backend',
144+
icon: <Server className="w-4 h-4" />,
145+
description: 'Backend patterns & API design',
146+
},
141147
],
142148
},
143149
];
@@ -205,6 +211,7 @@ const Header: React.FC = () => {
205211
if (path === '/auth') return 'text-amber-600 bg-amber-50';
206212
if (path === '/nodejs') return 'text-green-600 bg-green-50';
207213
if (path === '/devops') return 'text-sky-600 bg-sky-50';
214+
if (path === '/backend') return 'text-slate-600 bg-slate-50';
208215
return 'text-gray-700 hover:bg-gray-50';
209216
};
210217

src/components/Sidebar.tsx

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,13 @@ const getThemeColorClass = (
8484
buttonHover: 'hover:text-amber-600',
8585
border: 'border-amber-100',
8686
},
87+
slate: {
88+
active: 'bg-slate-100 text-slate-800 border-slate-500',
89+
hover: 'hover:bg-slate-50 hover:text-slate-700',
90+
buttonActive: 'text-slate-600 hover:text-slate-700',
91+
buttonHover: 'hover:text-slate-600',
92+
border: 'border-slate-100',
93+
},
8794
};
8895

8996
const colors = colorMap[theme.primary] || colorMap.blue;
@@ -382,6 +389,18 @@ const sidebarSections: Record<string, Array<SidebarItem>> = {
382389
{ label: 'AI Agent Authentication', path: '/auth?section=AI%20Agent%20Authentication' },
383390
{ label: 'Visualization', path: '/auth?section=Visualization' },
384391
],
392+
'/backend': [
393+
{ label: 'Introduction', path: '/backend?section=Introduction' },
394+
{ label: 'Backend Evolution', path: '/backend?section=Backend%20Evolution' },
395+
{ label: 'Architecture Patterns', path: '/backend?section=Architecture%20Patterns' },
396+
{ label: 'Resilience Patterns', path: '/backend?section=Resilience%20Patterns' },
397+
{ label: 'Database Theory', path: '/backend?section=Database%20Theory' },
398+
{ label: 'API Design', path: '/backend?section=API%20Design' },
399+
{ label: 'Real-Time Communication', path: '/backend?section=Real-Time%20Communication' },
400+
{ label: 'Observability', path: '/backend?section=Observability' },
401+
{ label: 'Request Lifecycle', path: '/backend?section=Request%20Lifecycle' },
402+
{ label: 'Visualization', path: '/backend?section=Visualization' },
403+
],
385404
'/': [],
386405
'/about': [],
387406
};
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import React, { Suspense } from 'react';
2+
import { useLocation } from 'react-router-dom';
3+
import ModuleQuizSection from '../../shared/components/quiz/ModuleQuizSection';
4+
5+
// Lazy load section components for better performance
6+
import Introduction from './components/sections/Introduction';
7+
const BackendEvolution = React.lazy(() => import('./components/sections/BackendEvolution'));
8+
const ArchitecturePatterns = React.lazy(() => import('./components/sections/ArchitecturePatterns'));
9+
const ResiliencePatterns = React.lazy(() => import('./components/sections/ResiliencePatterns'));
10+
const DatabaseTheory = React.lazy(() => import('./components/sections/DatabaseTheory'));
11+
const APIDesign = React.lazy(() => import('./components/sections/APIDesign'));
12+
const RealTimeCommunication = React.lazy(
13+
() => import('./components/sections/RealTimeCommunication')
14+
);
15+
const Observability = React.lazy(() => import('./components/sections/Observability'));
16+
const RequestLifecycle = React.lazy(() => import('./components/sections/RequestLifecycle'));
17+
const Visualization = React.lazy(() => import('./components/sections/Visualization'));
18+
const Quiz = () => <ModuleQuizSection moduleId="backend" />;
19+
20+
const sectionComponents: Record<string, React.ComponentType> = {
21+
Introduction,
22+
'Backend Evolution': BackendEvolution,
23+
'Architecture Patterns': ArchitecturePatterns,
24+
'Resilience Patterns': ResiliencePatterns,
25+
'Database Theory': DatabaseTheory,
26+
'API Design': APIDesign,
27+
'Real-Time Communication': RealTimeCommunication,
28+
Observability,
29+
'Request Lifecycle': RequestLifecycle,
30+
Visualization,
31+
Quiz,
32+
};
33+
34+
function useQuery(): URLSearchParams {
35+
return new URLSearchParams(useLocation().search);
36+
}
37+
38+
const BackendPage: React.FC = () => {
39+
const query = useQuery();
40+
const section = query.get('section') || 'Introduction';
41+
const Component = sectionComponents[section] || Introduction;
42+
43+
return (
44+
<div className="p-4 sm:p-6">
45+
<Suspense
46+
fallback={
47+
<div className="flex items-center justify-center h-64">
48+
<div className="animate-spin rounded-full h-12 w-12 border-b-2 border-slate-600"></div>
49+
</div>
50+
}
51+
>
52+
<Component />
53+
</Suspense>
54+
</div>
55+
);
56+
};
57+
58+
export default BackendPage;

0 commit comments

Comments
 (0)