File size: 60,086 Bytes
8a0ccd0
9d2adc1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1d5c0fa
9d2adc1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1d5c0fa
 
 
 
9d2adc1
1d5c0fa
9d2adc1
 
1d5c0fa
 
 
 
 
 
9d2adc1
 
 
1d5c0fa
 
 
9d2adc1
 
 
 
1d5c0fa
 
 
 
9d2adc1
1d5c0fa
9d2adc1
 
 
1d5c0fa
 
 
9d2adc1
1d5c0fa
9d2adc1
 
 
1d5c0fa
 
9d2adc1
1d5c0fa
9d2adc1
 
1d5c0fa
 
9d2adc1
1d5c0fa
 
 
 
 
9d2adc1
 
 
 
 
 
 
 
 
 
 
 
1d5c0fa
9d2adc1
 
1d5c0fa
9d2adc1
1d5c0fa
 
 
9d2adc1
 
1d5c0fa
 
 
 
 
 
 
 
9d2adc1
 
 
1d5c0fa
 
 
9d2adc1
 
 
 
 
 
 
 
 
 
1d5c0fa
9d2adc1
1d5c0fa
9d2adc1
 
1d5c0fa
 
 
 
 
 
 
9d2adc1
 
 
1d5c0fa
9d2adc1
 
 
 
 
1d5c0fa
9d2adc1
 
 
1d5c0fa
 
 
 
 
 
9d2adc1
1d5c0fa
9d2adc1
1d5c0fa
9d2adc1
 
1d5c0fa
 
 
 
 
9d2adc1
 
 
1d5c0fa
9d2adc1
1d5c0fa
 
9d2adc1
 
 
1d5c0fa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9d2adc1
1d5c0fa
9d2adc1
 
1d5c0fa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9d2adc1
 
 
1d5c0fa
 
9d2adc1
 
1d5c0fa
 
 
 
 
9d2adc1
 
 
 
 
 
1d5c0fa
 
9d2adc1
 
1d5c0fa
 
 
9d2adc1
1d5c0fa
 
 
 
9d2adc1
1d5c0fa
 
9d2adc1
1d5c0fa
9d2adc1
1d5c0fa
 
9d2adc1
1d5c0fa
 
9d2adc1
1d5c0fa
 
 
 
9d2adc1
1d5c0fa
 
9d2adc1
1d5c0fa
 
 
 
9d2adc1
1d5c0fa
 
9d2adc1
1d5c0fa
 
 
 
9d2adc1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1d5c0fa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9d2adc1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1d5c0fa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9d2adc1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1d5c0fa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9d2adc1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1d5c0fa
9d2adc1
1d5c0fa
9d2adc1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1d5c0fa
9d2adc1
 
 
 
 
1d5c0fa
9d2adc1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1d5c0fa
 
9d2adc1
 
 
1d5c0fa
 
 
9d2adc1
 
 
 
 
 
 
1d5c0fa
9d2adc1
1d5c0fa
9d2adc1
 
 
 
 
 
 
 
 
 
 
 
 
 
1d5c0fa
 
 
 
 
 
9d2adc1
 
 
 
 
 
 
1d5c0fa
9d2adc1
 
 
 
 
 
 
 
 
 
 
1d5c0fa
9d2adc1
 
 
 
 
 
 
 
 
 
1d5c0fa
 
 
 
 
 
9d2adc1
1d5c0fa
9d2adc1
 
 
 
 
 
 
 
 
 
 
1d5c0fa
9d2adc1
 
 
 
 
 
 
 
 
 
1d5c0fa
 
 
 
 
 
 
 
 
 
 
 
9d2adc1
 
 
 
 
 
 
1d5c0fa
9d2adc1
 
 
 
 
1d5c0fa
9d2adc1
 
 
 
1d5c0fa
 
9d2adc1
 
 
 
1d5c0fa
9d2adc1
 
 
 
 
 
1d5c0fa
9d2adc1
 
 
 
 
 
 
 
 
 
 
1d5c0fa
9d2adc1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1d5c0fa
 
 
 
9d2adc1
 
 
1d5c0fa
 
 
 
 
9d2adc1
 
 
1d5c0fa
 
 
9d2adc1
 
 
1d5c0fa
 
 
 
9d2adc1
 
 
 
1d5c0fa
 
 
9d2adc1
 
 
 
 
 
 
1d5c0fa
9d2adc1
 
 
 
 
 
 
 
 
 
 
1d5c0fa
9d2adc1
 
1d5c0fa
9d2adc1
 
1d5c0fa
9d2adc1
 
1d5c0fa
9d2adc1
 
1d5c0fa
9d2adc1
1d5c0fa
 
9d2adc1
 
1d5c0fa
9d2adc1
 
1d5c0fa
9d2adc1
 
1d5c0fa
9d2adc1
 
1d5c0fa
9d2adc1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90b50bc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9d2adc1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8a0ccd0
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
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Resume Builder Agent — evidence-grounded resumes from GitHub</title>
<meta name="description" content="Evidence-grounded resumes generated from GitHub repositories. Never invents an achievement or a number.">
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="wrap">
<header>
  <h1>Resume Builder Agent</h1>
  <p class="lede">Reads a GitHub account, turns each repository into
  evidence-backed claims, and builds role-targeted resumes. It never invents an
  achievement or a number &mdash; anything it cannot trace to a repository is
  dropped and reappears as a <code>[MEASURE: …]</code> task.</p>
</header>

<div class="cards"><div class="card"><div class="n">102/111</div><div class="k">claims verified</div></div><div class="card"><div class="n">6</div><div class="k">claims refused</div></div><div class="card"><div class="n">57</div><div class="k">public repos scanned</div></div><div class="card"><div class="n">21</div><div class="k">repos in this report</div></div><div class="card"><div class="n">11,359</div><div class="k">Groq tokens for this run</div></div></div>

<div class="note">
<strong>This page is a published artefact, not a live app.</strong>
Gradio and Docker Spaces require a paid plan on this account &mdash; the Hub
returns <code>402</code> with <em>&ldquo;hosting Gradio and Docker Spaces on free
cpu-basic requires a PRO subscription&rdquo;</em> &mdash; and Static Spaces serve
files rather than Python. Everything below was produced by a real run; the
<a href="#trace">run trace</a> records what it cost and what it refused to say.
To run it yourself, see
<a href="https://github.com/aniketqw/resume-builder-agent">the repository</a>.
</div>

<div class="note">
<strong>Public repositories only.</strong> This sample was generated from
21 <em>public</em> repositories. The account also has private ones; they
are filtered out before anything is fetched, and
<code>scripts/check_sample.py</code> fails the build if a private repository
name reaches this page.
</div>

<div class="tabs" role="tablist">
  <button role="tab" aria-selected="true"  aria-controls="p-report" id="t-report">Sample report</button>
  <button role="tab" aria-selected="false" aria-controls="p-trace"  id="t-trace">Run trace</button>
  <button role="tab" aria-selected="false" aria-controls="p-how"    id="t-how">How it works</button>
</div>

