-
Notifications
You must be signed in to change notification settings - Fork 51
Expand file tree
/
Copy pathindex.html
More file actions
947 lines (837 loc) · 40.8 KB
/
index.html
File metadata and controls
947 lines (837 loc) · 40.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="google-site-verification" content="GZtBAvTfSmH4MlTuaTtLqPZqYcMHYvVSrBVphhj3DAw" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>BYAMN: Free Courses</title>
<meta name="description"
content="Discover BYAMN's mission to transform YouTube learning into verified achievement. Free certificates, progress tracking, and 200+ expert-led courses for career advancement." />
<meta name="keywords"
content="youtube learning, verified achievement, free certificates, online courses, skill development, education platform, progress tracking, certified learning, youtube courses" />
<link rel="canonical" href="https://byamn.vercel.app/" />
<link rel="icon" type="image/x-icon" href="./favicon.ico" />
<link rel="icon" type="image/png" href="./logo.png" />
<meta name="monetag" content="336e1d944d91db57e07c73daf4c58cf3" />
<!-- Open Graph / Facebook -->
<meta property="og:type" content="website" />
<meta property="og:url" content="https://byamn.vercel.app/" />
<meta property="og:title" content="BYAMN - YouTube Learning Verified Achievement | Free Certificates" />
<meta property="og:description"
content="Transform YouTube learning into verified achievement with free certificates. Track progress, earn credentials, and advance your career with 200+ expert-led courses." />
<meta property="og:image" content="https://byamn.vercel.app/logo.png" />
<!-- Twitter -->
<meta property="twitter:card" content="summary_large_image" />
<meta property="twitter:url" content="https://byamn.vercel.app/" />
<meta property="twitter:title" content="BYAMN - YouTube Learning Verified Achievement | Free Certificates" />
<meta property="twitter:description"
content="Transform YouTube learning into verified achievement with free certificates. Track progress, earn credentials, and advance your career with 200+ expert-led courses." />
<meta property="twitter:image" content="https://byamn.vercel.app/logo.png" />
<!-- Tailwind CSS CDN -->
<script src="https://cdn.tailwindcss.com"></script>
<!-- Inter font -->
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet" />
<!-- Custom styles -->
<link href="./assets/css/styles.css" rel="stylesheet" />
<!-- Font Awesome for icons -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" />
<!-- AOS (Animate On Scroll) -->
<link href="https://unpkg.com/aos@2.3.1/dist/aos.css" rel="stylesheet" />
<!-- Firebase SDK - Using compat versions without type="module" -->
<script src="https://www.gstatic.com/firebasejs/10.7.1/firebase-app-compat.js"></script>
<script src="https://www.gstatic.com/firebasejs/10.7.1/firebase-analytics-compat.js"></script>
<script src="https://www.gstatic.com/firebasejs/10.7.1/firebase-auth-compat.js"></script>
<script src="https://www.gstatic.com/firebasejs/10.7.1/firebase-firestore-compat.js"></script>
<script src="https://www.gstatic.com/firebasejs/10.7.1/firebase-database-compat.js"></script>
<!-- Firebase configuration -->
<script type="module" src="./assets/js/firebase.js"></script>
<!-- AOS (Animate On Scroll) -->
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
<script>
tailwind.config = {
theme: {
extend: {
colors: {
primary: {
50: '#eef2ff',
100: '#e0e7ff',
200: '#c7d2fe',
300: '#a5b4fc',
400: '#818cf8',
500: '#6366f1',
600: '#4f46e5',
700: '#4338ca',
800: '#3730a3',
900: '#312e81',
},
secondary: {
50: '#f5f3ff',
100: '#ede9fe',
200: '#ddd6fe',
300: '#c4b5fd',
400: '#a78bfa',
500: '#8b5cf6',
600: '#7c3aed',
700: '#6d28d9',
800: '#5b21b6',
900: '#4c1d95',
},
},
},
},
};
</script>
<style>
body {
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI',
Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue',
sans-serif;
}
.delay-100 {
animation-delay: 0.1s;
}
.delay-150 {
animation-delay: 0.15s;
}
.delay-200 {
animation-delay: 0.2s;
}
.delay-300 {
animation-delay: 0.3s;
}
.delay-400 {
animation-delay: 0.4s;
}
.delay-500 {
animation-delay: 0.5s;
}
.delay-600 {
animation-delay: 0.6s;
}
/* Enhanced hero section */
.hero {
background: linear-gradient(135deg,
var(--primary-50) 0%,
var(--secondary-50) 100%);
}
.dark .hero {
background: linear-gradient(135deg,
var(--primary-900) 0%,
var(--secondary-900) 100%);
}
/* Enhanced feature cards */
.feature-card {
transition: all var(--transition-medium) ease;
border: 1px solid var(--border-card);
}
.feature-card:hover {
transform: translateY(-8px);
box-shadow: var(--shadow-xl);
}
/* Enhanced course cards */
.course-card {
transition: all var(--transition-medium) ease;
}
.course-card:hover {
transform: translateY(-8px);
box-shadow: var(--shadow-xl);
}
.cursor {
display: inline-block;
animation: blink 0.7s infinite;
color: #acb1f0;
}
@keyframes blink {
50% {
opacity: 0;
}
}
/* Loading spinner */
.loading-spinner {
width: 40px;
height: 40px;
border: 4px solid #e5e7eb;
border-top: 4px solid #6366f1;
border-radius: 50%;
animation: spin 1s linear infinite;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
</style>
</head>
<body class="min-h-screen bg-theme-page">
<!-- Header with navigation and user actions -->
<header data-aos-duration="800" class="header">
<div data-aos="fade-down" class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="flex justify-between items-center py-4" style="width: 100%; height: 70px">
<!-- Logo and site name -->
<a href="#" id="logoLink" class="flex items-center cursor-pointer">
<div class="flex items-center">
<div class="flex-shrink-0 flex items-center h-10 w-10" style="width: 40%; height: 60px">
<img id="siteLogo" src="logo.png" alt="BYAMN Logo" class="h-full w-full object-contain" />
</div>
<h1 class="ml-3 font-bold text-gradient-primary text-2xl" style="margin-left: 15px">
BYAMN
</h1>
</div>
</a>
<!-- Desktop Navigation - hidden on mobile and tablets -->
<nav class="hidden lg:flex space-x-4">
<a href="./courses.html" class="nav-link">Courses</a>
<a href="./about.html" class="nav-link">About</a>
<a href="./faq.html" class="nav-link">FAQ</a>
<a href="./contact.html" class="nav-link">Contact</a>
</nav>
<!-- User Actions Section -->
<div class="flex items-center space-x-3">
<!-- Mobile menu button - visible on mobile and tablets -->
<button id="mobile-menu-button" class="mobile-menu-button lg:hidden" aria-label="Toggle menu">
<svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"
id="mobile-menu-icon-open"></path>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"
id="mobile-menu-icon-close" class="hidden"></path>
</svg>
</button>
<!-- User-specific actions - shown only on large screens -->
<div id="user-actions-desktop" class="hidden lg:flex space-x-3">
<a href="./auth/login.html" id="login-btn" class="btn btn-outline"> Login </a>
<a href="./auth/register.html" id="signup-btn" class="btn btn-primary">
Get Started
</a>
</div>
</div>
</div>
</div>
<!-- Mobile Navigation - only visible when menu is open -->
<div id="mobile-menu" class="lg:hidden py-4 border-t border-neutral-200 hidden">
<div class="flex flex-col space-y-3 px-4">
<a href="index.html"
class="px-3 py-2 rounded-lg text-neutral-600 hover:text-primary-600 font-medium transition-colors">Home</a>
<a href="courses.html"
class="px-3 py-2 rounded-lg text-neutral-600 hover:text-primary-600 font-medium transition-colors">Courses</a>
<a href="about.html"
class="px-3 py-2 rounded-lg text-neutral-600 hover:text-primary-600 font-medium transition-colors">About</a>
<a href="faq.html"
class="px-3 py-2 rounded-lg text-neutral-600 hover:text-primary-600 font-medium transition-colors">FAQ</a>
<a href="contact.html"
class="px-3 py-2 rounded-lg text-neutral-600 hover:text-primary-600 font-medium transition-colors">Contact</a>
<!-- Mobile user actions -->
<div id="user-actions-mobile" class="pt-4 border-t border-neutral-200 space-y-3">
<a href="auth/login.html" id="login-btn" class="block w-full text-center btn btn-outline">Login</a>
<a href="auth/register.html" id="signup-btn" class="block w-full text-center btn btn-primary">Get Started</a>
</div>
</div>
</div>
</header>
<!-- Hero Section -->
<main class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-16 md:py-20">
<div class="text-center fade-in-up hero rounded-3xl p-8 md:p-16 relative overflow-hidden">
<!-- Decorative elements -->
<div data-aos="fade-in"
class="absolute top-0 left-0 w-64 h-64 bg-primary-200 rounded-full mix-blend-multiply filter blur-3xl opacity-30 animate-blob">
</div>
<div data-aos="fade-in"
class="absolute top-0 right-0 w-64 h-64 bg-secondary-200 rounded-full mix-blend-multiply filter blur-3xl opacity-30 animate-blob animation-delay-2000">
</div>
<div data-aos="fade-in"
class="absolute bottom-10 left-1/2 w-64 h-64 bg-primary-300 rounded-full mix-blend-multiply filter blur-3xl opacity-30 animate-blob animation-delay-4000">
</div>
<div data-aos="zoom-in" class="relative z-10">
<!-- Welcome Message in User's Language -->
<div class="text-center mb-8">
<h1 id="welcome-message"
class="text-3xl md:text-4xl lg:text-5xl font-bold text-black-900 dark:text-black mb-4">
<!-- Welcome message will be automatically inserted here -->
</h1>
</div>
<div class="flex justify-center items-center mb-6">
<span class="text-4xl md:text-5xl lg:text-6xl text-gradient-primary" id="text"></span>
<span class="text-4xl md:text-5xl lg:text-6xl cursor">|</span>
</div>
<h1 class="hero-title text-4xl md:text-5xl lg:text-6xl font-extrabold tracking-tight">
Transform Your Future with
<span class="block text-gradient-primary mt-3">Expert-Led Learning</span>
</h1>
<p class="hero-subtitle fade-in-up delay-100 text-lg md:text-xl max-w-3xl mx-auto mt-6 text-theme-body">
Discover and master new skills with our comprehensive courses
designed by industry experts. Learn at your own pace with
interactive content and real-world projects.
</p>
<div class="flex flex-col sm:flex-row justify-center gap-4 fade-in-up delay-150 mt-10">
<a href="./auth/register.html" class="btn btn-primary btn-lg hover-lift px-8 py-4 text-lg font-semibold">
Get Started - It's Free
<svg class="h-5 w-5 ml-2 inline-block" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3" />
</svg>
</a>
<a href="verification.html"
class="btn btn-secondary btn-lg flex items-center justify-center hover-lift px-8 py-4 text-lg font-semibold">
<svg class="h-5 w-5 mr-2 text-primary-600" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z" />
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
</svg>
Certificate Verification
</a>
</div>
<!-- Trust indicators -->
<div class="mt-12 flex flex-col sm:flex-row items-center justify-center gap-6 text-theme-muted">
<div class="flex items-center">
<svg class="h-5 w-5 text-success-500 mr-2" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z"
clip-rule="evenodd" />
</svg>
<span class="text-black">100% Free Certificates</span>
</div>
<div class="flex items-center">
<svg class="h-5 w-5 text-success-500 mr-2" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z"
clip-rule="evenodd" />
</svg>
<span class="text-black">200+ Courses</span>
</div>
<div class="flex items-center">
<svg class="h-5 w-5 text-success-500 mr-2" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z"
clip-rule="evenodd" />
</svg>
<span class="text-black">Trusted by 50K+ Students</span>
</div>
</div>
</div>
</div>
<!-- Features Section -->
<div class="mt-24 fade-in-up delay-300">
<div data-aos="fade-in" class="text-center mb-16">
<h2 class="typography-h1 text-theme-heading mb-4">
Why Choose BYAMN?
</h2>
<p class="max-w-2xl mx-auto typography-body-large text-theme-body">
We provide the tools and resources you need to succeed in your
learning journey
</p>
</div>
<div data-aos="fade-up" class="grid grid-cols-1 md:grid-cols-3 gap-8">
<!-- Feature 1 -->
<div class="feature-card fade-in-up hover-lift">
<div class="feature-icon feature-icon-primary">
<svg class="h-8 w-8" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z" />
</svg>
</div>
<h3 class="feature-title">Expert Instructors</h3>
<p class="feature-description">
Learn from industry professionals with years of experience in
their respective fields.
</p>
</div>
<!-- Feature 2 -->
<div class="feature-card fade-in-up delay-100 hover-lift">
<div class="feature-icon feature-icon-secondary">
<svg class="h-8 w-8" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" />
</svg>
</div>
<h3 class="feature-title">Flexible Learning</h3>
<p class="feature-description">
Study at your own pace with 24/7 access to course materials from
any device.
</p>
</div>
<!-- Feature 3 -->
<div class="feature-card fade-in-up delay-200 hover-lift">
<div class="feature-icon feature-icon-success">
<svg class="h-8 w-8" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-18 0 11.955 11.955 0 0118 0z" />
</svg>
</div>
<h3 class="feature-title">Certification</h3>
<p class="feature-description">
Earn recognized certificates upon course completion to showcase
your new skills.
</p>
</div>
</div>
</div>
<!-- Stats Section -->
<div class="mt-24 fade-in-up delay-400">
<div data-aos="fade-in" class="text-center mb-16">
<h2 class="typography-h1 text-theme-heading mb-4">
Trusted by Thousands
</h2>
<p class="max-w-2xl mx-auto typography-body-large text-theme-body">
Join our community of learners and professionals
</p>
</div>
<div data-aos="fade-up" class="grid grid-cols-2 md:grid-cols-4 gap-8">
<div class="stat-card">
<div class="stat-value">50K+</div>
<div class="stat-label">Active Students</div>
</div>
<div class="stat-card">
<div class="stat-value">200+</div>
<div class="stat-label">Courses Available</div>
</div>
<div class="stat-card">
<div class="stat-value">95%</div>
<div class="stat-label">Job Placement Rate</div>
</div>
<div class="stat-card">
<div class="stat-value">10K+</div>
<div class="stat-label">Success Stories</div>
</div>
</div>
</div>
<!-- Popular Courses Section -->
<div class="mt-24 fade-in-up delay-500">
<div data-aos="fade-in" class="text-center mb-16">
<h2 class="typography-h1 text-theme-heading mb-4">Popular Courses</h2>
<p class="max-w-2xl mx-auto typography-body-large text-theme-body">
Discover our most enrolled courses loved by thousands of students
</p>
</div>
<div id="popular-courses-container" data-aos="fade-up" class="grid grid-cols-1 md:grid-cols-3 gap-8">
<!-- Courses will be loaded dynamically from Firebase -->
<div class="col-span-full text-center py-12">
<div class="loading-spinner mx-auto"></div>
<p class="mt-4 text-gray-600">Loading popular courses...</p>
</div>
</div>
</div>
</main>
<!-- Reviews Section -->
<section class="py-16 bg-gray-50">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="text-center mb-12">
<h2 class="text-3xl font-bold text-gray-900 mb-4">
What Our Learners Say
</h2>
<p class="text-xl text-gray-600 max-w-3xl mx-auto">
Don't just take our word for it. Here's what our community has to
say about their learning experience.
</p>
</div>
<!-- Reviews Summary -->
<div id="reviews-summary" class="mb-12"></div>
<!-- Recent Reviews -->
<div id="reviews-section">
<h3 class="text-2xl font-bold text-gray-900 mb-6">Recent Reviews</h3>
<div id="recent-reviews" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6"></div>
</div>
</div>
<!-- Reviews Summary -->
<div id="reviews-summary" class="mb-12"></div>
</section>
<!-- START BYAMN FOOTER -->
<footer data-aos-duration="1000" class="bg-neutral-900 text-white mt-24 fade-in">
<div data-aos="fade-up" class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
<div class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-8 items-start px-8">
<!-- BRAND -->
<div class="lg:w-auto md:mr-6 lg:mr-10 mb-6 lg:mb-0">
<div class="flex items-center mb-4">
<div class="flex-shrink-0 h-10 w-10">
<img src="./logo.png" alt="BYAMN Logo" class="h-full w-full object-contain" />
</div>
<h1
class="ml-3 font-bold bg-gradient-to-r from-indigo-600 to-purple-600 bg-clip-text text-transparent text-2xl">
BYAMN</h1>
</div>
<p class="text-neutral-300 max-w-md">
Empowering learners worldwide with high-quality, accessible education for the digital age.
</p>
<p class="text-sm text-zinc-400 mt-3">Made with <span aria-hidden>❤️</span> by Contributors</p>
</div>
<!-- PLATFORM -->
<div>
<h3 class="text-white text-lg font-semibold mb-4">Platform</h3>
<ul class="space-y-2 text-neutral-300">
<li><a href="./courses.html" class="hover:text-purple-400 transition-colors">Courses</a></li>
<li><a href="https://forms.gle/QzSJuSwhT6veFKpS7" class="hover:text-purple-400 transition-colors">Submit
Course</a></li>
<li><a href="./about.html" class="hover:text-purple-400 transition-colors">About Us</a></li>
<li><a href="./faq.html" class="hover:text-purple-400 transition-colors">FAQ</a></li>
<li><a href="./contact.html" class="hover:text-purple-400 transition-colors">Contact</a></li>
</ul>
</div>
<!-- NEWSLETTER & SOCIAL -->
<div class="md:col-span-1">
<h3 class="text-white text-xl font-semibold mb-3">Stay Updated</h3>
<p class="text-neutral-300 text-sm mb-4">
Get the latest course updates, learning tips, and exclusive offers delivered to your inbox.
</p>
<!-- Inline subscribe form -->
<form id="byamn-subscribe-form" class="flex gap-3 items-center" onsubmit="return false;">
<label for="byamn-email" class="sr-only">Enter your email</label>
<input id="byamn-email" type="email" required placeholder="Enter your email address"
class="flex-1 min-w-0 bg-neutral-800 text-zinc-100 placeholder:text-zinc-500 border border-neutral-700 rounded-md px-4 py-2 focus:outline-none focus:ring-2 focus:ring-purple-500 transition" />
<button type="submit" id="byamn-subscribe-btn"
class="inline-flex items-center gap-2 px-4 py-2 rounded-md bg-purple-600 text-white hover:bg-purple-500 focus:ring-2 focus:ring-purple-400 transition">
Subscribe
</button>
</form>
<p class="text-xs text-zinc-500 mt-2">By subscribing, you agree to our <a href="./privacy.html"
class="hover:text-purple-400 underline">Privacy Policy</a>.</p>
<!-- Social icons -->
<div class="flex items-center gap-4 mt-6">
<a href="https://github.com/DYHARDx/BYAMN-Learning" target="_blank" rel="noopener noreferrer"
class="p-2 rounded-full hover:text-purple-400 transition-colors" aria-label="GitHub">
<!-- GitHub SVG -->
<svg class="w-6 h-6" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
<path
d="M12 0C5.37 0 0 5.37 0 12c0 5.3 3.438 9.8 8.205 11.387.6.11.82-.26.82-.577 0-.285-.01-1.04-.015-2.04-3.338.726-4.042-1.61-4.042-1.61-.546-1.387-1.333-1.757-1.333-1.757-1.09-.745.083-.73.083-.73 1.205.085 1.838 1.238 1.838 1.238 1.07 1.834 2.807 1.304 3.492.997.108-.775.418-1.305.76-1.605-2.665-.305-5.467-1.333-5.467-5.93 0-1.31.468-2.38 1.235-3.22-.124-.303-.535-1.525.117-3.176 0 0 1.008-.322 3.3 1.23a11.52 11.52 0 0 1 3.003-.404c1.018.005 2.044.138 3.003.404 2.29-1.552 3.295-1.23 3.295-1.23.654 1.651.243 2.873.12 3.176.77.84 1.235 1.91 1.235 3.22 0 4.61-2.807 5.62-5.48 5.92.43.372.81 1.103.81 2.223 0 1.606-.015 2.9-.015 3.293 0 .32.216.694.825.576C20.565 21.796 24 17.295 24 12c0-6.63-5.37-12-12-12z" />
</svg>
</a>
<a href="https://x.com/byamn.ai" target="_blank" rel="noopener noreferrer"
class="p-2 rounded-full hover:text-purple-400 transition-colors" aria-label="X (Twitter)">
<svg class="w-6 h-6" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
<path
d="M23 3a10.9 10.9 0 0 1-3.14 1.53A4.48 4.48 0 0 0 22.43 1s-1.9.97-3.86 1.3A4.48 4.48 0 0 0 12.5 6.03V7.5A12.94 12.94 0 0 1 3 4.8s-4 9 5 13a13 13 0 0 1-7 2c9 5 20 0 20-11.5V4a7 7 0 0 0 .5-1Z" />
</svg>
</a>
<a href="https://www.linkedin.com/company/byamn/" target="_blank" rel="noopener noreferrer"
class="p-2 rounded-full hover:text-purple-400 transition-colors" aria-label="LinkedIn">
<svg class="w-6 h-6" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
<path
d="M4.98 3.5C4.98 4.88 3.88 6 2.5 6S0 4.88 0 3.5 1.12 1 2.5 1 4.98 2.12 4.98 3.5zM.5 8h4V24h-4V8zm7.5 0h3.8v2.2h.1c.5-.95 1.7-2 3.5-2 3.7 0 4.4 2.4 4.4 5.5V24h-4v-7.5c0-1.8 0-4.1-2.5-4.1-2.5 0-2.9 2-2.9 4v7.6H8V8z" />
</svg>
</a>
</div>
</div>
</div>
<div class="border-t border-neutral-800 mt-12 pt-8 flex flex-col md:flex-row justify-between items-center">
<p class="text-neutral-300">© 2026 BYAMN. All rights reserved.</p>
<div class="flex space-x-6 mt-4 md:mt-0">
<a href="https://www.linkedin.com/company/byamn/" target="_blank" rel="noopener noreferrer"
class="text-neutral-300 hover:text-white transition-colors duration-200 transform hover:scale-110">
<span class="sr-only">LinkedIn</span>
<svg class="h-6 w-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
<path fill-rule="evenodd"
d="M19 0h-14c-2.761 0-5 2.239-5 5v14c0 2.761 2.239 5 5 5h14c2.762 0 5-2.239 5-5v-14c0-2.761-2.238-5-5-5zm-11 19h-3v-11h3v11zm-1.5-12.268c-.966 0-1.75-.79-1.75-1.764s.784-1.764 1.75-1.764 1.75.79 1.75 1.764-.783 1.764-1.75 1.764zm13.5 12.268h-3v-5.604c0-3.368-4-3.113-4 0v5.604h-3v-11h3v1.765c1.396-2.586 7-2.777 7 2.476v6.759z"
clip-rule="evenodd"></path>
</svg>
</a>
<a href="https://www.facebook.com/byamn.byamn/" target="_blank" rel="noopener noreferrer"
class="text-neutral-300 hover:text-white transition-colors duration-200 transform hover:scale-110">
<span class="sr-only">Facebook</span>
<svg class="h-6 w-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
<path fill-rule="evenodd"
d="M22 12c0-5.523-4.477-10-10-10S2 6.477 2 12c0 4.991 3.657 9.128 8.438 9.878v-6.987h-2.54V12h2.54V9.797c0-2.506 1.492-3.89 3.777-3.89 1.094 0 2.238.195 2.238.195v2.46h-1.26c-1.243 0-1.63.771-1.63 1.562V12h2.773l-.443 2.89h-2.33v6.988C18.343 21.128 22 16.991 22 12z"
clip-rule="evenodd"></path>
</svg>
</a>
<a href="https://x.com/byamn.ai" target="_blank" rel="noopener noreferrer"
class="text-neutral-300 hover:text-white transition-colors duration-200 transform hover:scale-110">
<span class="sr-only">X (Twitter)</span> <svg class="h-6 w-6" fill="currentColor" viewBox="0 0 512 512"
aria-hidden="true">
<path
d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z" />
</svg>
</a>
</div>
</div>
</div>
</footer>
<!-- Tiny script: dynamic year + subscribe handler -->
<script>
// Dynamic copyright year
(function setByamnYear() {
const el = document.getElementById('byamn-year');
if (el) el.textContent = new Date().getFullYear();
})();
// Subscribe handler: will call a global subscribe function if your newsletter-subscribe.js exposes one,
// otherwise runs a minimal simulated flow.
(function wireSubscribe() {
const form = document.getElementById('byamn-subscribe-form');
const input = document.getElementById('byamn-email');
const btn = document.getElementById('byamn-subscribe-btn');
if (!form || !input || !btn) return;
form.addEventListener('submit', async function (e) {
e.preventDefault();
const email = input.value.trim();
if (!email) {
alert('Please enter a valid email.');
return;
}
// disable UI while processing
input.disabled = true;
btn.disabled = true;
try {
// If your project exposes `subscribeNewsletter(email)` (in newsletter-subscribe.js), use it.
if (typeof window.subscribeNewsletter === 'function') {
await window.subscribeNewsletter(email);
alert('Thanks! You are subscribed — we will keep you updated.');
} else {
// fallback: simulate success (replace with your real API call)
await new Promise(resolve => setTimeout(resolve, 700));
alert('Thanks! You are subscribed — we will keep you updated.');
}
input.value = '';
} catch (err) {
console.error(err);
alert('Sorry — something went wrong. Try again later.');
} finally {
input.disabled = false;
btn.disabled = false;
}
});
// allow pressing the button without enter to submit
btn.addEventListener('click', () => form.dispatchEvent(new Event('submit', { cancelable: true, bubbles: true })));
})();
</script>
<!-- END BYAMN FOOTER -->
<script>
AOS.init({
duration: 1200, // optional: animation duration in ms
once: true, // optional: run animation only once
});
</script>
<!-- Firebase and other scripts -->
<script type="module" src="./assets/js/auth-state.js"></script>
<script src="./assets/js/main.js"></script>
<!-- Accessibility Enhancement -->
<script src="./assets/js/accessibility.js"></script>
<!-- Reviews System -->
<script src="./assets/js/reviews.js"></script>
<script type="module" src="./assets/js/newsletter-subscribe.js"></script>
<script src="./assets/js/journal.js"></script>
<!-- Popular Courses Script -->
<script>
// Function to load popular courses from Firebase
async function loadPopularCourses() {
const coursesContainer = document.getElementById('popular-courses-container');
// Show loading state
coursesContainer.innerHTML = `
<div class="col-span-full text-center py-12">
<div class="loading-spinner mx-auto"></div>
<p class="mt-4 text-gray-600">Loading popular courses...</p>
</div>
`;
try {
// Check if Firebase services are available
if (typeof firebaseServices === 'undefined') {
console.log('Firebase services not available yet, waiting...');
throw new Error('Firebase services not available');
}
// Wait a bit more for full initialization
await new Promise(resolve => setTimeout(resolve, 200));
if (!firebaseServices.rtdb) {
console.log('Firebase RTDB not available yet, waiting...');
throw new Error('Firebase RTDB not available');
}
console.log('Firebase services available, fetching courses...');
// Fetch courses from Firebase
const courses = await firebaseServices.getCourses();
console.log('Courses fetched:', courses);
// Sort courses by enrollment count (descending) and take top 3
const popularCourses = courses
.sort((a, b) => (b.enrollmentCount || 0) - (a.enrollmentCount || 0))
.slice(0, 3);
console.log('Popular courses:', popularCourses);
// Render courses
if (popularCourses.length > 0) {
let coursesHTML = '';
popularCourses.forEach(course => {
// Default values for missing data
const title = course.title || 'Untitled Course';
const description = course.description || 'No description available';
const category = course.category || 'General';
const rating = course.rating || 4.5;
const thumbnail = course.thumbnail || 'https://placehold.co/400x200/6366f1/white?text=Course';
const courseId = course.id || '#';
const enrollmentCount = course.enrollmentCount || 0;
// Determine badge class based on category
let badgeClass = 'badge-primary';
if (category.toLowerCase().includes('data')) {
badgeClass = 'badge-secondary';
} else if (category.toLowerCase().includes('design')) {
badgeClass = 'badge-success';
} else if (category.toLowerCase().includes('web')) {
badgeClass = 'badge-primary';
}
coursesHTML += `
<div class="course-card">
<div class="h-48 bg-neutral-200 flex items-center justify-center">
<img
src="${thumbnail}"
alt="${title}"
class="w-full h-full object-cover"
width="600"
height="400"
loading="lazy"
onerror="this.src='https://placehold.co/400x200/6366f1/white?text=Course';"
/>
</div>
<div class="course-card-content">
<div class="flex justify-between items-start mb-3">
<span class="badge ${badgeClass}"> ${category} </span>
<div class="flex items-center text-amber-500">
<svg class="h-5 w-5" fill="currentColor" viewBox="0 0 20 20">
<path
d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"
/>
</svg>
<span class="ml-1 text-theme-body">${rating}</span>
</div>
</div>
<h3 class="course-card-title">
${title}
</h3>
<p class="course-card-description">
${description}
</p>
<div class="course-card-meta">
<span class="course-card-price">$0</span>
<a href="player.html?courseId=${courseId}" class="btn btn-secondary">Enroll Now</a>
</div>
</div>
</div>
`;
});
coursesContainer.innerHTML = coursesHTML;
} else {
// No courses found, show sample courses
console.log('No courses found, showing sample courses');
showSampleCourses(coursesContainer);
}
} catch (error) {
console.error('Error loading popular courses:', error);
console.error('Error details:', {
message: error.message,
stack: error.stack
});
// Show a more user-friendly error message with instructions
coursesContainer.innerHTML = `
<div class="col-span-full text-center py-12">
<svg class="mx-auto h-16 w-16 text-red-500" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" />
</svg>
<h3 class="mt-4 text-lg font-medium text-gray-900">Error Loading Courses</h3>
<p class="mt-2 text-gray-500">There was an error loading the course data.</p>
<div class="mt-4 text-sm text-gray-500">
<p>Please make sure you've loaded the demo data into Firebase.</p>
<p class="mt-2">You can load the demo data by opening <a href="load-demo-data.html" class="text-indigo-600 hover:text-indigo-800">load-demo-data.html</a></p>
</div>
<div class="mt-6">
<button onclick="location.reload()" class="px-4 py-2 rounded-md bg-indigo-600 hover:bg-indigo-700 text-white font-medium transition duration-300">
Retry
</button>
</div>
</div>
`;
}
}
// Function to show sample courses as fallback
function showSampleCourses(container) {
container.innerHTML = `
<div class="col-span-full text-center py-12">
<p class="text-gray-600">No courses available at the moment. Please check back later.</p>
</div>
`;
}
// Flag to prevent multiple initializations
let popularCoursesInitialized = false;
// Load popular courses when the page is ready
function initPopularCourses() {
// Prevent multiple initializations
if (popularCoursesInitialized) {
console.log('Popular courses already initialized, skipping...');
return;
}
console.log('Initializing popular courses...');
popularCoursesInitialized = true;
// Wait for Firebase to be initialized
let firebaseCheckAttempts = 0;
const maxFirebaseCheckAttempts = 15; // Maximum attempts before giving up
function waitForFirebaseAndLoad() {
console.log('Checking Firebase availability... Attempt:', firebaseCheckAttempts + 1);
// Check if Firebase services are available
if (typeof firebaseServices !== 'undefined' && firebaseServices.rtdb && typeof firebase !== 'undefined' && firebase.apps && firebase.apps.length > 0 && typeof firebaseServicesInitialized !== 'undefined' && firebaseServicesInitialized) {
console.log('Firebase services available, testing connection...');
// Test if we can actually fetch data
if (typeof firebaseServices.testConnection === 'function') {
firebaseServices.testConnection().then(success => {
if (success) {
console.log('Firebase connection test successful, loading courses...');
loadPopularCourses();
} else {
console.log('Firebase connection test failed, retrying...');
firebaseCheckAttempts++;
// If we've exceeded max attempts, show sample courses
if (firebaseCheckAttempts >= maxFirebaseCheckAttempts) {
console.log('Max Firebase check attempts reached, showing sample courses');
// Add a small delay before showing sample courses to give Firebase more time
setTimeout(() => {
const coursesContainer = document.getElementById('popular-courses-container');
showSampleCourses(coursesContainer);
}, 1000);
return;
}
// Retry after a short delay
setTimeout(waitForFirebaseAndLoad, 1500);
}
}).catch(error => {
console.log('Firebase connection test error:', error);
firebaseCheckAttempts++;
// If we've exceeded max attempts, show sample courses
if (firebaseCheckAttempts >= maxFirebaseCheckAttempts) {
console.log('Max Firebase check attempts reached, showing sample courses');
// Add a small delay before showing sample courses to give Firebase more time
setTimeout(() => {
const coursesContainer = document.getElementById('popular-courses-container');
showSampleCourses(coursesContainer);
}, 1000);
return;
}
// Retry after a short delay
setTimeout(waitForFirebaseAndLoad, 1500);
});
} else {
console.log('Firebase services available, loading courses...');
loadPopularCourses();
}
} else {
firebaseCheckAttempts++;
// If we've exceeded max attempts, show sample courses
if (firebaseCheckAttempts >= maxFirebaseCheckAttempts) {
console.log('Max Firebase check attempts reached, showing sample courses');
// Add a small delay before showing sample courses to give Firebase more time
setTimeout(() => {
const coursesContainer = document.getElementById('popular-courses-container');
showSampleCourses(coursesContainer);
}, 1000);
return;
}
console.log('Firebase not ready yet, waiting...');
// Retry after a short delay
setTimeout(waitForFirebaseAndLoad, 1000);
}
}
// Start checking for Firebase initialization after a brief delay
// This gives time for all Firebase scripts to load
setTimeout(waitForFirebaseAndLoad, 1500);
}
// Initialize on DOMContentLoaded
document.addEventListener('DOMContentLoaded', initPopularCourses);
// Also initialize on window load as fallback
window.addEventListener('load', function () {
console.log('Window loaded, ensuring popular courses are initialized...');
// Add a slight delay to ensure everything is ready
setTimeout(initPopularCourses, 500);
});
</script>
</body>
</html>