@urmzd/github-insights 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/.githooks/commit-msg +4 -0
  2. package/.githooks/pre-commit +4 -0
  3. package/AGENTS.md +32 -19
  4. package/CHANGELOG.md +45 -0
  5. package/CONTRIBUTING.md +18 -19
  6. package/README.md +21 -24
  7. package/action.yml +1 -1
  8. package/assets/insights/index.svg +45 -4
  9. package/assets/insights/metrics-constellation.svg +55 -0
  10. package/assets/insights/metrics-impact.svg +55 -0
  11. package/assets/insights/metrics-rhythm.svg +55 -0
  12. package/assets/insights/metrics-velocity.svg +55 -0
  13. package/examples/classic/README.md +36 -2
  14. package/examples/classic/index.svg +45 -4
  15. package/examples/classic/metrics-constellation.svg +55 -0
  16. package/examples/classic/metrics-impact.svg +55 -0
  17. package/examples/classic/metrics-rhythm.svg +55 -0
  18. package/examples/classic/metrics-velocity.svg +55 -0
  19. package/examples/ecosystem/README.md +39 -28
  20. package/examples/ecosystem/index.svg +45 -4
  21. package/examples/ecosystem/metrics-constellation.svg +55 -0
  22. package/examples/ecosystem/metrics-impact.svg +55 -0
  23. package/examples/ecosystem/metrics-rhythm.svg +55 -0
  24. package/examples/ecosystem/metrics-velocity.svg +55 -0
  25. package/examples/minimal/README.md +36 -2
  26. package/examples/minimal/index.svg +45 -4
  27. package/examples/minimal/metrics-constellation.svg +55 -0
  28. package/examples/minimal/metrics-impact.svg +55 -0
  29. package/examples/minimal/metrics-rhythm.svg +55 -0
  30. package/examples/minimal/metrics-velocity.svg +55 -0
  31. package/examples/modern/README.md +62 -50
  32. package/examples/modern/index.svg +45 -4
  33. package/examples/modern/metrics-constellation.svg +55 -0
  34. package/examples/modern/metrics-impact.svg +55 -0
  35. package/examples/modern/metrics-rhythm.svg +55 -0
  36. package/examples/modern/metrics-velocity.svg +55 -0
  37. package/llms.txt +4 -4
  38. package/package.json +1 -1
  39. package/skills/github-insights/SKILL.md +35 -81
  40. package/sr.yaml +9 -0
  41. package/src/api.ts +2 -140
  42. package/src/components/contribution-rhythm.tsx +152 -0
  43. package/src/components/full-svg.test.tsx +4 -1
  44. package/src/components/full-svg.tsx +14 -7
  45. package/src/components/impact-trail.tsx +90 -0
  46. package/src/components/language-velocity.tsx +181 -0
  47. package/src/components/project-constellation.tsx +97 -0
  48. package/src/components/section.test.tsx +5 -3
  49. package/src/components/section.tsx +5 -13
  50. package/src/components/style-defs.tsx +44 -3
  51. package/src/index.ts +28 -47
  52. package/src/metrics.test.ts +50 -57
  53. package/src/metrics.ts +277 -95
  54. package/src/readme.test.ts +2 -4
  55. package/src/templates.test.ts +19 -16
  56. package/src/templates.ts +30 -16
  57. package/src/theme.ts +11 -1
  58. package/src/types.ts +28 -7
  59. package/assets/insights/metrics-calendar.svg +0 -14
  60. package/assets/insights/metrics-complexity.svg +0 -14
  61. package/assets/insights/metrics-contributions.svg +0 -14
  62. package/assets/insights/metrics-expertise.svg +0 -14
  63. package/assets/insights/metrics-languages.svg +0 -14
  64. package/assets/insights/metrics-pulse.svg +0 -14
  65. package/examples/classic/metrics-calendar.svg +0 -14
  66. package/examples/classic/metrics-complexity.svg +0 -14
  67. package/examples/classic/metrics-contributions.svg +0 -14
  68. package/examples/classic/metrics-expertise.svg +0 -14
  69. package/examples/classic/metrics-languages.svg +0 -14
  70. package/examples/classic/metrics-pulse.svg +0 -14
  71. package/examples/ecosystem/metrics-calendar.svg +0 -14
  72. package/examples/ecosystem/metrics-complexity.svg +0 -14
  73. package/examples/ecosystem/metrics-contributions.svg +0 -14
  74. package/examples/ecosystem/metrics-expertise.svg +0 -14
  75. package/examples/ecosystem/metrics-languages.svg +0 -14
  76. package/examples/ecosystem/metrics-pulse.svg +0 -14
  77. package/examples/minimal/metrics-calendar.svg +0 -14
  78. package/examples/minimal/metrics-complexity.svg +0 -14
  79. package/examples/minimal/metrics-contributions.svg +0 -14
  80. package/examples/minimal/metrics-expertise.svg +0 -14
  81. package/examples/minimal/metrics-languages.svg +0 -14
  82. package/examples/minimal/metrics-pulse.svg +0 -14
  83. package/examples/modern/metrics-calendar.svg +0 -14
  84. package/examples/modern/metrics-complexity.svg +0 -14
  85. package/examples/modern/metrics-contributions.svg +0 -14
  86. package/examples/modern/metrics-expertise.svg +0 -14
  87. package/examples/modern/metrics-languages.svg +0 -14
  88. package/examples/modern/metrics-pulse.svg +0 -14
  89. package/src/components/bar-chart.test.tsx +0 -38
  90. package/src/components/bar-chart.tsx +0 -54
  91. package/src/components/contribution-calendar.test.tsx +0 -44
  92. package/src/components/contribution-calendar.tsx +0 -94
  93. package/src/components/contribution-cards.test.tsx +0 -36
  94. package/src/components/contribution-cards.tsx +0 -58
  95. package/src/components/donut-chart.test.tsx +0 -36
  96. package/src/components/donut-chart.tsx +0 -102
  97. package/src/components/project-cards.test.tsx +0 -46
  98. package/src/components/project-cards.tsx +0 -66
  99. package/src/components/stat-cards.test.tsx +0 -32
  100. package/src/components/stat-cards.tsx +0 -57
  101. package/src/components/tech-highlights.test.tsx +0 -63
  102. package/src/components/tech-highlights.tsx +0 -109
  103. package/teasr.toml +0 -14
