Compare commits

...

12 Commits

Author SHA1 Message Date
pluja 8bab61a86f fix justfile 2024-03-04 21:23:06 +01:00
pluja f371e4b4af ok 2024-03-04 21:19:02 +01:00
pluja dfe2fcbdc8 update justfile 2024-03-04 21:18:08 +01:00
pluja bc1397fc55 update justfile deploy adn deploy by default 2024-03-04 21:16:05 +01:00
pluja 9d47367bbd update scoring text 2024-03-04 21:14:35 +01:00
pluja eaade44335 remove btc and xmr links 2024-03-04 21:12:22 +01:00
pluja a584634b39 improve about 2024-03-04 21:07:52 +01:00
pluja e301ee5fda add tor to privacy about 2024-03-04 16:24:58 +01:00
pluja 411de6ec9f dev env update 2024-03-04 16:22:17 +01:00
pluja 564e092bef add tooltips and other styling improvements 2024-03-04 16:22:05 +01:00
pluja 090c82d011 add final slash 2024-03-04 15:57:46 +01:00
pluja 4f0c0f835f fix dupe .onion 2024-03-04 15:57:28 +01:00
9 changed files with 70 additions and 75 deletions

View File

@ -1,7 +1,19 @@
default: deploy
dev +command:
docker compose -f docker-compose.yml -f docker-compose.dev.yml {{command}}
deploy build="":
#!/bin/bash
git pull
docker compose up {{ if build != "" { "--build" } else { "" } }} --pull=always -d
if [ -z "{{ build }}" ]; then
build_flag=""
else
build_flag="--build"
fi
docker compose up --pull=always -d $build_flag
if [ -z "{{ build }}" ]; then docker compose restart website; fi
docker system prune -f

View File

@ -8,9 +8,12 @@ services:
caddy.reverse_proxy: "{{upstreams 4488}}"
pocketbase:
ports:
- 8090:80
labels:
caddy: "pocketbase.localhost"
caddy.reverse_proxy: "{{upstreams 80}}"
caddy.request_body.max_size: 10MB
volumes:
- ./pocketbase/data:/pb_data
- ./pocketbase/public:/pb_public

View File

@ -35,7 +35,7 @@ services:
caddy.header.Referrer-Policy: "no-referrer"
caddy.header.Strict-Transport-Security: "max-age=31536000; includeSubdomains; preload;"
caddy.encode: zstd gzip
caddy.header.Onion-Location: ${ONION_ADDRESS}.onion{path}
caddy.header.Onion-Location: ${ONION_ADDRESS}{path}
pocketbase:
image: spectado/pocketbase:latest
@ -68,6 +68,7 @@ services:
restart: unless-stopped
networks:
caddy: {}
default: {}
volumes:
- ./docker/tor/data:/var/lib/tor
labels:
@ -82,6 +83,7 @@ services:
restart: unless-stopped
networks:
caddy: {}
default: {}
#ports:
# - ":14447" # socks
volumes:

File diff suppressed because one or more lines are too long

View File

@ -120,14 +120,14 @@
these exchanges. Moreover, most of these exchanges are centralized,
meaning that users do not own their keys. In short, this implies that
the cryptocurrencies belong to the exchange and not the user. These
requirements contradict the decentralized nature of cryptocurrencies.
requirements go against the decentralized and self-governed nature of cryptocurrencies.
</p>
<p>
With KYCNOT.ME, I hope to provide people with trustworthy alternatives
for buying, exchanging, trading, and using cryptocurrencies without
having to disclose their identity. This preserves the essence of
cryptocurrencies, which is decentralized and self-governed.
having to disclose their identity, preserving the original essence of
cryptocurrencies.
</p>
</div>
@ -141,7 +141,7 @@
is what they want you to believe.
</p>
<p>
The truth is that KYC is a threat to our freedom. KYC is a direct
The truth is that KYC is a direct
attack on our privacy and puts us in disadvantage against the
governments. True criminals don't care about KYC policies. True
criminals know perfectly how to avoid such policies. In fact, they
@ -167,11 +167,10 @@
</p>
<p>
KYC only affects small individuals like you and me. It is an annoying
procedure that obligates us to hand our personal information to a
procedure that forces us to hand our personal information to a
third party in order to buy, use or unlock our funds. We should start
boycotting such companies. We should start using decentralized
exchanges and decentralized wallets. We should start using
cryptocurrencies as they were intended to be used.
boycotting companies that enforce such practices. We should start using
cryptocurrencies as they were intended to be used: without barriers.
</p>
</div>
@ -187,14 +186,13 @@
<div class="m-2 rounded-xl bg-gray-500/10">
<h2 id="btcxmr">why only Bitcoin and Monero?</h2>
<p>
<strong>Bitcoin</strong>: it is the most well-known cryptocurrency. It's
widespread and has the biggest market capitalization of all
cryptocurrencies.
<strong>Bitcoin</strong>: it's the initial spark of the decentralized money.
A solid project with a strong community. It is the most well-known and widespread cryptocurrency.
</p>
<p>
<strong>Monero</strong>: if digital cash was to exist, it should be like
Monero. Fungible, private by design, fast and pretty low fees. Also, one
of the oldest cryptocurrencies around.
of the oldest cryptocurrencies around with a very active community.
</p>
<p>
No other currencies will be added. Most sites listed here also accept
@ -214,7 +212,7 @@
<p>
The listing process is usually slow. I first need to review the service,
read online reviews, gather evidence and history of good reviews /
opinions, test it myself (i don't always do this), read the terms of
opinions, test it myself (i can't always do this), read the terms of
service, privacy policy, etc...
</p>
@ -271,10 +269,6 @@
identify the kind of KYC practices a service may have. There are 4
levels going from 0 to 3. The higher the level, the more invasive the
KYC practices are.
<b
>You can click on the level on the service page to see a detailed
description of what it means.</b
>
</p>
<h3 id="scoring">scoring</h3>
@ -287,6 +281,11 @@
still get a high score.
</p>
<p>The scoring algorithm is <a target="_blank" href="https://codeberg.org/pluja/kycnot.me/src/branch/main/src/utils/score.go">open source</a>,
pull requests to improve it are welcome.
It runs once every hour, meaning scores cannot be manually modified since they will be recalculated by the algorithm hourly. You can visit
<a href="https://kycnot.me/api/v1/service/localmonero/summary">a service's score breakdown</a> to see how it is calculated.</p>
<h3 id="order">order</h3>
<p>
@ -644,8 +643,8 @@
<p>
KYCNOT.me does not have trackers and never will. It does not make any
third party connections from the frontend. No user data of any kind is
collected. A "no-referrer" policy is enforced, so no site will know that
you came from kycnot.me.
collected. A "no-referrer" policy is enforced. Tor and I2P sites are available
(check the footer).
</p>
<h3 id="javascript">javascript</h3>
@ -658,7 +657,7 @@
<p>Only things that <b>require</b> JavaScript to be enabled are:</p>
<div class="[&>span]:block space-y-2">
<span>
<b>Requests</b>: The Proof-Of-Work captcha, that I coded myself, needs
<b>Service Requests</b>: The Proof-Of-Work captcha, that I coded myself, needs
JavaScript for the verfication. The code is public, and you can read
it yourself on the repo.
</span>
@ -734,7 +733,13 @@
<div class="m-2 rounded-xl bg-gray-500/10">
<h2 id="sponsored-reviews">sponsored reviews</h2>
<p>
You will find some sponsored service reviews on the <a href="https://blog.kycnot.me">kycnot.me blog</a>. These reviews are kept separate from the list, meaning that a service that sponsors a review will not receive any advantage on the list. The scoring algorithm is <a href="https://codeberg.org/pluja/kycnot.me/src/branch/main/src/utils/score.go">open source</a>, it runs once per hour and cannot be tricked to improve a service's score. You can visit <a href="https://kycnot.me/api/v1/service/localmonero/summary">a service's score breakdown</a> to see how it is calculated. Furthermore, services that are tied score-wise are sorted randomly to ensure fairness.
You will find some sponsored service reviews on the <a href="https://blog.kycnot.me">kycnot.me blog</a>.
These reviews are kept separate from the list, meaning that a service that sponsors a review will not receive
any advantage on the list. The scoring algorithm is
<a href="https://codeberg.org/pluja/kycnot.me/src/branch/main/src/utils/score.go">open source</a>,
it runs once per hour and cannot be tricked to improve a service's score. You can visit
<a href="https://kycnot.me/api/v1/service/localmonero/summary">a service's score breakdown</a>
to see how it is calculated. Furthermore, services that are tied score-wise are sorted randomly to ensure fairness.
</p>
<p>

View File

@ -11,7 +11,7 @@
<meta property="og:description"
content="Find the best NON-KYC exchanges and services to use and spend your crypto anonymously." />
<meta property="og:type" content="website" />
<meta http-equiv="onion-location" content="http://kycnotmezdiftahfmc34pqbpicxlnx3jbf5p7jypge7gdvduu7i6qjqd.onion" />
<meta http-equiv="onion-location" content="http://kycnotmezdiftahfmc34pqbpicxlnx3jbf5p7jypge7gdvduu7i6qjqd.onion/" />
<meta property="og:image" content="https://kycnot.me/static/img/logos/banner.webp" />
<meta property="thumbnail" content="https://kycnot.me/static/img/logos/banner.webp">
<meta name="twitter:image" content="https://kycnot.me/static/img/logos/banner.webp">
@ -24,11 +24,15 @@
<!-- pubkey so it can be tagged for responses/alerts -->
<meta property="nostr:pubkey" content="npub1tuta00sz4wvvzymqcfq42cqhxal6puqpylxs4yf0z28z3ryvfh9qkqmv92" />
<!-- Nostr publish relays -->
<meta property="nostr:relay" content="wss://relay.damus.io" />
<meta property="nostr:relay" content="wss://relay.exit.pub" />
<meta property="nostr:relay" content="wss://relay.snort.social" />
<meta property="nostr:relay" content="wss://relay.plebstr.com" />
<meta property="nostr:relay" content="wss://relay.camelus.app" />
<meta property="nostr:relay" content="wss://bitcoiner.social" />
<meta property="nostr:relay" content="wss://purplerelay.com" />
<!-- CSS -->
<link rel="stylesheet" href="/static/disgus/disgus.css">
<link rel="stylesheet" href="/static/css/balloon.min.css">
<!-- Site Config -->
<title>{{.Title}} - KYCnot.me</title>

View File

@ -1,32 +1,15 @@
{{/* service_card.html */}}
<a href="/service/{{.Name}}" class="w-full max-w-md">
<div
class="flex flex-col justify-between p-4 bg-gray-700 bg-opacity-30 rounded-lg border border-transparent shadow-lg backdrop-blur-md transition duration-500 hover:border-lime-600/70"
>
<div class="flex flex-col justify-between p-4 bg-gray-700 bg-opacity-30 rounded-lg border border-transparent shadow-lg backdrop-blur-md transition duration-500 hover:border-lime-600/70">
<div>
<div class="flex items-center">
<img
src="/api/g/picture/{{.ID}}"
alt="{{.Name}} logo"
class="mr-4 w-12 h-12 rounded-full bg-white/10"
/>
<img src="/api/g/picture/{{.ID}}" alt="{{.Name}} logo" class="mr-4 w-12 h-12 rounded-full bg-white/10" />
<div class="flex flex-col justify-center items-center">
<div class="text-lg font-bold text-white md:text-xl">
<div class="flex justify-between items-center">
<span class="flex justify-center items-center capitalize">
{{if .Verified}}
<svg
xmlns="http://www.w3.org/2000/svg"
class="mr-1 w-5 h-5 text-blue-400/80 discount-check-filled"
width="24"
height="24"
viewBox="0 0 24 24"
stroke-width="2"
stroke="currentColor"
fill="none"
stroke-linecap="round"
stroke-linejoin="round"
>
<svg xmlns="http://www.w3.org/2000/svg" class="mr-1 w-5 h-5 text-blue-400/80 discount-check-filled" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path
d="M12.01 2.011a3.2 3.2 0 0 1 2.113 .797l.154 .145l.698 .698a1.2 1.2 0 0 0 .71 .341l.135 .008h1a3.2 3.2 0 0 1 3.195 3.018l.005 .182v1c0 .27 .092 .533 .258 .743l.09 .1l.697 .698a3.2 3.2 0 0 1 .147 4.382l-.145 .154l-.698 .698a1.2 1.2 0 0 0 -.341 .71l-.008 .135v1a3.2 3.2 0 0 1 -3.018 3.195l-.182 .005h-1a1.2 1.2 0 0 0 -.743 .258l-.1 .09l-.698 .697a3.2 3.2 0 0 1 -4.382 .147l-.154 -.145l-.698 -.698a1.2 1.2 0 0 0 -.71 -.341l-.135 -.008h-1a3.2 3.2 0 0 1 -3.195 -3.018l-.005 -.182v-1a1.2 1.2 0 0 0 -.258 -.743l-.09 -.1l-.697 -.698a3.2 3.2 0 0 1 -.147 -4.382l.145 -.154l.698 -.698a1.2 1.2 0 0 0 .341 -.71l.008 -.135v-1l.005 -.182a3.2 3.2 0 0 1 3.013 -3.013l.182 -.005h1a1.2 1.2 0 0 0 .743 -.258l.1 -.09l.698 -.697a3.2 3.2 0 0 1 2.269 -.944zm3.697 7.282a1 1 0 0 0 -1.414 0l-3.293 3.292l-1.293 -1.292l-.094 -.083a1 1 0 0 0 -1.32 1.497l2 2l.094 .083a1 1 0 0 0 1.32 -.083l4 -4l.083 -.094a1 1 0 0 0 -.083 -1.32z"
@ -38,11 +21,7 @@
</span>
{{if isNew .Created}}
<span
class="px-1 py-1 text-xs font-bold uppercase rounded border border-white/30 bg-white/20 text-white/70"
>
NEW
</span>
<span class="px-1 py-1 text-xs font-bold uppercase rounded border border-white/30 bg-white/20 text-white/70"> NEW </span>
{{end}}
<span
class="px-2 py-1 text-xs font-bold uppercase border rounded
@ -66,10 +45,7 @@
{{.Score}}
</span>
</div>
<span
class="block pr-1 mt-2 text-xs font-normal text-opacity-60 text-white/60"
>{{shortText .Description | safe}}</span
>
<span class="block pr-1 mt-2 text-xs font-normal text-opacity-60 text-white/60">{{shortText .Description | safe}}</span>
</div>
</div>
</div>
@ -77,17 +53,9 @@
<div class="mt-4">
<div class="flex justify-center items-center text-xs">
{{if eq .Type "exchange"}}
<span
class="px-2 py-1 mr-1 text-xs font-bold uppercase rounded border text-white/70 bg-zinc-900 border-zinc-700"
>
{{.Type}}
</span>
<span class="px-2 py-1 mr-1 text-xs font-bold uppercase rounded border text-white/70 bg-zinc-900 border-zinc-700"> {{.Type}} </span>
{{else}}
<span
class="px-2 py-1 mr-1 text-xs font-bold uppercase rounded border text-white/70 bg-zinc-900 border-zinc-700"
>
{{.Category}}
</span>
<span class="px-2 py-1 mr-1 text-xs font-bold uppercase rounded border text-white/70 bg-zinc-900 border-zinc-700"> {{.Category}} </span>
{{end}} {{partial "partials/service_icons" .}}
</div>
</div>

View File

@ -1,7 +1,7 @@
<div class="grid grid-cols-5">
<!-- Monero -->
<span class="px-2 py-1 m-1 text-center text-white border rounded bg-zinc-900 border-zinc-700">
<span aria-label="XMR" data-balloon-pos="up" class="px-2 py-1 m-1 text-center text-white rounded border bg-zinc-900 border-zinc-700">
<svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 {{if .Xmr}}text-orange-400/70{{else}} text-white/20 {{end}} tabler-coin-monero" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0"></path>
@ -10,7 +10,7 @@
</span>
<!-- Bitcoin -->
<span class="px-2 py-1 m-1 text-center text-white border rounded bg-zinc-900 border-zinc-700">
<span aria-label="BTC" data-balloon-pos="up" class="px-2 py-1 m-1 text-center text-white rounded border bg-zinc-900 border-zinc-700">
<svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 {{if .Btc}} text-amber-400/70 {{else}} text-white/20 {{end}} coin-bitcoin" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0"></path>
@ -23,7 +23,7 @@
</span>
<!-- Lightning -->
<span class="px-2 py-1 m-1 text-center text-white border rounded bg-zinc-900 border-zinc-700">
<span aria-label="LN" data-balloon-pos="up" class="px-2 py-1 m-1 text-center text-white rounded border bg-zinc-900 border-zinc-700">
<svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 {{if .Lightning}} text-sky-400/70 {{else}} text-white/20 {{end}} bolt" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M13 3l0 7l6 0l-8 11l0 -7l-6 0l8 -11"></path>
@ -31,7 +31,7 @@
</span>
<!-- Cash -->
<span class="px-2 py-1 m-1 text-center text-white border rounded bg-zinc-900 border-zinc-700">
<span aria-label="CASH" data-balloon-pos="up" class="px-2 py-1 m-1 text-center text-white rounded border bg-zinc-900 border-zinc-700">
<svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 {{if .Cash}} text-yellow-300/70 {{else}} text-white/20 {{end}}" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M9 14c0 1.657 2.686 3 6 3s6 -1.343 6 -3s-2.686 -3 -6 -3s-6 1.343 -6 3z"></path>
@ -43,7 +43,7 @@
</span>
<!-- Fiat -->
<span class="px-2 py-1 m-1 text-center text-white border rounded bg-zinc-900 border-zinc-700">
<span aria-label="FIAT" data-balloon-pos="up" class="px-2 py-1 m-1 text-center text-white rounded border bg-zinc-900 border-zinc-700">
<svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 {{if .Fiat}}text-green-400/70{{else}} text-white/20 {{end}} building-bank" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M3 21l18 0"></path>

View File

@ -22,7 +22,7 @@
<span class="flex justify-center items-center capitalize">
<span class="text-xl font-bold md:text-2xl">{{.Service.Name}}</span>
{{if .Service.Verified}}
<a href="/about#verified">
<a aria-label="Verified" data-balloon-pos="up" href="/about#verification">
<svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6 ml-1 {{if .Service.Verified}}text-blue-400/80{{else}} text-white/20 {{end}} discount-check-filled" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path
@ -61,8 +61,8 @@
</a>
{{if ne .Service.Referral ""}}
<a href="{{randomElem .Service.Urls}}" class="flex justify-center items-center px-2 py-1 text-center text-gray-300 rounded-r border border-gray-600 transition duration-300 bg-zinc-900 hover:border-lime-600 hover:text-lime-600">
<svg xmlns="http://www.w3.org/2000/svg" class="size-5 link-off" width="24" height="24" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<a aria-label="No Referral" data-balloon-pos="up" href="{{randomElem .Service.Urls}}" class="flex justify-center items-center px-1 py-1 text-center text-gray-300 rounded-r border border-gray-600 transition duration-300 md:px-2 bg-zinc-900 hover:border-lime-600 hover:text-lime-600">
<svg xmlns="http://www.w3.org/2000/svg" class="size-4 link-off" width="24" height="24" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M9 15l3 -3m2 -2l1 -1" />
<path d="M11 6l.463 -.536a5 5 0 0 1 7.071 7.072l-.534 .464" />
@ -94,8 +94,8 @@
{{end}}
{{if ne .Service.Referral ""}}
<a href="{{randomElem .Service.OnionUrls}}" class="flex justify-center items-center px-2 py-1 text-center text-purple-600 rounded-r border border-purple-900 transition duration-300 bg-zinc-900 hover:border-lime-600 hover:text-lime-600">
<svg xmlns="http://www.w3.org/2000/svg" class="size-5 link-off" width="24" height="24" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<a aria-label="No Referral" data-balloon-pos="up" href="{{randomElem .Service.OnionUrls}}" class="flex justify-center items-center px-1 py-1 text-center text-purple-600 rounded-r border border-purple-900 transition duration-300 md:px-2 bg-zinc-900 hover:border-lime-600 hover:text-lime-600">
<svg xmlns="http://www.w3.org/2000/svg" class="size-4 link-off" width="24" height="24" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M9 15l3 -3m2 -2l1 -1" />
<path d="M11 6l.463 -.536a5 5 0 0 1 7.071 7.072l-.534 .464" />
@ -124,7 +124,7 @@
</a>
{{end}}
<a href="#discuss" class="hidden justify-center items-center px-2 py-1 m-1 space-x-2 text-center text-sky-400 rounded border border-sky-700 transition duration-300 md:flex bg-zinc-900 hover:border-lime-600 hover:text-lime-600">
<a aria-label="Discuss service" data-balloon-pos="up" href="#discuss" class="hidden justify-center items-center px-2 py-1 m-1 space-x-2 text-center text-sky-400 rounded border border-sky-700 transition duration-300 md:flex bg-zinc-900 hover:border-lime-600 hover:text-lime-600">
<svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 messages" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M21 14l-3 -3h-7a1 1 0 0 1 -1 -1v-6a1 1 0 0 1 1 -1h9a1 1 0 0 1 1 1v10"></path>