forked from codewithsadee/vcard-personal-portfolio
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
1801 lines (1680 loc) · 168 KB
/
Copy pathindex.html
File metadata and controls
1801 lines (1680 loc) · 168 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
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html lang="en" class="antialiased scroll-smooth">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Julian Reder - Computer Engineering Student @ NCSU</title>
<meta name="description" content="Julian Reder, Computer Engineering Student @ NCSU.">
<link rel="icon" type="image/png" href="pfp.webp">
<script>
(function() {
const storedTheme = localStorage.getItem("theme");
const preferredTheme = storedTheme || (window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light");
if (preferredTheme === "dark") {
document.documentElement.classList.add("dark");
} else {
document.documentElement.classList.remove("dark");
}
})();
// Set scrollRestoration to manual immediately to prevent browser layout snapping/restoration on deep links
if (window.location.hash) {
if ('scrollRestoration' in history) {
history.scrollRestoration = 'manual';
}
}
</script>
<script src="tailwind.js"></script>
<script>
tailwind.config = {
darkMode: 'class',
theme: {
extend: {
colors: {
'global-bg': 'var(--color-global-bg)',
'global-text': 'var(--color-global-text)',
'link': 'var(--color-link)',
'accent': 'var(--color-accent)',
'accent-2': 'var(--color-accent-2)',
'quote': 'var(--color-quote)',
}
}
}
};
</script>
<link href="font.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/devicons/devicon@latest/devicon.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
<style>
:root {
--color-global-bg: oklch(98.48% 0 0);
--color-global-text: oklch(26.99% .0096 235.05);
--color-link: oklch(55.44% .0431 185.69);
--color-accent: oklch(50.2% .27 29);
--color-accent-2: oklch(18.15% 0 0);
--color-quote: oklch(55.27% .195 19.06);
}
.dark {
--color-global-bg: oklch(23.64% .0045 248);
--color-global-text: oklch(83.54% 0 264);
--color-link: oklch(70.44% .1133 349);
--color-accent: oklch(73.5% .22 199);
--color-accent-2: oklch(94.66% 0 0);
--color-quote: oklch(94.8% .106 136.49);
}
body {
background-color: var(--color-global-bg);
color: var(--color-global-text);
}
.title {
color: var(--color-accent);
}
.filter-btn[aria-pressed="true"] {
background-color: var(--color-accent) !important;
color: var(--color-global-bg) !important;
border-color: var(--color-accent) !important;
}
.filter-btn[aria-pressed="true"]:hover {
opacity: 0.9;
}
input:focus, textarea:focus {
border-color: var(--color-accent) !important;
}
/* Smooth transitions when switching themes */
html.theme-transitioning,
html.theme-transitioning body,
html.theme-transitioning *,
html.theme-transitioning *::before,
html.theme-transitioning *::after {
transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease, text-decoration-color 0.3s ease !important;
}
/* Make copy link buttons visible always on mobile/touch screens (less than md size) */
@media (max-width: 767px) {
.section-copy-link,
.experience-copy-link,
.skill-copy-link {
display: inline-flex !important;
}
}
</style>
</head>
<body class="bg-global-bg text-global-text min-h-screen font-mono text-sm font-normal antialiased selection:bg-zinc-700 dark:selection:bg-zinc-300 selection:text-white dark:selection:text-zinc-950 relative overflow-x-hidden">
<canvas id="interactive-bg" class="fixed inset-0 w-full h-full pointer-events-none z-0" aria-hidden="true"></canvas>
<div class="relative z-10 max-w-3xl mx-auto px-4 sm:px-8 py-12 md:py-20">
<header class="mb-16">
<div class="flex items-center gap-6 mb-6">
<img src="pfp.webp" alt="Julian Reder" class="w-16 h-16 rounded-none object-cover">
<div>
<h1 class="text-2xl font-bold font-mono tracking-tight text-accent-2">Julian Reder</h1>
<p id="tagline" class="font-mono text-zinc-500 dark:text-zinc-400 mt-0.5 h-6 overflow-hidden relative">is a Computer Engineering and Statistics student @ NCSU</p>
</div>
</div>
<div class="flex flex-wrap items-center gap-5 text-sm font-mono">
<a href="https://github.com/quantumbagel" target="_blank" rel="noopener noreferrer" class="text-zinc-500 hover:text-accent dark:hover:text-accent transition-colors" aria-label="GitHub">
GitHub/<i class="bi bi-github inline-block align-middle pointer-events-none ml-0.5"></i>
</a>
<a href="https://www.linkedin.com/in/julian-reder-nc/" target="_blank" rel="noopener noreferrer" class="text-zinc-500 hover:text-accent dark:hover:text-accent transition-colors" aria-label="LinkedIn">
LinkedIn/<i class="bi bi-linkedin inline-block align-middle pointer-events-none ml-0.5"></i>
</a>
<a href="https://discordapp.com/users/897146430664355850" target="_blank" rel="noopener noreferrer" class="text-zinc-500 hover:text-accent dark:hover:text-accent transition-colors" aria-label="Discord">
Discord/<i class="bi bi-discord inline-block align-middle pointer-events-none ml-0.5"></i>
</a>
<a href="/resume" target="_blank" rel="noopener noreferrer" class="text-zinc-500 hover:text-accent dark:hover:text-accent transition-colors" aria-label="Resume">
Resume/<i class="bi bi-file-earmark-text inline-block align-middle pointer-events-none ml-0.5"></i>
</a>
<button id="theme-toggle" class="text-zinc-500 hover:text-accent transition-colors cursor-pointer" aria-label="Toggle Theme">
Theme/<i id="theme-toggle-icon" class="bi bi-moon inline-block align-middle pointer-events-none ml-0.5"></i>
</button>
<button id="particle-toggle" class="text-zinc-500 hover:text-accent transition-colors cursor-pointer" aria-label="Background: On">
Background/○
</button>
</div>
</header>
<main class="space-y-20">
<section id="about">
<h2 class="title group flex items-center gap-2 font-bold font-mono tracking-tight text-xl mb-4">
<span>About</span>
<button class="section-copy-link hidden group-hover:inline-flex items-center text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-section-id="about" title="Copy link to Section">
<i class="bi bi-link-45deg"></i>
</button>
</h2>
<div class="text-sm text-global-text leading-relaxed">
<p class='mb-4 last:mb-0'>Hello! I'm <strong class='text-gray-800 dark:text-white'>Julian Reder</strong>, a programmer and student at North Carolina State University. I've had a passion for learning and developing my entire life and wanted to collect my projects and skills in one centralized place. This website has a brief overview of my projects and skillset, as well as a contact form. It's also a template, see the project on GitHub to see how to use it yourself ^w^</p><p class='mb-4 last:mb-0'>Hopefully you find something interesting here! Feel free to reach out if you want to chat about anything or have questions about my projects or experience.</p>
</div>
</section>
<section id="experience">
<h2 class="title group flex items-center gap-2 font-bold font-mono tracking-tight text-xl mb-6">
<span>Experience</span>
<button class="section-copy-link hidden group-hover:inline-flex items-center text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-section-id="experience" title="Copy link to Section">
<i class="bi bi-link-45deg"></i>
</button>
</h2>
<div>
<div class="relative pl-8 mb-8 border-l border-zinc-300 dark:border-zinc-700 last:mb-0">
<div class="absolute w-2.5 h-2.5 bg-accent -left-[5px] top-1.5"></div>
<div class="flex items-center gap-2 group"><h3 class="text-base font-semibold font-mono text-zinc-900 dark:text-zinc-100 cursor-pointer hover:text-accent dark:hover:text-accent transition-colors" onclick="window.location.href='https://advisor.ml.com/sites/nc/raleigh-nc/bellbellcronlund'">Financial Services Technical Intern, The Bell, Bell & Cronlund Group @ Merrill Lynch Wealth Management</h3><button class="experience-copy-link hidden group-hover:block text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-link="https://advisor.ml.com/sites/nc/raleigh-nc/bellbellcronlund" title="Copy link"><i class="bi bi-link-45deg inline-block align-middle"></i></button></div>
<div class="text-sm font-mono text-zinc-500 dark:text-zinc-400 mt-1 mb-2 flex items-center"><i class="bi bi-clock mr-1 inline-block align-middle"></i>May 2026 - Present</div>
<p class="text-sm text-zinc-600 dark:text-zinc-300 leading-relaxed">This summer, I am working with the Bell, Bell, and Cronlund Group within Merrill to improve their internal calculations platform responsible for $500M+ in assets under management.</p>
</div>
<div class="relative pl-8 mb-8 border-l border-zinc-300 dark:border-zinc-700 last:mb-0">
<div class="absolute w-2.5 h-2.5 bg-accent -left-[5px] top-1.5"></div>
<div class="flex items-center gap-2 group"><h3 class="text-base font-semibold font-mono text-zinc-900 dark:text-zinc-100 cursor-pointer hover:text-accent dark:hover:text-accent transition-colors" onclick="window.location.href='https://ncsu.edu'">North Carolina State University (GPA: 4.0)</h3><button class="experience-copy-link hidden group-hover:block text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-link="https://ncsu.edu" title="Copy link"><i class="bi bi-link-45deg inline-block align-middle"></i></button></div>
<div class="text-sm font-mono text-zinc-500 dark:text-zinc-400 mt-1 mb-2 flex items-center"><i class="bi bi-clock mr-1 inline-block align-middle"></i>Fall 2025 - Present</div>
<p class="text-sm text-zinc-600 dark:text-zinc-300 leading-relaxed">I am currently enrolled in the Computer Engineering and Statistics departments at North Carolina State University. I am pursuing a Bachelor's in Statistics and Computer Engineering.</p>
</div>
<div class="relative pl-8 mb-8 border-l border-zinc-300 dark:border-zinc-700 last:mb-0">
<div class="absolute w-2.5 h-2.5 bg-accent -left-[5px] top-1.5"></div>
<div class="flex items-center gap-2 group"><h3 class="text-base font-semibold font-mono text-zinc-900 dark:text-zinc-100 cursor-pointer hover:text-accent dark:hover:text-accent transition-colors" onclick="window.location.href='https://aerpaw.org'">Developer @ AERPAW</h3><button class="experience-copy-link hidden group-hover:block text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-link="https://aerpaw.org" title="Copy link"><i class="bi bi-link-45deg inline-block align-middle"></i></button></div>
<div class="text-sm font-mono text-zinc-500 dark:text-zinc-400 mt-1 mb-2 flex items-center"><i class="bi bi-clock mr-1 inline-block align-middle"></i>Summer 2023 - Present</div>
<p class="text-sm text-zinc-600 dark:text-zinc-300 leading-relaxed">I have had the pleasure to work with Dr. Mihail Sichitiu at the Aerial Experimentation and Research Platform for Advanced Wireless at North Carolina State University for a couple of years now. I have built several interesting projects including a plane tracker and a drone flight recorder.</p>
</div>
<div class="relative pl-8 mb-8 border-l border-zinc-300 dark:border-zinc-700 last:mb-0">
<div class="absolute w-2.5 h-2.5 bg-accent -left-[5px] top-1.5"></div>
<div class="flex items-center gap-2 group"><h3 class="text-base font-semibold font-mono text-zinc-900 dark:text-zinc-100 cursor-pointer hover:text-accent dark:hover:text-accent transition-colors" onclick="window.location.href='https://waketech.edu'">Wake Tech Community College: (GPA: 3.8)</h3><button class="experience-copy-link hidden group-hover:block text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-link="https://waketech.edu" title="Copy link"><i class="bi bi-link-45deg inline-block align-middle"></i></button></div>
<div class="text-sm font-mono text-zinc-500 dark:text-zinc-400 mt-1 mb-2 flex items-center"><i class="bi bi-clock mr-1 inline-block align-middle"></i>Fall 2023 - Spring 2025</div>
<p class="text-sm text-zinc-600 dark:text-zinc-300 leading-relaxed">This was my first experience taking college coursework. I graduated with multiple appearances on the Dean's List, membership in the Beta Alpha chapter of the Phi Theta Kappa honor society, and an Associate in Science degree.</p>
</div>
</div>
</section>
<section id="projects">
<h2 class="title group flex items-center gap-2 font-bold font-mono tracking-tight text-xl mb-6">
<span>Projects</span>
<button class="section-copy-link hidden group-hover:inline-flex items-center text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-section-id="projects" title="Copy link to Section">
<i class="bi bi-link-45deg"></i>
</button>
</h2>
<div class="flex flex-col md:flex-row md:items-center justify-between gap-4 mb-6">
<div class="flex flex-wrap gap-2" id="project-filters">
<button type="button" aria-pressed="true" class="px-3 py-1 text-sm font-mono rounded-none border border-zinc-300 dark:border-zinc-700 bg-transparent text-zinc-700 dark:text-zinc-300 hover:bg-zinc-100 dark:hover:bg-zinc-800 filter-btn transition-colors" data-filter="all">
All
</button>
<button type="button" aria-pressed="false" class="px-3 py-1 text-sm font-mono rounded-none border border-zinc-300 dark:border-zinc-700 bg-transparent text-zinc-700 dark:text-zinc-300 hover:bg-zinc-100 dark:hover:bg-zinc-800 filter-btn transition-colors" data-filter="aerpaw">
AERPAW
</button>
<button type="button" aria-pressed="false" class="px-3 py-1 text-sm font-mono rounded-none border border-zinc-300 dark:border-zinc-700 bg-transparent text-zinc-700 dark:text-zinc-300 hover:bg-zinc-100 dark:hover:bg-zinc-800 filter-btn transition-colors" data-filter="ml">
Merrill Lynch
</button>
<button type="button" aria-pressed="false" class="px-3 py-1 text-sm font-mono rounded-none border border-zinc-300 dark:border-zinc-700 bg-transparent text-zinc-700 dark:text-zinc-300 hover:bg-zinc-100 dark:hover:bg-zinc-800 filter-btn transition-colors" data-filter="discord-bots">
Discord Bots
</button>
<button type="button" aria-pressed="false" class="px-3 py-1 text-sm font-mono rounded-none border border-zinc-300 dark:border-zinc-700 bg-transparent text-zinc-700 dark:text-zinc-300 hover:bg-zinc-100 dark:hover:bg-zinc-800 filter-btn transition-colors" data-filter="solo">
Solo Projects
</button>
<button type="button" aria-pressed="false" class="px-3 py-1 text-sm font-mono rounded-none border border-zinc-300 dark:border-zinc-700 bg-transparent text-zinc-700 dark:text-zinc-300 hover:bg-zinc-100 dark:hover:bg-zinc-800 filter-btn transition-colors" data-filter="collabs">
Collaborations
</button>
</div>
<div class="relative w-full md:w-64">
<input type="text" id="project-search" placeholder="Search projects..." class="w-full px-3 py-1 text-sm font-mono bg-transparent border border-zinc-300 dark:border-zinc-700 rounded-none focus:outline-none focus:border-accent dark:focus:border-accent transition-colors text-zinc-900 dark:text-zinc-100 placeholder-zinc-400 dark:placeholder-zinc-500">
</div>
</div>
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4" id="project-grid">
<div id="project-pyaerial" class="project-card group relative flex flex-col bg-transparent border border-zinc-300 dark:border-zinc-700 rounded-none hover:border-accent dark:hover:border-accent transition-colors overflow-hidden" data-category="aerpaw">
<img src="https://placehold.co/400x250/3498DB/FFFFFF?text=PyAerial" alt="PyAerial" loading="lazy" decoding="async" class="w-full h-48 object-cover border-b border-zinc-300 dark:border-zinc-700">
<div class="p-5 flex flex-col flex-grow">
<div class="flex items-start justify-between">
<h3 class="text-base font-semibold font-mono text-zinc-900 dark:text-zinc-100 mb-1 flex-1">PyAerial</h3>
<button class="copy-link-btn ml-2 text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors flex items-center justify-center" data-project-id="project-pyaerial" title="Copy link to project">
<i class="bi bi-link-45deg"></i>
</button>
</div>
<span class="text-xs font-medium font-mono text-zinc-500 dark:text-zinc-400 mb-2 block flex items-center"><i class="bi bi-clock mr-1 inline-block align-middle"></i>2024 - Present • AERPAW</span>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4 flex-grow leading-relaxed">A high-performance ADS-B and Mode-S aircraft tracking system developed for the AERPAW research platform.</p>
<div>
<div class="flex flex-wrap mt-3"><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Python</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Kafka</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">MongoDB</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">RTL-SDR</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Docker</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">ADS-B / Mode-S</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">OpenAPI</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Shapely</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Geospatial Analysis</span></div>
<a href="https://github.com/quantumbagel/PyAerial" target="_blank" rel="noopener noreferrer" class="inline-flex items-center text-sm font-medium font-mono text-zinc-900 dark:text-zinc-100 hover:text-accent dark:hover:text-accent transition-colors mt-3">View Project <span class="ml-1 text-xs">↗</span></a>
<button class="project-details-btn text-sm font-mono text-zinc-500 hover:text-accent dark:hover:text-accent transition-colors mt-3 ml-3" data-modal-id="modal-project-pyaerial">More Info →</button>
</div>
</div>
</div>
<div id="project-piranha-unmaintained" class="project-card group relative flex flex-col bg-transparent border border-zinc-300 dark:border-zinc-700 rounded-none hover:border-accent dark:hover:border-accent transition-colors overflow-hidden" data-category="discord-bots">
<img src="https://placehold.co/400x250/2ECC71/FFFFFF?text=Piranha" alt="Piranha [unmaintained]" loading="lazy" decoding="async" class="w-full h-48 object-cover border-b border-zinc-300 dark:border-zinc-700">
<div class="p-5 flex flex-col flex-grow">
<div class="flex items-start justify-between">
<h3 class="text-base font-semibold font-mono text-zinc-900 dark:text-zinc-100 mb-1 flex-1">Piranha [unmaintained]</h3>
<button class="copy-link-btn ml-2 text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors flex items-center justify-center" data-project-id="project-piranha-unmaintained" title="Copy link to project">
<i class="bi bi-link-45deg"></i>
</button>
</div>
<span class="text-xs font-medium font-mono text-zinc-500 dark:text-zinc-400 mb-2 block flex items-center"><i class="bi bi-clock mr-1 inline-block align-middle"></i>2022 • Discord Bots</span>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4 flex-grow leading-relaxed">A feature-rich Discord bot that integrates the Stockfish chess engine to let users play chess directly in chat.</p>
<div>
<div class="flex flex-wrap mt-3"><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Python</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">discord.py</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Stockfish</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Docker</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Algorithms</span></div>
<button class="project-details-btn text-sm font-mono text-zinc-500 hover:text-accent dark:hover:text-accent transition-colors mt-3 " data-modal-id="modal-project-piranha-unmaintained">More Info →</button>
</div>
</div>
</div>
<div id="project-finitecraft" class="project-card group relative flex flex-col bg-transparent border border-zinc-300 dark:border-zinc-700 rounded-none hover:border-accent dark:hover:border-accent transition-colors overflow-hidden" data-category="collabs">
<img src="https://placehold.co/400x250/E74C3C/FFFFFF?text=finiteCraft" alt="finiteCraft" loading="lazy" decoding="async" class="w-full h-48 object-cover border-b border-zinc-300 dark:border-zinc-700">
<div class="p-5 flex flex-col flex-grow">
<div class="flex items-start justify-between">
<h3 class="text-base font-semibold font-mono text-zinc-900 dark:text-zinc-100 mb-1 flex-1">finiteCraft</h3>
<button class="copy-link-btn ml-2 text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors flex items-center justify-center" data-project-id="project-finitecraft" title="Copy link to project">
<i class="bi bi-link-45deg"></i>
</button>
</div>
<span class="text-xs font-medium font-mono text-zinc-500 dark:text-zinc-400 mb-2 block flex items-center"><i class="bi bi-clock mr-1 inline-block align-middle"></i>2024 [unmaintained] • Collaborations</span>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4 flex-grow leading-relaxed">A high-performance scraping and recipe discovery pathfinder for the Infinite Craft game.</p>
<div>
<div class="flex flex-wrap mt-3"><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Python</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Playwright / Selenium</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Web Scraping</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Proxy Rotation</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">MongoDB</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Pathfinding Algorithms</span></div>
<a href="https://github.com/finiteCraft/finiteCraft" target="_blank" rel="noopener noreferrer" class="inline-flex items-center text-sm font-medium font-mono text-zinc-900 dark:text-zinc-100 hover:text-accent dark:hover:text-accent transition-colors mt-3">View Project <span class="ml-1 text-xs">↗</span></a>
<button class="project-details-btn text-sm font-mono text-zinc-500 hover:text-accent dark:hover:text-accent transition-colors mt-3 ml-3" data-modal-id="modal-project-finitecraft">More Info →</button>
</div>
</div>
</div>
<div id="project-dronetracker" class="project-card group relative flex flex-col bg-transparent border border-zinc-300 dark:border-zinc-700 rounded-none hover:border-accent dark:hover:border-accent transition-colors overflow-hidden" data-category="aerpaw">
<img src="https://placehold.co/400x250/9B59B6/FFFFFF?text=DroneTracker" alt="DroneTracker" loading="lazy" decoding="async" class="w-full h-48 object-cover border-b border-zinc-300 dark:border-zinc-700">
<div class="p-5 flex flex-col flex-grow">
<div class="flex items-start justify-between">
<h3 class="text-base font-semibold font-mono text-zinc-900 dark:text-zinc-100 mb-1 flex-1">DroneTracker</h3>
<button class="copy-link-btn ml-2 text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors flex items-center justify-center" data-project-id="project-dronetracker" title="Copy link to project">
<i class="bi bi-link-45deg"></i>
</button>
</div>
<span class="text-xs font-medium font-mono text-zinc-500 dark:text-zinc-400 mb-2 block flex items-center"><i class="bi bi-clock mr-1 inline-block align-middle"></i>2024 - Present • AERPAW</span>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4 flex-grow leading-relaxed">A real-time computer vision and PTZ camera tracking system for AERPAW drones.</p>
<div>
<div class="flex flex-wrap mt-3"><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Python</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">VAPIX (PTZ Camera API)</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Kafka</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Docker</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Trigonometry</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Linux/Unix</span></div>
<a href="https://github.com/quantumbagel/DroneTracker" target="_blank" rel="noopener noreferrer" class="inline-flex items-center text-sm font-medium font-mono text-zinc-900 dark:text-zinc-100 hover:text-accent dark:hover:text-accent transition-colors mt-3">View Project <span class="ml-1 text-xs">↗</span></a>
<button class="project-details-btn text-sm font-mono text-zinc-500 hover:text-accent dark:hover:text-accent transition-colors mt-3 ml-3" data-modal-id="modal-project-dronetracker">More Info →</button>
</div>
</div>
</div>
<div id="project-triggered" class="project-card group relative flex flex-col bg-transparent border border-zinc-300 dark:border-zinc-700 rounded-none hover:border-accent dark:hover:border-accent transition-colors overflow-hidden" data-category="discord-bots">
<img src="https://placehold.co/400x250/F1C40F/FFFFFF?text=Triggered" alt="Triggered" loading="lazy" decoding="async" class="w-full h-48 object-cover border-b border-zinc-300 dark:border-zinc-700">
<div class="p-5 flex flex-col flex-grow">
<div class="flex items-start justify-between">
<h3 class="text-base font-semibold font-mono text-zinc-900 dark:text-zinc-100 mb-1 flex-1">Triggered</h3>
<button class="copy-link-btn ml-2 text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors flex items-center justify-center" data-project-id="project-triggered" title="Copy link to project">
<i class="bi bi-link-45deg"></i>
</button>
</div>
<span class="text-xs font-medium font-mono text-zinc-500 dark:text-zinc-400 mb-2 block flex items-center"><i class="bi bi-clock mr-1 inline-block align-middle"></i>2023 - 2024 [unmaintained] • Discord Bots</span>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4 flex-grow leading-relaxed">A programmable IFTTT-style automation and utility bot for Discord server administrators.</p>
<div>
<div class="flex flex-wrap mt-3"><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Python</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">discord.py</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">MySQL</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Database Design</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">API Integration</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">OpenAPI</span></div>
<a href="https://github.com/quantumbagel/Triggered" target="_blank" rel="noopener noreferrer" class="inline-flex items-center text-sm font-medium font-mono text-zinc-900 dark:text-zinc-100 hover:text-accent dark:hover:text-accent transition-colors mt-3">View Project <span class="ml-1 text-xs">↗</span></a>
<button class="project-details-btn text-sm font-mono text-zinc-500 hover:text-accent dark:hover:text-accent transition-colors mt-3 ml-3" data-modal-id="modal-project-triggered">More Info →</button>
</div>
</div>
</div>
<div id="project-strife" class="project-card group relative flex flex-col bg-transparent border border-zinc-300 dark:border-zinc-700 rounded-none hover:border-accent dark:hover:border-accent transition-colors overflow-hidden" data-category="discord-bots">
<img src="https://placehold.co/400x250/F1C40F/FFFFFF?text=Strife" alt="Strife" loading="lazy" decoding="async" class="w-full h-48 object-cover border-b border-zinc-300 dark:border-zinc-700">
<div class="p-5 flex flex-col flex-grow">
<div class="flex items-start justify-between">
<h3 class="text-base font-semibold font-mono text-zinc-900 dark:text-zinc-100 mb-1 flex-1">Strife</h3>
<button class="copy-link-btn ml-2 text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors flex items-center justify-center" data-project-id="project-strife" title="Copy link to project">
<i class="bi bi-link-45deg"></i>
</button>
</div>
<span class="text-xs font-medium font-mono text-zinc-500 dark:text-zinc-400 mb-2 block flex items-center"><i class="bi bi-clock mr-1 inline-block align-middle"></i>2026 - Present • Discord Bots</span>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4 flex-grow leading-relaxed">A high-performance Discord bot hosting interactive multiplayer games with a custom interaction router, session lifecycle management, and PostgreSQL database integration.</p>
<div>
<div class="flex flex-wrap mt-3"><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Python</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">discord.py</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">PostgreSQL</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Database Design</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Pydantic</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Software Architecture</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Docker</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">asyncpg</span></div>
<button class="project-details-btn text-sm font-mono text-zinc-500 hover:text-accent dark:hover:text-accent transition-colors mt-3 " data-modal-id="modal-project-strife">More Info →</button>
</div>
</div>
</div>
<div id="project-statify" class="project-card group relative flex flex-col bg-transparent border border-zinc-300 dark:border-zinc-700 rounded-none hover:border-accent dark:hover:border-accent transition-colors overflow-hidden" data-category="solo">
<img src="https://placehold.co/400x250/3498DB/FFFFFF?text=Statify" alt="Statify" loading="lazy" decoding="async" class="w-full h-48 object-cover border-b border-zinc-300 dark:border-zinc-700">
<div class="p-5 flex flex-col flex-grow">
<div class="flex items-start justify-between">
<h3 class="text-base font-semibold font-mono text-zinc-900 dark:text-zinc-100 mb-1 flex-1">Statify</h3>
<button class="copy-link-btn ml-2 text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors flex items-center justify-center" data-project-id="project-statify" title="Copy link to project">
<i class="bi bi-link-45deg"></i>
</button>
</div>
<span class="text-xs font-medium font-mono text-zinc-500 dark:text-zinc-400 mb-2 block flex items-center"><i class="bi bi-clock mr-1 inline-block align-middle"></i>2022 [unmaintained] • Solo Projects</span>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4 flex-grow leading-relaxed">A server-side Minecraft plugin for advanced statistic aggregation and database-driven leaderboards.</p>
<div>
<div class="flex flex-wrap mt-3"><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Java</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">SpigotMC API</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">MySQL / PostgreSQL</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Database Design</span></div>
<a href="https://github.com/quantumbagel/Statify" target="_blank" rel="noopener noreferrer" class="inline-flex items-center text-sm font-medium font-mono text-zinc-900 dark:text-zinc-100 hover:text-accent dark:hover:text-accent transition-colors mt-3">View Project <span class="ml-1 text-xs">↗</span></a>
<button class="project-details-btn text-sm font-mono text-zinc-500 hover:text-accent dark:hover:text-accent transition-colors mt-3 ml-3" data-modal-id="modal-project-statify">More Info →</button>
</div>
</div>
</div>
<div id="project-molotov" class="project-card group relative flex flex-col bg-transparent border border-zinc-300 dark:border-zinc-700 rounded-none hover:border-accent dark:hover:border-accent transition-colors overflow-hidden" data-category="solo">
<img src="https://placehold.co/400x250/2ECC71/FFFFFF?text=Molotov" alt="Molotov" loading="lazy" decoding="async" class="w-full h-48 object-cover border-b border-zinc-300 dark:border-zinc-700">
<div class="p-5 flex flex-col flex-grow">
<div class="flex items-start justify-between">
<h3 class="text-base font-semibold font-mono text-zinc-900 dark:text-zinc-100 mb-1 flex-1">Molotov</h3>
<button class="copy-link-btn ml-2 text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors flex items-center justify-center" data-project-id="project-molotov" title="Copy link to project">
<i class="bi bi-link-45deg"></i>
</button>
</div>
<span class="text-xs font-medium font-mono text-zinc-500 dark:text-zinc-400 mb-2 block flex items-center"><i class="bi bi-clock mr-1 inline-block align-middle"></i>2022 • Solo Projects</span>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4 flex-grow leading-relaxed">A screen-scraping and automated keyboard injection bot for the jklm.fun word game Bomb Party.</p>
<div>
<div class="flex flex-wrap mt-3"><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Python</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">PyAutoGUI</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Image Manipulation</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Algorithms</span></div>
<a href="https://github.com/quantumbagel/Molotov" target="_blank" rel="noopener noreferrer" class="inline-flex items-center text-sm font-medium font-mono text-zinc-900 dark:text-zinc-100 hover:text-accent dark:hover:text-accent transition-colors mt-3">View Project <span class="ml-1 text-xs">↗</span></a>
<button class="project-details-btn text-sm font-mono text-zinc-500 hover:text-accent dark:hover:text-accent transition-colors mt-3 ml-3" data-modal-id="modal-project-molotov">More Info →</button>
</div>
</div>
</div>
<div id="project-discord-py-template" class="project-card group relative flex flex-col bg-transparent border border-zinc-300 dark:border-zinc-700 rounded-none hover:border-accent dark:hover:border-accent transition-colors overflow-hidden" data-category="discord-bots">
<img src="https://placehold.co/400x250/9B59B6/FFFFFF?text=discord.py+template" alt="discord.py-template" loading="lazy" decoding="async" class="w-full h-48 object-cover border-b border-zinc-300 dark:border-zinc-700">
<div class="p-5 flex flex-col flex-grow">
<div class="flex items-start justify-between">
<h3 class="text-base font-semibold font-mono text-zinc-900 dark:text-zinc-100 mb-1 flex-1">discord.py-template</h3>
<button class="copy-link-btn ml-2 text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors flex items-center justify-center" data-project-id="project-discord-py-template" title="Copy link to project">
<i class="bi bi-link-45deg"></i>
</button>
</div>
<span class="text-xs font-medium font-mono text-zinc-500 dark:text-zinc-400 mb-2 block flex items-center"><i class="bi bi-clock mr-1 inline-block align-middle"></i>2025 - Present • Discord Bots</span>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4 flex-grow leading-relaxed">A feature-rich template for developing modern discord.py bots.</p>
<div>
<div class="flex flex-wrap mt-3"><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Python</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">discord.py</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">YAML</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Software Architecture</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Docker</span></div>
<a href="https://github.com/quantumbagel/discord.py-template" target="_blank" rel="noopener noreferrer" class="inline-flex items-center text-sm font-medium font-mono text-zinc-900 dark:text-zinc-100 hover:text-accent dark:hover:text-accent transition-colors mt-3">View Project <span class="ml-1 text-xs">↗</span></a>
<button class="project-details-btn text-sm font-mono text-zinc-500 hover:text-accent dark:hover:text-accent transition-colors mt-3 ml-3" data-modal-id="modal-project-discord-py-template">More Info →</button>
</div>
</div>
</div>
<div id="project-chess-challenge" class="project-card group relative flex flex-col bg-transparent border border-zinc-300 dark:border-zinc-700 rounded-none hover:border-accent dark:hover:border-accent transition-colors overflow-hidden" data-category="collabs">
<img src="https://placehold.co/400x250/1ABC9C/FFFFFF?text=Chess-Challenge" alt="Chess-Challenge" loading="lazy" decoding="async" class="w-full h-48 object-cover border-b border-zinc-300 dark:border-zinc-700">
<div class="p-5 flex flex-col flex-grow">
<div class="flex items-start justify-between">
<h3 class="text-base font-semibold font-mono text-zinc-900 dark:text-zinc-100 mb-1 flex-1">Chess-Challenge</h3>
<button class="copy-link-btn ml-2 text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors flex items-center justify-center" data-project-id="project-chess-challenge" title="Copy link to project">
<i class="bi bi-link-45deg"></i>
</button>
</div>
<span class="text-xs font-medium font-mono text-zinc-500 dark:text-zinc-400 mb-2 block flex items-center"><i class="bi bi-clock mr-1 inline-block align-middle"></i>2023 [unmaintained] • Collaborations</span>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4 flex-grow leading-relaxed">A compact C# chess bot developed for Sebastian Lague's tiny chess bot competition.</p>
<div>
<div class="flex flex-wrap mt-3"><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">C#</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">.NET</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Algorithms</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Optimization</span></div>
<a href="https://github.com/quantumbagel/Chess-Challenge" target="_blank" rel="noopener noreferrer" class="inline-flex items-center text-sm font-medium font-mono text-zinc-900 dark:text-zinc-100 hover:text-accent dark:hover:text-accent transition-colors mt-3">View Project <span class="ml-1 text-xs">↗</span></a>
<button class="project-details-btn text-sm font-mono text-zinc-500 hover:text-accent dark:hover:text-accent transition-colors mt-3 ml-3" data-modal-id="modal-project-chess-challenge">More Info →</button>
</div>
</div>
</div>
<div id="project-aerpawlib" class="project-card group relative flex flex-col bg-transparent border border-zinc-300 dark:border-zinc-700 rounded-none hover:border-accent dark:hover:border-accent transition-colors overflow-hidden" data-category="aerpaw">
<img src="https://placehold.co/400x250/F1C40F/FFFFFF?text=aerpawlib" alt="aerpawlib" loading="lazy" decoding="async" class="w-full h-48 object-cover border-b border-zinc-300 dark:border-zinc-700">
<div class="p-5 flex flex-col flex-grow">
<div class="flex items-start justify-between">
<h3 class="text-base font-semibold font-mono text-zinc-900 dark:text-zinc-100 mb-1 flex-1">aerpawlib</h3>
<button class="copy-link-btn ml-2 text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors flex items-center justify-center" data-project-id="project-aerpawlib" title="Copy link to project">
<i class="bi bi-link-45deg"></i>
</button>
</div>
<span class="text-xs font-medium font-mono text-zinc-500 dark:text-zinc-400 mb-2 block flex items-center"><i class="bi bi-clock mr-1 inline-block align-middle"></i>2025 - Present • AERPAW</span>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4 flex-grow leading-relaxed">A high-level MAVLink and MAVSDK abstraction framework for drone flight experimentation.</p>
<div>
<div class="flex flex-wrap mt-3"><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Python</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">MAVSDK / MAVLink</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">ArduPilot</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Drone Flight Control</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">API Design</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Network Protocols</span></div>
<a href="https://github.com/aerpaw/aerpawlib" target="_blank" rel="noopener noreferrer" class="inline-flex items-center text-sm font-medium font-mono text-zinc-900 dark:text-zinc-100 hover:text-accent dark:hover:text-accent transition-colors mt-3">View Project <span class="ml-1 text-xs">↗</span></a>
<button class="project-details-btn text-sm font-mono text-zinc-500 hover:text-accent dark:hover:text-accent transition-colors mt-3 ml-3" data-modal-id="modal-project-aerpawlib">More Info →</button>
</div>
</div>
</div>
<div id="project-ml-ticker" class="project-card group relative flex flex-col bg-transparent border border-zinc-300 dark:border-zinc-700 rounded-none hover:border-accent dark:hover:border-accent transition-colors overflow-hidden" data-category="ml">
<img src="https://placehold.co/400x250/34495E/FFFFFF?text=ML-Ticker" alt="ML-Ticker" loading="lazy" decoding="async" class="w-full h-48 object-cover border-b border-zinc-300 dark:border-zinc-700">
<div class="p-5 flex flex-col flex-grow">
<div class="flex items-start justify-between">
<h3 class="text-base font-semibold font-mono text-zinc-900 dark:text-zinc-100 mb-1 flex-1">ML-Ticker</h3>
<button class="copy-link-btn ml-2 text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors flex items-center justify-center" data-project-id="project-ml-ticker" title="Copy link to project">
<i class="bi bi-link-45deg"></i>
</button>
</div>
<span class="text-xs font-medium font-mono text-zinc-500 dark:text-zinc-400 mb-2 block flex items-center"><i class="bi bi-clock mr-1 inline-block align-middle"></i>2026 - Present • Merrill Lynch</span>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4 flex-grow leading-relaxed">A financial query utility with a sandboxed formula engine, developed for Merrill Lynch.</p>
<div>
<div class="flex flex-wrap mt-3"><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Python</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">FactSet FQL API</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Pydantic</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">openpyxl (Excel)</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">DAGs / Dependency Graphs</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">CLI Development</span></div>
<a href="https://github.com/quantumbagel/ML-Ticker" target="_blank" rel="noopener noreferrer" class="inline-flex items-center text-sm font-medium font-mono text-zinc-900 dark:text-zinc-100 hover:text-accent dark:hover:text-accent transition-colors mt-3">View Project <span class="ml-1 text-xs">↗</span></a>
<button class="project-details-btn text-sm font-mono text-zinc-500 hover:text-accent dark:hover:text-accent transition-colors mt-3 ml-3" data-modal-id="modal-project-ml-ticker">More Info →</button>
</div>
</div>
</div>
<div id="project-portfolio-website-v3" class="project-card group relative flex flex-col bg-transparent border border-zinc-300 dark:border-zinc-700 rounded-none hover:border-accent dark:hover:border-accent transition-colors overflow-hidden" data-category="solo">
<img src="https://placehold.co/400x250/2C3E50/FFFFFF?text=Portfolio+V3" alt="Portfolio Website (v3)" loading="lazy" decoding="async" class="w-full h-48 object-cover border-b border-zinc-300 dark:border-zinc-700">
<div class="p-5 flex flex-col flex-grow">
<div class="flex items-start justify-between">
<h3 class="text-base font-semibold font-mono text-zinc-900 dark:text-zinc-100 mb-1 flex-1">Portfolio Website (v3)</h3>
<button class="copy-link-btn ml-2 text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors flex items-center justify-center" data-project-id="project-portfolio-website-v3" title="Copy link to project">
<i class="bi bi-link-45deg"></i>
</button>
</div>
<span class="text-xs font-medium font-mono text-zinc-500 dark:text-zinc-400 mb-2 block flex items-center"><i class="bi bi-clock mr-1 inline-block align-middle"></i>2026 - Present • Solo Projects</span>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-4 flex-grow leading-relaxed">The third iteration of my personal developer portfolio website, built with Python, Tailwind CSS, and Bootstrap Icons.</p>
<div>
<div class="flex flex-wrap mt-3"><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Python</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">JavaScript</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 mr-1.5 mb-1.5">Git</span></div>
<a href="https://github.com/quantumbagel/quantumbagel.github.io" target="_blank" rel="noopener noreferrer" class="inline-flex items-center text-sm font-medium font-mono text-zinc-900 dark:text-zinc-100 hover:text-accent dark:hover:text-accent transition-colors mt-3">View Project <span class="ml-1 text-xs">↗</span></a>
<button class="project-details-btn text-sm font-mono text-zinc-500 hover:text-accent dark:hover:text-accent transition-colors mt-3 ml-3" data-modal-id="modal-project-portfolio-website-v3">More Info →</button>
</div>
</div>
</div>
<div id="no-projects-message" class="hidden col-span-full text-center py-12 px-4 border border-dashed border-zinc-300 dark:border-zinc-700 font-mono text-zinc-500 dark:text-zinc-400">
<i class="bi bi-search text-xl mb-2 block text-zinc-400 dark:text-zinc-500"></i>
<span>No projects found matching your criteria.</span>
</div>
</div>
</section>
<section id="skills">
<h2 class="title group flex items-center gap-2 font-bold font-mono tracking-tight text-xl mb-6">
<span>Skills</span>
<button class="section-copy-link hidden group-hover:inline-flex items-center text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-section-id="skills" title="Copy link to Section">
<i class="bi bi-link-45deg"></i>
</button>
</h2>
<div class="grid grid-cols-1 md:grid-cols-3 gap-8">
<div>
<h3 class="text-base font-semibold font-mono text-accent-2 mb-4">Languages</h3>
<div id="skill-python" class="skill-item group mb-3 rounded-none border border-zinc-300 dark:border-zinc-700 bg-transparent overflow-hidden transition-all">
<div class="skill-toggle w-full px-4 py-3 flex items-center justify-between hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors text-left cursor-pointer" data-skill-id="python">
<div class="flex items-center gap-2 flex-1">
<i class="devicon-python-plain text-lg mr-2 inline-block align-middle"></i>
<span class="text-sm font-semibold font-mono text-zinc-900 dark:text-zinc-100">Python</span>
<span class="text-xs font-mono text-zinc-500 dark:text-zinc-400">over 5 years</span>
</div>
<div class="flex items-center gap-3">
<button class="skill-copy-link hidden group-hover:inline-flex items-center text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-skill-id="python" title="Copy link to skill">
<i class="bi bi-link-45deg inline-block align-middle"></i>
</button>
<i class="bi bi-chevron-down skill-toggle-icon text-zinc-500 dark:text-zinc-400 transition-transform"></i>
</div>
</div>
<div class="skill-content">
<div class="overflow-hidden opacity-0 transition-opacity duration-300">
<div class="px-4 pb-4 border-t border-zinc-300 dark:border-zinc-700">
<div class="text-xs font-mono text-zinc-600 dark:text-zinc-400 font-medium mb-4 pt-2">Expert</div>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-3 mt-2">I've used Python in almost every major project to tie together microservices, automate tasks, and design API wrappers. Some examples:<ul class='list-disc pl-5 mt-2 space-y-1'><li><strong>PyAerial:</strong> Building plane trackers using MongoDB and Kafka</li><li><strong>DroneTracker:</strong> Scripting dynamic PTZ camera controllers to track flying drones in real-time</li><li><strong>aerpawlib:</strong> Wrapping complex low-level MAVLink flight controls</li><li><strong>Strife / Piranha:</strong> Coding interactive Discord bots with session matchmaking and custom interaction routers</li><li><strong>ML-Ticker:</strong> Constructing data analysis utilities with custom sandboxed engines</li></ul></p>
<div class="mt-2 flex flex-wrap"><a href="#project-pyaerial" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">PyAerial</a><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-500 dark:text-zinc-500 mr-1.5 mb-1.5">Piranha</span><a href="#project-dronetracker" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">DroneTracker</a><a href="#project-finitecraft" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">finiteCraft</a><a href="#project-triggered" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">Triggered</a><a href="#project-strife" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">Strife</a><a href="#project-molotov" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">Molotov</a><a href="#project-discord-py-template" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">discord.py-template</a><a href="#project-aerpawlib" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">aerpawlib</a><a href="#project-ml-ticker" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">ML-Ticker</a><a href="#project-portfolio-website-v3" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">Portfolio Website (v3)</a></div>
</div>
</div>
</div>
</div>
<div id="skill-c-cplusplus" class="skill-item group mb-3 rounded-none border border-zinc-300 dark:border-zinc-700 bg-transparent overflow-hidden transition-all">
<div class="skill-toggle w-full px-4 py-3 flex items-center justify-between hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors text-left cursor-pointer" data-skill-id="c-cplusplus">
<div class="flex items-center gap-2 flex-1">
<i class="devicon-cplusplus-plain text-lg mr-2 inline-block align-middle"></i>
<span class="text-sm font-semibold font-mono text-zinc-900 dark:text-zinc-100">C/C++</span>
<span class="text-xs font-mono text-zinc-500 dark:text-zinc-400">over 3 years</span>
</div>
<div class="flex items-center gap-3">
<button class="skill-copy-link hidden group-hover:inline-flex items-center text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-skill-id="c-cplusplus" title="Copy link to skill">
<i class="bi bi-link-45deg inline-block align-middle"></i>
</button>
<i class="bi bi-chevron-down skill-toggle-icon text-zinc-500 dark:text-zinc-400 transition-transform"></i>
</div>
</div>
<div class="skill-content">
<div class="overflow-hidden opacity-0 transition-opacity duration-300">
<div class="px-4 pb-4 border-t border-zinc-300 dark:border-zinc-700">
<div class="text-xs font-mono text-zinc-600 dark:text-zinc-400 font-medium mb-4 pt-2">Advanced</div>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-3 mt-2">I've used C/C++ in performance-critical sections and systems programming where high execution speeds or direct hardware controls are needed. I have a lot of experience with Arduino and microcontrollers, as well as JIT compilation for Python code.></p>
<div class="mt-2 flex flex-wrap"><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-500 dark:text-zinc-500 mr-1.5 mb-1.5">Arduino</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-500 dark:text-zinc-500 mr-1.5 mb-1.5">Python compiler extensions for AERPAW</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-500 dark:text-zinc-500 mr-1.5 mb-1.5">JIT compilation for performance-critical Python code</span></div>
</div>
</div>
</div>
</div>
<div id="skill-javascript" class="skill-item group mb-3 rounded-none border border-zinc-300 dark:border-zinc-700 bg-transparent overflow-hidden transition-all">
<div class="skill-toggle w-full px-4 py-3 flex items-center justify-between hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors text-left cursor-pointer" data-skill-id="javascript">
<div class="flex items-center gap-2 flex-1">
<i class="devicon-javascript-plain text-lg mr-2 inline-block align-middle"></i>
<span class="text-sm font-semibold font-mono text-zinc-900 dark:text-zinc-100">JavaScript</span>
<span class="text-xs font-mono text-zinc-500 dark:text-zinc-400">over 3 years</span>
</div>
<div class="flex items-center gap-3">
<button class="skill-copy-link hidden group-hover:inline-flex items-center text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-skill-id="javascript" title="Copy link to skill">
<i class="bi bi-link-45deg inline-block align-middle"></i>
</button>
<i class="bi bi-chevron-down skill-toggle-icon text-zinc-500 dark:text-zinc-400 transition-transform"></i>
</div>
</div>
<div class="skill-content">
<div class="overflow-hidden opacity-0 transition-opacity duration-300">
<div class="px-4 pb-4 border-t border-zinc-300 dark:border-zinc-700">
<div class="text-xs font-mono text-zinc-600 dark:text-zinc-400 font-medium mb-4 pt-2">Advanced</div>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-3 mt-2">I've used JavaScript to implement client-side interactive elements and interface logic on web pages. Some examples:<ul class='list-disc pl-5 mt-2 space-y-1'><li><strong>Portfolio Website (v3):</strong> Building dynamic client-side filtering and overlay layouts</li><li><strong>finiteCraft:</strong> Constructing DOM scraping scripts</li><li><strong>Telemetry Dashboards:</strong> Designing interactive visualization systems</li></ul></p>
<div class="mt-2 flex flex-wrap"><a href="#project-portfolio-website-v3" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">Portfolio Website (v3)</a><a href="#project-finitecraft" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">finiteCraft</a></div>
</div>
</div>
</div>
</div>
<div id="skill-java" class="skill-item group mb-3 rounded-none border border-zinc-300 dark:border-zinc-700 bg-transparent overflow-hidden transition-all">
<div class="skill-toggle w-full px-4 py-3 flex items-center justify-between hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors text-left cursor-pointer" data-skill-id="java">
<div class="flex items-center gap-2 flex-1">
<i class="devicon-java-plain text-lg mr-2 inline-block align-middle"></i>
<span class="text-sm font-semibold font-mono text-zinc-900 dark:text-zinc-100">Java</span>
<span class="text-xs font-mono text-zinc-500 dark:text-zinc-400">over 4 years</span>
</div>
<div class="flex items-center gap-3">
<button class="skill-copy-link hidden group-hover:inline-flex items-center text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-skill-id="java" title="Copy link to skill">
<i class="bi bi-link-45deg inline-block align-middle"></i>
</button>
<i class="bi bi-chevron-down skill-toggle-icon text-zinc-500 dark:text-zinc-400 transition-transform"></i>
</div>
</div>
<div class="skill-content">
<div class="overflow-hidden opacity-0 transition-opacity duration-300">
<div class="px-4 pb-4 border-t border-zinc-300 dark:border-zinc-700">
<div class="text-xs font-mono text-zinc-600 dark:text-zinc-400 font-medium mb-4 pt-2">Competent</div>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-3 mt-2">I've used Java in a pretty limited fashion outside of class. My main project using Java was the Statify Minecraft plugin, where I developed server-side Minecraft plugin using SpigotMC to expose Minecraft's statistics to the server and players.</p>
<div class="mt-2 flex flex-wrap"><a href="#project-statify" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">Statify</a></div>
</div>
</div>
</div>
</div>
<div id="skill-c" class="skill-item group mb-3 rounded-none border border-zinc-300 dark:border-zinc-700 bg-transparent overflow-hidden transition-all">
<div class="skill-toggle w-full px-4 py-3 flex items-center justify-between hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors text-left cursor-pointer" data-skill-id="c">
<div class="flex items-center gap-2 flex-1">
<i class="devicon-csharp-plain text-lg mr-2 inline-block align-middle"></i>
<span class="text-sm font-semibold font-mono text-zinc-900 dark:text-zinc-100">C#</span>
<span class="text-xs font-mono text-zinc-500 dark:text-zinc-400">over 2 years</span>
</div>
<div class="flex items-center gap-3">
<button class="skill-copy-link hidden group-hover:inline-flex items-center text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-skill-id="c" title="Copy link to skill">
<i class="bi bi-link-45deg inline-block align-middle"></i>
</button>
<i class="bi bi-chevron-down skill-toggle-icon text-zinc-500 dark:text-zinc-400 transition-transform"></i>
</div>
</div>
<div class="skill-content">
<div class="overflow-hidden opacity-0 transition-opacity duration-300">
<div class="px-4 pb-4 border-t border-zinc-300 dark:border-zinc-700">
<div class="text-xs font-mono text-zinc-600 dark:text-zinc-400 font-medium mb-4 pt-2">Competent</div>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-3 mt-2">I've used C# to build performance-critical projects. My primary example of this is my chess bot made for Sebastian Lague's tiny chess bot competition.</p>
<div class="mt-2 flex flex-wrap"><a href="#project-chess-challenge" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">Chess-Challenge</a></div>
</div>
</div>
</div>
</div>
<div id="skill-bash" class="skill-item group mb-3 rounded-none border border-zinc-300 dark:border-zinc-700 bg-transparent overflow-hidden transition-all">
<div class="skill-toggle w-full px-4 py-3 flex items-center justify-between hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors text-left cursor-pointer" data-skill-id="bash">
<div class="flex items-center gap-2 flex-1">
<i class="devicon-bash-plain text-lg mr-2 inline-block align-middle"></i>
<span class="text-sm font-semibold font-mono text-zinc-900 dark:text-zinc-100">Bash</span>
<span class="text-xs font-mono text-zinc-500 dark:text-zinc-400">over 4 years</span>
</div>
<div class="flex items-center gap-3">
<button class="skill-copy-link hidden group-hover:inline-flex items-center text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-skill-id="bash" title="Copy link to skill">
<i class="bi bi-link-45deg inline-block align-middle"></i>
</button>
<i class="bi bi-chevron-down skill-toggle-icon text-zinc-500 dark:text-zinc-400 transition-transform"></i>
</div>
</div>
<div class="skill-content">
<div class="overflow-hidden opacity-0 transition-opacity duration-300">
<div class="px-4 pb-4 border-t border-zinc-300 dark:border-zinc-700">
<div class="text-xs font-mono text-zinc-600 dark:text-zinc-400 font-medium mb-4 pt-2">Competent</div>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-3 mt-2">I've used Bash to write automation scripts, orchestrate system builds, and streamline developer setup commands. Some examples:<ul class='list-disc pl-5 mt-2 space-y-1'><li><strong>All Projects:</strong> Bootstrapping local developer environments</li><li><strong>Docker setup scripts:</strong> Managing container deployment pipelines</li><li><strong>Database Initialization:</strong> Creating port-monitoring routines to ensure database startup sequences execute in order</li></ul></p>
<div class="mt-2 flex flex-wrap"><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-500 dark:text-zinc-500 mr-1.5 mb-1.5">All projects</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-500 dark:text-zinc-500 mr-1.5 mb-1.5">Docker setup scripts</span></div>
</div>
</div>
</div>
</div>
</div>
<div>
<h3 class="text-base font-semibold font-mono text-accent-2 mb-4">Technologies</h3>
<div id="skill-linux-unix" class="skill-item group mb-3 rounded-none border border-zinc-300 dark:border-zinc-700 bg-transparent overflow-hidden transition-all">
<div class="skill-toggle w-full px-4 py-3 flex items-center justify-between hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors text-left cursor-pointer" data-skill-id="linux-unix">
<div class="flex items-center gap-2 flex-1">
<i class="devicon-linux-plain text-lg mr-2 inline-block align-middle"></i>
<span class="text-sm font-semibold font-mono text-zinc-900 dark:text-zinc-100">Linux/Unix</span>
<span class="text-xs font-mono text-zinc-500 dark:text-zinc-400">over 5 years</span>
</div>
<div class="flex items-center gap-3">
<button class="skill-copy-link hidden group-hover:inline-flex items-center text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-skill-id="linux-unix" title="Copy link to skill">
<i class="bi bi-link-45deg inline-block align-middle"></i>
</button>
<i class="bi bi-chevron-down skill-toggle-icon text-zinc-500 dark:text-zinc-400 transition-transform"></i>
</div>
</div>
<div class="skill-content">
<div class="overflow-hidden opacity-0 transition-opacity duration-300">
<div class="px-4 pb-4 border-t border-zinc-300 dark:border-zinc-700">
<div class="text-xs font-mono text-zinc-600 dark:text-zinc-400 font-medium mb-4 pt-2">Expert</div>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-3 mt-2">I've used Linux/Unix environments to host production systems, configure deployment pipelines, and run diagnostics. Some examples:<ul class='list-disc pl-5 mt-2 space-y-1'><li><strong>All Projects:</strong> Hosting applications on remote VPS instances</li><li><strong>Service Configuration:</strong> Setting up systemd service units and redirecting daemon output to log files</li><li><strong>Diagnostics:</strong> Managing environment variables and file permissions, and debugging network issues using standard utilities like netstat and tcpdump</li></ul></p>
<div class="mt-2 flex flex-wrap"><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-500 dark:text-zinc-500 mr-1.5 mb-1.5">Server Management</span><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-500 dark:text-zinc-500 mr-1.5 mb-1.5">All Projects</span></div>
</div>
</div>
</div>
</div>
<div id="skill-docker" class="skill-item group mb-3 rounded-none border border-zinc-300 dark:border-zinc-700 bg-transparent overflow-hidden transition-all">
<div class="skill-toggle w-full px-4 py-3 flex items-center justify-between hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors text-left cursor-pointer" data-skill-id="docker">
<div class="flex items-center gap-2 flex-1">
<i class="devicon-docker-plain text-lg mr-2 inline-block align-middle"></i>
<span class="text-sm font-semibold font-mono text-zinc-900 dark:text-zinc-100">Docker</span>
<span class="text-xs font-mono text-zinc-500 dark:text-zinc-400">over 3 years</span>
</div>
<div class="flex items-center gap-3">
<button class="skill-copy-link hidden group-hover:inline-flex items-center text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-skill-id="docker" title="Copy link to skill">
<i class="bi bi-link-45deg inline-block align-middle"></i>
</button>
<i class="bi bi-chevron-down skill-toggle-icon text-zinc-500 dark:text-zinc-400 transition-transform"></i>
</div>
</div>
<div class="skill-content">
<div class="overflow-hidden opacity-0 transition-opacity duration-300">
<div class="px-4 pb-4 border-t border-zinc-300 dark:border-zinc-700">
<div class="text-xs font-mono text-zinc-600 dark:text-zinc-400 font-medium mb-4 pt-2">Expert</div>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-3 mt-2">I've used Docker to containerize multi-service applications, ensuring consistent execution across development and production environments. Some examples:<ul class='list-disc pl-5 mt-2 space-y-1'><li><strong>PyAerial:</strong> Containerizing multi-container architectures combining database and telemetry services</li><li><strong>discord.py-template:</strong> Creating optimized multi-stage build files to minimize production footprint</li><li><strong>Strife:</strong> Configuring network isolation for microservices and Docker Compose deployment</li></ul></p>
<div class="mt-2 flex flex-wrap"><a href="#project-pyaerial" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">PyAerial</a><a href="#project-dronetracker" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">DroneTracker</a><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-500 dark:text-zinc-500 mr-1.5 mb-1.5">Piranha</span><a href="#project-strife" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">Strife</a><a href="#project-discord-py-template" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">discord.py-template</a></div>
</div>
</div>
</div>
</div>
<div id="skill-selenium-web-scraping" class="skill-item group mb-3 rounded-none border border-zinc-300 dark:border-zinc-700 bg-transparent overflow-hidden transition-all">
<div class="skill-toggle w-full px-4 py-3 flex items-center justify-between hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors text-left cursor-pointer" data-skill-id="selenium-web-scraping">
<div class="flex items-center gap-2 flex-1">
<i class="bi bi-globe text-lg mr-2 inline-block align-middle"></i>
<span class="text-sm font-semibold font-mono text-zinc-900 dark:text-zinc-100">Selenium / Web Scraping</span>
<span class="text-xs font-mono text-zinc-500 dark:text-zinc-400">over 2 years</span>
</div>
<div class="flex items-center gap-3">
<button class="skill-copy-link hidden group-hover:inline-flex items-center text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-skill-id="selenium-web-scraping" title="Copy link to skill">
<i class="bi bi-link-45deg inline-block align-middle"></i>
</button>
<i class="bi bi-chevron-down skill-toggle-icon text-zinc-500 dark:text-zinc-400 transition-transform"></i>
</div>
</div>
<div class="skill-content">
<div class="overflow-hidden opacity-0 transition-opacity duration-300">
<div class="px-4 pb-4 border-t border-zinc-300 dark:border-zinc-700">
<div class="text-xs font-mono text-zinc-600 dark:text-zinc-400 font-medium mb-4 pt-2">Advanced</div>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-3 mt-2">I'm really good at using Selenium to scrape large amounts of data. Some examples:<ul class='list-disc pl-5 mt-2 space-y-1'><li><strong>finiteCraft:</strong> Automating browser sessions to discover crafting recipes</li><li><strong>Worker Threads:</strong> Spawning headless Chromium instances to scrap pages</li><li><strong>Proxy Rotation:</strong> Managing rotating proxy pools to avoid request rate limits</li></ul></p>
<div class="mt-2 flex flex-wrap"><a href="#project-finitecraft" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">finiteCraft</a></div>
</div>
</div>
</div>
</div>
<div id="skill-openapi" class="skill-item group mb-3 rounded-none border border-zinc-300 dark:border-zinc-700 bg-transparent overflow-hidden transition-all">
<div class="skill-toggle w-full px-4 py-3 flex items-center justify-between hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors text-left cursor-pointer" data-skill-id="openapi">
<div class="flex items-center gap-2 flex-1">
<i class="bi bi-braces text-lg mr-2 inline-block align-middle"></i>
<span class="text-sm font-semibold font-mono text-zinc-900 dark:text-zinc-100">OpenAPI</span>
<span class="text-xs font-mono text-zinc-500 dark:text-zinc-400">over 2 years</span>
</div>
<div class="flex items-center gap-3">
<button class="skill-copy-link hidden group-hover:inline-flex items-center text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-skill-id="openapi" title="Copy link to skill">
<i class="bi bi-link-45deg inline-block align-middle"></i>
</button>
<i class="bi bi-chevron-down skill-toggle-icon text-zinc-500 dark:text-zinc-400 transition-transform"></i>
</div>
</div>
<div class="skill-content">
<div class="overflow-hidden opacity-0 transition-opacity duration-300">
<div class="px-4 pb-4 border-t border-zinc-300 dark:border-zinc-700">
<div class="text-xs font-mono text-zinc-600 dark:text-zinc-400 font-medium mb-4 pt-2">Advanced</div>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-3 mt-2">I've used OpenAPI schemas to design structured schemas and write API documentation. Projects I've used this skill for: <ul class='list-disc pl-5 mt-2 space-y-1'><li><strong>PyAerial:</strong> Designing a REST APIs that external tools can use to interface with the program</li><li><strong>finiteCraft:</strong> Writing documentation for a hacky static API using Github Pages</li></ul></p>
<div class="mt-2 flex flex-wrap"><a href="#project-pyaerial" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">PyAerial</a><a href="#project-triggered" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">Triggered</a></div>
</div>
</div>
</div>
</div>
<div id="skill-sql" class="skill-item group mb-3 rounded-none border border-zinc-300 dark:border-zinc-700 bg-transparent overflow-hidden transition-all">
<div class="skill-toggle w-full px-4 py-3 flex items-center justify-between hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors text-left cursor-pointer" data-skill-id="sql">
<div class="flex items-center gap-2 flex-1">
<i class="bi bi-database text-lg mr-2 inline-block align-middle"></i>
<span class="text-sm font-semibold font-mono text-zinc-900 dark:text-zinc-100">SQL</span>
<span class="text-xs font-mono text-zinc-500 dark:text-zinc-400">over 4 years</span>
</div>
<div class="flex items-center gap-3">
<button class="skill-copy-link hidden group-hover:inline-flex items-center text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-skill-id="sql" title="Copy link to skill">
<i class="bi bi-link-45deg inline-block align-middle"></i>
</button>
<i class="bi bi-chevron-down skill-toggle-icon text-zinc-500 dark:text-zinc-400 transition-transform"></i>
</div>
</div>
<div class="skill-content">
<div class="overflow-hidden opacity-0 transition-opacity duration-300">
<div class="px-4 pb-4 border-t border-zinc-300 dark:border-zinc-700">
<div class="text-xs font-mono text-zinc-600 dark:text-zinc-400 font-medium mb-4 pt-2">Advanced</div>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-3 mt-2">After some time using the significantly simpler database MongoDB, I began to use more traditional SQL-like databases (MySQL, PostgreSQL) as storage methods for my more complicated applications. Some examples of this: <ul class='list-disc pl-5 mt-2 space-y-1'><li><strong>Strife:</strong> Designing robust repository patterns and migration flows using asyncpg and PostgreSQL</li><li><strong>Triggered:</strong> Storing custom event triggers and role permissions</li><li><strong>Statify:</strong> Aggregating server-wide statistics and leaderboards, and aggressive indexing to optimize queries.</li></ul></p>
<div class="mt-2 flex flex-wrap"><a href="#project-strife" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">Strife</a><a href="#project-triggered" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">Triggered</a><a href="#project-statify" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">Statify</a></div>
</div>
</div>
</div>
</div>
<div id="skill-mongodb" class="skill-item group mb-3 rounded-none border border-zinc-300 dark:border-zinc-700 bg-transparent overflow-hidden transition-all">
<div class="skill-toggle w-full px-4 py-3 flex items-center justify-between hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors text-left cursor-pointer" data-skill-id="mongodb">
<div class="flex items-center gap-2 flex-1">
<i class="devicon-mongodb-plain text-lg mr-2 inline-block align-middle"></i>
<span class="text-sm font-semibold font-mono text-zinc-900 dark:text-zinc-100">MongoDB</span>
<span class="text-xs font-mono text-zinc-500 dark:text-zinc-400">over 2 years</span>
</div>
<div class="flex items-center gap-3">
<button class="skill-copy-link hidden group-hover:inline-flex items-center text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-skill-id="mongodb" title="Copy link to skill">
<i class="bi bi-link-45deg inline-block align-middle"></i>
</button>
<i class="bi bi-chevron-down skill-toggle-icon text-zinc-500 dark:text-zinc-400 transition-transform"></i>
</div>
</div>
<div class="skill-content">
<div class="overflow-hidden opacity-0 transition-opacity duration-300">
<div class="px-4 pb-4 border-t border-zinc-300 dark:border-zinc-700">
<div class="text-xs font-mono text-zinc-600 dark:text-zinc-400 font-medium mb-4 pt-2">Advanced</div>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-3 mt-2">MongoDB was the first database that I used, which is reflected in the projects I used it for. Some of the stronger examples:<ul class='list-disc pl-5 mt-2 space-y-1'><li><strong>PyAerial:</strong> Storing raw, high-frequency aircraft coordinates in real-time</li><li><strong>finiteCraft:</strong> Mapping the element crafting paths in a graph-like structure</li></ul></p>
<div class="mt-2 flex flex-wrap"><a href="#project-pyaerial" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">PyAerial</a><a href="#project-finitecraft" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">finiteCraft</a></div>
</div>
</div>
</div>
</div>
<div id="skill-kafka" class="skill-item group mb-3 rounded-none border border-zinc-300 dark:border-zinc-700 bg-transparent overflow-hidden transition-all">
<div class="skill-toggle w-full px-4 py-3 flex items-center justify-between hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors text-left cursor-pointer" data-skill-id="kafka">
<div class="flex items-center gap-2 flex-1">
<i class="devicon-apachekafka-original text-lg mr-2 inline-block align-middle"></i>
<span class="text-sm font-semibold font-mono text-zinc-900 dark:text-zinc-100">Kafka</span>
<span class="text-xs font-mono text-zinc-500 dark:text-zinc-400">over 3 years</span>
</div>
<div class="flex items-center gap-3">
<button class="skill-copy-link hidden group-hover:inline-flex items-center text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-skill-id="kafka" title="Copy link to skill">
<i class="bi bi-link-45deg inline-block align-middle"></i>
</button>
<i class="bi bi-chevron-down skill-toggle-icon text-zinc-500 dark:text-zinc-400 transition-transform"></i>
</div>
</div>
<div class="skill-content">
<div class="overflow-hidden opacity-0 transition-opacity duration-300">
<div class="px-4 pb-4 border-t border-zinc-300 dark:border-zinc-700">
<div class="text-xs font-mono text-zinc-600 dark:text-zinc-400 font-medium mb-4 pt-2">Advanced</div>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-3 mt-2">I've used Kafka to stream telemetry data for my AERPAW projects and have gotten quite experienced with it. Some examples:<ul class='list-disc pl-5 mt-2 space-y-1'><li><strong>PyAerial:</strong> Streaming real-time collision warnings and alerts to notification brokers</li><li><strong>DroneTracker:</strong> Broadcasting high-frequency GPS telemetry to the AXIS camera</li></ul></p>
<div class="mt-2 flex flex-wrap"><a href="#project-pyaerial" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">PyAerial</a><a href="#project-dronetracker" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">DroneTracker</a></div>
</div>
</div>
</div>
</div>
<div id="skill-discord-py" class="skill-item group mb-3 rounded-none border border-zinc-300 dark:border-zinc-700 bg-transparent overflow-hidden transition-all">
<div class="skill-toggle w-full px-4 py-3 flex items-center justify-between hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors text-left cursor-pointer" data-skill-id="discord-py">
<div class="flex items-center gap-2 flex-1">
<i class="bi bi-discord text-lg mr-2 inline-block align-middle"></i>
<span class="text-sm font-semibold font-mono text-zinc-900 dark:text-zinc-100">discord.py</span>
<span class="text-xs font-mono text-zinc-500 dark:text-zinc-400">over 4 years</span>
</div>
<div class="flex items-center gap-3">
<button class="skill-copy-link hidden group-hover:inline-flex items-center text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-skill-id="discord-py" title="Copy link to skill">
<i class="bi bi-link-45deg inline-block align-middle"></i>
</button>
<i class="bi bi-chevron-down skill-toggle-icon text-zinc-500 dark:text-zinc-400 transition-transform"></i>
</div>
</div>
<div class="skill-content">
<div class="overflow-hidden opacity-0 transition-opacity duration-300">
<div class="px-4 pb-4 border-t border-zinc-300 dark:border-zinc-700">
<div class="text-xs font-mono text-zinc-600 dark:text-zinc-400 font-medium mb-4 pt-2">Expert</div>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-3 mt-2">I've used discord.py to develop a variety of bots and even a modular bot templates. Work I've done:<ul class='list-disc pl-5 mt-2 space-y-1'><li><strong>discord.py-template:</strong>A modular bot framework with hot-reloading cog engines</li><li><strong>Strife / Piranha:</strong> Designing interactive games with a custom interaction router</li><li><strong>Triggered:</strong>A full trigger-based automation system entirely within Discord</li></ul></p>
<div class="mt-2 flex flex-wrap"><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-500 dark:text-zinc-500 mr-1.5 mb-1.5">Piranha</span><a href="#project-triggered" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">Triggered</a><a href="#project-strife" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">Strife</a><a href="#project-discord-py-template" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">discord.py-template</a></div>
</div>
</div>
</div>
</div>
<div id="skill-ads-b-mode-s" class="skill-item group mb-3 rounded-none border border-zinc-300 dark:border-zinc-700 bg-transparent overflow-hidden transition-all">
<div class="skill-toggle w-full px-4 py-3 flex items-center justify-between hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors text-left cursor-pointer" data-skill-id="ads-b-mode-s">
<div class="flex items-center gap-2 flex-1">
<i class="bi bi-broadcast text-lg mr-2 inline-block align-middle"></i>
<span class="text-sm font-semibold font-mono text-zinc-900 dark:text-zinc-100">ADS-B / Mode-S</span>
<span class="text-xs font-mono text-zinc-500 dark:text-zinc-400">over 3 years</span>
</div>
<div class="flex items-center gap-3">
<button class="skill-copy-link hidden group-hover:inline-flex items-center text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-skill-id="ads-b-mode-s" title="Copy link to skill">
<i class="bi bi-link-45deg inline-block align-middle"></i>
</button>
<i class="bi bi-chevron-down skill-toggle-icon text-zinc-500 dark:text-zinc-400 transition-transform"></i>
</div>
</div>
<div class="skill-content">
<div class="overflow-hidden opacity-0 transition-opacity duration-300">
<div class="px-4 pb-4 border-t border-zinc-300 dark:border-zinc-700">
<div class="text-xs font-mono text-zinc-600 dark:text-zinc-400 font-medium mb-4 pt-2">Advanced</div>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-3 mt-2">I've used ADS-B / Mode-S to use radio hardware to parse aircraft signals, and track flight coordinates. I have gotten down to the hardware level of this protocol with my work at AERPAW. With my work on PyAerial, I set up RTL-SDR hardware to capture raw 1090 MHz transponder packets and parse them.</p>
<div class="mt-2 flex flex-wrap"><a href="#project-pyaerial" class="project-jump inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-600 dark:text-zinc-400 hover:text-accent dark:hover:text-accent hover:border-accent dark:hover:border-accent mr-1.5 mb-1.5 transition-colors">PyAerial</a></div>
</div>
</div>
</div>
</div>
</div>
<div>
<h3 class="text-base font-semibold font-mono text-accent-2 mb-4">Tools</h3>
<div id="skill-jetbrains-suite" class="skill-item group mb-3 rounded-none border border-zinc-300 dark:border-zinc-700 bg-transparent overflow-hidden transition-all">
<div class="skill-toggle w-full px-4 py-3 flex items-center justify-between hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors text-left cursor-pointer" data-skill-id="jetbrains-suite">
<div class="flex items-center gap-2 flex-1">
<i class="devicon-jetbrains-plain text-lg mr-2 inline-block align-middle"></i>
<span class="text-sm font-semibold font-mono text-zinc-900 dark:text-zinc-100">JetBrains Suite</span>
<span class="text-xs font-mono text-zinc-500 dark:text-zinc-400">over 5 years</span>
</div>
<div class="flex items-center gap-3">
<button class="skill-copy-link hidden group-hover:inline-flex items-center text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-skill-id="jetbrains-suite" title="Copy link to skill">
<i class="bi bi-link-45deg inline-block align-middle"></i>
</button>
<i class="bi bi-chevron-down skill-toggle-icon text-zinc-500 dark:text-zinc-400 transition-transform"></i>
</div>
</div>
<div class="skill-content">
<div class="overflow-hidden opacity-0 transition-opacity duration-300">
<div class="px-4 pb-4 border-t border-zinc-300 dark:border-zinc-700">
<div class="text-xs font-mono text-zinc-600 dark:text-zinc-400 font-medium mb-4 pt-2">Expert</div>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-3 mt-2">I've used the JetBrains Suite of IDEs to debug and profile complex codebases across multiple stacks. Some examples:<ul class='list-disc pl-5 mt-2 space-y-1'><li><strong>All Projects:</strong> Using PyCharm to step through multi-threaded environments</li><li><strong>C++ Development:</strong> Using CLion to profile memory usage and trace performance bottlenecks</li><li><strong>Java Integration:</strong> Inspecting remote database schemas and JVM bytecode within IntelliJ IDEA</li></ul></p>
<div class="mt-2 flex flex-wrap"><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-500 dark:text-zinc-500 mr-1.5 mb-1.5">All Projects</span></div>
</div>
</div>
</div>
</div>
<div id="skill-git" class="skill-item group mb-3 rounded-none border border-zinc-300 dark:border-zinc-700 bg-transparent overflow-hidden transition-all">
<div class="skill-toggle w-full px-4 py-3 flex items-center justify-between hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors text-left cursor-pointer" data-skill-id="git">
<div class="flex items-center gap-2 flex-1">
<i class="devicon-git-plain text-lg mr-2 inline-block align-middle"></i>
<span class="text-sm font-semibold font-mono text-zinc-900 dark:text-zinc-100">Git</span>
<span class="text-xs font-mono text-zinc-500 dark:text-zinc-400">over 4 years</span>
</div>
<div class="flex items-center gap-3">
<button class="skill-copy-link hidden group-hover:inline-flex items-center text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-skill-id="git" title="Copy link to skill">
<i class="bi bi-link-45deg inline-block align-middle"></i>
</button>
<i class="bi bi-chevron-down skill-toggle-icon text-zinc-500 dark:text-zinc-400 transition-transform"></i>
</div>
</div>
<div class="skill-content">
<div class="overflow-hidden opacity-0 transition-opacity duration-300">
<div class="px-4 pb-4 border-t border-zinc-300 dark:border-zinc-700">
<div class="text-xs font-mono text-zinc-600 dark:text-zinc-400 font-medium mb-4 pt-2">Advanced</div>
<p class="text-sm text-zinc-600 dark:text-zinc-400 mb-3 mt-2">I've used Git to track codebase changes, collaborate on repositories, and manage deployment integrations. Some examples:<ul class='list-disc pl-5 mt-2 space-y-1'><li><strong>All Projects:</strong> Tracking source code changes and branching</li><li><strong>aerpawlib:</strong> Using git submodules for external dependency tracking</li><li><strong>CI/CD Pipelines:</strong> Squash commit histories with interactive rebases and configure automated testing in GitHub Actions</li></ul></p>
<div class="mt-2 flex flex-wrap"><span class="inline-flex items-center px-2 py-0.5 rounded-none border border-zinc-300 dark:border-zinc-700 text-xs font-medium font-mono bg-transparent text-zinc-500 dark:text-zinc-500 mr-1.5 mb-1.5">All Projects</span></div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section id="contact">
<h2 class="title group flex items-center gap-2 font-bold font-mono tracking-tight text-xl mb-6">
<span>Contact</span>
<button class="section-copy-link hidden group-hover:inline-flex items-center text-zinc-400 hover:text-accent dark:hover:text-accent transition-colors" data-section-id="contact" title="Copy link to Section">
<i class="bi bi-link-45deg"></i>
</button>
</h2>
<div class="bg-transparent p-6 rounded-none border border-zinc-300 dark:border-zinc-700">
<form id="contact-form" action="https://formspree.io/f/moqgwdop" method="POST" class="space-y-4">
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
<div>
<label for="name" class="block text-sm font-medium font-mono text-zinc-500 dark:text-zinc-400 mb-1">Name</label>
<input type="text" id="name" name="name" required class="w-full px-4 py-2 bg-transparent border border-zinc-300 dark:border-zinc-700 rounded-none focus:outline-none focus:border-accent dark:focus:border-accent transition-colors text-zinc-900 dark:text-zinc-100">
</div>
<div>
<label for="email" class="block text-sm font-medium font-mono text-zinc-500 dark:text-zinc-400 mb-1">Email</label>
<input type="email" id="email" name="email" required class="w-full px-4 py-2 bg-transparent border border-zinc-300 dark:border-zinc-700 rounded-none focus:outline-none focus:border-accent dark:focus:border-accent transition-colors text-zinc-900 dark:text-zinc-100">
</div>
</div>
<div>
<label for="message" class="block text-sm font-medium font-mono text-zinc-500 dark:text-zinc-400 mb-1">Message</label>
<textarea id="message" name="message" rows="4" required class="w-full px-4 py-2 bg-transparent border border-zinc-300 dark:border-zinc-700 rounded-none focus:outline-none focus:border-accent dark:focus:border-accent transition-colors text-zinc-900 dark:text-zinc-100 resize-none"></textarea>
</div>
<div class="flex flex-col sm:flex-row sm:items-center gap-4">
<button id="contact-submit-btn" type="submit" class="inline-flex items-center px-6 py-2.5 bg-transparent border border-accent text-accent font-medium font-mono rounded-none hover:bg-accent hover:text-global-bg transition-colors focus:outline-none cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed">
<span id="contact-submit-text">Send Message</span>
<i id="contact-submit-icon" class="bi bi-send ml-2"></i>
</button>
<div id="contact-status" class="hidden text-sm font-mono transition-opacity duration-300 flex items-center gap-2"></div>
</div>
</form>
</div>
</section>
</main>
<footer id="footer-easter-egg" class="mt-20 pt-8 border-t border-zinc-300 dark:border-zinc-700 text-center text-sm font-mono text-zinc-500 dark:text-zinc-400 cursor-pointer hover:text-accent transition-colors select-none">
<p>Made with <3 by @quantumbagel, not AI.</p>
</footer>
</div>
<div id="modal-project-pyaerial" class="fixed inset-0 z-50 hidden overflow-y-auto bg-black/50 flex items-center justify-center p-4">
<div class="bg-global-bg border border-zinc-300 dark:border-zinc-700 rounded-none w-full max-w-2xl max-h-[90vh] overflow-y-auto">
<div class="p-6">
<div class="flex items-start justify-between mb-4">
<h2 class="text-2xl font-bold font-mono text-zinc-900 dark:text-zinc-100">PyAerial</h2>
<button class="modal-close-btn text-zinc-500 hover:text-accent dark:hover:text-accent" data-modal-id="modal-project-pyaerial">✕</button>
</div>
<p class="text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed mb-4">PyAerial is a comprehensive ADS-B tracking solution developed for the AERPAW research platform at NC State. It provides real-time aircraft position tracking, historical data storage, and geofenced alerting. It is designed to be modular and extensible, allowing for integration with additional data sources and early-warning systems.</p>
<div class="mt-4"><h4 class="font-semibold font-mono text-zinc-900 dark:text-zinc-100 mb-2">Features</h4><ul class="space-y-1"><li class="text-sm font-mono text-zinc-600 dark:text-zinc-400 flex items-start"><span class="mr-3">•</span><span>15% percent faster collision detection</span></li><li class="text-sm font-mono text-zinc-600 dark:text-zinc-400 flex items-start"><span class="mr-3">•</span><span>92% fewer false positives</span></li><li class="text-sm font-mono text-zinc-600 dark:text-zinc-400 flex items-start"><span class="mr-3">•</span><span>Detailed flight tracking in MongoDB</span></li><li class="text-sm font-mono text-zinc-600 dark:text-zinc-400 flex items-start"><span class="mr-3">•</span><span>Docker containerized deployment</span></li><li class="text-sm font-mono text-zinc-600 dark:text-zinc-400 flex items-start"><span class="mr-3">•</span><span>Kafka notification integration</span></li><li class="text-sm font-mono text-zinc-600 dark:text-zinc-400 flex items-start"><span class="mr-3">•</span><span>Compatibility with commonly used geofence file formats</span></li></ul></div>
<div class="mt-6 flex gap-3">
<a href="https://github.com/quantumbagel/PyAerial" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 bg-transparent border border-accent text-accent font-medium font-mono rounded-none hover:bg-accent hover:text-global-bg transition-colors">View on GitHub <span class="ml-2">↗</span></a>
</div>
</div>
</div>
</div>
<div id="modal-project-piranha-unmaintained" class="fixed inset-0 z-50 hidden overflow-y-auto bg-black/50 flex items-center justify-center p-4">
<div class="bg-global-bg border border-zinc-300 dark:border-zinc-700 rounded-none w-full max-w-2xl max-h-[90vh] overflow-y-auto">
<div class="p-6">
<div class="flex items-start justify-between mb-4">
<h2 class="text-2xl font-bold font-mono text-zinc-900 dark:text-zinc-100">Piranha [unmaintained]</h2>
<button class="modal-close-btn text-zinc-500 hover:text-accent dark:hover:text-accent" data-modal-id="modal-project-piranha-unmaintained">✕</button>
</div>
<p class="text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed mb-4">A Python-based Discord bot designed for chess enthusiasts. It interfaces with the Stockfish engine to support multiple difficulty levels, game history tracking, and player statistics.</p>
<div class="mt-4"><h4 class="font-semibold font-mono text-zinc-900 dark:text-zinc-100 mb-2">Features</h4><ul class="space-y-1"><li class="text-sm font-mono text-zinc-600 dark:text-zinc-400 flex items-start"><span class="mr-3">•</span><span>Play chess against AI or friends</span></li><li class="text-sm font-mono text-zinc-600 dark:text-zinc-400 flex items-start"><span class="mr-3">•</span><span>Multiple difficulty levels via Stockfish</span></li><li class="text-sm font-mono text-zinc-600 dark:text-zinc-400 flex items-start"><span class="mr-3">•</span><span>Game history and statistics</span></li><li class="text-sm font-mono text-zinc-600 dark:text-zinc-400 flex items-start"><span class="mr-3">•</span><span>Docker deployment support</span></li></ul></div>
<div class="mt-6 flex gap-3">
</div>
</div>
</div>
</div>
<div id="modal-project-finitecraft" class="fixed inset-0 z-50 hidden overflow-y-auto bg-black/50 flex items-center justify-center p-4">
<div class="bg-global-bg border border-zinc-300 dark:border-zinc-700 rounded-none w-full max-w-2xl max-h-[90vh] overflow-y-auto">
<div class="p-6">
<div class="flex items-start justify-between mb-4">
<h2 class="text-2xl font-bold font-mono text-zinc-900 dark:text-zinc-100">finiteCraft</h2>
<button class="modal-close-btn text-zinc-500 hover:text-accent dark:hover:text-accent" data-modal-id="modal-project-finitecraft">✕</button>
</div>
<p class="text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed mb-4">finiteCraft is a multi-threaded scraping and optimization project designed to automate recipe discovery in Neal Agarwal's Infinite Craft. It utilizes distributed rotating proxies to bypass rate limits and implements pathfinding algorithms to compute optimal crafting trees.</p>
<div class="mt-4"><h4 class="font-semibold font-mono text-zinc-900 dark:text-zinc-100 mb-2">Features</h4><ul class="space-y-1"><li class="text-sm font-mono text-zinc-600 dark:text-zinc-400 flex items-start"><span class="mr-3">•</span><span>Multi-threaded recipe scraping</span></li><li class="text-sm font-mono text-zinc-600 dark:text-zinc-400 flex items-start"><span class="mr-3">•</span><span>Rotating proxy integration</span></li><li class="text-sm font-mono text-zinc-600 dark:text-zinc-400 flex items-start"><span class="mr-3">•</span><span>MongoDB database for element relationships</span></li><li class="text-sm font-mono text-zinc-600 dark:text-zinc-400 flex items-start"><span class="mr-3">•</span><span>Tree-search pathfinding for optimal recipe discovery</span></li></ul></div>
<div class="mt-6 flex gap-3">
<a href="https://github.com/finiteCraft/finiteCraft" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 bg-transparent border border-accent text-accent font-medium font-mono rounded-none hover:bg-accent hover:text-global-bg transition-colors">View on GitHub <span class="ml-2">↗</span></a>
</div>
</div>
</div>
</div>
<div id="modal-project-dronetracker" class="fixed inset-0 z-50 hidden overflow-y-auto bg-black/50 flex items-center justify-center p-4">
<div class="bg-global-bg border border-zinc-300 dark:border-zinc-700 rounded-none w-full max-w-2xl max-h-[90vh] overflow-y-auto">
<div class="p-6">
<div class="flex items-start justify-between mb-4">
<h2 class="text-2xl font-bold font-mono text-zinc-900 dark:text-zinc-100">DroneTracker</h2>
<button class="modal-close-btn text-zinc-500 hover:text-accent dark:hover:text-accent" data-modal-id="modal-project-dronetracker">✕</button>
</div>
<p class="text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed mb-4">DroneTracker controls pan-tilt-zoom (PTZ) AXIS cameras using the VAPIX API to track flying drones in real-time. The system calculates tracking angles using drone GPS coordinates received over Kafka and automatically adjusts camera orientation and zoom to keep the target centered.</p>
<div class="mt-4"><h4 class="font-semibold font-mono text-zinc-900 dark:text-zinc-100 mb-2">Features</h4><ul class="space-y-1"><li class="text-sm font-mono text-zinc-600 dark:text-zinc-400 flex items-start"><span class="mr-3">•</span><span>PTZ camera control using AXIS VAPIX protocol</span></li><li class="text-sm font-mono text-zinc-600 dark:text-zinc-400 flex items-start"><span class="mr-3">•</span><span>Real-time coordinate-to-angle mathematical conversion</span></li><li class="text-sm font-mono text-zinc-600 dark:text-zinc-400 flex items-start"><span class="mr-3">•</span><span>Telemetry consumption over Kafka</span></li><li class="text-sm font-mono text-zinc-600 dark:text-zinc-400 flex items-start"><span class="mr-3">•</span><span>Dockerized deployment for field execution</span></li></ul></div>
<div class="mt-6 flex gap-3">
<a href="https://github.com/quantumbagel/DroneTracker" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 bg-transparent border border-accent text-accent font-medium font-mono rounded-none hover:bg-accent hover:text-global-bg transition-colors">View on GitHub <span class="ml-2">↗</span></a>
</div>
</div>