From a6f13967fef5bb89fe57ce6b38d4e7d5ce09b7ae Mon Sep 17 00:00:00 2001 From: "Zeko (Hermes)" Date: Sat, 6 Jun 2026 02:38:40 +0000 Subject: [PATCH 1/2] fix(website): comparison table mobile card layout + eye-catching badges - Mobile: horizontal scroll replaced with stacked card grid - Desktop: cora column highlighted with accent badge + glow - Check/cross/dash symbols get colored badge backgrounds - Row-by-row stagger animation on scroll reveal - Glass morphism card with rounded corners --- .../components/landing/ComparisonTable.svelte | 403 +++++++++++++++--- 1 file changed, 336 insertions(+), 67 deletions(-) diff --git a/website/src/lib/components/landing/ComparisonTable.svelte b/website/src/lib/components/landing/ComparisonTable.svelte index a0485b02..4bca1a2d 100644 --- a/website/src/lib/components/landing/ComparisonTable.svelte +++ b/website/src/lib/components/landing/ComparisonTable.svelte @@ -1,83 +1,352 @@ -
+ + +

Why developers choose cora

-

- Side-by-side with popular code review tools. +

+ Compared to popular code review tools.

-
-
- + +
- - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + {#each features as feat, i} + + + + + + + + {/each}
FeaturecoraCodeRabbitCopilotSonarQubeFeature + cora + CodeRabbitCopilotSonarQube
BYOK✓✗✗—
Self-hosted✓✗✗✓
Gitea✓✗✗✓
CLI✓✗✗✗
Pre-commit✓✗✗✗
SARIF✓✓✓✓
CostFree + API$12-39/mo$10-39/moFree / $150+
LicenseMITApache 2.0ProprietaryLGPL
{feat.name} + {#if cellIcon(feat.cora) === 'check'} + ✓ + {:else} + {feat.cora} + {/if} + + {#if cellIcon(feat[competitors[0].key]) === 'check'} + ✓ + {:else if cellIcon(feat[competitors[0].key]) === 'cross'} + ✗ + {:else if cellIcon(feat[competitors[0].key]) === 'dash'} + — + {:else} + {feat[competitors[0].key]} + {/if} + + {#if cellIcon(feat[competitors[1].key]) === 'check'} + ✓ + {:else if cellIcon(feat[competitors[1].key]) === 'cross'} + ✗ + {:else if cellIcon(feat[competitors[1].key]) === 'dash'} + — + {:else} + {feat[competitors[1].key]} + {/if} + + {#if cellIcon(feat[competitors[2].key]) === 'check'} + ✓ + {:else if cellIcon(feat[competitors[2].key]) === 'cross'} + ✗ + {:else if cellIcon(feat[competitors[2].key]) === 'dash'} + — + {:else} + {feat[competitors[2].key]} + {/if} +
+ + +
+ {#each features as feat, i} +
+
+ {feat.name} +
+
+ +
+ cora + {#if cellIcon(feat.cora) === 'check'} + ✓ + {:else} + {feat.cora} + {/if} +
+ + {#each competitors as comp} +
+ {comp.label} + {#if cellIcon(feat[comp.key]) === 'check'} + ✓ + {:else if cellIcon(feat[comp.key]) === 'cross'} + ✗ + {:else if cellIcon(feat[comp.key]) === 'dash'} + — + {:else} + {feat[comp.key]} + {/if} +
+ {/each} +
+
+ {/each} +
+ + From 1928f2fd12ba4908442db49eab54ba5d9f893309 Mon Sep 17 00:00:00 2001 From: "Zeko (Hermes)" Date: Sat, 6 Jun 2026 02:46:57 +0000 Subject: [PATCH 2/2] fix: add TypeScript types for ComparisonTable to pass svelte-check - Added lang=ts with proper types (CellValue, Feature interface) - Changed let revealed to $state(false) for Svelte 5 runes - Added type annotations for sectionEl and cellIcon param - svelte-check: 0 errors, 0 warnings --- .../components/landing/ComparisonTable.svelte | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/website/src/lib/components/landing/ComparisonTable.svelte b/website/src/lib/components/landing/ComparisonTable.svelte index 4bca1a2d..61393d55 100644 --- a/website/src/lib/components/landing/ComparisonTable.svelte +++ b/website/src/lib/components/landing/ComparisonTable.svelte @@ -1,9 +1,9 @@ -