10 Commits

Author SHA1 Message Date
c2169a0a87 Update dependency svelte to v5.36.16 2025-07-24 17:00:28 +00:00
ngn
91a11e4611 give a static height to the page header
All checks were successful
Build the docker image for the frontend application / build (push) Successful in 27s
Signed-off-by: ngn <ngn@ngn.tf>
2025-07-24 18:45:09 +03:00
ngn
13a703352b fix link parsing for the locales
Signed-off-by: ngn <ngn@ngn.tf>
2025-07-24 18:30:42 +03:00
ngn
2c5388bcce add border to separate service list from paragraph
All checks were successful
Build the docker image for the frontend application / build (push) Successful in 27s
Signed-off-by: ngn <ngn@ngn.tf>
2025-07-24 17:49:11 +03:00
ngn
f053b93c24 fix the service component style
All checks were successful
Build the docker image for the frontend application / build (push) Successful in 29s
Signed-off-by: ngn <ngn@ngn.tf>
2025-07-24 17:40:18 +03:00
ngn
babbe50c00 add missing locales
All checks were successful
Build the docker image for the frontend application / build (push) Successful in 29s
Signed-off-by: ngn <ngn@ngn.tf>
2025-07-24 17:19:27 +03:00
ngn
92f594f27f don't ignore all yaml files in gitignore
Signed-off-by: ngn <ngn@ngn.tf>
2025-07-24 17:19:10 +03:00
ngn
cb5f5628a3 stay on the same page after switching locale
Signed-off-by: ngn <ngn@ngn.tf>
2025-07-24 17:18:00 +03:00
ngn
8adbc9d354 update node container for the web app
All checks were successful
Build the docker image for the frontend application / build (push) Successful in 56s
Signed-off-by: ngn <ngn@ngn.tf>
2025-07-24 17:09:37 +03:00
ngn
8a084c4e95 Merge branch 'dev'
All checks were successful
Build the docker image for the frontend application / build (push) Successful in 35s
Build the docker image for the doc server / build (push) Successful in 12s
2025-07-24 16:56:12 +03:00
11 changed files with 243 additions and 30 deletions

14
.gitignore vendored
View File

@@ -1,11 +1,7 @@
# docker(-compose) stuff
data.db
*.yaml
*.yml
docker-compose.yaml
docker-compose.yml
compose.yaml
compose.yml
*.env
# don't ignore example deployment stuff
!deploy/*
!.github/*
!.gitea/*
!.github/*/*
!.gitea/*/*

View File

@@ -1,5 +1,5 @@
# build the application with node
FROM node:23.11.1 AS build
FROM node:24.4.1 AS build
ARG WEBSITE_REPORT_URL
ARG WEBSITE_SOURCE_URL
@@ -16,7 +16,6 @@ ENV WEBSITE_API_PATH=$WEBSITE_API_PATH
WORKDIR /app
COPY . /app
RUN apt install -y make sed wget
RUN npm install
RUN make

6
app/package-lock.json generated
View File

@@ -1155,9 +1155,9 @@
}
},
"node_modules/svelte": {
"version": "5.36.10",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-5.36.10.tgz",
"integrity": "sha512-hAjYQweQHM8VH5YEEf2+k9hGyMnd+oVHXoSA/eG607vViRk9qQO1g+Dvr29+yMuYQNScpOzHX3qcnC7LrcTGCQ==",
"version": "5.36.16",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-5.36.16.tgz",
"integrity": "sha512-C7HnyISfvZEofs7T4p7+bmjrbQlhd6lZfgV2tLYg6Eb3nUFM/Zu9dGlSg+GWbUBU/WPw6zDPOFNZAx9qXsoCkg==",
"dev": true,
"license": "MIT",
"dependencies": {

View File

@@ -17,10 +17,11 @@
justify-content: space-between;
align-items: end;
background: var(--transparent);
height: 250px;
}
header div {
padding: 100px 40px 10px 40px;
padding: 0 40px 10px 40px;
color: var(--color);
font-size: var(--size-6);
font-family:
@@ -50,10 +51,20 @@
header img {
width: 220px;
padding: 50px 50px 0 50px;
padding: 0 50px;
}
@media only screen and (max-width: 900px) {
header {
height: 180px;
justify-content: center;
align-items: center;
}
header div {
padding: 30px 20px 20px 20px;
}
header img {
display: none;
}

View File

@@ -9,7 +9,7 @@
}
</script>
<form action="/" method="get" {onsubmit}>
<form method="get" {onsubmit}>
<input type="hidden" name="l" value={$next.code} />
<button type="submit">{$next.icon}</button>
</form>

View File

@@ -13,16 +13,18 @@
</div>
<ul>
<li><a href={service.clear}> Clear</a></li>
<span>|</span>
<li><a href={service.onion}>TOR</a></li>
<span>|</span>
<li><a href={service.i2p}> I2P</a></li>
</ul>
</div>
<div class="check">
<h1>
<p>
{$_("services.last", {
time: time_from_ts(service.check_time),
})}
</h1>
</p>
{#if service.check_res == 0}
<span style="background: var(--white-2)">
{$_("services.status.down")}
@@ -48,7 +50,7 @@
border: solid 1px var(--black-3);
text-align: left;
flex-grow: 1;
flex: 1;
}
main .info {
@@ -82,12 +84,6 @@
list-style: none;
}
main .info ul li:not(:last-of-type)::after {
content: " / ";
color: var(--white-3);
font-weight: 900;
}
main .info li a {
color: var(--color);
text-decoration: none;
@@ -110,6 +106,10 @@
text-shadow: none;
}
main .info ul span {
color: var(--white-3);
}
main .check {
border-top: solid 1px var(--black-3);
display: flex;
@@ -119,12 +119,15 @@
color: var(--white-1);
}
main .check h1 {
main .check p {
font-size: var(--size-2);
font-weight: 100;
color: var(--white-2);
padding: 5px 18px;
word-break: keep-all;
white-space: nowrap;
}
main .check span {

View File

@@ -65,7 +65,7 @@ class Locale {
for (let i = 0; i < links.length; i++) {
let link = links[i][0];
let name = link.match(/(?<=\[).*?(?=])/g);
let url = link.match(/(?<=\()[^ ]*(?=\))/g);
let url = link.match(/(?<=\]\()[^ ]*(?=\))/g);
// if we fail to extract the link name and/or URL, skip this match
if (null === name || null === url) continue;

98
app/src/locales/en.yaml Normal file
View File

@@ -0,0 +1,98 @@
navbar:
home: home
services: services
donate: donate
home:
title: hello world!
welcome:
title: about
desc: |
Welcome to my personal website, I'm ngn. You might also know me as ngn13.
I am a security, privacy and freedom advocate high-school student from
Turkey. I'm mainly interesed in software development and system security,
so I usually spend my free time writing [Free/Libre
software](https://www.gnu.org/philosophy/free-sw.html), solving
[CTF](https://en.wikipedia.org/wiki/Capture_the_flag_(cybersecurity))s and
learning new things.
thanks: |
I have few personal software projects and I host web based services. If
you would like to check them out, see the sections below. Thank you for
visiting my website and I hope you have a good rest of your day!
projects:
title: projects
desc: |
I develop and work on Free/Libre software. I don't work on massive
projects and I'm not a professional but I do enjoy it. Here are some of my
more popular projects that you might find interesting
services:
title: services
desc: |
I host web based services. Most of these services provide front-end or
alternatives to already existing popular web services. Here are all the
details
speed: All of these services are available over an 1 Gbit interface
security: All use SSL encrypted connection and they respect your privacy and freedom
blocks: |
Accessible from clearnet, [TOR](https://www.torproject.org/) and
[I2P](https://geti2p.net/en/) - no region or network blocks
bullshit: No CDNs, no cloudflare, no CAPTCHA, no analytics, no bullshit
link: See all the services!
contact:
title: contact
desc: |
If you have question or a suggestion, or if you simply want to chat, feel
free to send me an email at **ngn [at] ngn.tf**. You can use my [PGP
key](https://keyoxide.org/F9E70878C2FB389AEC2BA34CA3654DF5AD9F641D) to
send me an encrypted email, which I would highly prefer. My PGP key also
includes identity claims, which you can use to verify my public profiles.
mastodon: |
I'm also on [mastodon](https://defcon.social/@ngn) where I mainly post
Turkish stuff.
services:
title: service status
desc: |
Here you can find a list of all the publicly accessible services I host. I
have periodic status check for clearnet addresses: A request is sent to the
clearnet address the status of the service is reported based on the
response. The latest reported status is displayed next to the time of the
report. If you experience any issues with a service even though the status
is displayed as up, please [contact me](/#contact) to report this issue.
feed: |
I also have an [1:Atom feed] that you can follow to get the latest news and
updates about the changes made to the different services.
last: Last checked at {time}
status:
up: Up
down: Down
slow: Slow
donate:
title: donate!
desc: |
If you like my work or if you are feeling generous, you can financially
support me. I spend around $15 every month to maintain everything, so even a
small donation would be highly appreciated and it would help me keep
everything up and running.
info: |
Currently I only accept donations with [Monero
(XMR)](https://www.getmonero.org/). Here is my monero address
thanks: |
Also I would like to thank everyone who has donated so far. I really
appreciate it!
error:
title: something went wrong!
report: Report this issue
footer:
source: Source
license: License
privacy: Privacy
number: Visited {total} times since {since}
wow: wow!!
render: Rendered on {time} just for you

103
app/src/locales/tr.yaml Normal file
View File

@@ -0,0 +1,103 @@
navbar:
home: anasayfa
services: servisler
donate: bağış
home:
title: merhaba dünya!
welcome:
title: hakkımda
desc: |
Kişisel websiteme hoşgeldiniz, ben ngn. Beni ngn13 olarak da
bilebilirsiniz. Türkiye'den güvenlik, gizlilik ve özgürlük savunucusu bir
liseliyim. Genel olarak yazılım geliştirme ve sistem güvenliği ile
ilgileniyorum, o yüzden boş zamanımın çoğunu
[Özgür yazılım](https://www.gnu.org/philosophy/free-sw.tr.html) yazarak,
[CTF](https://wikipedia.org/wiki/Capture_the_flag_(cybersecurity)) çözerek
ve yeni şeyler öğrenerek harcıyorum.
thanks: |
Birkaç kişisel yazılım projem var ve web tabanlı servisler barındırıyorum.
Eğer bunları incelemek isterseniz, aşağıdaki bölümlere bakın. Websitemi
ziyaret ettiğiniz için teşekkür ederim ve size iyi günler dilerim!
projects:
title: projeler
desc: |
Özgür yazılım geliştiriyorum ve üzerinde çalışıyorum. Devasa projelerde
çalışmıyorum ve profesyonel değilim ama hoşuma gidiyor. İşte biraz daha
popüler olan ve ilginç bulabileceğiniz bazı projelerim
services:
title: servisler
desc: |
Web tabanlı servisler host ediyorum. Bu servislerin çoğu zaten mevcut
popüler web servislerine arayüz ya da alternatifler sağlıyor. İşte tüm
detaylar
speed: Tüm servisler 1 Gbit ağ arayüzü üzerinden erişilebilir
security: |
Hepsi SSL şifreli bağlantı kullanıyor ve mahremiyetinize ve özgürlüğünüze
saygı gösteriyor
blocks: |
ık ağdan, [TOR](https://www.torproject.org/tr/) ve
[I2P](https://geti2p.net/tr/)'den erişilebilirler, bölge ya da ağ blokları
yok
bullshit: CDN yok, cloudflare yok, CAPTCHA yok, analitikler ve diğer saçmalıklar yok
link: Tüm servisleri görüntüle!
contact:
title: contact
desc: |
Eğer bir sorunuz ya da öneriniz varsa, ya da basitçe muhabbet etmek
istiyorsanız, bana **ngn [at] ngn.tf** adresinden bir e-posta göndermekten
çekinmeyin. [PGP anahtarımı
](https://keyoxide.org/F9E70878C2FB389AEC2BA34CA3654DF5AD9F641D) bana
tercihim olan şifreli e-postalar göndermek için kullanabilirsiniz. PGP
anahtarım aynı zamanda identity claim'leri içeriyor, bunları internete
ık profillerimi doğrulamak için kullanabilirisniz.
mastodon: |
Aynı zamanda [mastodon'dayım](https://defcon.social/@ngn),
çoğunlukla Türkçe olan paylaşımlar yapıyorum.
services:
title: servis durumu
desc: |
Burada barındırdığım internete açık tüm servislerin bir listesini
bulabilirsiniz. Açık ağ adresleri için periyodik bir durum kontrolü mevcut:
ık ağ adresine bir istek gönderiliyor ve servisin durumu verilen cevaba
göre raporlanıyor. En son raporlanan durum raporun zamanının yanında
görüntüleniyor. Bir servisin durumu çalışıyor olarak görünmesine rağmen
servisle alakalı sorunlar yaşıyorsanız, lütfen bu sorunları raporlamak için
[bana ulaşın](/#contact).
feed: |
Farklı servislere yapılan değişiklikler hakkında güncellemeleri ve
haberleri görmek adına takip edebileceğiniz bir [1:Atom beslemesi] de
mevcut.
last: Son kontrol zamanı {time}
status:
up: Çalışıyor
down: Kapalı
slow: Yavaş
donate:
title: bağış yap!
desc: |
Eğer emeğimi seviyorsanız ya da kendinizi cömert hissediyorsanız, beni
finansal olarak destekleyebilirsiniz. Herşeyi yönetmek adına her yaklaşık
$15 harcıyorum, o yüzden küçük bir bağış bile oldukça faydalı olacaktır ve
herşeyi ayakta tutmama yardım eder.
info: |
Şuan sadece [Monero (XMR)](https://www.getmonero.org/tr/) ile bağış kabul
ediyorum. İşte monero adresim
thanks: Ayrıca şuana kadar bağış yapan herkese çok teşekkür ederim.
error:
title: birşeyler yanlış gitti!
report: Bu hatayı raporla
footer:
source: Kaynak
license: Lisans
privacy: Gizlilik
number: "{since} tarihinden beri {total} kez ziyaret edildi"
wow: vay be!
render: Sizin için {time} tarihinde işlendi

View File

@@ -12,7 +12,7 @@ export async function load({ cookies, request, url }) {
if (locale) {
set_locale(cookies, locale);
return redirect(307, "/");
return redirect(307, url.pathname);
}
// attempt get the preferred locale from cookies

View File

@@ -54,12 +54,15 @@
}
main .services {
border-top: solid 1px var(--white-3);
padding-top: 20px;
margin-top: 15px;
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: stretch;
gap: 28px;
color: var(--white-3);
gap: 15px;
}
</style>