-
![](https://gitlab.com/kycnot/kycnot.me/-/raw/main/html/static/img/logos/logo_512_transparent_no_text.webp)
@ KYCNOT.ME
2025-01-24 20:10:34
> [Read the original blog post](https://blog.kycnot.me/p/new-kycnot)
The new website is finally live! I put in a lot of hard work over the past months on it. I'm proud to say that it's out now and it looks pretty cool, at least to me!
## Why rewrite it all?
The old kycnot.me site was built using Python with Flask about two years ago. Since then, I've gained a lot more experience with Golang and coding in general. Trying to update that old codebase, which had a lot
of *design flaws*, would have been a bad idea. It would have been like building on an *unstable foundation*.
That's why I made the decision to rewrite the entire application. Initially, I chose to use SvelteKit with JavaScript. I did manage to create a stable site that looked similar to the new one, but it required Jav
aScript to work. As I kept coding, I started feeling like I was repeating *"the Python mistake"*. I was writing the app in a language I wasn't very familiar with (just like when I was learning Python at that mom
ent), and I wasn't happy with the code. It felt like *spaghetti code* all the time.
So, I made a complete U-turn and started over, this time using Golang. While I'm not as proficient in Golang as I am in Python now, I find it to be a *very enjoyable language* to code with. Most aof my recent pr
ojects have been written in Golang, and I'm getting the hang of it. I tried to make the best decisions I could and *structure the code* as well as possible. Of course, there's still *room for improvement*, which
I'll address in future updates.
Now I have a more *maintainable website* that can *scale* much better. It uses a *real database* instead of a JSON file like the old site, and I can add many more features. Since I chose to go with Golang, I mad
e the "tradeoff" of not using JavaScript at all, so all the rendering load falls on the server. But I believe it's a tradeoff that's worth it.
## What's new
- **UI/UX** - I've designed a new logo and color palette for kycnot.me. I think it looks pretty cool and cypherpunk. I am not a graphic designer, but I think I did a decent work and I put a lot of thinking on it to make it pleasant!
- **Point system** - The new [point system](https://kycnot.me/about#what-is-a-point) provides more detailed information about the listings, and **can** be expanded to cover additional features across all services. Anyone can request a new **point**!
- **ToS Scrapper**: I've implemented a powerful automated terms-of-service scrapper that collects all the ToS pages from the listings. It saves you from the hassle of reading the ToS by listing the lines that are suspiciously related to KYC/AML practices. This is still in development and it will improve for sure, but it works pretty fine right now!
- **Search bar** - The new search bar allows you to easily filter services. It performs a full-text search on the Title, Description, Category, and Tags of all the services. Looking for VPN services? Just search for "vpn"!
- **Transparency** - To be more [transparent](https://beta.kycnot.me/about#transparency), all discussions about services now take place publicly on GitLab. I won't be answering any e-mails (an auto-reply will prompt to write to the corresponding Gitlab issue). This ensures that all service-related matters are publicly accessible and recorded. Additionally, there's a real-time [audits](https://beta.kycnot.me/about#audit) page that displays database changes.
- **Listing Requests** - I have upgraded the request system. The new form allows you to directly request services or points without any extra steps. In the future, I plan to enable requests for specific changes
to parts of the website.
- **Lightweight and fast** - The new site is lighter and faster than its predecessor!
- **Tor and I2P** - At last! kycnot.me is now officially on [Tor and I2P](https://beta.kycnot.me/about#tor-and-i2p)!
## How?
This rewrite has been a labor of love, in the end, I've been working on this for more than 3 months now. I don't have a team, so I work by myself on my free time, but I find great joy in helping people on their private journey with cryptocurrencies. Making it easier for individuals to use cryptocurrencies **without KYC** is a goal I am proud of!
If you appreciate [my work](https://kycnot.me/about#about), you can support me through the methods listed [here](https://kycnot.me/about#support). Alternatively, feel free to send me an email with a kind message!
### Technical details
All the code is written in [Golang](https://go.dev), the website makes use of the [chi](https://go-chi.io) router for the routing part. I also make use of [BigCache](https://github.com/allegro/bigcache) for caching database requests. There is 0 JavaScript, so all the rendering load falls on the server, this means it needed to be efficient enough to not drawn with a few users since the old site was reporting about **2M** requests per month on average (note that this are not unique users).
The database is running with [mariadb](https://mariadb.org/), using [gorm](https://gorm.io) as the ORM. This is more than enough for this project. I started working with an `sqlite` database, but I ended up migrating to **mariadb** since it works better with JSON.
The scraper is using [chromedp](https://github.com/chromedp/chromedp) combined with a series of keywords, regex and other logic. It runs every 24h and scraps all the services. You can find the scraper code [here](https://gitlab.com/kycnot/kycnot.me/-/tree/main/scraper).
The frontend is written using **Golang Templates** for the HTML, and [TailwindCSS](https://tailwindcss.com/) plus [DaisyUI](https://daisyui.com) for the CSS classes framework. I also use some plain CSS, but it's minimal.
The requests forms is the only part of the project that requires JavaScript to be enabled. It is needed for parsing some from fields that are a bit complex and for the *"captcha"*, which is a simple *Proof of Work* that runs on your browser, destinated to avoid spam. For this, I use [mCaptcha](https://mcaptcha.org/).