Compare commits
3 Commits
release-73
...
release-77
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bf30a6cb2b | ||
|
|
4ca9b9a5c2 | ||
|
|
03abdef4f1 |
@@ -92,7 +92,9 @@ def prompt_check_tos_review(content: str) -> TosReviewCheck:
|
|||||||
{"role": "user", "content": content},
|
{"role": "user", "content": content},
|
||||||
]
|
]
|
||||||
|
|
||||||
result_dict = query_openai_json(messages, model="openai/gpt-4.1-mini")
|
result_dict = query_openai_json(
|
||||||
|
messages, model="openai/gemini-2.5-flash-preview-05-20"
|
||||||
|
)
|
||||||
|
|
||||||
return cast(TosReviewCheck, result_dict)
|
return cast(TosReviewCheck, result_dict)
|
||||||
|
|
||||||
|
|||||||
@@ -35,9 +35,11 @@ export default defineConfig({
|
|||||||
registerType: 'autoUpdate',
|
registerType: 'autoUpdate',
|
||||||
manifest: {
|
manifest: {
|
||||||
name: 'KYCnot.me',
|
name: 'KYCnot.me',
|
||||||
|
short_name: 'KYCnot.me',
|
||||||
description: 'Find services that respect your privacy',
|
description: 'Find services that respect your privacy',
|
||||||
theme_color: '#040505',
|
theme_color: '#040505',
|
||||||
background_color: '#171c1b',
|
background_color: '#171c1b',
|
||||||
|
display: 'minimal-ui',
|
||||||
},
|
},
|
||||||
pwaAssets: {
|
pwaAssets: {
|
||||||
image: './public/favicon.svg',
|
image: './public/favicon.svg',
|
||||||
@@ -107,8 +109,9 @@ export default defineConfig({
|
|||||||
'/service/[...slug]/proof': '/service/[...slug]/#verification',
|
'/service/[...slug]/proof': '/service/[...slug]/#verification',
|
||||||
'/attribute/[...slug]': '/attributes',
|
'/attribute/[...slug]': '/attributes',
|
||||||
'/attr/[...slug]': '/attributes',
|
'/attr/[...slug]': '/attributes',
|
||||||
'/service/[...slug]/review': '/service/[...slug]#comments',
|
|
||||||
// #endregion
|
// #endregion
|
||||||
|
|
||||||
|
'/service/[...slug]/review': '/service/[...slug]#comments',
|
||||||
},
|
},
|
||||||
env: {
|
env: {
|
||||||
schema: {
|
schema: {
|
||||||
@@ -122,7 +125,7 @@ export default defineConfig({
|
|||||||
}),
|
}),
|
||||||
// Public URLs (can be accessed from both server and client)
|
// Public URLs (can be accessed from both server and client)
|
||||||
SOURCE_CODE_URL: envField.string({
|
SOURCE_CODE_URL: envField.string({
|
||||||
context: 'server',
|
context: 'client',
|
||||||
access: 'public',
|
access: 'public',
|
||||||
url: true,
|
url: true,
|
||||||
optional: false,
|
optional: false,
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import { pwaInfo } from 'virtual:pwa-info'
|
|||||||
import { isNotArray } from '../lib/arrays'
|
import { isNotArray } from '../lib/arrays'
|
||||||
import { DEPLOYMENT_MODE } from '../lib/envVariables'
|
import { DEPLOYMENT_MODE } from '../lib/envVariables'
|
||||||
|
|
||||||
|
import DevToolsMessageScript from './DevToolsMessageScript.astro'
|
||||||
import DynamicFavicon from './DynamicFavicon.astro'
|
import DynamicFavicon from './DynamicFavicon.astro'
|
||||||
import HtmxScript from './HtmxScript.astro'
|
import HtmxScript from './HtmxScript.astro'
|
||||||
import NotificationEventsScript from './NotificationEventsScript.astro'
|
import NotificationEventsScript from './NotificationEventsScript.astro'
|
||||||
@@ -147,3 +148,5 @@ const ogImageUrl = makeOgImageUrl(ogImage, Astro.url)
|
|||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<DevToolsMessageScript />
|
||||||
|
|||||||
@@ -288,6 +288,7 @@ const ActualTag = disabled && Tag === 'a' ? 'span' : Tag
|
|||||||
class={base({ class: cn({ 'opacity-20 hover:opacity-50': disabled }, className) })}
|
class={base({ class: cn({ 'opacity-20 hover:opacity-50': disabled }, className) })}
|
||||||
role={role ?? (Tag === 'button' || Tag === 'label' || (disabled && Tag === 'a') ? undefined : 'button')}
|
role={role ?? (Tag === 'button' || Tag === 'label' || (disabled && Tag === 'a') ? undefined : 'button')}
|
||||||
aria-disabled={disabled}
|
aria-disabled={disabled}
|
||||||
|
aria-label={label}
|
||||||
{...dataAstroReload && { 'data-astro-reload': dataAstroReload }}
|
{...dataAstroReload && { 'data-astro-reload': dataAstroReload }}
|
||||||
{...htmlProps}
|
{...htmlProps}
|
||||||
>
|
>
|
||||||
|
|||||||
51
web/src/components/DevToolsMessageScript.astro
Normal file
51
web/src/components/DevToolsMessageScript.astro
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { SOURCE_CODE_URL } from 'astro:env/client'
|
||||||
|
|
||||||
|
const logoStyle = `
|
||||||
|
padding: 0 119.5px;
|
||||||
|
display: block;
|
||||||
|
line-height: 64px;
|
||||||
|
background-size: auto 64px;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: 50% 0;
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 240 64'%3E%3Crect width='239' height='63' x='.5' y='.5' fill='%23101413' stroke='%23292B2A' rx='7.5'/%3E%3Cpath fill='%233BDB78' d='M19 18a1 1 0 0 0-1 1v26a1 1 0 0 0 1 1h74a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1H19Zm4 4h2a1 1 0 0 1 1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 1 1 1v3h3a1 1 0 0 1 1 1v3h3a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-3h-3a1 1 0 0 1-1-1v-3h-7a1 1 0 0 0-1 1v6a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1V23a1 1 0 0 1 1-1Zm12 0h3a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1h-3a1 1 0 0 1-1-1v-3a1 1 0 0 1 1-1Zm12.8 0h2.4a1 1 0 0 1 .8.5l5 7.8 5-7.8a1 1 0 0 1 .8-.5h2.4a1 1 0 0 1 .8 1.5l-6.9 10.8a1 1 0 0 0-.1.6V41a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-6.1c0-.2 0-.4-.2-.6L47 23.5a1 1 0 0 1 .8-1.5ZM75 22h14a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H74v12h15a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H75a1 1 0 0 1-1-1v-3h-3a1 1 0 0 1-1-1V27a1 1 0 0 1 1-1h3v-3a1 1 0 0 1 1-1Zm24 0a1 1 0 0 0-1 1v18a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V25.6l9.2 15.9c.2.3.5.5.8.5h5a1 1 0 0 0 1-1V23a1 1 0 0 0-1-1h-2a1 1 0 0 0-1 1v15.4l-9.2-15.9a1 1 0 0 0-.8-.5h-5Zm29 0a1 1 0 0 0-1 1v3h12v-3a1 1 0 0 0-1-1h-10Zm11 4v12h3a1 1 0 0 0 1-1V27a1 1 0 0 0-1-1h-3Zm0 12h-12v3a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1v-3Zm-12 0V26h-3a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h3Zm21-16a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1v-3h4v15a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V26h4v3a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1h-18Zm27 0a1 1 0 0 0-1 1v18a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V29.4l5.5 12a1 1 0 0 0 1 .6h3a1 1 0 0 0 1-.6l5.5-12V41a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V23a1 1 0 0 0-1-1h-3.4a1 1 0 0 0-.9.6L186 37.2l-6.7-14.6a1 1 0 0 0-1-.6H175Zm32 0a1 1 0 0 0-1 1v3h15a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1h-14Zm-1 4h-3a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h18a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1h-14a1 1 0 0 1-1-1v-3h7a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1h-7v-4Zm-38 12a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1h-2Z'/%3E%3C/svg%3E");
|
||||||
|
`
|
||||||
|
|
||||||
|
setTimeout(
|
||||||
|
console.log.bind(
|
||||||
|
console,
|
||||||
|
`\n%c \n%c\n 👋%c Hi there! %c\n\n‣ We included source maps, so you can easily inspect the code. 🕵🏻♂️\n‣ Everything works with JavaScript disabled.\n‣ Source code: ${SOURCE_CODE_URL}`,
|
||||||
|
logoStyle,
|
||||||
|
`
|
||||||
|
font-family: cursive;
|
||||||
|
font-size: 2rem;
|
||||||
|
font-weight: bold;
|
||||||
|
`,
|
||||||
|
`
|
||||||
|
font-family: cursive;
|
||||||
|
font-size: 2rem;
|
||||||
|
font-weight: bold;
|
||||||
|
background: repeating-linear-gradient(
|
||||||
|
90deg,
|
||||||
|
#d97706 0%,
|
||||||
|
#f59e0b 20%,
|
||||||
|
#f97316 40%,
|
||||||
|
#ea580c 60%,
|
||||||
|
#f97316 80%,
|
||||||
|
#f59e0b 100%
|
||||||
|
) -100%/ 200%;
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
background-clip: text;
|
||||||
|
color: transparent;
|
||||||
|
`,
|
||||||
|
`
|
||||||
|
font-size: 1rem;
|
||||||
|
font-family: system-ui, -apple-system, sans-serif;
|
||||||
|
`
|
||||||
|
)
|
||||||
|
)
|
||||||
|
</script>
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
import { Icon } from 'astro-icon/components'
|
import { Icon } from 'astro-icon/components'
|
||||||
import { SOURCE_CODE_URL, I2P_ADDRESS, ONION_ADDRESS } from 'astro:env/server'
|
import { SOURCE_CODE_URL } from 'astro:env/client'
|
||||||
|
import { I2P_ADDRESS, ONION_ADDRESS } from 'astro:env/server'
|
||||||
|
|
||||||
import { cn } from '../lib/cn'
|
import { cn } from '../lib/cn'
|
||||||
|
|
||||||
|
|||||||
@@ -123,6 +123,7 @@ const splashText = showSplashText ? sample(splashTexts) : null
|
|||||||
transition:name="header-admin-link"
|
transition:name="header-admin-link"
|
||||||
text="Admin Dashboard"
|
text="Admin Dashboard"
|
||||||
position="left"
|
position="left"
|
||||||
|
aria-label="Admin Dashboard"
|
||||||
>
|
>
|
||||||
<Icon name="ri:home-gear-line" class="size-10" />
|
<Icon name="ri:home-gear-line" class="size-10" />
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
|
|||||||
@@ -44,4 +44,8 @@
|
|||||||
void updateSW(true)
|
void updateSW(true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
window.addEventListener('beforeinstallprompt', (event) => {
|
||||||
|
event.preventDefault()
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { orderBy } from 'lodash-es'
|
|||||||
|
|
||||||
import { getAttributeCategoryInfo } from '../constants/attributeCategories'
|
import { getAttributeCategoryInfo } from '../constants/attributeCategories'
|
||||||
import { getAttributeTypeInfo } from '../constants/attributeTypes'
|
import { getAttributeTypeInfo } from '../constants/attributeTypes'
|
||||||
import { getKycLevelClarificationInfo, kycLevelClarifications } from '../constants/kycLevelClarifications'
|
import { kycLevelClarifications } from '../constants/kycLevelClarifications'
|
||||||
import { kycLevels } from '../constants/kycLevels'
|
import { kycLevels } from '../constants/kycLevels'
|
||||||
import { serviceVisibilitiesById } from '../constants/serviceVisibility'
|
import { serviceVisibilitiesById } from '../constants/serviceVisibility'
|
||||||
import { READ_MORE_SENTENCE_LINK, verificationStatusesByValue } from '../constants/verificationStatus'
|
import { READ_MORE_SENTENCE_LINK, verificationStatusesByValue } from '../constants/verificationStatus'
|
||||||
@@ -156,15 +156,9 @@ export const nonDbAttributes: NonDbAttributeFull[] = [
|
|||||||
icon: 'ri:search-line',
|
icon: 'ri:search-line',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
customize: (service) => {
|
customize: (service) => ({
|
||||||
const clarification = getKycLevelClarificationInfo(service.kycLevelClarification)
|
show: service.kycLevel === kycLevel.value,
|
||||||
return {
|
}),
|
||||||
show: service.kycLevel === kycLevel.value,
|
|
||||||
title: kycLevel.name + (clarification.value !== 'NONE' ? ` (${clarification.label})` : ''),
|
|
||||||
description:
|
|
||||||
kycLevel.description + (clarification.value !== 'NONE' ? ` ${clarification.description}` : ''),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
})),
|
})),
|
||||||
...kycLevelClarifications
|
...kycLevelClarifications
|
||||||
.filter((clarification) => clarification.value !== 'NONE')
|
.filter((clarification) => clarification.value !== 'NONE')
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ description: 'Access basic service data via our public API.'
|
|||||||
icon: 'ri:plug-line'
|
icon: 'ri:plug-line'
|
||||||
---
|
---
|
||||||
|
|
||||||
import { SOURCE_CODE_URL } from 'astro:env/server'
|
import { SOURCE_CODE_URL } from 'astro:env/client'
|
||||||
import { kycLevels } from '../../constants/kycLevels'
|
import { kycLevels } from '../../constants/kycLevels'
|
||||||
import { verificationStatuses } from '../../constants/verificationStatus'
|
import { verificationStatuses } from '../../constants/verificationStatus'
|
||||||
import { serviceVisibilities } from '../../constants/serviceVisibility'
|
import { serviceVisibilities } from '../../constants/serviceVisibility'
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ Please, link back to [KYCnot.me](https://kycnot.me) when possible, and use respo
|
|||||||
|
|
||||||
<PressAssets />
|
<PressAssets />
|
||||||
|
|
||||||
|
Review service link format: `https://kycnot.me/service/[slug]/review`
|
||||||
|
|
||||||
## Brand design
|
## Brand design
|
||||||
|
|
||||||
- Brand color: `#3bdb78`
|
- Brand color: `#3bdb78`
|
||||||
|
|||||||
@@ -294,6 +294,8 @@ const statusIcon = {
|
|||||||
APPROVED: undefined,
|
APPROVED: undefined,
|
||||||
}[service.verificationStatus]
|
}[service.verificationStatus]
|
||||||
|
|
||||||
|
const isScam = service.verificationStatus === 'VERIFICATION_FAILED'
|
||||||
|
|
||||||
const shuffledLinks = {
|
const shuffledLinks = {
|
||||||
clearnet: shuffle(service.serviceUrls),
|
clearnet: shuffle(service.serviceUrls),
|
||||||
onion: shuffle(service.onionUrls),
|
onion: shuffle(service.onionUrls),
|
||||||
@@ -756,11 +758,18 @@ const activeEventToShow =
|
|||||||
<ul aria-label="Service links" class="xs:justify-start mt-4 flex flex-wrap justify-center gap-2">
|
<ul aria-label="Service links" class="xs:justify-start mt-4 flex flex-wrap justify-center gap-2">
|
||||||
{shownLinks.map((url) => (
|
{shownLinks.map((url) => (
|
||||||
<li>
|
<li>
|
||||||
<ServiceLinkButton
|
{isScam ? (
|
||||||
url={url}
|
<span class="2xs:text-sm 2xs:h-8 2xs:gap-2 2xs:px-4 bg-day-800 inline-flex h-6 items-center gap-1 rounded-full px-2 text-xs whitespace-nowrap text-red-400">
|
||||||
referral={service.referral}
|
<Icon name="ri:alert-line" class="size-4 text-red-400" />
|
||||||
enableMinWidth={shuffledLinks.onion.length + shuffledLinks.i2p.length > 0}
|
{urlDomain(url)}
|
||||||
/>
|
</span>
|
||||||
|
) : (
|
||||||
|
<ServiceLinkButton
|
||||||
|
url={url}
|
||||||
|
referral={service.referral}
|
||||||
|
enableMinWidth={shuffledLinks.onion.length + shuffledLinks.i2p.length > 0}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
</li>
|
</li>
|
||||||
))}
|
))}
|
||||||
|
|
||||||
@@ -784,11 +793,18 @@ const activeEventToShow =
|
|||||||
|
|
||||||
{hiddenLinks.map((url) => (
|
{hiddenLinks.map((url) => (
|
||||||
<li class="hidden peer-checked:block">
|
<li class="hidden peer-checked:block">
|
||||||
<ServiceLinkButton
|
{isScam ? (
|
||||||
url={url}
|
<span class="2xs:text-sm 2xs:h-8 2xs:gap-2 2xs:px-4 bg-day-800 inline-flex h-6 items-center gap-1 rounded-full px-2 text-xs whitespace-nowrap text-red-400">
|
||||||
referral={service.referral}
|
<Icon name="ri:alert-line" class="size-4 text-red-400" />
|
||||||
enableMinWidth={shuffledLinks.onion.length + shuffledLinks.i2p.length > 0}
|
{urlDomain(url)}
|
||||||
/>
|
</span>
|
||||||
|
) : (
|
||||||
|
<ServiceLinkButton
|
||||||
|
url={url}
|
||||||
|
referral={service.referral}
|
||||||
|
enableMinWidth={shuffledLinks.onion.length + shuffledLinks.i2p.length > 0}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
</li>
|
</li>
|
||||||
))}
|
))}
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
Reference in New Issue
Block a user