Release 202507092007
This commit is contained in:
@@ -1 +1 @@
|
|||||||
23
|
24
|
||||||
|
|||||||
558
web/package-lock.json
generated
558
web/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -33,12 +33,12 @@
|
|||||||
"@fontsource-variable/space-grotesk": "5.2.8",
|
"@fontsource-variable/space-grotesk": "5.2.8",
|
||||||
"@fontsource/inter": "5.2.6",
|
"@fontsource/inter": "5.2.6",
|
||||||
"@fontsource/space-grotesk": "5.2.8",
|
"@fontsource/space-grotesk": "5.2.8",
|
||||||
"@prisma/client": "6.10.1",
|
"@prisma/client": "6.11.1",
|
||||||
"@tailwindcss/vite": "4.1.11",
|
"@tailwindcss/vite": "4.1.11",
|
||||||
"@types/mime-types": "3.0.1",
|
"@types/mime-types": "3.0.1",
|
||||||
"@types/pg": "8.15.4",
|
"@types/pg": "8.15.4",
|
||||||
"@vercel/og": "0.6.8",
|
"@vercel/og": "0.7.2",
|
||||||
"astro": "5.11.0",
|
"astro": "5.9.0",
|
||||||
"astro-loading-indicator": "0.7.0",
|
"astro-loading-indicator": "0.7.0",
|
||||||
"astro-remote": "0.3.4",
|
"astro-remote": "0.3.4",
|
||||||
"astro-seo-schema": "5.0.0",
|
"astro-seo-schema": "5.0.0",
|
||||||
@@ -54,7 +54,7 @@
|
|||||||
"pg": "8.16.3",
|
"pg": "8.16.3",
|
||||||
"qrcode": "1.5.4",
|
"qrcode": "1.5.4",
|
||||||
"react": "19.1.0",
|
"react": "19.1.0",
|
||||||
"redis": "5.5.6",
|
"redis": "5.6.0",
|
||||||
"schema-dts": "1.1.5",
|
"schema-dts": "1.1.5",
|
||||||
"seedrandom": "3.0.5",
|
"seedrandom": "3.0.5",
|
||||||
"sharp": "0.34.2",
|
"sharp": "0.34.2",
|
||||||
@@ -69,7 +69,7 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/js": "9.30.1",
|
"@eslint/js": "9.30.1",
|
||||||
"@faker-js/faker": "9.9.0",
|
"@faker-js/faker": "9.9.0",
|
||||||
"@iconify-json/material-symbols": "1.2.28",
|
"@iconify-json/material-symbols": "1.2.29",
|
||||||
"@iconify-json/mdi": "1.2.3",
|
"@iconify-json/mdi": "1.2.3",
|
||||||
"@iconify-json/ri": "1.2.5",
|
"@iconify-json/ri": "1.2.5",
|
||||||
"@stylistic/eslint-plugin": "5.1.0",
|
"@stylistic/eslint-plugin": "5.1.0",
|
||||||
@@ -82,12 +82,12 @@
|
|||||||
"@types/react": "19.1.8",
|
"@types/react": "19.1.8",
|
||||||
"@types/seedrandom": "3.0.8",
|
"@types/seedrandom": "3.0.8",
|
||||||
"@types/web-push": "3.6.4",
|
"@types/web-push": "3.6.4",
|
||||||
"@typescript-eslint/parser": "8.35.1",
|
"@typescript-eslint/parser": "8.36.0",
|
||||||
"@vite-pwa/assets-generator": "1.0.0",
|
"@vite-pwa/assets-generator": "1.0.0",
|
||||||
"@vite-pwa/astro": "1.1.0",
|
"@vite-pwa/astro": "1.1.0",
|
||||||
"astro-icon": "1.1.5",
|
"astro-icon": "1.1.5",
|
||||||
"date-fns": "4.1.0",
|
"date-fns": "4.1.0",
|
||||||
"esbuild": "0.25.5",
|
"esbuild": "0.25.6",
|
||||||
"eslint": "9.30.1",
|
"eslint": "9.30.1",
|
||||||
"eslint-import-resolver-typescript": "4.4.4",
|
"eslint-import-resolver-typescript": "4.4.4",
|
||||||
"eslint-plugin-astro": "1.3.1",
|
"eslint-plugin-astro": "1.3.1",
|
||||||
@@ -97,13 +97,13 @@
|
|||||||
"prettier": "3.6.2",
|
"prettier": "3.6.2",
|
||||||
"prettier-plugin-astro": "0.14.1",
|
"prettier-plugin-astro": "0.14.1",
|
||||||
"prettier-plugin-tailwindcss": "0.6.13",
|
"prettier-plugin-tailwindcss": "0.6.13",
|
||||||
"prisma": "6.10.1",
|
"prisma": "6.11.1",
|
||||||
"prisma-json-types-generator": "3.5.0",
|
"prisma-json-types-generator": "3.5.1",
|
||||||
"tailwind-htmx": "0.1.2",
|
"tailwind-htmx": "0.1.2",
|
||||||
"ts-essentials": "10.1.1",
|
"ts-essentials": "10.1.1",
|
||||||
"ts-toolbelt": "9.6.0",
|
"ts-toolbelt": "9.6.0",
|
||||||
"tsx": "4.20.3",
|
"tsx": "4.20.3",
|
||||||
"typescript-eslint": "8.35.1",
|
"typescript-eslint": "8.36.0",
|
||||||
"vite-plugin-devtools-json": "0.2.1",
|
"vite-plugin-devtools-json": "0.2.1",
|
||||||
"workbox-core": "7.3.0",
|
"workbox-core": "7.3.0",
|
||||||
"workbox-precaching": "7.3.0"
|
"workbox-precaching": "7.3.0"
|
||||||
|
|||||||
@@ -58,9 +58,13 @@ const ogImageTemplateData = {
|
|||||||
class="prose prose-invert prose-headings:text-green-400 prose-h1:text-[2.5rem] prose-h1:font-bold prose-h1:my-8 prose-h1:drop-shadow-[0_0_10px_rgba(0,255,0,0.3)] prose-h2:text-green-500 prose-h2:text-[1.8rem] prose-h2:font-semibold prose-h2:my-6 prose-h2:border-b prose-h2:border-green-900 prose-h2:pb-1 prose-h3:text-green-600 prose-h3:text-[1.4rem] prose-h3:font-semibold prose-h3:my-4 prose-h4:text-green-700 prose-h4:text-[1.2rem] prose-h4:font-semibold prose-h4:my-3 prose-strong:font-semibold prose-strong:drop-shadow-[0_0_5px_rgba(0,255,0,0.2)] prose-p:text-gray-300 prose-p:my-4 prose-p:leading-relaxed prose-a:text-green-400 prose-a:no-underline prose-a:transition-all prose-a:border-b prose-a:border-green-900 prose-a:hover:text-green-400 prose-a:hover:drop-shadow-[0_0_8px_rgba(0,255,0,0.4)] prose-a:hover:border-green-400 prose-ul:text-gray-300 prose-ol:text-gray-300 prose-li:my-2 prose-li:leading-relaxed mx-auto"
|
class="prose prose-invert prose-headings:text-green-400 prose-h1:text-[2.5rem] prose-h1:font-bold prose-h1:my-8 prose-h1:drop-shadow-[0_0_10px_rgba(0,255,0,0.3)] prose-h2:text-green-500 prose-h2:text-[1.8rem] prose-h2:font-semibold prose-h2:my-6 prose-h2:border-b prose-h2:border-green-900 prose-h2:pb-1 prose-h3:text-green-600 prose-h3:text-[1.4rem] prose-h3:font-semibold prose-h3:my-4 prose-h4:text-green-700 prose-h4:text-[1.2rem] prose-h4:font-semibold prose-h4:my-3 prose-strong:font-semibold prose-strong:drop-shadow-[0_0_5px_rgba(0,255,0,0.2)] prose-p:text-gray-300 prose-p:my-4 prose-p:leading-relaxed prose-a:text-green-400 prose-a:no-underline prose-a:transition-all prose-a:border-b prose-a:border-green-900 prose-a:hover:text-green-400 prose-a:hover:drop-shadow-[0_0_8px_rgba(0,255,0,0.4)] prose-a:hover:border-green-400 prose-ul:text-gray-300 prose-ol:text-gray-300 prose-li:my-2 prose-li:leading-relaxed mx-auto"
|
||||||
>
|
>
|
||||||
<h1 class="mb-0!">{frontmatter.title}</h1>
|
<h1 class="mb-0!">{frontmatter.title}</h1>
|
||||||
<p class="mt-2! opacity-70">
|
{
|
||||||
Updated {frontmatter.updatedAt && <TimeFormatted date={new Date(frontmatter.updatedAt)} />}
|
!!frontmatter.updatedAt && (
|
||||||
</p>
|
<p class="mt-2! opacity-70">
|
||||||
|
Updated <TimeFormatted date={new Date(frontmatter.updatedAt)} />
|
||||||
|
</p>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
<slot />
|
<slot />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -9,11 +9,15 @@ icon: 'ri:image-line'
|
|||||||
|
|
||||||
import PressAssets from '../components/PressAssets.astro'
|
import PressAssets from '../components/PressAssets.astro'
|
||||||
|
|
||||||
|
## How you can use our logo?
|
||||||
|
|
||||||
|
**You are not allowed to list us as partners**. We don't accept partnerships. You should make sure it's clear that you're adding our logo **voluntarily**. Examples of correct use: "Rate us on", "Listed on" sections.
|
||||||
|
|
||||||
Please, link back to [KYCnot.me](https://kycnot.me) when possible, and use responsibly.
|
Please, link back to [KYCnot.me](https://kycnot.me) when possible, and use responsibly.
|
||||||
|
|
||||||
<PressAssets />
|
<PressAssets />
|
||||||
|
|
||||||
Review service link format: `https://kycnot.me/service/[slug]/review`
|
> You can link to a service's review section with: `https://kycnot.me/service/[slug]/review`
|
||||||
|
|
||||||
## Brand design
|
## Brand design
|
||||||
|
|
||||||
|
|||||||
@@ -426,6 +426,30 @@ const activeAlertOrWarningEvents = service.events
|
|||||||
.filter((event) => event.typeInfo.showBanner && (event.endedAt === null || event.endedAt >= now))
|
.filter((event) => event.typeInfo.showBanner && (event.endedAt === null || event.endedAt >= now))
|
||||||
const activeEventToShow =
|
const activeEventToShow =
|
||||||
activeAlertOrWarningEvents.find((event) => event.type === EventType.ALERT) ?? activeAlertOrWarningEvents[0]
|
activeAlertOrWarningEvents.find((event) => event.type === EventType.ALERT) ?? activeAlertOrWarningEvents[0]
|
||||||
|
|
||||||
|
// Sort verification steps: failed first, then warnings, then others, newest first within each group
|
||||||
|
const getVerificationStepPriority = (status: VerificationStepStatus) => {
|
||||||
|
switch (status) {
|
||||||
|
case VerificationStepStatus.FAILED:
|
||||||
|
return 0 // Highest priority
|
||||||
|
case VerificationStepStatus.WARNING:
|
||||||
|
return 1
|
||||||
|
case VerificationStepStatus.IN_PROGRESS:
|
||||||
|
return 2
|
||||||
|
case VerificationStepStatus.PENDING:
|
||||||
|
return 3
|
||||||
|
case VerificationStepStatus.PASSED:
|
||||||
|
return 4 // Lowest priority
|
||||||
|
default:
|
||||||
|
return 5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const sortedVerificationSteps = orderBy(
|
||||||
|
service.verificationSteps,
|
||||||
|
[(step) => getVerificationStepPriority(step.status), (step) => step.updatedAt],
|
||||||
|
['asc', 'desc'] // Priority ascending (failed first), date descending (newest first)
|
||||||
|
)
|
||||||
---
|
---
|
||||||
|
|
||||||
<BaseLayout
|
<BaseLayout
|
||||||
@@ -1476,11 +1500,11 @@ const activeEventToShow =
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
service.verificationSteps.length > 0 && (
|
sortedVerificationSteps.length > 0 && (
|
||||||
<>
|
<>
|
||||||
<h3 class="font-title text-md mt-6 mb-2 font-semibold">Verification Steps</h3>
|
<h3 class="font-title text-md mt-6 mb-2 font-semibold">Verification Steps</h3>
|
||||||
<ul class="mb-8 space-y-2">
|
<ul class="mb-8 space-y-2">
|
||||||
{service.verificationSteps.map((step) => {
|
{sortedVerificationSteps.map((step) => {
|
||||||
const statusInfo = getVerificationStepStatusInfo(step.status)
|
const statusInfo = getVerificationStepStatusInfo(step.status)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
Reference in New Issue
Block a user