<section class="panel report" id="p-report" role="tabpanel" aria-labelledby="t-report">
<blockquote>
<p><strong>Public sample.</strong> This report was generated from 21 <strong>public</strong> repositories
belonging to <code>aniketqw</code>. Private repositories are excluded by construction —
see <code>scripts/check_sample.py</code>, which fails the build if a private repository
name appears here.</p>
</blockquote>
<h1 id="resume-report-aniketqw">Resume report — aniketqw</h1>
<p>Built from 21 repositories. <strong>102 claims verified</strong>, 3 need measurement, 6 rejected.</p>
<h2 id="security-findings-in-your-repositories">Security findings in your repositories</h2>
<p>These were found while reading your repositories. Fix these first.</p>
<ul>
<li><strong>[high]</strong> <code>pehenava-backend/pehnava-ai-frontend/.env.local</code> — An .env file is committed. These normally hold live credentials.</li>
</ul>
<h2 id="role-comparison">Role comparison</h2>
<div class="scroll"><table>
<thead>
<tr>
<th>Role</th>
<th style="text-align: right;">ATS score</th>
<th style="text-align: right;">Keywords</th>
<th style="text-align: right;">Role fit</th>
<th style="text-align: right;">Numbers</th>
<th style="text-align: right;">Recoverable</th>
</tr>
</thead>
<tbody>
<tr>
<td>Data Scientist</td>
<td style="text-align: right;"><strong>52.67</strong></td>
<td style="text-align: right;">27.12</td>
<td style="text-align: right;">14.37</td>
<td style="text-align: right;">0.0</td>
<td style="text-align: right;">+9.72</td>
</tr>
<tr>
<td>Software Engineer</td>
<td style="text-align: right;"><strong>38.42</strong></td>
<td style="text-align: right;">15.33</td>
<td style="text-align: right;">10.04</td>
<td style="text-align: right;">0.59</td>
<td style="text-align: right;">+13.33</td>
</tr>
<tr>
<td>AI / LLM Agent Engineer</td>
<td style="text-align: right;"><strong>34.06</strong></td>
<td style="text-align: right;">12.19</td>
<td style="text-align: right;">9.27</td>
<td style="text-align: right;">0.0</td>
<td style="text-align: right;">+11.66</td>
</tr>
<tr>
<td>Backend / Platform Engineer</td>
<td style="text-align: right;"><strong>32.25</strong></td>
<td style="text-align: right;">10.88</td>
<td style="text-align: right;">9.0</td>
<td style="text-align: right;">0.0</td>
<td style="text-align: right;">+10.88</td>
</tr>
<tr>
<td>Machine Learning Engineer</td>
<td style="text-align: right;"><strong>25.88</strong></td>
<td style="text-align: right;">6.36</td>
<td style="text-align: right;">7.08</td>
<td style="text-align: right;">0.0</td>
<td style="text-align: right;">+12.22</td>
</tr>
</tbody>
</table></div>
<p>Best fit: <strong>data_scientist</strong> (spread across roles: 26.79 points).</p>
<h2 id="resume-ai_llm_agent_engineer-3406100">Resume — ai_llm_agent_engineer (34.06/100)</h2>
<p><strong>AI / LLM Agent Engineer – Agentic LLM Systems with Evaluation and Guardrails</strong></p>
<p>Designed and implemented agentic LLM systems using LangChain ReAct and MongoDB, integrating static and dynamic web scraping, PDF extraction, and tool‑calling workflows. Built AI‑powered natural language search for GitHub repositories, delivering analytics and export capabilities. Developed robust data ingestion pipelines and structured output handling for LLM applications.</p>
<h3 id="projects">Projects</h3>
<ul>
<li>Implemented a LangChain ReAct Agent with Ollama and MongoDB to orchestrate tool‑calling workflows.</li>
<li>Built a static web scraper using requests and BeautifulSoup to provide structured data for LLM inputs.</li>
<li>Developed a dynamic web scraper with Playwright for real‑time data extraction.</li>
<li>Created a PDF extractor converting PDFs to text via pypdf, pymupdf, and OCR for LLM ingestion.</li>
<li>Implemented MongoDB helpers for inserting and searching documents to support LLM retrieval.</li>
<li>Designed an AI‑powered natural language search for GitHub repositories, supporting URL‑based and natural language modes.</li>
<li>Delivered detailed analytics including stats, contributors, language breakdown, commits, and issues for repositories.</li>
<li>Enabled export of analysis results as JSON or CSV for downstream processing.</li>
</ul>
<h3 id="skills">Skills</h3>
<ul>
<li>LangChain</li>
<li>Ollama</li>
<li>MongoDB</li>
<li>requests</li>
<li>BeautifulSoup</li>
<li>Playwright</li>
<li>pypdf</li>
<li>pymupdf</li>
<li>OCR</li>
<li>Docker Compose</li>
<li>Node.js</li>
<li>Express</li>
<li>Multer</li>
</ul>
<h2 id="resume-ml_engineer-2588100">Resume — ml_engineer (25.88/100)</h2>
<p><strong>Machine Learning Engineer – Model Training, Evaluation, and Deployment</strong></p>
<p>Implemented and maintained machine learning pipelines for natural language and web‑scraping tasks, leveraging LangChain, Ollama, and MongoDB. Built data extraction utilities and web scrapers using requests, BeautifulSoup, Playwright, and OCR libraries. Developed backend services for file handling and AI‑powered repository analysis with Docker Compose.</p>
<h3 id="projects_1">Projects</h3>
<ul>
<li>Implemented a LangChain ReAct Agent with Ollama and MongoDB to orchestrate tool calls for AI tasks.</li>
<li>Built a static web scraper using requests and BeautifulSoup for data extraction.</li>
<li>Developed a dynamic web scraper with Playwright for interactive content retrieval.</li>
<li>Created a PDF extractor converting PDFs to text via pypdf, pymupdf, and OCR.</li>
<li>Provided MongoDB helpers for inserting and searching documents in the agent workflow.</li>
<li>Constructed a minimalist file upload system with Node.js and Express, offering web interface, file listing, and download capabilities.</li>
<li>Built a Docker Compose‑based backend and frontend for the local lending application.</li>
<li>Developed an AI‑powered natural language search for GitHub repositories, supporting URL and natural language queries, and delivering analytics in JSON or CSV.</li>
</ul>
<h3 id="skills_1">Skills</h3>
<ul>
<li>LangChain</li>
<li>Ollama</li>
<li>MongoDB</li>
<li>requests</li>
<li>BeautifulSoup</li>
<li>Playwright</li>
<li>pypdf</li>
<li>pymupdf</li>
<li>OCR</li>
<li>Node.js</li>
<li>Express</li>
<li>Docker Compose</li>
</ul>
<h2 id="resume-backend_platform_engineer-3225100">Resume — backend_platform_engineer (32.25/100)</h2>
<p><strong>Backend / Platform Engineer – Service &amp; Infrastructure Builder</strong></p>
<p>Engineered and maintained backend services and infrastructure, focusing on API design, containerization, and data persistence. Delivered microservices with Docker, managed data with MongoDB and PostgreSQL, and implemented robust logging and monitoring solutions.</p>
<h3 id="projects_2">Projects</h3>
<ul>
<li>Implemented a multi-threaded C pipeline for AoA protection, parsing UART frames and validating sensor data using median filtering and outlier rejection.</li>
<li>Designed and executed a finite‑state machine driven by CSV‑defined thresholds to classify flight states and control elevator deflection for AoA mitigation.</li>
<li>Built a minimalist file upload system with Node.js and Express, providing a web interface for uploading, listing, and downloading files, with configurable size limits via Multer.</li>
<li>Developed a dynamic web scraper using Playwright and a static scraper with requests and BeautifulSoup, integrating PDF extraction via pypdf, pymupdf, and OCR.</li>
<li>Created an AI-powered natural language search for GitHub repositories, delivering analytics and exportable results in JSON or CSV formats.</li>
<li>Integrated MongoDB helpers for inserting and searching documents in an agent-based system using LangChain ReAct Agent with Ollama.</li>
<li>Started and built backend and frontend services with Docker Compose, enabling consistent local development environments.</li>
</ul>
<h3 id="skills_2">Skills</h3>
<ul>
<li>C</li>
<li>Node.js</li>
<li>Express</li>
<li>Python</li>
<li>Playwright</li>
<li>BeautifulSoup</li>
<li>requests</li>
<li>pypdf</li>
<li>pymupdf</li>
<li>OCR</li>
<li>MongoDB</li>
<li>Docker Compose</li>
<li>Docker</li>
<li>GitHub</li>
<li>JSON</li>
<li>CSV</li>
</ul>
<h2 id="resume-data_scientist-5267100">Resume — data_scientist (52.67/100)</h2>
<p><strong>Data Scientist – Turning Data into Measured Answers</strong></p>
<p>Built and deployed data pipelines that extract, transform, and analyze information from web sources and code repositories. Delivered AI‑powered search and analytics tools that provide actionable insights in JSON and CSV formats.</p>
<h3 id="projects_3">Projects</h3>
<ul>
<li>Implemented a dynamic web scraper using Playwright to collect structured data for downstream analysis.</li>
<li>Developed a PDF extractor converting documents to text via pypdf, pymupdf, and OCR for data ingestion.</li>
<li>Created MongoDB helper functions to insert and search documents, enabling efficient data retrieval.</li>
<li>Built an AI‑powered natural language search engine for GitHub repositories, delivering detailed analytics such as contributor stats, language breakdown, commits, and issues.</li>
<li>Exported analysis results as JSON or CSV, facilitating integration with downstream data science workflows.</li>
</ul>
<h3 id="skills_3">Skills</h3>
<ul>
<li>Python</li>
<li>Playwright</li>
<li>BeautifulSoup</li>
<li>requests</li>
<li>pypdf</li>
<li>pymupdf</li>
<li>OCR</li>
<li>MongoDB</li>
<li>LangChain</li>
<li>Ollama</li>
<li>Jupyter</li>
<li>pandas</li>
<li>numpy</li>
<li>SQL</li>
<li>data visualization</li>
<li>regression</li>
<li>classification</li>
<li>clustering</li>
<li>hypothesis testing</li>
<li>A/B testing</li>
<li>experiment design</li>
</ul>
<h2 id="resume-balanced-3842100">Resume — balanced (38.42/100)</h2>
<p><strong>Software Engineer – Generalist across services, data, and ML</strong></p>
<p>Implemented multi‑threaded C pipelines for AoA protection, built web‑scraping utilities in Python, and developed a Node.js file upload server. Designed and deployed Docker‑based services, integrated MongoDB helpers, and engineered AI‑powered GitHub repository analytics.</p>
<h3 id="projects_4">Projects</h3>
<ul>
<li>Implemented a multi‑threaded C pipeline for AoA protection</li>
<li>Parsed UART frames and validated sensor data using median filtering and outlier rejection</li>
<li>Estimated AoA with weighted fusion and a Kalman filter</li>
<li>Ran a finite‑state machine driven by CSV‑defined thresholds to classify flight states</li>
<li>Controlled elevator deflection to mitigate excessive AoA in protection mode</li>
<li>Logged state transitions and sensor faults to fault_log.csv</li>
<li>Used LangChain ReAct Agent with Ollama and MongoDB</li>
<li>Provided a static web scraper using requests and BeautifulSoup</li>
<li>Provided a dynamic web scraper using Playwright</li>
<li>Provided a PDF extractor converting PDFs to text via pypdf, pymupdf, and OCR</li>
<li>Included MongoDB helpers for inserting and searching documents</li>
<li>Built a minimalist file upload system with Node.js and Express for FreeBSD</li>
<li>Provided a simple web‑based file upload interface</li>
<li>Stored uploaded files with original filenames</li>
<li>Listed uploaded files with size and upload date</li>
<li>Enabled direct file download from the interface</li>
<li>Configured default maximum upload size of 10 MB via Multer limits</li>
<li>Started and built backend with Docker Compose</li>
<li>Started and built frontend with Docker Compose</li>
<li>Provided AI‑powered natural language search for GitHub repositories</li>
<li>Supported URL‑based and natural language search modes</li>
<li>Delivered detailed analytics including stats, contributors, language breakdown, commits, and issues</li>
<li>Allowed exporting analysis results as JSON or CSV</li>
</ul>
<h3 id="skills_4">Skills</h3>
<ul>
<li>C</li>
<li>Python</li>
<li>Node.js</li>
<li>Express</li>
<li>JavaScript</li>
<li>Docker Compose</li>
<li>MongoDB</li>
<li>LangChain</li>
<li>Ollama</li>
<li>requests</li>
<li>BeautifulSoup</li>
<li>Playwright</li>
<li>pypdf</li>
<li>pymupdf</li>
<li>OCR</li>
<li>Multer</li>
<li>GitHub API</li>
</ul>
<h2 id="improvement-plan">Improvement plan</h2>
<p>5 steps, ~40 hours, +16.9 ATS points if all are completed.</p>
<h3 id="1-add-data-science-notebook-to-aiagentdemo">1. Add Data Science Notebook to AiAgentDemo</h3>
<p><em>12h · +7.23 ATS · role: data_scientist · repo: <code>AiAgentDemo</code></em></p>
<ul>
<li><strong>Gap:</strong> Cannot evidence statistics, visualisation, dataset, notebook, correlation, feature, matplotlib, seaborn, metric, r</li>
<li><strong>Evidence found:</strong> AiAgentDemo (Python web‑scraping and PDF extraction)</li>
<li><strong>Action:</strong> Create a Jupyter notebook (notebook.ipynb) in the AiAgentDemo repository that loads a public dataset (e.g., UCI Wine), performs descriptive statistics, computes correlation matrix, engineers at least two new features, visualises distributions and relationships with matplotlib and seaborn, and records a simple model’s evaluation metric (e.g., accuracy).</li>
<li><strong>Done when:</strong> notebook.ipynb committed to AiAgentDemo with executed cells, plots saved as PNG, and a markdown summary of statistics and metrics.</li>
</ul>
<h3 id="2-create-r-analysis-demo-repository">2. Create R Analysis Demo Repository</h3>
<p><em>10h · +3.95 ATS · role: data_scientist · new work</em></p>
<ul>
<li><strong>Gap:</strong> Missing evidence of R language and related visualisation (ggplot2) for keyword ‘r’</li>
<li><strong>Evidence found:</strong> none</li>
<li><strong>Action:</strong> Initialize a new repository named r-analysis-demo, add an R script (analysis.R) that loads the same dataset, performs summary statistics, computes correlations, creates at least two ggplot2 visualisations, and saves plots as PNG files.</li>
<li><strong>Done when:</strong> analysis.R, summary.txt, and plot PNG files committed to r-analysis-demo.</li>
</ul>
<h3 id="3-update-aiagentdemo-readme-with-data-science-section">3. Update AiAgentDemo README with Data Science Section</h3>
<p><em>4h · +2.63 ATS · role: data_scientist · repo: <code>AiAgentDemo</code></em></p>
<ul>
<li><strong>Gap:</strong> Resume sections lack explicit data‑science artefacts</li>
<li><strong>Evidence found:</strong> AiAgentDemo (existing README with web‑scraping description)</li>
<li><strong>Action:</strong> Edit the README.md to add a “Data Science Projects” section linking to notebook.ipynb, features.py, evaluate_model.py and summarising the statistical and visualisation work.</li>
<li><strong>Done when:</strong> README.md updated and pushed, showing the new section with hyperlinks.</li>
</ul>
<h3 id="4-add-model-metric-reporting-script">4. Add Model Metric Reporting Script</h3>
<p><em>6h · +1.97 ATS · role: data_scientist · repo: <code>AiAgentDemo</code></em></p>
<ul>
<li><strong>Gap:</strong> No demonstrated metric calculation or reporting</li>
<li><strong>Evidence found:</strong> AiAgentDemo (existing Python utilities)</li>
<li><strong>Action:</strong> Create a script (evaluate_model.py) that trains a simple classifier/regressor on the same dataset, computes relevant metrics (e.g., RMSE, F1‑score), and writes a JSON report (metrics.json).</li>
<li><strong>Done when:</strong> evaluate_model.py and generated metrics.json committed to the repo.</li>
</ul>
<h3 id="5-implement-featureengineering-module">5. Implement Feature‑Engineering Module</h3>
<p><em>8h · +1.1 ATS · role: data_scientist · repo: <code>AiAgentDemo</code></em></p>
<ul>
<li><strong>Gap:</strong> Missing evidence of feature creation and statistical processing</li>
<li><strong>Evidence found:</strong> AiAgentDemo (Python code base)</li>
<li><strong>Action:</strong> Add a Python module (features.py) that defines functions for cleaning, scaling, and generating new features from a DataFrame; include unit tests (test_features.py) covering at least three cases.</li>
<li><strong>Done when:</strong> features.py and test_features.py committed, with 100% test pass shown in CI badge or local run output.</li>
</ul>
<h2 id="measure-these">Measure these</h2>
<p>Each of these is plausible but unproven. The agent refused to put a number on it; run the command and the number becomes claimable.</p>
<ul>
<li><code>chronosModelImprovement</code> — The distance‑aware model does not win the majority of series, losing 745 out of 1484.</li>
<li><em>why:</em> contains number(s) absent from the evidence: 745</li>
<li><strong><code>measure this and record the command and result</code></strong></li>
<li><code>tender_search_app</code> — Enables users to add and refine keywords to improve search accuracy.</li>
<li><em>why:</em> asserts an effect without a measured quantity</li>
<li><strong><code>run the evaluation set and record the metric</code></strong></li>
<li><code>sandbox-agent</code> — The agent graph is lazily loaded to improve startup performance.</li>
<li><em>why:</em> asserts an effect without a measured quantity</li>
<li><strong><code>measure this and record the command and result</code></strong></li>
</ul>
<h2 id="refused-claims">Refused claims</h2>
<p>The model proposed these; the evidence did not support them. They are listed so you can see what was filtered, not hidden.</p>
<ul>
<li><code>locallend</code> — The backend is implemented in Java using Spring Boot.<br />
<em>every supporting quote is absent from the evidence</em></li>
<li><code>locallend</code> — The frontend is written in TypeScript with React.<br />
<em>every supporting quote is absent from the evidence</em></li>
<li><code>locallend</code> — The repository includes image upload functionality.<br />
<em>every supporting quote is absent from the evidence</em></li>
<li><code>locallend</code> — The repository implements CRUD operations for items.<br />
<em>every supporting quote is absent from the evidence</em></li>
<li><code>AiTerminal</code> — The project uses the tcell library for terminal UI.<br />
<em>supporting quote is real but does not mention anything in the claim</em></li>
<li><code>AiTerminal</code> — The repository does not include a CI configuration.<br />
<em>supporting quote is real but does not mention anything in the claim</em></li>
</ul>
<h2 id="evidence-index">Evidence index</h2>
<h3 id="aoa_controller_ty">AOA_Controller_ty</h3>
<p>AoA Controller is a multi-threaded C pipeline that protects aircraft from excessive angle‑of‑attack by parsing UART frames, validating sensor data, estimating AoA, and driving elevator commands, warnings, and fault logging.</p>
<ul>
<li>Implements a multi-threaded C pipeline for AoA protection.</li>
<li><code>README.md</code>: "Angle-of-Attack (AoA) protection system for embedded flight control, implemented as a multi-threaded C pipeline."</li>
<li>Parses UART frames and validates sensor data using median filtering and outlier rejection.</li>
<li><code>README.md</code>: "UART_FrameParser       │  sem_post(frame_ready_sem)       ▼ SensorValidator        ← median filter, outlier rejection, confidence score"</li>
<li>Estimates AoA with weighted fusion and a Kalman filter.</li>
<li><code>README.md</code>: "AoA_Estimator          ← weighted fusion + Kalman filter"</li>
<li>Runs a finite‑state machine driven by CSV‑defined thresholds to classify flight states.</li>
<li><code>README.md</code>: "FlightControlFSM       ← CSV thresholds → NORMAL / WARNING / PROTECTION"</li>
<li>Controls elevator deflection to mitigate excessive AoA in protection mode.</li>
<li><code>README.md</code>: "ElevatorCmdManager   ← corrective deflection in PROTECTION mode"</li>
<li>Logs state transitions and sensor faults to fault_log.csv.</li>
<li><code>README.md</code>: "FaultLogger          ← logs state transitions + sensor faults"</li>
</ul>
<h3 id="aiagentdemo">AiAgentDemo</h3>
<p>A small demo showing a LangChain ReAct agent that orchestrates static, dynamic, and PDF scraping tools and stores results in MongoDB.</p>
<ul>
<li>Uses LangChain ReAct Agent with Ollama and MongoDB.</li>
<li><code>README.md</code>: "built with <strong>LangChain</strong>, <strong>Ollama</strong>, and <strong>MongoDB</strong>."</li>
<li>Provides a static web scraper using requests and BeautifulSoup.</li>
<li><code>README.md</code>: "static scraper (requests+BS)"</li>
<li>Provides a dynamic web scraper using Playwright.</li>
<li><code>README.md</code>: "dynamic scraper (Playwright)"</li>
<li>Provides a PDF extractor that converts PDFs to text via pypdf, pymupdf, and OCR.</li>
<li><code>README.md</code>: "PDF extractor (pypdf→OCR)"</li>
<li>Includes MongoDB helpers for inserting and searching documents.</li>
<li><code>README.md</code>: "MongoDB tools (save / search)"</li>
<li>The agent only decides which tool to call, delegating work to the underlying functions.</li>
<li><code>README.md</code>: "The agent is a decision layer. It does not scrape, parse, or store data."</li>
</ul>
<h3 id="file-upload-server">file-upload-server</h3>
<p>A minimalist file upload server built with Node.js and Express for FreeBSD.</p>
<ul>
<li>The project is a minimalist file upload system built with Node.js and Express for FreeBSD.</li>
<li><code>README.md</code>: "A minimalist file upload system built with Node.js and Express for FreeBSD systems."</li>
<li>It provides a simple web-based file upload interface.</li>
<li><code>README.md</code>: "Simple web-based file upload interface"</li>
<li>Uploaded files are stored with their original filenames.</li>
<li><code>README.md</code>: "Original filename preservation"</li>
<li>The server lists uploaded files with their size and upload date.</li>
<li><code>README.md</code>: "File listing with size and upload date"</li>
<li>Users can download files directly from the interface.</li>
<li><code>README.md</code>: "Direct file download capability"</li>
<li>The default maximum upload size is 10 MB, configurable via the Multer limits.</li>
<li><code>README.md</code>: "Default maximum file size is 10MB."</li>
</ul>
<h3 id="locallend">locallend</h3>
<p>LocalLend is a full‑stack web application that lets users list, browse, and book items, built with a Java Spring Boot backend and a TypeScript React frontend.</p>
<ul>
<li>The backend is started and built with Docker Compose.</li>
<li><code>README.md</code>: "start and build the backend using docker compose up --build -d (from the locallend directory)"</li>
<li>The frontend is started and built with Docker Compose.</li>
<li><code>README.md</code>: "start and build the frontend using  docker compose up --build -d (from the locallend-frontend directory)"</li>
</ul>
<h3 id="githubrepoanalyzer">GithubRepoAnalyzer</h3>
<p>GitHubRepoAnalyzer is a React application that analyzes GitHub repositories using AI-powered natural language search and provides comprehensive analytics.</p>
<ul>
<li>Provides AI‑powered natural language search for GitHub repositories.</li>
<li><code>README.md</code>: "A comprehensive React application for analyzing GitHub repositories with AI-powered natural language search capabilities."</li>
<li>Supports both URL-based and natural language search modes.</li>
<li><code>README.md</code>: "Dual Search Modes - URL Search: Direct repository analysis via GitHub URLs - Natural Language Search: AI-powered repository discovery using plain English descri"</li>
<li>Delivers detailed analytics including stats, contributors, language breakdown, commits, and issues.</li>
<li><code>README.md</code>: "Comprehensive Analytics - Repository statistics and metadata - Contributor analysis with activity metrics - Programming language breakdown with visual charts - "</li>
<li>Allows exporting analysis results as JSON or CSV.</li>
<li><code>README.md</code>: "Export Functionality: Download analysis results in JSON/CSV formats"</li>
<li>Fully containerized with Docker for easy deployment.</li>
<li><code>README.md</code>: "Docker Container (Production Ready)"</li>
<li>Manages GitHub API rate limits with public and private modes.</li>
<li><code>README.md</code>: "Public API Mode: 60 requests per hour (no authentication required) - Private API Mode: 5,000 requests per hour (requires GitHub personal access token)"</li>
</ul>
<h3 id="spring-gemini-chat">spring-gemini-chat</h3>
<p>Spring Gemini Chat is a reactive Spring Boot application that provides real‑time chat powered by Google Gemini AI.</p>
<ul>
<li>Built with Spring WebFlux for high-performance, non-blocking operations</li>
<li><code>README.md</code>: "Built with Spring WebFlux for high-performance, non-blocking operations"</li>
<li>Powered by Google's latest Gemini AI model</li>
<li><code>README.md</code>: "Powered by Google's latest Gemini AI model"</li>
<li>Instant responses with typing indicators</li>
<li><code>README.md</code>: "Instant responses with typing indicators"</li>
<li>Clean, responsive web interface</li>
<li><code>README.md</code>: "Clean, responsive web interface"</li>
<li>Built-in health checks and status indicators</li>
<li><code>README.md</code>: "Built-in health checks and status indicators"</li>
<li>Support for contextual conversations</li>
<li><code>README.md</code>: "Support for contextual conversations"</li>
</ul>
<h3 id="next-express-ejs-crud">next-express-ejs-crud</h3>
<p>A starter that runs a Next.js frontend and an Express + EJS backend side‑by‑side to demonstrate CRUD operations.</p>
<ul>
<li>Provides a backend that serves both EJS‑rendered pages and a JSON API.</li>
<li><code>README.md</code>: "Backend: Express + EJS (server-rendered pages at http://localhost:4000) and a JSON API under /api."</li>
<li>Runs a Next.js frontend that consumes the Express JSON API.</li>
<li><code>README.md</code>: "Frontend: Next.js (at http://localhost:3000) that calls the API."</li>
<li>Rewrites /api/* requests in Next.js to the Express API on port 4000.</li>
<li><code>README.md</code>: "next.config.js rewrites /api/* to http://localhost:4000/api/* in development/production."</li>
<li>Wraps fetch in the frontend to use an absolute URL that works during server‑side rendering.</li>
<li><code>README.md</code>: "web/lib/api.js wraps fetch. On the server it uses an absolute URL based on NEXT_ORIGIN so SSR fetches hit Next first and are rewritten to the API."</li>
<li>Provides a Dockerfile that builds and runs both the Next.js and Express apps in a single container.</li>
<li><code>README.md</code>: "This repo includes a single Dockerfile that builds both apps and runs them in one container (ports 3000 for Next, 4000 for Express)."</li>
<li>Implements a JSON API with CRUD routes for posts.</li>
<li><code>README.md</code>: "API Routes (JSON) - GET /api/posts — list all posts"</li>
</ul>
<h3 id="nextjs-express-crud-hf">nextjs-express-crud-hf</h3>
<p>A full‑stack Next.js and Express CRUD application ready for Hugging Face deployment.</p>
<ul>
<li>Provides a full‑stack CRUD application with server‑side rendering.</li>
<li><code>README.md</code>: "Full-stack CRUD app with SSR, ready for Hugging Face deployment."</li>
<li>Combines Next.js for the front‑end and Express for the API.</li>
<li><code>README.md</code>: "Next.js + Express CRUD Application"</li>
<li>Includes a GitHub Actions workflow that deploys the app to Hugging Face.</li>
<li><code>README.md</code>: "Deploy to Hugging Face: - Add HF_TOKEN to GitHub secrets - Update HF_REPO_ID in workflow - Push to GitHub"</li>
<li>Uses Docker as the SDK for containerized deployment.</li>
<li><code>README.md</code>: "docker"</li>
<li>Configures the application to run on port 7860.</li>
<li><code>README.md</code>: "app_port: 7860"</li>
<li>Runs the front‑end on localhost port 3000.</li>
<li><code>README.md</code>: "Visit http://localhost:3000"</li>
</ul>
<h3 id="aoa_controller_ty_1">AOA_Controller_ty_1</h3>
<p>A real‑time angle of attack monitoring and elevator control system for aircraft, with ESP32 firmware and PC‑based simulation tools.</p>
<ul>
<li>Provides real‑time AOA monitoring and elevator control on ESP32.</li>
<li><code>README.md</code>: "Real-time angle of attack monitoring and elevator control system for aircraft, with ESP32 firmware and PC-based simulation tools."</li>
<li>Simulates all four flight phases using CSV test data.</li>
<li><code>README.md</code>: "Process flight test data from CSV file. Simulates all 4 flight phases (TAKEOFF, CLIMB, CRUISE, LANDING) with realistic FSM state transitions and elevator comman"</li>
<li>Implements a 10°/sec slew‑rate limit on elevator deflection.</li>
<li><code>README.md</code>: "Slew-rate limited elevator (10°/sec max)"</li>
<li>Handles missing sensor readings by treating 0.00 values as absent.</li>
<li><code>README.md</code>: "Handles missing sensor data (0.00 values)"</li>
<li>Provides an interactive UART simulator for real‑time debugging.</li>
<li><code>README.md</code>: "Interactive UART Simulator (simulator.c) ... Real-time interactive testing with manual AOA message input."</li>
<li>Builds without requiring a local ESP‑IDF installation.</li>
<li><code>README.md</code>: "No ESP-IDF dependencies (uses mock headers)"</li>
</ul>
<h3 id="chronosmodelimprovement">chronosModelImprovement</h3>
<p>Chronos Model Improvement implements a distance‑aware enhancement to the Chronos time series forecasting model.</p>
<ul>
<li>Provides a distance‑aware variant of the Chronos forecasting model.</li>
<li><code>README.md</code>: "This repository contains improvements to the Chronos time series forecasting model."</li>
<li>Adds a distance‑aware enhancement to the Chronos model.</li>
<li><code>README.md</code>: "Distance-aware enhancement for Chronos model."</li>
<li>Benchmark shows the distance‑aware model has a higher MAE (1315.20) than the original (1309.50).</li>
<li><code>README.md</code>: "MAE | 1315.20 | 1309.50 | Original"</li>
<li>Benchmark shows the distance‑aware model has a higher RMSE (1593.91) than the original (1584.71).</li>
<li><code>README.md</code>: "RMSE | 1593.91 | 1584.71 | Original"</li>
<li>The distance‑aware model wins 739 out of 1484 series, a win rate of 49.8%.</li>
<li><code>README.md</code>: "Win Rate: Distance-Aware wins 739/1484 series (49.8%)"</li>
</ul>
<h3 id="websocket_mcqs1">websocket_mcqs1</h3>
<p>A MERN‑stack application that lets users create multiple‑choice questions and play against each other with real‑time score updates.</p>
<ul>
<li>The repository implements a real‑time MCQ battle.</li>
<li><code>README.md</code>: "Realtime MCQs battle"</li>
<li>The application is built with the MERN stack.</li>
<li><code>README.md</code>: "It is written in Javascript using MERN stack"</li>
<li>Installation requires running <code>npm install</code>.</li>
<li><code>README.md</code>: "npm install"</li>
<li>The server is started with <code>node server.js</code>.</li>
<li><code>README.md</code>: "node server.js"</li>
<li>Scores are observed in real time by all participants.</li>
<li><code>README.md</code>: "observe their score in realtime"</li>
<li>Users can create MCQs and play against each other.</li>
<li><code>README.md</code>: "create MCQs and play against each other"</li>
</ul>
<h3 id="aniketqwgithubio">aniketqw.github.io</h3>
<p>Aniket Saxena’s personal portfolio site and admin dashboard built with a custom design system.</p>
<ul>
<li>Implemented a custom design system for the portfolio.</li>
<li><code>README.md</code>: "A design system distilled from the personal portfolio of <strong>Aniket Saxena</strong> — AI Engineer &amp; Full-Stack Developer"</li>
<li>Built both a public portfolio site and a private admin dashboard.</li>
<li><code>README.md</code>: "Two surfaces are represented: the public <strong>Portfolio</strong> site and the private <strong>Admin</strong> (repo manager) tool."</li>
<li>Styled the admin dashboard with distinct typography and color accents.</li>
<li><code>README.md</code>: "Admin uses <strong>Title Case with lowercase helper copy</strong> and ALL-CAPS 10–12px uppercase labels with 1–3px letter-spacing."</li>
<li>Implemented a Python script to fetch and filter GitHub repositories.</li>
<li><code>README.md</code>: "Add fetch_repos.py to retrieve and filter GitHub repos"</li>
<li>Added a dynamic projects section that loads data from GitHub.</li>
<li><code>README.md</code>: "Add projects section with dynamic project loading"</li>
<li>Documented design tokens and UI kits for reuse across the site.</li>
<li><code>README.md</code>: "Add design system assets and documentation - colors, typography, components, and UI kits"</li>
</ul>
<h3 id="pehenava-backend">pehenava-backend</h3>
<p>Pehenava Backend is a Node.js/Express application that connects to MongoDB to provide API services for the Pehenava project.</p>
<ul>
<li>The repository implements a Node.js/Express backend that integrates with MongoDB.</li>
<li><code>README.md</code>: "A Node.js/Express backend application with MongoDB integration for the Pehenava project."</li>
<li>It supports a local setup where dependencies are installed via npm.</li>
<li><code>README.md</code>: "When running without Docker, <strong>all dependencies will be installed locally</strong> on your machine."</li>
<li>It also supports a Dockerized deployment that containers all dependencies.</li>
<li><code>README.md</code>: "When running with Docker, <strong>all dependencies are containerized</strong> - nothing is installed on your local machine except Docker itself."</li>
<li>The README provides a Docker command to run a MongoDB container for the backend.</li>
<li><code>README.md</code>: "docker run -d \   --name pehenava-mongo \   -p 27017:27017 \   mongo:latest"</li>
<li>Docker Compose is recommended to manage both the application and MongoDB containers together.</li>
<li><code>README.md</code>: "docker-compose up -d"</li>
<li>The application starts an Express server listening on port 3000.</li>
<li><code>README.md</code>: "Server running on port 3000"</li>
</ul>
<h3 id="aiterminal">AiTerminal</h3>
<p>AiTerminal is a Go-based terminal AI application that runs via <code>go run terminal.go</code>.</p>
<ul>
<li>The application is started by running <code>go run terminal.go</code>.</li>
<li><code>readme.md</code>: "go run terminal.go"</li>
<li>The project uses the gin web framework.</li>
<li><code>go.mod</code>: ""github.com/gin-gonic/gin""</li>
<li>The project uses gorilla/websocket for real‑time communication.</li>
<li><code>go.mod</code>: ""github.com/gorilla/websocket""</li>
<li>The repository does not contain a test suite.</li>
<li><code>signals</code>: ""has_test_suite": false"</li>
</ul>
<h3 id="tender_search_app">tender_search_app</h3>
<p>A web‑based tool that lets users search and filter Indian tenders using a Gradio interface.</p>
<ul>
<li>Provides search functionality across multiple Indian tender sources.</li>
<li><code>README.md</code>: "Search for tenders across multiple sources."</li>
<li>Allows filtering of search results by recency and relevance.</li>
<li><code>README.md</code>: "Filter tenders based on recency and relevance."</li>
<li>Implements a user‑friendly interface using Gradio.</li>
<li><code>README.md</code>: "User-friendly interface built with Gradio."</li>
<li>Builds the application stack with Python, Gradio, Langchain, BeautifulSoup, Requests, and Pandas.</li>
<li><code>README.md</code>: "Technologies Used - Python - Gradio - Langchain - BeautifulSoup - Requests - Pandas"</li>
<li>Runs the application via a Python script that starts the Gradio server.</li>
<li><code>README.md</code>: "Run the application:    <code>python main.py</code>"</li>
</ul>
<h3 id="rule-basedcustomkafkapartitioner">Rule-BasedCustomKafkaPartitioner</h3>
<p>A Java 21 demo that implements a custom Kafka partitioner routing messages based on key rules.</p>
<ul>
<li>Implements a custom Kafka partitioner that routes messages based on key rules.</li>
<li><code>README.md</code>: "This project demonstrates a custom Kafka partitioner that routes messages based on rules: <code>USA</code> keys go to the last partition, others are hashed across the rema"</li>
<li>The partitioner sends keys equal to "USA" to the last partition and hashes other keys to the remaining partitions.</li>
<li><code>README.md</code>: "Custom partitioner logic: <code>USA</code> → last partition; others → hash % (numPartitions - 1)."</li>
<li>A producer demo sends sample messages with keys including "USA" to the topic "orders".</li>
<li><code>README.md</code>: "The producer sends sample messages with keys <code>INDIA</code>, <code>GERMANY</code>, <code>USA</code>, <code>FRANCE</code>, <code>USA</code> to topic <code>orders</code>."</li>
<li>Producer output shows "USA" messages are routed to partition 3, the last partition.</li>
<li><code>README.md</code>: "Sent key=INDIA value=Order-1 → partition=1 Sent key=GERMANY value=Order-2 → partition=1 Sent key=FRANCE value=Order-4 → partition=2 Sent key=USA value=Order-3 →"</li>
<li>The demo topic is created with four partitions, enabling the rule‑based routing.</li>
<li><code>README.md</code>: "Topic <code>orders</code> is auto‑created with 4 partitions by default."</li>
<li>Kafka is run locally using Docker Compose for a single‑node setup.</li>
<li><code>README.md</code>: "docker-compose.yml for a single‑node Kafka setup."</li>
</ul>
<h3 id="sandbox-agent">sandbox-agent</h3>
<p>sandbox-agent is a Python-based LangGraph agent framework that supports an educative tool, lazy loading, and web search integration.</p>
<ul>
<li>Credentials for the educative tool are stored in an environment variable.</li>
<li><code>commits/6d8d1e9879</code>: "Move EDUCATIVE_COOKIES_B64 from source code to environment variable"</li>
<li>An educative feature allows users to ask questions about a course using a cookie.</li>
<li><code>commits/f7281212c5</code>: "added educative feature just we can just give cookie and ask question about the course"</li>
<li>A dummy stub container is provided for local tool execution, with a clear error message when run in LangGraph Studio.</li>
<li><code>commits/1a0c192bc9</code>: "added dummy stub container working but some other error NotImplementedError('Tool execution is not available in LangGraph Studio. Please run the agent locally ("</li>
<li>The repository includes a tavily web search tool for external data retrieval.</li>
<li><code>commits/5d6794c559</code>: "updating added  tavily web search"</li>
<li>An explicit NotImplementedError informs users that tool execution requires running the agent locally.</li>
<li><code>commits/1a0c192bc9</code>: "NotImplementedError('Tool execution is not available in LangGraph Studio. Please run the agent locally (<code>python harness.py</code>) to execute tools.')"</li>
</ul>
<h3 id="websocket_chatroom">websocket_chatroom</h3>
<p>A simple realtime chatroom implemented with WebSocket.</p>
<ul>
<li>Built a simple chatroom with realtime communication using WebSocket.</li>
<li><code>README.md</code>: "Simple chatroom with realtime communication implemented using websocket"</li>
<li>Implemented broadcasting of messages to multiple clients.</li>
<li><code>commit:3538e568ad</code>: "Broadcast to multiple clients"</li>
<li>Server sends messages back to the client and the client receives them.</li>
<li><code>commit:9fb75c6f01</code>: "Send message back to client from server and receiving it on client side"</li>
<li>Client can send a message to the server via WebSocket.</li>
<li><code>commit:e60c00c599</code>: "send a message from client to server send() (index.html)"</li>
<li>Server responds to the connection event when a client connects.</li>
<li><code>commit:d4c0cf540f</code>: "on connection respond to connection event on server side"</li>
<li>The repository includes an automated test suite.</li>
<li><code>signals</code>: ""has_test_suite": true"</li>
</ul>
<h3 id="chat-starter-code">chat-starter-code</h3>
<p>A simple WebSocket-based chat application built with Node.js.</p>
<ul>
<li>The project is a WebSocket‑based chat application.</li>
<li><code>README.md</code>: "# WebSockets-ws Chat Application"</li>
<li>The application is started with <code>npm install</code> followed by <code>node server.js</code>.</li>
<li><code>README.md</code>: "To run this application, first open up a terminal. Then, run the command below:  <code>sh npm install node server.js</code>"</li>
<li>The application is deployed and accessible at https://chat-starter-code.onrender.com/.</li>
<li><code>README.md</code>: "https://chat-starter-code.onrender.com/"</li>
</ul>
<h2 id="run-cost">Run cost</h2>
<ul>
<li>Groq: 11359 tokens across 3 calls</li>
<li>Cache hit rate: 100%</li>
<li>Wall clock: 2779s</li>
</ul>
</section>

<section class="panel report" id="p-trace" role="tabpanel" aria-labelledby="t-trace" hidden>
<a id="trace"></a>
<h1 id="run-trace">Run trace</h1>
<p>A complete record of one pipeline run, written so the output can be <strong>audited rather than trusted</strong>. Every claim the verifier rejected is listed below with its reason — that section is the most informative part of this file.</p>
<ul>
<li><strong>Command:</strong> <code>python scripts/build_sample.py --username aniketqw</code></li>
<li><strong>Account:</strong> <code>aniketqw</code> (public repositories only)</li>
<li><strong>Python:</strong> 3.11.15 on Darwin</li>
<li><strong>Models:</strong> small/mid <code>openai/gpt-oss-20b</code>, big <code>openai/gpt-oss-120b</code></li>
<li><strong>Free-tier ceiling:</strong> 8,000 tokens/min, 1,000 requests/day (per model)</li>
</ul>
<h2 id="stages">Stages</h2>
<div class="scroll"><table>
<thead>
<tr>
<th>Stage</th>
<th>What happened</th>
<th style="text-align: right;">Tokens</th>
<th style="text-align: right;">Seconds</th>
</tr>
</thead>
<tbody>
<tr>
<td>list_repos</td>
<td>99 repositories found via the GitHub MCP server; 57 public. Private repositories are filtered out here, before anything is fetched.</td>
<td style="text-align: right;">—</td>
<td style="text-align: right;">7.7</td>
</tr>
<tr>
<td>select_repos</td>
<td>Jev scored 47 repositories for $0.00161; kept 21. No Groq tokens spent.</td>
<td style="text-align: right;">—</td>
<td style="text-align: right;">50.6</td>
</tr>
<tr>
<td>fetch_facts</td>
<td>Deterministic fetch for 21 repositories (19 with a README, 9 with tests). No model involved.</td>
<td style="text-align: right;">—</td>
<td style="text-align: right;">26.7</td>
</tr>
<tr>
<td>safety_scan</td>
<td>1 finding(s) in the scanned repositories.</td>
<td style="text-align: right;">—</td>
<td style="text-align: right;">0.0</td>
</tr>
<tr>
<td>summarize_repo</td>
<td>21 repositories summarized, 111 raw claims proposed.</td>
<td style="text-align: right;">—</td>
<td style="text-align: right;">0.0</td>
</tr>
<tr>
<td>verify_claims</td>
<td>102/111 claims survived. Pure Python: no model, no tokens.</td>
<td style="text-align: right;">—</td>
<td style="text-align: right;">0.0</td>
</tr>
<tr>
<td>build_resumes</td>
<td>5 resumes written from verified claims only.</td>
<td style="text-align: right;">9180</td>
<td style="text-align: right;">56.0</td>
</tr>
<tr>
<td>plan_improvements</td>
<td>5 evidence-linked steps.</td>
<td style="text-align: right;">2179</td>
<td style="text-align: right;">2637.9</td>
</tr>
</tbody>
</table></div>
<h2 id="headline-numbers">Headline numbers</h2>
<ul>
<li><strong>102/111 claims verified</strong> (92%); 3 need measurement; 6 rejected outright.</li>
<li><strong>5 resumes</strong> built from verified claims only.</li>
<li><strong>Groq:</strong> 11,359 tokens across 3 node(s).</li>
<li><strong>Cache hit rate:</strong> 100% — an unchanged repo costs nothing on a re-run.</li>
<li><strong>Wall clock:</strong> 2779s, most of it waiting on the 8,000 tokens/minute limit.</li>
</ul>
<h2 id="repository-selection">Repository selection</h2>
<p>Scored by Jev (a typed decision model), not by Groq — this costs fractions of a cent and leaves the scarce Groq budget for text.</p>
<div class="scroll"><table>
<thead>
<tr>
<th>Repo</th>
<th style="text-align: right;">Claimable</th>
<th>Tier</th>
<th>Language</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>AOA_Controller_ty</code></td>
<td style="text-align: right;">0.69</td>
<td>mid</td>
<td>C</td>
</tr>
<tr>
<td><code>AiAgentDemo</code></td>
<td style="text-align: right;">0.69</td>
<td>mid</td>
<td>Python</td>
</tr>
<tr>
<td><code>file-upload-server</code></td>
<td style="text-align: right;">0.68</td>
<td>mid</td>
<td>HTML</td>
</tr>
<tr>
<td><code>locallend</code></td>
<td style="text-align: right;">0.67</td>
<td>mid</td>
<td>Java</td>
</tr>
<tr>
<td><code>GithubRepoAnalyzer</code></td>
<td style="text-align: right;">0.64</td>
<td>mid</td>
<td>JavaScript</td>
</tr>
<tr>
<td><code>spring-gemini-chat</code></td>
<td style="text-align: right;">0.64</td>
<td>mid</td>
<td>HTML</td>
</tr>
<tr>
<td><code>next-express-ejs-crud</code></td>
<td style="text-align: right;">0.63</td>
<td>mid</td>
<td>JavaScript</td>
</tr>
<tr>
<td><code>nextjs-express-crud-hf</code></td>
<td style="text-align: right;">0.60</td>
<td>mid</td>
<td>JavaScript</td>
</tr>
<tr>
<td><code>AOA_Controller_ty_1</code></td>
<td style="text-align: right;">0.59</td>
<td>mid</td>
<td>C</td>
</tr>
<tr>
<td><code>chronosModelImprovement</code></td>
<td style="text-align: right;">0.59</td>
<td>mid</td>
<td>Python</td>
</tr>
<tr>
<td><code>websocket_mcqs1</code></td>
<td style="text-align: right;">0.58</td>
<td>small</td>
<td>JavaScript</td>
</tr>
<tr>
<td><code>aniketqw.github.io</code></td>
<td style="text-align: right;">0.57</td>
<td>mid</td>
<td>HTML</td>
</tr>
<tr>
<td><code>pehenava-backend</code></td>
<td style="text-align: right;">0.57</td>
<td>mid</td>
<td>TypeScript</td>
</tr>
<tr>
<td><code>AiTerminal</code></td>
<td style="text-align: right;">0.56</td>
<td>small</td>
<td>Go</td>
</tr>
<tr>
<td><code>tender_search_app</code></td>
<td style="text-align: right;">0.53</td>
<td>small</td>
<td>Python</td>
</tr>
<tr>
<td><code>Rule-BasedCustomKafkaPartitioner</code></td>
<td style="text-align: right;">0.52</td>
<td>small</td>
<td>Java</td>
</tr>
<tr>
<td><code>Booking-System</code></td>
<td style="text-align: right;">0.50</td>
<td>mid</td>
<td>Python</td>
</tr>
<tr>
<td><code>sandbox-agent</code></td>
<td style="text-align: right;">0.50</td>
<td>mid</td>
<td>Python</td>
</tr>
<tr>
<td><code>TaskAssignWithDjango</code></td>
<td style="text-align: right;">0.48</td>
<td>big</td>
<td>Python</td>
</tr>
<tr>
<td><code>websocket_chatroom</code></td>
<td style="text-align: right;">0.48</td>
<td>big</td>
<td>HTML</td>
</tr>
<tr>
<td><code>chat-starter-code</code></td>
<td style="text-align: right;">0.46</td>
<td>small</td>
<td>HTML</td>
</tr>
</tbody>
</table></div>
<h2 id="claim-verdicts">Claim verdicts</h2>
<p>Verification is <strong>plain Python</strong>, not a prompt. Every number in a claim must appear in that repository's evidence bundle; every quote must be present <em>and</em> relevant to the claim it supports.</p>
<h3 id="rejected-6">Rejected (6)</h3>
<p>These were proposed by the model and thrown out. They never reach a resume.</p>
<ul>
<li><code>locallend</code> — The backend is implemented in Java using Spring Boot.</li>
<li><em>every supporting quote is absent from the evidence</em></li>
<li><code>locallend</code> — The frontend is written in TypeScript with React.</li>
<li><em>every supporting quote is absent from the evidence</em></li>
<li><code>locallend</code> — The repository includes image upload functionality.</li>
<li><em>every supporting quote is absent from the evidence</em></li>
<li><code>locallend</code> — The repository implements CRUD operations for items.</li>
<li><em>every supporting quote is absent from the evidence</em></li>
<li><code>AiTerminal</code> — The project uses the tcell library for terminal UI.</li>
<li><em>supporting quote is real but does not mention anything in the claim</em></li>
<li><code>AiTerminal</code> — The repository does not include a CI configuration.</li>
<li><em>supporting quote is real but does not mention anything in the claim</em></li>
</ul>
<h3 id="needs-measurement-3">Needs measurement (3)</h3>
<p>Plausible but unproven. The agent refused to attach a number it could not find, and emitted a measurement task instead.</p>
<ul>
<li><code>chronosModelImprovement</code> — The distance‑aware model does not win the majority of series, losing 745 out of 1484.</li>
<li><em>contains number(s) absent from the evidence: 745</em> → <strong><code>measure this and record the command and result</code></strong></li>
<li><code>tender_search_app</code> — Enables users to add and refine keywords to improve search accuracy.</li>
<li><em>asserts an effect without a measured quantity</em> → <strong><code>run the evaluation set and record the metric</code></strong></li>
<li><code>sandbox-agent</code> — The agent graph is lazily loaded to improve startup performance.</li>
<li><em>asserts an effect without a measured quantity</em> → <strong><code>measure this and record the command and result</code></strong></li>
</ul>
<h2 id="resume-scores">Resume scores</h2>
<p>Deterministic 100-point ATS rubric, no model involved.</p>
<div class="scroll"><table>
<thead>
<tr>
<th>Role</th>
<th style="text-align: right;">Score</th>
<th style="text-align: right;">Keywords</th>
<th style="text-align: right;">Role fit</th>
<th style="text-align: right;">Numbers</th>
</tr>
</thead>
<tbody>
<tr>
<td>data_scientist</td>
<td style="text-align: right;"><strong>52.67</strong></td>
<td style="text-align: right;">27.12</td>
<td style="text-align: right;">14.37</td>
<td style="text-align: right;">0.0</td>
</tr>
<tr>
<td>balanced</td>
<td style="text-align: right;"><strong>38.42</strong></td>
<td style="text-align: right;">15.33</td>
<td style="text-align: right;">10.04</td>
<td style="text-align: right;">0.59</td>
</tr>
<tr>
<td>ai_llm_agent_engineer</td>
<td style="text-align: right;"><strong>34.06</strong></td>
<td style="text-align: right;">12.19</td>
<td style="text-align: right;">9.27</td>
<td style="text-align: right;">0.0</td>
</tr>
<tr>
<td>backend_platform_engineer</td>
<td style="text-align: right;"><strong>32.25</strong></td>
<td style="text-align: right;">10.88</td>
<td style="text-align: right;">9.0</td>
<td style="text-align: right;">0.0</td>
</tr>
<tr>
<td>ml_engineer</td>
<td style="text-align: right;"><strong>25.88</strong></td>
<td style="text-align: right;">6.36</td>
<td style="text-align: right;">7.08</td>
<td style="text-align: right;">0.0</td>
</tr>
</tbody>
</table></div>
<h3 id="bullets-dropped-during-resume-writing">Bullets dropped during resume writing</h3>
<p>None. Every generated bullet traced back to a verified claim.</p>
<h2 id="improvement-plan">Improvement plan</h2>
<p>5 steps, ~40 hours, +16.9 ATS points. The gain figure comes from the same rubric that produced the score, not from the model.</p>
<div class="scroll"><table>
<thead>
<tr>
<th>Step</th>
<th>Repo</th>
<th style="text-align: right;">Hours</th>
<th style="text-align: right;">ATS gain</th>
</tr>
</thead>
<tbody>
<tr>
<td>Add Data Science Notebook to AiAgentDemo</td>
<td><code>AiAgentDemo</code></td>
<td style="text-align: right;">12</td>
<td style="text-align: right;">+7.23</td>
</tr>
<tr>
<td>Create R Analysis Demo Repository</td>
<td><code>new work</code></td>
<td style="text-align: right;">10</td>
<td style="text-align: right;">+3.95</td>
</tr>
<tr>
<td>Update AiAgentDemo README with Data Science Section</td>
<td><code>AiAgentDemo</code></td>
<td style="text-align: right;">4</td>
<td style="text-align: right;">+2.63</td>
</tr>
<tr>
<td>Add Model Metric Reporting Script</td>
<td><code>AiAgentDemo</code></td>
<td style="text-align: right;">6</td>
<td style="text-align: right;">+1.97</td>
</tr>
<tr>
<td>Implement Feature‑Engineering Module</td>
<td><code>AiAgentDemo</code></td>
<td style="text-align: right;">8</td>
<td style="text-align: right;">+1.1</td>
</tr>
</tbody>
</table></div>
<h2 id="security-findings-in-the-scanned-repositories">Security findings in the scanned repositories</h2>
<ul>
<li><strong>[high]</strong> <code>pehenava-backend/pehnava-ai-frontend/.env.local</code> — An .env file is committed. These normally hold live credentials.</li>
</ul>
<h2 id="measured-quality">Measured quality</h2>
<div class="scroll"><table>
<thead>
<tr>
<th>Metric</th>
<th style="text-align: right;">Result</th>
</tr>
</thead>
<tbody>
<tr>
<td>claim faithfulness (text that reaches a resume)</td>
<td style="text-align: right;">n/a</td>
</tr>
<tr>
<td>number precision</td>
<td style="text-align: right;">1.0</td>
</tr>
<tr>
<td>whole-summary faithfulness (includes unverified prose)</td>
<td style="text-align: right;">0.9184</td>
</tr>
<tr>
<td>repositories judged</td>
<td style="text-align: right;">6</td>
</tr>
</tbody>
</table></div>
<h2 id="notes">Notes</h2>
<ul>
<li>Private repositories are excluded before any fetch, so no private content enters this pipeline at all.</li>
<li>Summaries are cached by (repo, head SHA, prompt version, model); the cache hit rate above shows how much of this run was free.</li>
</ul>
<h2 id="how-to-reproduce">How to reproduce</h2>
<pre><code class="language-bash">pip install -e &quot;.[dev]&quot;
cp .env.sample .env   # add GROQ_API_KEY, TYPESAFE_API_KEY, GITHUB_PERSONAL_ACCESS_TOKEN
rba doctor
python scripts/build_sample.py --username aniketqw
</code></pre>
<p>Summaries are cached by <code>(repo, head SHA, prompt version, model)</code>, so a second run over unchanged repositories spends no tokens at all.</p>
</section>

<section class="panel report" id="p-how" role="tabpanel" aria-labelledby="t-how" hidden>
<h2 id="how-it-works">How it works</h2>
<pre><code>list_repos        official GitHub MCP server, read-only toolset
select_repos      Jev scores every repo for &quot;is this claimable&quot;; no Groq tokens
fetch_facts       deterministic: README, tree, commits, tests, CI, dependencies
safety_scan       flags .env / tokens / cookies committed in the repositories
summarize_repo    strict JSON, one repo per call, rate limited
verify_claims     CODE, not a prompt: unsupported claims are dropped
score_roles       deterministic 100-point ATS rubric
build_resumes     bullets drawn only from verified claims
plan_improvements evidence-linked steps with hours and ATS gain
</code></pre>
<h3 id="why-claims-survive-or-die">Why claims survive or die</h3>
<p><code>verify_claims</code> is plain Python. Every digit in a generated claim must appear
in that repository's evidence bundle, and every supporting quote must be both
present <strong>and</strong> relevant to the claim it backs. A claim that fails is not
softened &mdash; it is dropped, and reappears as a measurement task.</p>
<p>The clearest example from a real run: the model wrote <em>"losing 745 out of
1484"</em>, having computed <code>1484 &amp;minus; 739</code> itself. The evidence contains 739 and
1484 but never 745, so the claim was refused.</p>
<h3 id="measured-quality">Measured quality</h3>
<p>Claim faithfulness &mdash; the text that actually reaches a resume &mdash; and
number precision both measure <strong>1.00</strong>. Whole-summary faithfulness is <strong>0.83</strong>,
and that gap is reported rather than averaged away: the descriptive
<code>problem</code> and <code>approach</code> fields are framing, are not run through
<code>verify_claims</code>, and can contain fair-sounding inference.</p>
<h3 id="reproducibility-measured">Reproducibility, measured</h3>
<p>Two independent runs over the same repositories, both at <code>temperature: 0</code>:</p>
<div class="scroll"><table>
<thead>
<tr>
<th>Half of the pipeline</th>
<th>Result</th>
</tr>
</thead>
<tbody>
<tr>
<td>Verification (<code>verify_claims</code>)</td>
<td><strong>Identical.</strong> Same 102/111 verdicts, the same 6 rejections, the same reasons.</td>
</tr>
<tr>
<td>Generation (<code>build_resumes</code>)</td>
<td><strong>Variable.</strong> ATS scores moved by up to <strong>24 points</strong> (<code>balanced</code> 59.1 → 34.8).</td>
</tr>
</tbody>
</table></div>
<p>That split is the design working as intended, not an accident: the half that
decides what may be <em>said</em> is deterministic Python, so it cannot drift. The
half that decides <em>how</em> to say it is a language model, and Groq's <code>gpt-oss</code>
models are not reproducible even at temperature 0.</p>
<p>The practical consequence is worth stating plainly: <strong>treat a single ATS score
as indicative, not precise.</strong> What is stable is which claims are allowed
through — and that is the property the project actually promises.</p>
<h3 id="operating-inside-a-free-tier">Operating inside a free tier</h3>
<p>The binding constraint is <strong>8,000 tokens per minute</strong>, not the request rate.
One evidence-linked repository summary costs about 2,074 tokens, so the ceiling
is roughly four per minute. Responses are cached by
<code>(repo, head SHA, prompt version, model)</code>, so an unchanged repository costs
nothing on a re-run.</p>
</section>

<footer>
Built by <a href="https://github.com/aniketqw/resume-builder-agent">resume-builder-agent</a>
&middot; LangGraph + Groq + the official GitHub MCP server
&middot; page generated by <code>scripts/build_site.py</code>
</footer>
</div>

<script>
const tabs = [...document.querySelectorAll('[role=tab]')];
tabs.forEach(tab => tab.addEventListener('click', () => {
  tabs.forEach(other => {
    const selected = other === tab;
    other.setAttribute('aria-selected', selected);
    document.getElementById(other.getAttribute('aria-controls')).hidden = !selected;
  });
}));
</script>
</body>
</html>