@@ -0,0 +1,55 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="808" height="470" viewBox="0 0 808 470"><defs><style>
2
+ .t { font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif; font-variant-numeric: tabular-lining; }
3
+ .t-h { font-size: 14px; fill: #c9d1d9; letter-spacing: 2px; font-weight: 600; }
4
+ .t-sub { font-size: 11px; fill: #6e7681; }
5
+ .t-label { font-size: 12px; fill: #8b949e; }
6
+ .t-value { font-size: 11px; fill: #6e7681; }
7
+ .t-subhdr { font-size: 11px; fill: #8b949e; letter-spacing: 1px; font-weight: 600; }
8
+ .t-stat-label { font-size: 10px; fill: #8b949e; font-weight: 600; }
9
+ .t-stat-value { font-size: 22px; font-weight: 700; }
10
+ .t-card-title { font-size: 12px; fill: #58a6ff; font-weight: 700; }
11
+ .t-card-detail { font-size: 11px; fill: #8b949e; }
12
+ .t-pill { font-size: 11px; font-weight: 600; }
13
+ .t-bullet { font-size: 12px; fill: #c9d1d9; }
14
+ .bg-fill { fill: #0d1117; }
15
+ .card-fill { fill: #161b22; }
16
+ .border-stroke { stroke: #30363d; }
17
+
18
+ @media (prefers-color-scheme: light) {
19
+ .bg-fill { fill: #ffffff; }
20
+ .card-fill { fill: #f6f8fa; }
21
+ .border-stroke { stroke: #d0d7de; }
22
+ .t-h { fill: #1f2328; }
23
+ .t-sub { fill: #656d76; }
24
+ .t-label { fill: #656d76; }
25
+ .t-value { fill: #656d76; }
26
+ .t-subhdr { fill: #656d76; }
27
+ .t-stat-label { fill: #656d76; }
28
+ .t-card-title { fill: #0969da; }
29
+ .t-card-detail { fill: #656d76; }
30
+ .t-bullet { fill: #1f2328; }
31
+ }
32
+
33
+ @keyframes fadeIn {
34
+ from { opacity: 0; transform: translateY(8px); }
35
+ to { opacity: 1; transform: translateY(0); }
36
+ }
37
+ @keyframes scaleIn {
38
+ from { transform: scale(0); opacity: 0; }
39
+ to { transform: scale(1); opacity: 1; }
40
+ }
41
+ @keyframes drawPath {
42
+ from { stroke-dashoffset: var(--path-length); }
43
+ to { stroke-dashoffset: 0; }
44
+ }
45
+ @keyframes radarReveal {
46
+ from { transform: scale(0); opacity: 0; }
47
+ to { transform: scale(1); opacity: 0.6; }
48
+ }
49
+ .fade-1 { animation: fadeIn 0.6s ease-out 0.1s both; }
50
+ .fade-2 { animation: fadeIn 0.6s ease-out 0.25s both; }
51
+ .fade-3 { animation: fadeIn 0.6s ease-out 0.4s both; }
52
+ .fade-4 { animation: fadeIn 0.6s ease-out 0.55s both; }
53
+ .fade-5 { animation: fadeIn 0.6s ease-out 0.7s both; }
54
+ .fade-6 { animation: fadeIn 0.6s ease-out 0.85s both; }
55
+ </style></defs><rect width="808" height="470" rx="12" class="bg-fill" fill="#0d1117"/><text x="24" y="40" class="t t-h">PROJECT CONSTELLATION</text><text x="24" y="56" class="t t-sub">Projects mapped by language ecosystem and complexity</text><line x1="86.66666666666666" y1="96" x2="540.0000000000001" y2="120.53875511853082" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="86.66666666666666" y1="96" x2="101.77777777777777" y2="142.49828082510157" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="86.66666666666666" y1="96" x2="691.1111111111112" y2="158.0073118714582" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="86.66666666666666" y1="96" x2="701.1851851851852" y2="201.5334554563757" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="86.66666666666666" y1="96" x2="630.6666666666667" y2="227.2225043401914" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="86.66666666666666" y1="96" x2="711.2592592592594" y2="232.3782668531791" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="86.66666666666666" y1="96" x2="546.0444444444445" y2="258.631934808372" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="86.66666666666666" y1="96" x2="474.51851851851853" y2="278.8434847437097" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="86.66666666666666" y1="96" x2="116.88888888888889" y2="283.6542853176344" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="86.66666666666666" y1="96" x2="558.1333333333334" y2="292.3106325882719" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="86.66666666666666" y1="96" x2="570.2222222222223" y2="329.166624380661" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="313.33333333333337" y1="112.79041969174966" x2="464.44444444444446" y2="164.67436990155963" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="313.33333333333337" y1="112.79041969174966" x2="711.2592592592594" y2="232.3782668531791" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="313.33333333333337" y1="112.79041969174966" x2="343.55555555555554" y2="246.46261287346326" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="313.33333333333337" y1="112.79041969174966" x2="474.51851851851853" y2="278.8434847437097" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="540.0000000000001" y1="120.53875511853082" x2="101.77777777777777" y2="142.49828082510157" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="540.0000000000001" y1="120.53875511853082" x2="701.1851851851852" y2="201.5334554563757" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="540.0000000000001" y1="120.53875511853082" x2="630.6666666666667" y2="227.2225043401914" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="540.0000000000001" y1="120.53875511853082" x2="711.2592592592594" y2="232.3782668531791" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="540.0000000000001" y1="120.53875511853082" x2="546.0444444444445" y2="258.631934808372" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="540.0000000000001" y1="120.53875511853082" x2="552.088888888889" y2="274.54624873266056" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="540.0000000000001" y1="120.53875511853082" x2="474.51851851851853" y2="278.8434847437097" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="540.0000000000001" y1="120.53875511853082" x2="558.1333333333334" y2="292.3106325882719" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="540.0000000000001" y1="120.53875511853082" x2="564.1777777777779" y2="307.862976308606" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="540.0000000000001" y1="120.53875511853082" x2="570.2222222222223" y2="329.166624380661" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="101.77777777777777" y1="142.49828082510157" x2="701.1851851851852" y2="201.5334554563757" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="101.77777777777777" y1="142.49828082510157" x2="630.6666666666667" y2="227.2225043401914" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="101.77777777777777" y1="142.49828082510157" x2="711.2592592592594" y2="232.3782668531791" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="101.77777777777777" y1="142.49828082510157" x2="546.0444444444445" y2="258.631934808372" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="101.77777777777777" y1="142.49828082510157" x2="116.88888888888889" y2="283.6542853176344" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="101.77777777777777" y1="142.49828082510157" x2="558.1333333333334" y2="292.3106325882719" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="101.77777777777777" y1="142.49828082510157" x2="570.2222222222223" y2="329.166624380661" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="691.1111111111112" y1="158.0073118714582" x2="701.1851851851852" y2="201.5334554563757" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="691.1111111111112" y1="158.0073118714582" x2="711.2592592592594" y2="232.3782668531791" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="691.1111111111112" y1="158.0073118714582" x2="252.88888888888889" y2="328.39937129877455" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="464.44444444444446" y1="164.67436990155963" x2="711.2592592592594" y2="232.3782668531791" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="464.44444444444446" y1="164.67436990155963" x2="343.55555555555554" y2="246.46261287346326" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="464.44444444444446" y1="164.67436990155963" x2="474.51851851851853" y2="278.8434847437097" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="701.1851851851852" y1="201.5334554563757" x2="630.6666666666667" y2="227.2225043401914" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="701.1851851851852" y1="201.5334554563757" x2="711.2592592592594" y2="232.3782668531791" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="701.1851851851852" y1="201.5334554563757" x2="546.0444444444445" y2="258.631934808372" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="701.1851851851852" y1="201.5334554563757" x2="474.51851851851853" y2="278.8434847437097" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="701.1851851851852" y1="201.5334554563757" x2="116.88888888888889" y2="283.6542853176344" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="701.1851851851852" y1="201.5334554563757" x2="558.1333333333334" y2="292.3106325882719" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="701.1851851851852" y1="201.5334554563757" x2="252.88888888888889" y2="328.39937129877455" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="701.1851851851852" y1="201.5334554563757" x2="570.2222222222223" y2="329.166624380661" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="630.6666666666667" y1="227.2225043401914" x2="711.2592592592594" y2="232.3782668531791" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="630.6666666666667" y1="227.2225043401914" x2="546.0444444444445" y2="258.631934808372" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="630.6666666666667" y1="227.2225043401914" x2="558.1333333333334" y2="292.3106325882719" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="630.6666666666667" y1="227.2225043401914" x2="192.44444444444446" y2="302.2601725533792" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="630.6666666666667" y1="227.2225043401914" x2="570.2222222222223" y2="329.166624380661" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="711.2592592592594" y1="232.3782668531791" x2="343.55555555555554" y2="246.46261287346326" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="711.2592592592594" y1="232.3782668531791" x2="546.0444444444445" y2="258.631934808372" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="711.2592592592594" y1="232.3782668531791" x2="474.51851851851853" y2="278.8434847437097" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="711.2592592592594" y1="232.3782668531791" x2="116.88888888888889" y2="283.6542853176344" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="711.2592592592594" y1="232.3782668531791" x2="558.1333333333334" y2="292.3106325882719" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="711.2592592592594" y1="232.3782668531791" x2="484.59259259259255" y2="305.5148106265424" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="711.2592592592594" y1="232.3782668531791" x2="252.88888888888889" y2="328.39937129877455" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="711.2592592592594" y1="232.3782668531791" x2="570.2222222222223" y2="329.166624380661" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="343.55555555555554" y1="246.46261287346326" x2="474.51851851851853" y2="278.8434847437097" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="546.0444444444445" y1="258.631934808372" x2="552.088888888889" y2="274.54624873266056" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="546.0444444444445" y1="258.631934808372" x2="558.1333333333334" y2="292.3106325882719" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="546.0444444444445" y1="258.631934808372" x2="564.1777777777779" y2="307.862976308606" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="546.0444444444445" y1="258.631934808372" x2="570.2222222222223" y2="329.166624380661" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="552.088888888889" y1="274.54624873266056" x2="558.1333333333334" y2="292.3106325882719" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="552.088888888889" y1="274.54624873266056" x2="564.1777777777779" y2="307.862976308606" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="552.088888888889" y1="274.54624873266056" x2="570.2222222222223" y2="329.166624380661" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="558.1333333333334" y1="292.3106325882719" x2="564.1777777777779" y2="307.862976308606" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="558.1333333333334" y1="292.3106325882719" x2="570.2222222222223" y2="329.166624380661" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><line x1="564.1777777777779" y1="307.862976308606" x2="570.2222222222223" y2="329.166624380661" stroke="#30363d" stroke-width="1" stroke-opacity="0.15" stroke-dasharray="4 4"/><circle cx="86.66666666666666" cy="96" r="26" fill="#00ADD8" fill-opacity="0.08" class="fade-1"/><circle cx="86.66666666666666" cy="96" r="22" fill="#00ADD8" fill-opacity="0.7" stroke="#00ADD8" stroke-width="1.5" stroke-opacity="0.9" class="fade-1"/><text x="86.66666666666666" y="132" class="t t-value fade-1" text-anchor="middle">resume-generator</text><circle cx="313.33333333333337" cy="112.79041969174966" r="26" fill="#DA5B0B" fill-opacity="0.08" class="fade-2"/><circle cx="313.33333333333337" cy="112.79041969174966" r="22" fill="#DA5B0B" fill-opacity="0.7" stroke="#DA5B0B" stroke-width="1.5" stroke-opacity="0.9" class="fade-2"/><text x="313.33333333333337" y="148.79041969174966" class="t t-value fade-2" text-anchor="middle">lepus-classifier</text><circle cx="540.0000000000001" cy="120.53875511853082" r="26" fill="#dea584" fill-opacity="0.08" class="fade-3"/><circle cx="540.0000000000001" cy="120.53875511853082" r="22" fill="#dea584" fill-opacity="0.7" stroke="#dea584" stroke-width="1.5" stroke-opacity="0.9" class="fade-3"/><text x="540.0000000000001" y="156.53875511853082" class="t t-value fade-3" text-anchor="middle">linear-gp</text><circle cx="101.77777777777777" cy="142.49828082510157" r="26" fill="#00ADD8" fill-opacity="0.08" class="fade-4"/><circle cx="101.77777777777777" cy="142.49828082510157" r="22" fill="#00ADD8" fill-opacity="0.7" stroke="#00ADD8" stroke-width="1.5" stroke-opacity="0.9" class="fade-4"/><text x="101.77777777777777" y="178.49828082510157" class="t t-value fade-4" text-anchor="middle">zigbee-rest</text><circle cx="691.1111111111112" cy="158.0073118714582" r="26" fill="#3178c6" fill-opacity="0.08" class="fade-5"/><circle cx="691.1111111111112" cy="158.0073118714582" r="22" fill="#3178c6" fill-opacity="0.7" stroke="#3178c6" stroke-width="1.5" stroke-opacity="0.9" class="fade-5"/><text x="691.1111111111112" y="194.0073118714582" class="t t-value fade-5" text-anchor="middle">urmzd.com</text><circle cx="464.44444444444446" cy="164.67436990155963" r="26" fill="#3572A5" fill-opacity="0.08" class="fade-6"/><circle cx="464.44444444444446" cy="164.67436990155963" r="22" fill="#3572A5" fill-opacity="0.7" stroke="#3572A5" stroke-width="1.5" stroke-opacity="0.9" class="fade-6"/><text x="464.44444444444446" y="200.67436990155963" class="t t-value fade-6" text-anchor="middle">exp-agi-models</text><circle cx="701.1851851851852" cy="201.5334554563757" r="22.32055238935067" fill="#3178c6" fill-opacity="0.08" class="fade-6"/><circle cx="701.1851851851852" cy="201.5334554563757" r="18.32055238935067" fill="#3178c6" fill-opacity="0.7" stroke="#3178c6" stroke-width="1.5" stroke-opacity="0.9" class="fade-6"/><text x="701.1851851851852" y="233.85400784572636" class="t t-value fade-6" text-anchor="middle">resume-generator-…</text><circle cx="630.6666666666667" cy="227.2225043401914" r="21.644993857961033" fill="#89e051" fill-opacity="0.08" class="fade-6"/><circle cx="630.6666666666667" cy="227.2225043401914" r="17.644993857961033" fill="#89e051" fill-opacity="0.7" stroke="#89e051" stroke-width="1.5" stroke-opacity="0.9" class="fade-6"/><text x="630.6666666666667" y="258.8674981981524" class="t t-value fade-6" text-anchor="middle">dotfiles</text><circle cx="711.2592592592594" cy="232.3782668531791" r="15.061182065019677" fill="#3178c6" fill-opacity="0.08" class="fade-6"/><circle cx="711.2592592592594" cy="232.3782668531791" r="11.061182065019677" fill="#3178c6" fill-opacity="0.7" stroke="#3178c6" stroke-width="1.5" stroke-opacity="0.9" class="fade-6"/><text x="711.2592592592594" y="257.43944891819876" class="t t-value fade-6" text-anchor="middle">zoro</text><circle cx="343.55555555555554" cy="246.46261287346326" r="25.36863924926572" fill="#DA5B0B" fill-opacity="0.08" class="fade-6"/><circle cx="343.55555555555554" cy="246.46261287346326" r="21.36863924926572" fill="#DA5B0B" fill-opacity="0.7" stroke="#DA5B0B" stroke-width="1.5" stroke-opacity="0.9" class="fade-6"/><text x="343.55555555555554" y="281.831252122729" class="t t-value fade-6" text-anchor="middle">md-classifier</text><circle cx="546.0444444444445" cy="258.631934808372" r="20.751279260918498" fill="#dea584" fill-opacity="0.08" class="fade-6"/><circle cx="546.0444444444445" cy="258.631934808372" r="16.751279260918498" fill="#dea584" fill-opacity="0.7" stroke="#dea584" stroke-width="1.5" stroke-opacity="0.9" class="fade-6"/><text x="546.0444444444445" y="289.38321406929055" class="t t-value fade-6" text-anchor="middle">oag</text><circle cx="552.088888888889" cy="274.54624873266056" r="26" fill="#dea584" fill-opacity="0.08" class="fade-6"/><circle cx="552.088888888889" cy="274.54624873266056" r="22" fill="#dea584" fill-opacity="0.7" stroke="#dea584" stroke-width="1.5" stroke-opacity="0.9" class="fade-6"/><text x="552.088888888889" y="310.54624873266056" class="t t-value fade-6" text-anchor="middle">teasr</text><circle cx="474.51851851851853" cy="278.8434847437097" r="25.46688344753587" fill="#3572A5" fill-opacity="0.08" class="fade-6"/><circle cx="474.51851851851853" cy="278.8434847437097" r="21.46688344753587" fill="#3572A5" fill-opacity="0.7" stroke="#3572A5" stroke-width="1.5" stroke-opacity="0.9" class="fade-6"/><text x="474.51851851851853" y="314.3103681912456" class="t t-value fade-6" text-anchor="middle">languide</text><circle cx="116.88888888888889" cy="283.6542853176344" r="13.54807689254857" fill="#00ADD8" fill-opacity="0.08" class="fade-6"/><circle cx="116.88888888888889" cy="283.6542853176344" r="9.54807689254857" fill="#00ADD8" fill-opacity="0.7" stroke="#00ADD8" stroke-width="1.5" stroke-opacity="0.9" class="fade-6"/><text x="116.88888888888889" y="307.20236221018297" class="t t-value fade-6" text-anchor="middle">gadk</text><circle cx="162.22222222222223" cy="286.5269007993924" r="24.861890796612347" fill="#b07219" fill-opacity="0.08" class="fade-6"/><circle cx="162.22222222222223" cy="286.5269007993924" r="20.861890796612347" fill="#b07219" fill-opacity="0.7" stroke="#b07219" stroke-width="1.5" stroke-opacity="0.9" class="fade-6"/><text x="162.22222222222223" y="321.38879159600475" class="t t-value fade-6" text-anchor="middle">flappy-bird</text><circle cx="558.1333333333334" cy="292.3106325882719" r="15.591815351271915" fill="#dea584" fill-opacity="0.08" class="fade-6"/><circle cx="558.1333333333334" cy="292.3106325882719" r="11.591815351271915" fill="#dea584" fill-opacity="0.7" stroke="#dea584" stroke-width="1.5" stroke-opacity="0.9" class="fade-6"/><text x="558.1333333333334" y="317.90244793954383" class="t t-value fade-6" text-anchor="middle">sr</text><circle cx="192.44444444444446" cy="302.2601725533792" r="14.637905107315877" fill="#b07219" fill-opacity="0.08" class="fade-6"/><circle cx="192.44444444444446" cy="302.2601725533792" r="10.637905107315877" fill="#b07219" fill-opacity="0.7" stroke="#b07219" stroke-width="1.5" stroke-opacity="0.9" class="fade-6"/><text x="192.44444444444446" y="326.8980776606951" class="t t-value fade-6" text-anchor="middle">barter-trader</text><circle cx="484.59259259259255" cy="305.5148106265424" r="14.425254648846348" fill="#3572A5" fill-opacity="0.08" class="fade-6"/><circle cx="484.59259259259255" cy="305.5148106265424" r="10.425254648846348" fill="#3572A5" fill-opacity="0.7" stroke="#3572A5" stroke-width="1.5" stroke-opacity="0.9" class="fade-6"/><text x="484.59259259259255" y="329.94006527538875" class="t t-value fade-6" text-anchor="middle">chess-cli</text><circle cx="564.1777777777779" cy="307.862976308606" r="11.88282051438895" fill="#dea584" fill-opacity="0.08" class="fade-6"/><circle cx="564.1777777777779" cy="307.862976308606" r="7.88282051438895" fill="#dea584" fill-opacity="0.7" stroke="#dea584" stroke-width="1.5" stroke-opacity="0.9" class="fade-6"/><text x="564.1777777777779" y="329.7457968229949" class="t t-value fade-6" text-anchor="middle">embed-src</text><circle cx="252.88888888888889" cy="328.39937129877455" r="12.127871907170075" fill="#f1e05a" fill-opacity="0.08" class="fade-6"/><circle cx="252.88888888888889" cy="328.39937129877455" r="8.127871907170075" fill="#f1e05a" fill-opacity="0.7" stroke="#f1e05a" stroke-width="1.5" stroke-opacity="0.9" class="fade-6"/><text x="252.88888888888889" y="350.5272432059446" class="t t-value fade-6" text-anchor="middle">cypress-name-too-…</text><circle cx="570.2222222222223" cy="329.166624380661" r="10" fill="#dea584" fill-opacity="0.08" class="fade-6"/><circle cx="570.2222222222223" cy="329.166624380661" r="6" fill="#dea584" fill-opacity="0.7" stroke="#dea584" stroke-width="1.5" stroke-opacity="0.9" class="fade-6"/><text x="570.2222222222223" y="349.166624380661" class="t t-value fade-6" text-anchor="middle">gitit</text><circle cx="721.3333333333334" cy="332.76467008321686" r="23.983196439420844" fill="#3178c6" fill-opacity="0.08" class="fade-6"/><circle cx="721.3333333333334" cy="332.76467008321686" r="19.983196439420844" fill="#3178c6" fill-opacity="0.7" stroke="#3178c6" stroke-width="1.5" stroke-opacity="0.9" class="fade-6"/><text x="721.3333333333334" y="366.7478665226377" class="t t-value fade-6" text-anchor="middle">github-insights</text><circle cx="494.66666666666663" cy="338.50050562280296" r="10" fill="#3572A5" fill-opacity="0.08" class="fade-6"/><circle cx="494.66666666666663" cy="338.50050562280296" r="6" fill="#3572A5" fill-opacity="0.7" stroke="#3572A5" stroke-width="1.5" stroke-opacity="0.9" class="fade-6"/><text x="494.66666666666663" y="358.50050562280296" class="t t-value fade-6" text-anchor="middle">lightning-kfold</text><circle cx="404" cy="376" r="11.769290460954931" fill="#8b949e" fill-opacity="0.08" class="fade-6"/><circle cx="404" cy="376" r="7.769290460954932" fill="#8b949e" fill-opacity="0.7" stroke="#8b949e" stroke-width="1.5" stroke-opacity="0.9" class="fade-6"/><text x="404" y="397.76929046095495" class="t t-value fade-6" text-anchor="middle">urmzd</text></svg>
@@ -0,0 +1,55 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="808" height="210" viewBox="0 0 808 210"><defs><style>
2
+ .t { font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif; font-variant-numeric: tabular-lining; }
3
+ .t-h { font-size: 14px; fill: #c9d1d9; letter-spacing: 2px; font-weight: 600; }
4
+ .t-sub { font-size: 11px; fill: #6e7681; }
5
+ .t-label { font-size: 12px; fill: #8b949e; }
6
+ .t-value { font-size: 11px; fill: #6e7681; }
7
+ .t-subhdr { font-size: 11px; fill: #8b949e; letter-spacing: 1px; font-weight: 600; }
8
+ .t-stat-label { font-size: 10px; fill: #8b949e; font-weight: 600; }
9
+ .t-stat-value { font-size: 22px; font-weight: 700; }
10
+ .t-card-title { font-size: 12px; fill: #58a6ff; font-weight: 700; }
11
+ .t-card-detail { font-size: 11px; fill: #8b949e; }
12
+ .t-pill { font-size: 11px; font-weight: 600; }
13
+ .t-bullet { font-size: 12px; fill: #c9d1d9; }
14
+ .bg-fill { fill: #0d1117; }
15
+ .card-fill { fill: #161b22; }
16
+ .border-stroke { stroke: #30363d; }
17
+
18
+ @media (prefers-color-scheme: light) {
19
+ .bg-fill { fill: #ffffff; }
20
+ .card-fill { fill: #f6f8fa; }
21
+ .border-stroke { stroke: #d0d7de; }
22
+ .t-h { fill: #1f2328; }
23
+ .t-sub { fill: #656d76; }
24
+ .t-label { fill: #656d76; }
25
+ .t-value { fill: #656d76; }
26
+ .t-subhdr { fill: #656d76; }
27
+ .t-stat-label { fill: #656d76; }
28
+ .t-card-title { fill: #0969da; }
29
+ .t-card-detail { fill: #656d76; }
30
+ .t-bullet { fill: #1f2328; }
31
+ }
32
+
33
+ @keyframes fadeIn {
34
+ from { opacity: 0; transform: translateY(8px); }
35
+ to { opacity: 1; transform: translateY(0); }
36
+ }
37
+ @keyframes scaleIn {
38
+ from { transform: scale(0); opacity: 0; }
39
+ to { transform: scale(1); opacity: 1; }
40
+ }
41
+ @keyframes drawPath {
42
+ from { stroke-dashoffset: var(--path-length); }
43
+ to { stroke-dashoffset: 0; }
44
+ }
45
+ @keyframes radarReveal {
46
+ from { transform: scale(0); opacity: 0; }
47
+ to { transform: scale(1); opacity: 0.6; }
48
+ }
49
+ .fade-1 { animation: fadeIn 0.6s ease-out 0.1s both; }
50
+ .fade-2 { animation: fadeIn 0.6s ease-out 0.25s both; }
51
+ .fade-3 { animation: fadeIn 0.6s ease-out 0.4s both; }
52
+ .fade-4 { animation: fadeIn 0.6s ease-out 0.55s both; }
53
+ .fade-5 { animation: fadeIn 0.6s ease-out 0.7s both; }
54
+ .fade-6 { animation: fadeIn 0.6s ease-out 0.85s both; }
55
+ </style></defs><rect width="808" height="210" rx="12" class="bg-fill" fill="#0d1117"/><text x="24" y="40" class="t t-h">OPEN SOURCE IMPACT</text><text x="24" y="56" class="t t-sub">External repositories contributed to</text><text x="24" y="88" class="t t-card-title fade-1">getzep/graphiti</text><rect x="304" y="78" width="400" height="12" rx="3" fill="#58a6ff" fill-opacity="0.7" class="fade-1"/><text x="720" y="88" class="t t-value fade-1">★ 24,055</text><text x="784" y="88" class="t t-value fade-1">Python</text><text x="24" y="130" class="t t-card-title fade-2">googleapis/python-aiplatform</text><rect x="304" y="120" width="268.55616835256285" height="12" rx="3" fill="#3fb950" fill-opacity="0.7" class="fade-2"/><text x="720" y="130" class="t t-value fade-2">★ 873</text><text x="784" y="130" class="t t-value fade-2">Python</text><text x="24" y="172" class="t t-card-title fade-3">MathisWellmann/gym-rs</text><rect x="304" y="162" width="192.3855297941612" height="12" rx="3" fill="#d29922" fill-opacity="0.7" class="fade-3"/><text x="720" y="172" class="t t-value fade-3">★ 127</text><text x="784" y="172" class="t t-value fade-3">Rust</text></svg>
@@ -0,0 +1,55 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="808" height="340" viewBox="0 0 808 340"><defs><style>
2
+ .t { font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif; font-variant-numeric: tabular-lining; }
3
+ .t-h { font-size: 14px; fill: #c9d1d9; letter-spacing: 2px; font-weight: 600; }
4
+ .t-sub { font-size: 11px; fill: #6e7681; }
5
+ .t-label { font-size: 12px; fill: #8b949e; }
6
+ .t-value { font-size: 11px; fill: #6e7681; }
7
+ .t-subhdr { font-size: 11px; fill: #8b949e; letter-spacing: 1px; font-weight: 600; }
8
+ .t-stat-label { font-size: 10px; fill: #8b949e; font-weight: 600; }
9
+ .t-stat-value { font-size: 22px; font-weight: 700; }
10
+ .t-card-title { font-size: 12px; fill: #58a6ff; font-weight: 700; }
11
+ .t-card-detail { font-size: 11px; fill: #8b949e; }
12
+ .t-pill { font-size: 11px; font-weight: 600; }
13
+ .t-bullet { font-size: 12px; fill: #c9d1d9; }
14
+ .bg-fill { fill: #0d1117; }
15
+ .card-fill { fill: #161b22; }
16
+ .border-stroke { stroke: #30363d; }
17
+
18
+ @media (prefers-color-scheme: light) {
19
+ .bg-fill { fill: #ffffff; }
20
+ .card-fill { fill: #f6f8fa; }
21
+ .border-stroke { stroke: #d0d7de; }
22
+ .t-h { fill: #1f2328; }
23
+ .t-sub { fill: #656d76; }
24
+ .t-label { fill: #656d76; }
25
+ .t-value { fill: #656d76; }
26
+ .t-subhdr { fill: #656d76; }
27
+ .t-stat-label { fill: #656d76; }
28
+ .t-card-title { fill: #0969da; }
29
+ .t-card-detail { fill: #656d76; }
30
+ .t-bullet { fill: #1f2328; }
31
+ }
32
+
33
+ @keyframes fadeIn {
34
+ from { opacity: 0; transform: translateY(8px); }
35
+ to { opacity: 1; transform: translateY(0); }
36
+ }
37
+ @keyframes scaleIn {
38
+ from { transform: scale(0); opacity: 0; }
39
+ to { transform: scale(1); opacity: 1; }
40
+ }
41
+ @keyframes drawPath {
42
+ from { stroke-dashoffset: var(--path-length); }
43
+ to { stroke-dashoffset: 0; }
44
+ }
45
+ @keyframes radarReveal {
46
+ from { transform: scale(0); opacity: 0; }
47
+ to { transform: scale(1); opacity: 0.6; }
48
+ }
49
+ .fade-1 { animation: fadeIn 0.6s ease-out 0.1s both; }
50
+ .fade-2 { animation: fadeIn 0.6s ease-out 0.25s both; }
51
+ .fade-3 { animation: fadeIn 0.6s ease-out 0.4s both; }
52
+ .fade-4 { animation: fadeIn 0.6s ease-out 0.55s both; }
53
+ .fade-5 { animation: fadeIn 0.6s ease-out 0.7s both; }
54
+ .fade-6 { animation: fadeIn 0.6s ease-out 0.85s both; }
55
+ </style></defs><rect width="808" height="340" rx="12" class="bg-fill" fill="#0d1117"/><text x="24" y="40" class="t t-h">CONTRIBUTION RHYTHM</text><text x="24" y="56" class="t t-sub">Activity patterns and statistics over the past year</text><circle cx="144" cy="186" r="22.5" fill="none" stroke="#30363d" stroke-width="1" stroke-opacity="0.4"/><circle cx="144" cy="186" r="45" fill="none" stroke="#30363d" stroke-width="1" stroke-opacity="0.4"/><circle cx="144" cy="186" r="67.5" fill="none" stroke="#30363d" stroke-width="1" stroke-opacity="0.4"/><circle cx="144" cy="186" r="90" fill="none" stroke="#30363d" stroke-width="1" stroke-opacity="0.4"/><line x1="144" y1="186" x2="144" y2="96" stroke="#30363d" stroke-width="1" stroke-opacity="0.3"/><line x1="144" y1="186" x2="214.36483342212267" y2="129.88591783271397" stroke="#30363d" stroke-width="1" stroke-opacity="0.3"/><line x1="144" y1="186" x2="231.74351209636413" y2="206.0268840560683" stroke="#30363d" stroke-width="1" stroke-opacity="0.3"/><line x1="144" y1="186" x2="183.04953652058023" y2="267.08719811121773" stroke="#30363d" stroke-width="1" stroke-opacity="0.3"/><line x1="144" y1="186" x2="104.95046347941977" y2="267.08719811121773" stroke="#30363d" stroke-width="1" stroke-opacity="0.3"/><line x1="144" y1="186" x2="56.25648790363587" y2="206.0268840560683" stroke="#30363d" stroke-width="1" stroke-opacity="0.3"/><line x1="144" y1="186" x2="73.63516657787731" y2="129.885917832714" stroke="#30363d" stroke-width="1" stroke-opacity="0.3"/><polygon points="144,160.02272727272728 176.46377541975204,160.11100300009304 172.11780728542578,192.41770602705824 154.91612043643494,208.66755765381768 132.551385883739,209.7732921735161 56.25648790363587,206.0268840560683 96.18389728814844,147.86793052723064" fill="#58a6ff" fill-opacity="0.2" stroke="#58a6ff" stroke-width="2" stroke-opacity="0.8" class="fade-2" style="transform-origin: 144px 186px"/><circle cx="144" cy="160.02272727272728" r="3" fill="#58a6ff" class="fade-1"/><circle cx="176.46377541975204" cy="160.11100300009304" r="3" fill="#58a6ff" class="fade-2"/><circle cx="172.11780728542578" cy="192.41770602705824" r="3" fill="#58a6ff" class="fade-3"/><circle cx="154.91612043643494" cy="208.66755765381768" r="3" fill="#58a6ff" class="fade-4"/><circle cx="132.551385883739" cy="209.7732921735161" r="3" fill="#58a6ff" class="fade-5"/><circle cx="56.25648790363587" cy="206.0268840560683" r="3" fill="#58a6ff" class="fade-6"/><circle cx="96.18389728814844" cy="147.86793052723064" r="3" fill="#58a6ff" class="fade-6"/><text x="144" y="84" class="t t-value" text-anchor="middle">Sun</text><text x="226.87413714161116" y="123.91008100297425" class="t t-value" text-anchor="middle">Mon</text><text x="247.34235869127332" y="213.58721899936933" class="t t-value" text-anchor="middle">Tue</text><text x="189.99167634646116" y="285.50269999765646" class="t t-value" text-anchor="middle">Wed</text><text x="98.00832365353884" y="285.50269999765646" class="t t-value" text-anchor="middle">Thu</text><text x="40.657641308726696" y="213.58721899936933" class="t t-value" text-anchor="middle">Fri</text><text x="61.12586285838883" y="123.91008100297427" class="t t-value" text-anchor="middle">Sat</text><text x="324" y="96" class="t t-stat-label">COMMITS</text><text x="324" y="118" fill="#58a6ff" class="t t-stat-value">1,352</text><text x="324" y="138" class="t t-stat-label">PRS</text><text x="324" y="160" fill="#3fb950" class="t t-stat-value">4</text><text x="324" y="180" class="t t-stat-label">REVIEWS</text><text x="324" y="202" fill="#d29922" class="t t-stat-value">5</text><text x="324" y="222" class="t t-stat-label">REPOS</text><text x="324" y="244" fill="#bc8cff" class="t t-stat-value">24</text><text x="324" y="264" class="t t-stat-label">STREAK</text><text x="324" y="286" fill="#39d2c0" class="t t-stat-value">15d</text><text x="324" y="316" class="t t-sub">Most active: Fridays</text></svg>
@@ -0,0 +1,55 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="808" height="250" viewBox="0 0 808 250"><defs><style>
2
+ .t { font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif; font-variant-numeric: tabular-lining; }
3
+ .t-h { font-size: 14px; fill: #c9d1d9; letter-spacing: 2px; font-weight: 600; }
4
+ .t-sub { font-size: 11px; fill: #6e7681; }
5
+ .t-label { font-size: 12px; fill: #8b949e; }
6
+ .t-value { font-size: 11px; fill: #6e7681; }
7
+ .t-subhdr { font-size: 11px; fill: #8b949e; letter-spacing: 1px; font-weight: 600; }
8
+ .t-stat-label { font-size: 10px; fill: #8b949e; font-weight: 600; }
9
+ .t-stat-value { font-size: 22px; font-weight: 700; }
10
+ .t-card-title { font-size: 12px; fill: #58a6ff; font-weight: 700; }
11
+ .t-card-detail { font-size: 11px; fill: #8b949e; }
12
+ .t-pill { font-size: 11px; font-weight: 600; }
13
+ .t-bullet { font-size: 12px; fill: #c9d1d9; }
14
+ .bg-fill { fill: #0d1117; }
15
+ .card-fill { fill: #161b22; }
16
+ .border-stroke { stroke: #30363d; }
17
+
18
+ @media (prefers-color-scheme: light) {
19
+ .bg-fill { fill: #ffffff; }
20
+ .card-fill { fill: #f6f8fa; }
21
+ .border-stroke { stroke: #d0d7de; }
22
+ .t-h { fill: #1f2328; }
23
+ .t-sub { fill: #656d76; }
24
+ .t-label { fill: #656d76; }
25
+ .t-value { fill: #656d76; }
26
+ .t-subhdr { fill: #656d76; }
27
+ .t-stat-label { fill: #656d76; }
28
+ .t-card-title { fill: #0969da; }
29
+ .t-card-detail { fill: #656d76; }
30
+ .t-bullet { fill: #1f2328; }
31
+ }
32
+
33
+ @keyframes fadeIn {
34
+ from { opacity: 0; transform: translateY(8px); }
35
+ to { opacity: 1; transform: translateY(0); }
36
+ }
37
+ @keyframes scaleIn {
38
+ from { transform: scale(0); opacity: 0; }
39
+ to { transform: scale(1); opacity: 1; }
40
+ }
41
+ @keyframes drawPath {
42
+ from { stroke-dashoffset: var(--path-length); }
43
+ to { stroke-dashoffset: 0; }
44
+ }
45
+ @keyframes radarReveal {
46
+ from { transform: scale(0); opacity: 0; }
47
+ to { transform: scale(1); opacity: 0.6; }
48
+ }
49
+ .fade-1 { animation: fadeIn 0.6s ease-out 0.1s both; }
50
+ .fade-2 { animation: fadeIn 0.6s ease-out 0.25s both; }
51
+ .fade-3 { animation: fadeIn 0.6s ease-out 0.4s both; }
52
+ .fade-4 { animation: fadeIn 0.6s ease-out 0.55s both; }
53
+ .fade-5 { animation: fadeIn 0.6s ease-out 0.7s both; }
54
+ .fade-6 { animation: fadeIn 0.6s ease-out 0.85s both; }
55
+ </style></defs><rect width="808" height="250" rx="12" class="bg-fill" fill="#0d1117"/><text x="24" y="40" class="t t-h">LANGUAGE VELOCITY</text><text x="24" y="56" class="t t-sub">How language usage has evolved over the past year</text><path d="M 24,206 C 55.66666666666667,206 55.66666666666667,206 87.33333333333334,206 C 119.00000000000001,206 119.00000000000001,205.24865831842575 150.66666666666669,205.24865831842575 C 182.33333333333334,205.24865831842575 182.33333333333334,204.4973166368515 214,204.4973166368515 C 245.66666666666669,204.4973166368515 245.66666666666669,205.49910554561717 277.33333333333337,205.49910554561717 C 309,205.49910554561717 309,206 340.6666666666667,206 C 372.33333333333337,206 372.33333333333337,195.98211091234347 404,195.98211091234347 C 435.6666666666667,195.98211091234347 435.6666666666667,203.9964221824687 467.33333333333337,203.9964221824687 C 499.00000000000006,203.9964221824687 499.00000000000006,198.23613595706618 530.6666666666667,198.23613595706618 C 562.3333333333334,198.23613595706618 562.3333333333334,204.4973166368515 594,204.4973166368515 C 625.6666666666667,204.4973166368515 625.6666666666667,157.66368515205724 657.3333333333334,157.66368515205724 C 689,157.66368515205724 689,87.28801431127013 720.6666666666667,87.28801431127013 C 752.3333333333334,87.28801431127013 752.3333333333334,66 784,66 L 784,67.25223613595705 C 752.3333333333334,67.25223613595705 752.3333333333334,88.28980322003578 720.6666666666667,88.28980322003578 C 689,88.28980322003578 689,158.16457960644007 657.3333333333334,158.16457960644007 C 625.6666666666667,158.16457960644007 625.6666666666667,204.4973166368515 594,204.4973166368515 C 562.3333333333334,204.4973166368515 562.3333333333334,198.23613595706618 530.6666666666667,198.23613595706618 C 499.00000000000006,198.23613595706618 499.00000000000006,203.9964221824687 467.33333333333337,203.9964221824687 C 435.6666666666667,203.9964221824687 435.6666666666667,195.98211091234347 404,195.98211091234347 C 372.33333333333337,195.98211091234347 372.33333333333337,206 340.6666666666667,206 C 309,206 309,205.49910554561717 277.33333333333337,205.49910554561717 C 245.66666666666669,205.49910554561717 245.66666666666669,204.4973166368515 214,204.4973166368515 C 182.33333333333334,204.4973166368515 182.33333333333334,205.24865831842575 150.66666666666669,205.24865831842575 C 119.00000000000001,205.24865831842575 119.00000000000001,206 87.33333333333334,206 C 55.66666666666667,206 55.66666666666667,206 24,206 Z" fill="#DA5B0B" fill-opacity="0.75" class="fade-1"/><path d="M 24,206 C 55.66666666666667,206 55.66666666666667,206 87.33333333333334,206 C 119.00000000000001,206 119.00000000000001,205.24865831842575 150.66666666666669,205.24865831842575 C 182.33333333333334,205.24865831842575 182.33333333333334,204.4973166368515 214,204.4973166368515 C 245.66666666666669,204.4973166368515 245.66666666666669,205.49910554561717 277.33333333333337,205.49910554561717 C 309,205.49910554561717 309,206 340.6666666666667,206 C 372.33333333333337,206 372.33333333333337,195.98211091234347 404,195.98211091234347 C 435.6666666666667,195.98211091234347 435.6666666666667,203.9964221824687 467.33333333333337,203.9964221824687 C 499.00000000000006,203.9964221824687 499.00000000000006,198.23613595706618 530.6666666666667,198.23613595706618 C 562.3333333333334,198.23613595706618 562.3333333333334,204.4973166368515 594,204.4973166368515 C 625.6666666666667,204.4973166368515 625.6666666666667,158.16457960644007 657.3333333333334,158.16457960644007 C 689,158.16457960644007 689,88.28980322003578 720.6666666666667,88.28980322003578 C 752.3333333333334,88.28980322003578 752.3333333333334,67.25223613595705 784,67.25223613595705 L 784,72.76207513416816 C 752.3333333333334,72.76207513416816 752.3333333333334,93.04830053667264 720.6666666666667,93.04830053667264 C 689,93.04830053667264 689,160.16815742397137 657.3333333333334,160.16815742397137 C 625.6666666666667,160.16815742397137 625.6666666666667,204.4973166368515 594,204.4973166368515 C 562.3333333333334,204.4973166368515 562.3333333333334,198.4865831842576 530.6666666666667,198.4865831842576 C 499.00000000000006,198.4865831842576 499.00000000000006,203.9964221824687 467.33333333333337,203.9964221824687 C 435.6666666666667,203.9964221824687 435.6666666666667,196.4830053667263 404,196.4830053667263 C 372.33333333333337,196.4830053667263 372.33333333333337,206 340.6666666666667,206 C 309,206 309,205.49910554561717 277.33333333333337,205.49910554561717 C 245.66666666666669,205.49910554561717 245.66666666666669,204.4973166368515 214,204.4973166368515 C 182.33333333333334,204.4973166368515 182.33333333333334,205.24865831842575 150.66666666666669,205.24865831842575 C 119.00000000000001,205.24865831842575 119.00000000000001,206 87.33333333333334,206 C 55.66666666666667,206 55.66666666666667,206 24,206 Z" fill="#b07219" fill-opacity="0.75" class="fade-2"/><path d="M 24,206 C 55.66666666666667,206 55.66666666666667,206 87.33333333333334,206 C 119.00000000000001,206 119.00000000000001,205.24865831842575 150.66666666666669,205.24865831842575 C 182.33333333333334,205.24865831842575 182.33333333333334,204.4973166368515 214,204.4973166368515 C 245.66666666666669,204.4973166368515 245.66666666666669,205.49910554561717 277.33333333333337,205.49910554561717 C 309,205.49910554561717 309,206 340.6666666666667,206 C 372.33333333333337,206 372.33333333333337,196.4830053667263 404,196.4830053667263 C 435.6666666666667,196.4830053667263 435.6666666666667,203.9964221824687 467.33333333333337,203.9964221824687 C 499.00000000000006,203.9964221824687 499.00000000000006,198.4865831842576 530.6666666666667,198.4865831842576 C 562.3333333333334,198.4865831842576 562.3333333333334,204.4973166368515 594,204.4973166368515 C 625.6666666666667,204.4973166368515 625.6666666666667,160.16815742397137 657.3333333333334,160.16815742397137 C 689,160.16815742397137 689,93.04830053667264 720.6666666666667,93.04830053667264 C 752.3333333333334,93.04830053667264 752.3333333333334,72.76207513416816 784,72.76207513416816 L 784,87.28801431127013 C 752.3333333333334,87.28801431127013 752.3333333333334,105.32021466905186 720.6666666666667,105.32021466905186 C 689,105.32021466905186 689,165.17710196779964 657.3333333333334,165.17710196779964 C 625.6666666666667,165.17710196779964 625.6666666666667,204.74776386404292 594,204.74776386404292 C 562.3333333333334,204.74776386404292 562.3333333333334,199.23792486583184 530.6666666666667,199.23792486583184 C 499.00000000000006,199.23792486583184 499.00000000000006,204.24686940966012 467.33333333333337,204.24686940966012 C 435.6666666666667,204.24686940966012 435.6666666666667,197.48479427549194 404,197.48479427549194 C 372.33333333333337,197.48479427549194 372.33333333333337,206 340.6666666666667,206 C 309,206 309,205.49910554561717 277.33333333333337,205.49910554561717 C 245.66666666666669,205.49910554561717 245.66666666666669,204.74776386404292 214,204.74776386404292 C 182.33333333333334,204.74776386404292 182.33333333333334,205.24865831842575 150.66666666666669,205.24865831842575 C 119.00000000000001,205.24865831842575 119.00000000000001,206 87.33333333333334,206 C 55.66666666666667,206 55.66666666666667,206 24,206 Z" fill="#3572A5" fill-opacity="0.75" class="fade-3"/><path d="M 24,206 C 55.66666666666667,206 55.66666666666667,206 87.33333333333334,206 C 119.00000000000001,206 119.00000000000001,205.24865831842575 150.66666666666669,205.24865831842575 C 182.33333333333334,205.24865831842575 182.33333333333334,204.74776386404292 214,204.74776386404292 C 245.66666666666669,204.74776386404292 245.66666666666669,205.49910554561717 277.33333333333337,205.49910554561717 C 309,205.49910554561717 309,206 340.6666666666667,206 C 372.33333333333337,206 372.33333333333337,197.48479427549194 404,197.48479427549194 C 435.6666666666667,197.48479427549194 435.6666666666667,204.24686940966012 467.33333333333337,204.24686940966012 C 499.00000000000006,204.24686940966012 499.00000000000006,199.23792486583184 530.6666666666667,199.23792486583184 C 562.3333333333334,199.23792486583184 562.3333333333334,204.74776386404292 594,204.74776386404292 C 625.6666666666667,204.74776386404292 625.6666666666667,165.17710196779964 657.3333333333334,165.17710196779964 C 689,165.17710196779964 689,105.32021466905186 720.6666666666667,105.32021466905186 C 752.3333333333334,105.32021466905186 752.3333333333334,87.28801431127013 784,87.28801431127013 L 784,103.8175313059034 C 752.3333333333334,103.8175313059034 752.3333333333334,119.34525939177102 720.6666666666667,119.34525939177102 C 689,119.34525939177102 689,170.93738819320214 657.3333333333334,170.93738819320214 C 625.6666666666667,170.93738819320214 625.6666666666667,204.99821109123434 594,204.99821109123434 C 562.3333333333334,204.99821109123434 562.3333333333334,200.2397137745975 530.6666666666667,200.2397137745975 C 499.00000000000006,200.2397137745975 499.00000000000006,204.4973166368515 467.33333333333337,204.4973166368515 C 435.6666666666667,204.4973166368515 435.6666666666667,198.737030411449 404,198.737030411449 C 372.33333333333337,198.737030411449 372.33333333333337,206 340.6666666666667,206 C 309,206 309,205.49910554561717 277.33333333333337,205.49910554561717 C 245.66666666666669,205.49910554561717 245.66666666666669,204.99821109123434 214,204.99821109123434 C 182.33333333333334,204.99821109123434 182.33333333333334,205.24865831842575 150.66666666666669,205.24865831842575 C 119.00000000000001,205.24865831842575 119.00000000000001,206 87.33333333333334,206 C 55.66666666666667,206 55.66666666666667,206 24,206 Z" fill="#00ADD8" fill-opacity="0.75" class="fade-4"/><path d="M 24,206 C 55.66666666666667,206 55.66666666666667,206 87.33333333333334,206 C 119.00000000000001,206 119.00000000000001,205.24865831842575 150.66666666666669,205.24865831842575 C 182.33333333333334,205.24865831842575 182.33333333333334,204.99821109123434 214,204.99821109123434 C 245.66666666666669,204.99821109123434 245.66666666666669,205.49910554561717 277.33333333333337,205.49910554561717 C 309,205.49910554561717 309,206 340.6666666666667,206 C 372.33333333333337,206 372.33333333333337,198.737030411449 404,198.737030411449 C 435.6666666666667,198.737030411449 435.6666666666667,204.4973166368515 467.33333333333337,204.4973166368515 C 499.00000000000006,204.4973166368515 499.00000000000006,200.2397137745975 530.6666666666667,200.2397137745975 C 562.3333333333334,200.2397137745975 562.3333333333334,204.99821109123434 594,204.99821109123434 C 625.6666666666667,204.99821109123434 625.6666666666667,170.93738819320214 657.3333333333334,170.93738819320214 C 689,170.93738819320214 689,119.34525939177102 720.6666666666667,119.34525939177102 C 752.3333333333334,119.34525939177102 752.3333333333334,103.8175313059034 784,103.8175313059034 L 784,124.35420393559927 C 752.3333333333334,124.35420393559927 752.3333333333334,136.87656529516994 720.6666666666667,136.87656529516994 C 689,136.87656529516994 689,177.9499105545617 657.3333333333334,177.9499105545617 C 625.6666666666667,177.9499105545617 625.6666666666667,205.24865831842575 594,205.24865831842575 C 562.3333333333334,205.24865831842575 562.3333333333334,201.49194991055455 530.6666666666667,201.49194991055455 C 499.00000000000006,201.49194991055455 499.00000000000006,204.74776386404292 467.33333333333337,204.74776386404292 C 435.6666666666667,204.74776386404292 435.6666666666667,200.2397137745975 404,200.2397137745975 C 372.33333333333337,200.2397137745975 372.33333333333337,206 340.6666666666667,206 C 309,206 309,205.49910554561717 277.33333333333337,205.49910554561717 C 245.66666666666669,205.49910554561717 245.66666666666669,205.24865831842575 214,205.24865831842575 C 182.33333333333334,205.24865831842575 182.33333333333334,205.49910554561717 150.66666666666669,205.49910554561717 C 119.00000000000001,205.49910554561717 119.00000000000001,206 87.33333333333334,206 C 55.66666666666667,206 55.66666666666667,206 24,206 Z" fill="#89e051" fill-opacity="0.75" class="fade-5"/><path d="M 24,206 C 55.66666666666667,206 55.66666666666667,206 87.33333333333334,206 C 119.00000000000001,206 119.00000000000001,205.49910554561717 150.66666666666669,205.49910554561717 C 182.33333333333334,205.49910554561717 182.33333333333334,205.24865831842575 214,205.24865831842575 C 245.66666666666669,205.24865831842575 245.66666666666669,205.49910554561717 277.33333333333337,205.49910554561717 C 309,205.49910554561717 309,206 340.6666666666667,206 C 372.33333333333337,206 372.33333333333337,200.2397137745975 404,200.2397137745975 C 435.6666666666667,200.2397137745975 435.6666666666667,204.74776386404292 467.33333333333337,204.74776386404292 C 499.00000000000006,204.74776386404292 499.00000000000006,201.49194991055455 530.6666666666667,201.49194991055455 C 562.3333333333334,201.49194991055455 562.3333333333334,205.24865831842575 594,205.24865831842575 C 625.6666666666667,205.24865831842575 625.6666666666667,177.9499105545617 657.3333333333334,177.9499105545617 C 689,177.9499105545617 689,136.87656529516994 720.6666666666667,136.87656529516994 C 752.3333333333334,136.87656529516994 752.3333333333334,124.35420393559927 784,124.35420393559927 L 784,156.912343470483 C 752.3333333333334,156.912343470483 752.3333333333334,164.4257602862254 720.6666666666667,164.4257602862254 C 689,164.4257602862254 689,189.22003577817532 657.3333333333334,189.22003577817532 C 625.6666666666667,189.22003577817532 625.6666666666667,205.49910554561717 594,205.49910554561717 C 562.3333333333334,205.49910554561717 562.3333333333334,203.24508050089446 530.6666666666667,203.24508050089446 C 499.00000000000006,203.24508050089446 499.00000000000006,205.24865831842575 467.33333333333337,205.24865831842575 C 435.6666666666667,205.24865831842575 435.6666666666667,202.4937388193202 404,202.4937388193202 C 372.33333333333337,202.4937388193202 372.33333333333337,206 340.6666666666667,206 C 309,206 309,205.74955277280858 277.33333333333337,205.74955277280858 C 245.66666666666669,205.74955277280858 245.66666666666669,205.49910554561717 214,205.49910554561717 C 182.33333333333334,205.49910554561717 182.33333333333334,205.74955277280858 150.66666666666669,205.74955277280858 C 119.00000000000001,205.74955277280858 119.00000000000001,206 87.33333333333334,206 C 55.66666666666667,206 55.66666666666667,206 24,206 Z" fill="#3178c6" fill-opacity="0.75" class="fade-6"/><path d="M 24,206 C 55.66666666666667,206 55.66666666666667,206 87.33333333333334,206 C 119.00000000000001,206 119.00000000000001,205.74955277280858 150.66666666666669,205.74955277280858 C 182.33333333333334,205.74955277280858 182.33333333333334,205.49910554561717 214,205.49910554561717 C 245.66666666666669,205.49910554561717 245.66666666666669,205.74955277280858 277.33333333333337,205.74955277280858 C 309,205.74955277280858 309,206 340.6666666666667,206 C 372.33333333333337,206 372.33333333333337,202.4937388193202 404,202.4937388193202 C 435.6666666666667,202.4937388193202 435.6666666666667,205.24865831842575 467.33333333333337,205.24865831842575 C 499.00000000000006,205.24865831842575 499.00000000000006,203.24508050089446 530.6666666666667,203.24508050089446 C 562.3333333333334,203.24508050089446 562.3333333333334,205.49910554561717 594,205.49910554561717 C 625.6666666666667,205.49910554561717 625.6666666666667,189.22003577817532 657.3333333333334,189.22003577817532 C 689,189.22003577817532 689,164.4257602862254 720.6666666666667,164.4257602862254 C 752.3333333333334,164.4257602862254 752.3333333333334,156.912343470483 784,156.912343470483 L 784,206 C 752.3333333333334,206 752.3333333333334,206 720.6666666666667,206 C 689,206 689,206 657.3333333333334,206 C 625.6666666666667,206 625.6666666666667,206 594,206 C 562.3333333333334,206 562.3333333333334,206 530.6666666666667,206 C 499.00000000000006,206 499.00000000000006,206 467.33333333333337,206 C 435.6666666666667,206 435.6666666666667,206 404,206 C 372.33333333333337,206 372.33333333333337,206 340.6666666666667,206 C 309,206 309,206 277.33333333333337,206 C 245.66666666666669,206 245.66666666666669,206 214,206 C 182.33333333333334,206 182.33333333333334,206 150.66666666666669,206 C 119.00000000000001,206 119.00000000000001,206 87.33333333333334,206 C 55.66666666666667,206 55.66666666666667,206 24,206 Z" fill="#dea584" fill-opacity="0.75" class="fade-6"/><rect x="24" y="212" width="8" height="8" rx="2" fill="#dea584" opacity="0.85"/><text x="36" y="220" class="t t-value">Rust</text><rect x="80" y="212" width="8" height="8" rx="2" fill="#3178c6" opacity="0.85"/><text x="92" y="220" class="t t-value">TypeScript</text><rect x="178" y="212" width="8" height="8" rx="2" fill="#89e051" opacity="0.85"/><text x="190" y="220" class="t t-value">Shell</text><rect x="241" y="212" width="8" height="8" rx="2" fill="#00ADD8" opacity="0.85"/><text x="253" y="220" class="t t-value">Go</text><rect x="283" y="212" width="8" height="8" rx="2" fill="#3572A5" opacity="0.85"/><text x="295" y="220" class="t t-value">Python</text><rect x="353" y="212" width="8" height="8" rx="2" fill="#b07219" opacity="0.85"/><text x="365" y="220" class="t t-value">Java</text><rect x="409" y="212" width="8" height="8" rx="2" fill="#DA5B0B" opacity="0.85"/><text x="421" y="220" class="t t-value">Jupyter Notebook</text><text x="24" y="220" class="t t-value" text-anchor="start" opacity="0">Feb</text><text x="150.66666666666669" y="220" class="t t-value" text-anchor="start" opacity="0">Apr</text><text x="277.33333333333337" y="220" class="t t-value" text-anchor="start" opacity="0">Jun</text><text x="404" y="220" class="t t-value" text-anchor="start" opacity="0">Aug</text><text x="530.6666666666667" y="220" class="t t-value" text-anchor="start" opacity="0">Oct</text><text x="657.3333333333334" y="220" class="t t-value" text-anchor="start" opacity="0">Dec</text><text x="784" y="220" class="t t-value" text-anchor="start" opacity="0">Feb</text></svg>
@@ -1,109 +1,121 @@
1
1
  # Hi, I'm Urmzd 👋
2
2
 
3
- I build robust, multi-language systems in Go, TypeScript, and Rust—from AI-powered resume generators and privacy-first agents to modular frameworks for genetic programming and knowledge graphs. My work empowers people through automation, local-first apps, and scalable backend solutions.
3
+ I build robust, multi-language systems in Go, Rust, and TypeScript—from AI-powered resume generators and privacy-first agents to scalable frameworks for genetic programming and deep learning research.
4
4
 
5
5
  [![urmzd.com](https://img.shields.io/badge/urmzd.com-4285F4?style=flat&logo=google-chrome&logoColor=white)](https://urmzd.com) [![@urmzd_](https://img.shields.io/badge/@urmzd__-000000?style=flat&logo=x&logoColor=white)](https://x.com/urmzd_) [![urmzd](https://img.shields.io/badge/urmzd-0A66C2?style=flat&logo=linkedin&logoColor=white)](https://linkedin.com/in/urmzd)
6
6
 
7
7
  ## Active Projects
8
8
 
9
9
  ### [urmzd.com](https://github.com/urmzd/urmzd.com)
10
- A personal website and blog built with Astro, TypeScript, and MDX, featuring fast static site generation and interactive components for content and portfolio.
10
+ A personal website and blog built with Astro, TypeScript, and MDX, featuring fast static site generation and interactive portfolio components.
11
11
  TypeScript, MDX, CSS
12
12
 
13
+ ### [exp-agi-models](https://github.com/urmzd/exp-agi-models)
14
+ A Python research project exploring extreme parameter efficiency in language models, investigating whether algorithms can be learned instead of memorized patterns with readable intermediate states.
15
+ Python, Shell
16
+
13
17
  ### [resume-generator-app](https://github.com/urmzd/resume-generator-app)
14
- A native desktop application for building resumes with live PDF preview, template gallery, and inline editing. Built with Wails, React, and Tailwind CSS, it supports multiple file formats.
18
+ A native desktop application built with Wails, React, and Tailwind CSS for creating resumes with live PDF preview, template gallery, and inline editing.
15
19
  TypeScript, TeX, HTML
16
20
 
17
21
  ### [zoro](https://github.com/urmzd/zoro)
18
- A privacy-first AI research agent with a persistent knowledge graph, enabling local inference and idea management. Built with TypeScript, Go, Python, and other technologies.
22
+ A privacy-first AI research agent with a persistent knowledge graph, enabling local inference and idea management, built with TypeScript, Go, and Python.
19
23
  TypeScript, Go, Python
20
24
 
21
25
  ### [oag](https://github.com/urmzd/oag)
22
- A fast OpenAPI 3.x code generator written in Rust, supporting TypeScript, React/SWR, and FastAPI. It offers zero runtime dependencies and first-class SSE streaming.
26
+ A Rust-based OpenAPI 3.x code generator for TypeScript, React/SWR, and FastAPI, featuring zero runtime dependencies and first-class SSE streaming.
23
27
  Rust, Jinja, Shell
24
28
 
25
- ### [sr](https://github.com/urmzd/sr)
26
- A Rust CLI tool for trunk-based semantic release, supporting conventional commits, changelog generation, git tags, and GitHub releases. It streamlines release management for Rust projects.
27
- Rust, Shell, Just
28
-
29
29
  ### [teasr](https://github.com/urmzd/teasr)
30
- A Rust-based tool for capturing showcase screenshots and GIFs from web apps, desktop, and terminal environments. It is distributed as a single binary with no runtime dependencies.
30
+ A Rust-based tool for capturing showcase screenshots and GIFs from web apps, desktop, and terminal, distributed as a single binary with no runtime dependencies.
31
31
  Rust, Shell
32
32
 
33
- ### [adk](https://github.com/urmzd/adk)
34
- A strongly-typed Go SDK for building streaming LLM agent loops, supporting conversation trees, tool registry, sub-agents, compaction, embeddings, and pluggable providers.
35
- Go
33
+ ### [gadk](https://github.com/urmzd/gadk)
34
+ A Go SDK for building streaming AI agents, knowledge graphs, and retrieval-augmented generation (RAG) pipelines.
35
+ Go, Just, Dockerfile
36
36
 
37
- ### [gitit](https://github.com/urmzd/gitit)
38
- A Rust CLI tool that provides AI-powered git commands, generating atomic conventional commits, code reviews, branch names, and PR descriptions using Claude or Gemini. It features two-tier caching for fast repeat runs.
37
+ ### [sr](https://github.com/urmzd/sr)
38
+ A Rust CLI for trunk-based semantic release, supporting conventional commits, changelog generation, git tags, and GitHub releases.
39
39
  Rust, Shell, Just
40
40
 
41
- ### [ragdk](https://github.com/urmzd/ragdk)
42
- A Go library for multi-modal Retrieval-Augmented Generation (RAG) with graph-enhanced retrieval, supporting document hierarchies, pluggable extractors, vector search, and kgdk integration.
43
- Go
44
-
45
41
  ### [github-insights](https://github.com/urmzd/github-insights)
46
- A GitHub Action written in TypeScript that generates SVG visualizations of GitHub profile metrics. It automates the creation of graphical insights for user profiles.
42
+ A GitHub Action written in TypeScript that generates SVG visualizations of GitHub profile metrics.
47
43
  TypeScript
48
44
 
49
- ### [lightning-kfold](https://github.com/urmzd/lightning-kfold)
50
- A Python library providing stratified K-fold cross-validation with ensemble voting for PyTorch Lightning. It is designed for easy integration into machine learning workflows.
51
- Python
52
-
53
- ### [kgdk](https://github.com/urmzd/kgdk)
54
- A Go SDK for building and querying knowledge graphs, featuring a SurrealDB backend, entity extraction pipeline, vector search, and a pluggable Graph interface.
55
- Go
56
-
57
45
  ## Maintained Projects
58
46
 
59
47
  ### [resume-generator](https://github.com/urmzd/resume-generator)
60
- A CLI tool written in Go that converts resume data in YAML, JSON, or TOML formats into polished PDFs, DOCX, HTML, LaTeX, and Markdown. It features multi-agent AI assessment via Ollama and supports multiple output formats.
48
+ A CLI tool written in Go that converts resume data from YAML/JSON/TOML into polished PDFs, DOCX, HTML, LaTeX, and Markdown, featuring multi-agent AI assessment via Ollama.
61
49
  ★ 10 · Go, TeX, HTML
62
50
 
63
51
  ### [linear-gp](https://github.com/urmzd/linear-gp)
64
- A Rust framework for Linear Genetic Programming research, featuring modular architecture, Q-Learning integration, automated hyperparameter optimization, and support for reinforcement learning and classification tasks.
65
- 2 · Rust, TeX, Shell
52
+ A Rust framework for Linear Genetic Programming research, offering modular architecture, Q-Learning integration, automated hyperparameter optimization, and support for reinforcement learning and classification tasks.
53
+ 3 · Rust, TeX, Shell
66
54
 
67
55
  ### [zigbee-rest](https://github.com/urmzd/zigbee-rest)
68
- A local-first, privacy-focused smart home control system written in Go, allowing management of Zigbee devices through a REST API without cloud dependencies.
56
+ A Go-based smart home control system providing a local-first, privacy-focused REST API for managing Zigbee devices without cloud dependencies.
69
57
  Go, Just, Shell
70
58
 
71
59
  ### [dotfiles](https://github.com/urmzd/dotfiles)
72
- A collection of modern dotfiles managed with Chezmoi and Nix, enabling one-command environment bootstrap for macOS and Linux. It includes configurations for Neovim, Tmux, Zsh, and specialized development shells.
60
+ A collection of modern dotfiles managed with Chezmoi and Nix, providing environment bootstrap for macOS and Linux, including Neovim, Tmux, Zsh, and specialized development shells.
73
61
  ★ 2 · Shell, Lua, Go Template
74
62
 
75
63
  ### [languide](https://github.com/urmzd/languide)
76
- A Python CLI that generates practical, scenario-based language learning PDFs with full Unicode and CJK support. It covers topics like restaurants, hotels, and transportation for travelers and language learners.
64
+ A Python CLI that generates scenario-based language learning PDFs with full Unicode/CJK support for travelers and language learners.
77
65
  Python, TeX, Shell
78
66
 
67
+ ### [embed-src](https://github.com/urmzd/embed-src)
68
+ A GitHub Action written in Rust that automatically syncs code snippets in markdown files with source code, keeping documentation up-to-date during CI/CD.
69
+ ★ 1 · Rust, Shell
70
+
71
+ ### [urmzd](https://github.com/urmzd/urmzd)
72
+ A GitHub profile README repository.
73
+
74
+ ## Archived
75
+
76
+ ### [lepus-classifier](https://github.com/urmzd/lepus-classifier)
77
+ A CNN research project using Jupyter Notebook and Python to explore optimal image classification architectures for small datasets, focusing on data quantity as a bottleneck for deep learning.
78
+ ★ 2 · Jupyter Notebook, Python, Shell
79
+
80
+ ### [md-classifier](https://github.com/urmzd/md-classifier)
81
+ A deep learning system combining transformers and CNNs in Python and Jupyter Notebook to classify diseases from patient-described symptoms, achieving high recall through semantic embeddings and feature extraction.
82
+ ★ 2 · Jupyter Notebook, Python, Shell
83
+
79
84
  ### [flappy-bird](https://github.com/urmzd/flappy-bird)
80
- A Flappy Bird clone built with JavaFX and Java 21, showcasing data-oriented design patterns and cross-platform desktop development. It includes automated native builds for Linux, macOS, and Windows.
85
+ A Flappy Bird clone built with JavaFX and Java 21, demonstrating data-oriented design patterns and cross-platform desktop development with automated native builds.
81
86
  ★ 4 · Java, Just
82
87
 
88
+ ### [barter-trader](https://github.com/urmzd/barter-trader)
89
+ An Android trading app built with Java, Clean Architecture, and MVVM, enabling peer-to-peer item exchanges with enterprise-grade mobile development patterns.
90
+ Java, Shell, Nix
91
+
83
92
  ### [chess-cli](https://github.com/urmzd/chess-cli)
84
- A fully playable chess game implemented in Python with object-oriented design and a command-line interface. It is suitable for learning game logic, exploring chess AI algorithms, or playing from the terminal.
93
+ A fully playable chess game in Python with object-oriented design and a command-line interface, suitable for learning game logic and exploring chess AI algorithms.
85
94
  ★ 3 · Python, Just
86
95
 
87
- ### [embed-src](https://github.com/urmzd/embed-src)
88
- A GitHub Action written in Rust and Shell that automatically syncs code snippets in markdown files with source code. It helps keep documentation up-to-date during CI/CD workflows.
89
- 1 · Rust, Shell
96
+ ### [cypress-name-too-long-mre](https://github.com/urmzd/cypress-name-too-long-mre)
97
+ A minimal reproducible example using JavaScript, HTML, and CSS, with no description provided.
98
+ JavaScript, HTML, CSS
90
99
 
91
- ### [urmzd](https://github.com/urmzd/urmzd)
92
- A GitHub profile README repository, used for displaying profile information and updates. It is auto-generated and maintained for user presentation.
100
+ ### [gitit](https://github.com/urmzd/gitit)
101
+ A Rust CLI tool that generates AI-powered git commands, including conventional commits, code reviews, branch names, and PR descriptions using Claude or Gemini.
102
+ Rust, Shell, Just
103
+
104
+ ### [lightning-kfold](https://github.com/urmzd/lightning-kfold)
105
+ A Python library providing stratified K-fold cross-validation with ensemble voting for PyTorch Lightning.
106
+ Python
93
107
 
94
- ## Inactive Projects
108
+ ## Project Map
95
109
 
96
- ### [lessons](https://github.com/urmzd/lessons)
97
- A repository of archived projects with retrospectives detailing successes, failures, and lessons learned. It uses TypeScript, JavaScript, CSS, and HTML.
98
- TypeScript, JavaScript, CSS
110
+ ![Project Constellation](./metrics-constellation.svg)
99
111
 
100
112
  ## GitHub Stats
101
113
 
102
- ![At a Glance](./metrics-pulse.svg)
103
- ![Contributions](./metrics-calendar.svg)
114
+ ![Language Velocity](./metrics-velocity.svg)
115
+ ![Contribution Rhythm](./metrics-rhythm.svg)
104
116
 
105
- ## Other Areas of Interest
117
+ ## Open Source Impact
106
118
 
107
- ![Expertise](./metrics-expertise.svg)
119
+ ![Impact Trail](./metrics-impact.svg)
108
120
 
109
- <sub>Last generated on 2026-03-17 using [@urmzd/github-insights](https://github.com/urmzd/github-insights)</sub>
121
+ <sub>Last generated on 2026-03-22 using [@urmzd/github-insights](https://github.com/urmzd/github-insights) · Template: `modern`</sub>