Skip to content

docs: migrate GitHub Pages to static HTML with eggspot.app branding#99

Merged
cloud-hai-vo merged 1 commit intomainfrom
docs/html-eggspot-theme
Apr 17, 2026
Merged

docs: migrate GitHub Pages to static HTML with eggspot.app branding#99
cloud-hai-vo merged 1 commit intomainfrom
docs/html-eggspot-theme

Conversation

@cloud-hai-vo
Copy link
Copy Markdown
Contributor

Summary

  • Replace Jekyll/Markdown docs with pure static HTML — no build step, no dependencies
  • Apply eggspot.app brand: #FAB400 yellow primary, #5956E9 purple accent, dark background
  • Rich landing page with hero section, stats bar, feature cards, benchmark table, and install banner
  • 13 content pages + 7 diagnostics pages — all with shared sidebar nav, responsive mobile menu, and consistent styling via eggspot.css
  • Update pages.yml to deploy static files directly (removes Jekyll build job)
  • Add .nojekyll to disable Jekyll processing on GitHub Pages

Test plan

  • Verify GitHub Pages deploys successfully after merge
  • Check landing page renders at https://eggspot.github.io/EggMapper/
  • Confirm sidebar nav active-link highlighting works on each page
  • Test mobile hamburger menu at <900px viewport
  • Confirm copy button on install banner works
  • Spot-check code blocks for correct HTML entity escaping (&lt;, &gt;)

🤖 Generated with Claude Code

…ot.app branding

