diff --git a/src/components/ResultGrid.tsx b/src/components/ResultGrid.tsx
index 7f718de66bbadf3b25a7bd060ce3d75d9ffa2736..5144557d5e17a4ffe3554c0e5f77addc2d257470 100644
--- a/src/components/ResultGrid.tsx
+++ b/src/components/ResultGrid.tsx
@@ -2,7 +2,7 @@
 // SPDX-License-Identifier: MIT
 
 import Image from 'next/image'
-import { SarifApiResponse } from '../lib/apiClient'
+import { Badge, SarifApiResponse } from '../lib/apiClient'
 import { cn } from '../lib/utils'
 import ResultTable from './ResultTable'
 import { config } from '../config'
@@ -11,6 +11,23 @@ interface Props {
     currentScan: SarifApiResponse | null
 }
 
+const order = [
+    'maintained:bronze',
+    'maintained:silver',
+    'maintained:gold',
+    'reused:bronze',
+    'reused:silver',
+    'reused:gold',
+    'open-source:gold',
+]
+
+const sortBadges = (a: Badge, b: Badge): number => {
+    return (
+        order.indexOf(a.badgeId + ':' + a.badgeLevel) -
+        order.indexOf(b.badgeId + ':' + b.badgeLevel)
+    )
+}
+
 export default function ResultGrid({ currentScan }: Props) {
     return (
         <div className="py-10">
@@ -39,9 +56,7 @@ export default function ResultGrid({ currentScan }: Props) {
                         <div className="-mx-6 grid grid-cols-1 gap-0.5 overflow-hidden px-6 sm:mx-0 sm:rounded-2xl sm:px-0 md:grid-cols-3">
                             {currentScan.runs[0].properties.testedRepository &&
                                 currentScan?.runs[0].properties.badges
-                                    .sort((a, b) =>
-                                        a.badgeId.localeCompare(b.badgeId),
-                                    )
+                                    .sort(sortBadges)
                                     .map((badge) => (
                                         <div
                                             className="overflow-hidden rounded-xl bg-gray-400/10 p-10 sm:rounded-none"