Replace Jekyll/Markdown docs with hand-authored static HTML:
- New eggspot.css with brand colors (#FAB400 yellow, #5956E9 purple, dark bg)
- Rich landing page: hero, stats bar, feature cards, benchmark table, install banner
- 13 content pages + 7 diagnostic pages, all with shared sidebar nav and responsive layout
- Remove Jekyll config, _config.yml, _includes/, all .md sources, .nojekyll added
- Update pages.yml workflow to deploy static files directly (no Jekyll build step)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings April 17, 2026 15:44
@cloud-hai-vo cloud-hai-vo enabled auto-merge (squash) April 17, 2026 15:44
@cloud-hai-vo cloud-hai-vo merged commit 2faf2ec into main Apr 17, 2026
7 checks passed
@cloud-hai-vo cloud-hai-vo deleted the docs/html-eggspot-theme branch April 17, 2026 15:45
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Migrates the project docs site from Jekyll/Markdown to a dependency-free static HTML site under the eggspot.app brand, and updates GitHub Pages deployment to publish the static docs/ directory directly.

Changes:

  • Replaces Markdown/Jekyll docs with static HTML pages (including diagnostics pages) using a shared sidebar/header layout.
  • Adds shared site styling (eggspot.css) and navigation behavior (nav.js) for responsive sidebar + copy button.
  • Simplifies .github/workflows/pages.yml to upload and deploy static files; adds .nojekyll to disable Jekyll.

Reviewed changes

Copilot reviewed 48 out of 49 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
.github/workflows/pages.yml Switches Pages deploy from Jekyll build to uploading docs/ as a static artifact.
docs/.nojekyll Disables Jekyll processing for static HTML publishing.
docs/assets/css/eggspot.css Adds the eggspot.app-branded global stylesheet and layout primitives.
docs/assets/js/nav.js Adds mobile sidebar toggle, active-link highlighting, and copy-to-clipboard behavior.
docs/index.md Removes Jekyll Markdown home page.
docs/index.html Adds new branded static home/landing page.
docs/quick-start.md Removes Jekyll Markdown quick start page.
docs/quick-start.html Adds static quick start page.
docs/vs-automapper.md Removes Jekyll Markdown comparison page.
docs/vs-automapper.html Adds static “vs AutoMapper” page.
docs/Configuration.md Removes Jekyll Markdown configuration page.
docs/Configuration.html Adds static configuration page.
docs/Getting-Started.md Removes Jekyll Markdown getting-started page.
docs/Getting-Started.html Adds static getting-started page.
docs/Dependency-Injection.md Removes Jekyll Markdown DI page.
docs/Dependency-Injection.html Adds static DI page.
docs/Profiles.md Removes Jekyll Markdown profiles page.
docs/Profiles.html Adds static profiles page.
docs/Advanced-Features.md Removes Jekyll Markdown advanced-features page.
docs/Advanced-Features.html Adds static advanced-features page.
docs/Performance.md Removes Jekyll Markdown performance page.
docs/Performance.html Adds static performance page.
docs/API-Reference.md Removes Jekyll Markdown API reference.
docs/API-Reference.html Adds static API reference page.
docs/Migration-Guide.md Removes Jekyll Markdown migration guide.
docs/Migration-Guide.html Adds static migration guide page.
docs/code-generation.md Removes Jekyll Markdown code generation index page.
docs/Tier2-Getting-Started.md Removes Jekyll Markdown Tier 2 page.
docs/Tier2-Getting-Started.html Adds static Tier 2 page.
docs/Tier3-Getting-Started.md Removes Jekyll Markdown Tier 3 page.
docs/Tier3-Getting-Started.html Adds static Tier 3 page.
docs/guide.md Removes Jekyll Markdown “Guide” landing page.
docs/diagnostics/EGG1002.md Removes Jekyll Markdown diagnostics page.
docs/diagnostics/EGG1002.html Adds static diagnostics page.
docs/diagnostics/EGG1003.md Removes Jekyll Markdown diagnostics page.
docs/diagnostics/EGG1003.html Adds static diagnostics page.
docs/diagnostics/EGG2001.md Removes Jekyll Markdown diagnostics page.
docs/diagnostics/EGG2001.html Adds static diagnostics page.
docs/diagnostics/EGG2002.md Removes Jekyll Markdown diagnostics page.
docs/diagnostics/EGG2002.html Adds static diagnostics page.
docs/diagnostics/EGG3001.md Removes Jekyll Markdown diagnostics page.
docs/diagnostics/EGG3001.html Adds static diagnostics page.
docs/diagnostics/EGG3002.md Removes Jekyll Markdown diagnostics page.
docs/diagnostics/EGG3002.html Adds static diagnostics page.
docs/diagnostics/EGG3003.md Removes Jekyll Markdown diagnostics page.
docs/diagnostics/EGG3003.html Adds static diagnostics page.
docs/_config.yml Removes Jekyll configuration.
docs/_includes/head_custom.html Removes Jekyll theme customization include.

Comment thread docs/assets/js/nav.js
Comment on lines +20 to +27
/* Copy buttons */
document.querySelectorAll('.copy-btn').forEach(function (btn) {
btn.addEventListener('click', function () {
var cmd = btn.previousElementSibling;
if (!cmd) return;
navigator.clipboard.writeText(cmd.textContent.trim()).then(function () {
btn.textContent = 'Copied!';
setTimeout(function () { btn.textContent = 'Copy'; }, 1600);
Copy link

Copilot AI Apr 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The copy-to-clipboard handler assumes navigator.clipboard.writeText is available and succeeds. In browsers/environments where Clipboard API is unavailable or permission is denied, this will throw/reject and the button gives no feedback. Consider feature-detecting navigator.clipboard?.writeText and adding a .catch(...) fallback (e.g., select+execCommand or a brief error state).

Suggested change
/* Copy buttons */
document.querySelectorAll('.copy-btn').forEach(function (btn) {
btn.addEventListener('click', function () {
var cmd = btn.previousElementSibling;
if (!cmd) return;
navigator.clipboard.writeText(cmd.textContent.trim()).then(function () {
btn.textContent = 'Copied!';
setTimeout(function () { btn.textContent = 'Copy'; }, 1600);
function setCopyButtonState(btn, text) {
btn.textContent = text;
setTimeout(function () { btn.textContent = 'Copy'; }, 1600);
}
function fallbackCopyText(text) {
var textarea = document.createElement('textarea');
textarea.value = text;
textarea.setAttribute('readonly', '');
textarea.style.position = 'absolute';
textarea.style.left = '-9999px';
document.body.appendChild(textarea);
textarea.select();
textarea.setSelectionRange(0, textarea.value.length);
try {
return document.execCommand('copy');
} finally {
document.body.removeChild(textarea);
}
}
function copyText(text) {
if (navigator.clipboard && typeof navigator.clipboard.writeText === 'function') {
return navigator.clipboard.writeText(text).catch(function () {
if (fallbackCopyText(text)) return;
throw new Error('Copy failed');
});
}
return fallbackCopyText(text) ? Promise.resolve() : Promise.reject(new Error('Copy failed'));
}
/* Copy buttons */
document.querySelectorAll('.copy-btn').forEach(function (btn) {
btn.addEventListener('click', function () {
var cmd = btn.previousElementSibling;
if (!cmd) return;
copyText(cmd.textContent.trim()).then(function () {
setCopyButtonState(btn, 'Copied!');
}).catch(function () {
setCopyButtonState(btn, 'Copy failed');

Copilot uses AI. Check for mistakes.
transition: color var(--ease), background var(--ease), border-color var(--ease);
}
.nav-link:hover { color: var(--text); background: var(--yellow-dim); }
.nav-link.active {
Copy link

Copilot AI Apr 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some generated pages include a nav-link-active class (e.g., Performance.html, API-Reference.html), but the stylesheet only styles .nav-link.active. Either remove nav-link-active from the HTML or add a CSS alias so it produces the intended active styling.

Suggested change
.nav-link.active {
.nav-link.active,
.nav-link.nav-link-active {

Copilot uses AI. Check for mistakes.
@github-actions
Copy link
Copy Markdown
Contributor

📊 Benchmark Results

Generated: 2026-04-17 15:50 UTC  ·  Download full artifacts

Column guide:
Mean = average execution time  ·  Error = half of 99.9 % confidence interval  ·  StdDev = standard deviation  ·  Min / Median / Max = statistical range  ·  Ratio = vs Manual baseline (lower = closer to hand-written speed)  ·  RatioSD = ratio std dev  ·  Rank = 1 is fastest  ·  Gen0/1/2 = GC collections per 1 000 ops  ·  Allocated = managed heap per operation  ·  Alloc Ratio = allocation ratio vs baseline

🔵 Flat Mapping — 10-property object

Method Mean Error StdDev Min Median Max Ratio RatioSD Rank Gen0 Allocated Alloc Ratio
Manual 15.91 ns 2.926 ns 0.160 ns 15.74 ns 15.94 ns 16.06 ns 1.00 0.01 1 0.0048 80 B 1.00
EggMapper 26.70 ns 1.669 ns 0.091 ns 26.63 ns 26.66 ns 26.80 ns 1.68 0.02 2 0.0048 80 B 1.00
AutoMapper 79.01 ns 8.485 ns 0.465 ns 78.48 ns 79.23 ns 79.32 ns 4.97 0.05 3 0.0048 80 B 1.00
Mapster 29.40 ns 12.967 ns 0.711 ns 28.73 ns 29.32 ns 30.14 ns 1.85 0.04 2 0.0048 80 B 1.00
MapperlyMap 16.34 ns 0.835 ns 0.046 ns 16.30 ns 16.33 ns 16.39 ns 1.03 0.01 1 0.0048 80 B 1.00
AgileMapper 330.30 ns 25.706 ns 1.409 ns 329.13 ns 329.91 ns 331.87 ns 20.76 0.20 4 0.0205 344 B 4.30
EggMapperGenerator 16.85 ns 1.762 ns 0.097 ns 16.77 ns 16.82 ns 16.95 ns 1.06 0.01 1 0.0048 80 B 1.00
EggMapperClassMapper 16.19 ns 4.455 ns 0.244 ns 15.98 ns 16.14 ns 16.46 ns 1.02 0.02 1 0.0048 80 B 1.00

🟡 Flattening — 2 nested objects → 8 flat properties

Method Mean Error StdDev Min Median Max Ratio RatioSD Rank Gen0 Allocated Alloc Ratio
Manual 20.24 ns 3.163 ns 0.173 ns 20.07 ns 20.25 ns 20.42 ns 1.00 0.01 1 0.0048 80 B 1.00
EggMap 30.92 ns 5.202 ns 0.285 ns 30.66 ns 30.87 ns 31.23 ns 1.53 0.02 3 0.0048 80 B 1.00
AutoMapper 81.38 ns 3.099 ns 0.170 ns 81.22 ns 81.34 ns 81.56 ns 4.02 0.03 4 0.0048 80 B 1.00
Mapster 35.11 ns 5.137 ns 0.282 ns 34.79 ns 35.24 ns 35.30 ns 1.73 0.02 3 0.0048 80 B 1.00
MapperlyMap 25.35 ns 3.629 ns 0.199 ns 25.12 ns 25.42 ns 25.50 ns 1.25 0.01 2 0.0062 104 B 1.30
AgileMapper 336.05 ns 84.663 ns 4.641 ns 332.70 ns 334.11 ns 341.35 ns 16.60 0.23 5 0.0205 344 B 4.30

🟣 Deep Mapping — 2 nested address objects

Method Mean Error StdDev Min Median Max Ratio RatioSD Rank Gen0 Allocated Alloc Ratio
Manual 59.92 ns 6.062 ns 0.332 ns 59.60 ns 59.90 ns 60.26 ns 1.00 0.01 1 0.0162 272 B 1.00
EggMapper 71.14 ns 8.849 ns 0.485 ns 70.69 ns 71.08 ns 71.65 ns 1.19 0.01 1 0.0162 272 B 1.00
AutoMapper 109.19 ns 8.381 ns 0.459 ns 108.66 ns 109.41 ns 109.50 ns 1.82 0.01 2 0.0162 272 B 1.00
Mapster 74.50 ns 2.116 ns 0.116 ns 74.37 ns 74.52 ns 74.60 ns 1.24 0.01 1 0.0162 272 B 1.00
MapperlyMap 55.51 ns 32.268 ns 1.769 ns 54.19 ns 54.82 ns 57.52 ns 0.93 0.03 1 0.0162 272 B 1.00
AgileMapper 356.93 ns 104.605 ns 5.734 ns 353.20 ns 354.05 ns 363.53 ns 5.96 0.09 3 0.0253 424 B 1.56

🟢 Complex Mapping — nested object + collection

Method Mean Error StdDev Min Median Max Ratio RatioSD Rank Gen0 Allocated Alloc Ratio
Manual 80.72 ns 15.919 ns 0.873 ns 79.71 ns 81.19 ns 81.25 ns 1.00 0.01 1 0.0191 320 B 1.00
EggMapper 104.18 ns 8.332 ns 0.457 ns 103.69 ns 104.25 ns 104.59 ns 1.29 0.01 2 0.0191 320 B 1.00
AutoMapper 150.17 ns 14.820 ns 0.812 ns 149.39 ns 150.09 ns 151.01 ns 1.86 0.02 3 0.0196 328 B 1.02
Mapster 104.03 ns 47.312 ns 2.593 ns 101.04 ns 105.49 ns 105.57 ns 1.29 0.03 2 0.0191 320 B 1.00
MapperlyMap 81.05 ns 10.613 ns 0.582 ns 80.48 ns 81.02 ns 81.64 ns 1.00 0.01 1 0.0191 320 B 1.00
AgileMapper 401.26 ns 2.537 ns 0.139 ns 401.12 ns 401.27 ns 401.40 ns 4.97 0.05 4 0.0315 528 B 1.65

🟠 Collection — 100-item List<T>

Method Mean Error StdDev Min Median Max Ratio RatioSD Rank Gen0 Gen1 Allocated Alloc Ratio
Manual 1.967 μs 2.0978 μs 0.1150 μs 1.877 μs 1.926 μs 2.096 μs 1.00 0.07 1 0.5264 0.0153 8.65 KB 1.00
EggMapper 2.032 μs 0.2733 μs 0.0150 μs 2.023 μs 2.024 μs 2.049 μs 1.04 0.05 1 0.5264 0.0153 8.65 KB 1.00
AutoMapper 2.700 μs 2.0945 μs 0.1148 μs 2.634 μs 2.634 μs 2.833 μs 1.38 0.08 2 0.6065 0.0191 9.95 KB 1.15
Mapster 2.092 μs 1.9255 μs 0.1055 μs 1.971 μs 2.142 μs 2.163 μs 1.07 0.07 1 0.5264 0.0153 8.65 KB 1.00
MapperlyMap 2.157 μs 0.5652 μs 0.0310 μs 2.136 μs 2.143 μs 2.193 μs 1.10 0.06 1 0.5264 0.0153 8.65 KB 1.00
AgileMapper 2.734 μs 0.4915 μs 0.0269 μs 2.706 μs 2.738 μs 2.760 μs 1.39 0.07 2 0.5417 0.0153 8.91 KB 1.03

🟠 Collection — 100-item List<T>

Method Mean Error StdDev Min Median Max Ratio RatioSD Rank Gen0 Gen1 Allocated Alloc Ratio
Manual 6.302 μs 2.537 μs 0.1391 μs 6.150 μs 6.332 μs 6.423 μs 1.00 0.03 1 1.6708 0.0916 27.4 KB 1.00
EggMapper 6.757 μs 1.949 μs 0.1068 μs 6.641 μs 6.779 μs 6.852 μs 1.07 0.03 1 1.6708 0.0916 27.4 KB 1.00
AutoMapper 8.090 μs 1.886 μs 0.1034 μs 7.977 μs 8.114 μs 8.179 μs 1.28 0.03 1 1.7548 0.1068 28.7 KB 1.05
Mapster 6.841 μs 2.065 μs 0.1132 μs 6.711 μs 6.892 μs 6.919 μs 1.09 0.03 1 1.6708 0.0916 27.4 KB 1.00
MapperlyMap 6.210 μs 1.309 μs 0.0718 μs 6.127 μs 6.249 μs 6.254 μs 0.99 0.02 1 1.6785 0.0992 27.42 KB 1.00
AgileMapper 6.383 μs 1.193 μs 0.0654 μs 6.334 μs 6.357 μs 6.457 μs 1.01 0.02 1 1.0223 0.0610 16.72 KB 0.61

🟠 Collection — 100-item List<T>

Method Mean Error StdDev Min Median Max Ratio RatioSD Rank Gen0 Gen1 Allocated Alloc Ratio
Manual 22.64 μs 6.776 μs 0.371 μs 22.21 μs 22.84 μs 22.86 μs 1.00 0.02 1 5.2490 1.3123 85.99 KB 1.00
EggMapper 21.67 μs 15.600 μs 0.855 μs 20.91 μs 21.50 μs 22.59 μs 0.96 0.04 1 5.2490 1.3123 85.99 KB 1.00
AutoMapper 27.93 μs 1.112 μs 0.061 μs 27.87 μs 27.93 μs 27.99 μs 1.23 0.02 1 5.7678 1.4343 94.34 KB 1.10
Mapster 21.64 μs 2.210 μs 0.121 μs 21.52 μs 21.64 μs 21.76 μs 0.96 0.01 1 5.2490 1.3123 85.99 KB 1.00
MapperlyMap 23.09 μs 21.010 μs 1.152 μs 21.77 μs 23.65 μs 23.87 μs 1.02 0.05 1 5.2490 1.2817 86.02 KB 1.00
AgileMapper 23.29 μs 7.307 μs 0.401 μs 22.85 μs 23.37 μs 23.64 μs 1.03 0.02 1 5.2795 1.3123 86.25 KB 1.00

⚪ Startup / Configuration time

Method Mean Error StdDev Min Median Max Ratio RatioSD Rank Gen0 Gen1 Allocated Alloc Ratio
EggMapperStartup 1,344.673 μs 1,910.554 μs 104.7239 μs 1,226.118 μs 1,383.322 μs 1,424.580 μs 1.004 0.10 3 5.8594 3.9063 95.67 KB 1.00
AutoMapperStartup 387.295 μs 901.687 μs 49.4245 μs 335.178 μs 393.211 μs 433.495 μs 0.289 0.04 2 5.8594 - 104.01 KB 1.09
MapsterStartup 2.660 μs 1.099 μs 0.0602 μs 2.623 μs 2.628 μs 2.729 μs 0.002 0.00 1 0.7019 0.0267 11.51 KB 0.12

EggMapper.Benchmarks.ColdStartBenchmark-report-github

Method Mean Error StdDev Min Median Max Ratio RatioSD Rank Gen0 Gen1 Allocated Alloc Ratio
EggMapper 1.375 ms 1.581 ms 0.0866 ms 1.278 ms 1.402 ms 1.445 ms 1.00 0.08 1 5.8594 3.9063 96.29 KB 1.00
AutoMapper 4.430 ms 12.278 ms 0.6730 ms 3.711 ms 4.532 ms 5.046 ms 3.23 0.46 2 15.6250 7.8125 309.83 KB 3.22
Mapster 4.307 ms 8.468 ms 0.4642 ms 3.777 ms 4.504 ms 4.640 ms 3.14 0.34 2 39.0625 15.6250 757.27 KB 7.86

📝 Notes
  • Each benchmark class is decorated with [MemoryDiagnoser] and [RankColumn].
  • The global config (see src/EggMapper.Benchmarks/Program.cs) adds Min, Median, and Max columns.
  • Manual is the hand-written baseline (ratio = 1.00). A ratio < 1 means faster than manual.
  • Benchmarks run on GitHub-hosted runners — absolute times may vary between runs; focus on Ratio for comparisons.
  • To reproduce locally:
    cd src/EggMapper.Benchmarks
    dotnet run --configuration Release -- --filter '*'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants