krz/skunky-art

Alternative privacy frontend for DeviantArt.

clone: git clone https://gitbay.org/krz/skunky-art.git

b1ad14553277d9d72a5e4b4462a52a2e2d0fdbb1

verified · cmc

author: Christian Cleberg <hello@cleberg.net> · 2026-07-15T06:54:26Z

fix: remove russian language throughout
 README.md                   | 40 ----------------------------------------
 SETUP-RU.md                 | 42 ------------------------------------------
 SETUP.md                    |  2 --
 app/api.go                  |  2 +-
 app/cache.go                |  2 +-
 app/parsers.go              |  2 +-
 app/router.go               |  2 +-
 app/util.go                 |  4 ++--
 app/wrapper.go              |  6 +++---
 static/templates-noembed.go |  2 +-
 10 files changed, 10 insertions(+), 94 deletions(-)

diff --git a/README.md b/README.md
index dda1e80..396628a 100755
--- a/README.md
+++ b/README.md
@@ -8,7 +8,6 @@
 
 Instances: [`INSTANCES.md`](INSTANCES.md)
 
-# EN 🇺🇸
 ## Description
 SkunkyArt 🦨 — an alternative frontend for DeviantArt that works entirely
 without JavaScript.
@@ -32,42 +31,3 @@ To do this, you must either make a PR by adding your instance to the
 `instances.json` and `INSTANCES.md` files (you can use `--add-instance`
 cli-argument to automatically add the instance to these files) or create an
 Issue.
-
-## Acknowledgements
-* [vlnst](https://git.bloat.cat/vlnst) — wrote a Docker file.
-* [Лис⚛](https://go.kde.org/matrix/#/@fox:matrix.org) — helped me understand Go
-  and gave me a lot of useful advice on this language.
-* [meoww](https://codeberg.org/meoww) — translated some sentences into English
-  and wrote a service for openrc
-
-# RU 🇷🇺
-## Описание
-SkunkyArt 🦨 — альтернативный фронтенд к DeviantArt, который полностью работает
-без JS (JavaScript).
-
-## Сборка
-Рекомендуется производить сборку с тегом 'embed', поскольку он встраивает
-заготовки в бинарный файл. Если вы планируете изменять заготовки, то не
-используйте этот тег. Также вы можете добавить аргумент `-ldflags "-w -s"` (у
-GCCGO он называется по-другому — `gccgoflags`) для уменьшения размера выходного
-файла. Вот пример:
-
-`go build -tags embed -ldflags "-w -s"`
-
-## Настройка
-Пример конфига находится в файле `config.example.json`. Чтобы указать свой
-конфиг, используйте cli-аргумент `--config`.
-
-См. [`SETUP-RU.md`](SETUP-RU.md) для информации о настройки фронтенда.
-
-## Добавление инстанса в список
-Чтобы это сделать, вы должны либо сделать PR, добавив в файлы `instances.json` и
-`INSTANCES.md` свой инстанс (можете воспользоваться cli-аргументом
-`--add-instance`, который автоматически это сделает), либо создать Issue.
-
-## Благодарности
-* [vlnst](https://git.bloat.cat/vlnst) — написал Docker-файл.
-* [Лис⚛](https://go.kde.org/matrix/#/@fox:matrix.org) — помог разобраться в Go и
-  много чего полезного посоветовал по этому языку.
-* [meoww](https://codeberg.org/meoww) — перевела некоторые предложения на
-  английский язык и написала сервис для openrc
diff --git a/SETUP-RU.md b/SETUP-RU.md
deleted file mode 100755
index 3306d58..0000000
--- a/SETUP-RU.md
+++ /dev/null
@@ -1,42 +0,0 @@
-[English version 🇬🇧](SETUP.md)
-
-# Единицы измерения
-Размер файла в кеше измеряется в мегабайтах.<br>
-Единицы времени:
-* `i` — минуты
-* `h` — часы
-* `w` — недели
-* `m` — месяца
-* `y` — года
-
-# Конфигурация
-* `listen` — IP и порт для слушанья; заполняется по такой форме: ip:port
-* `uri` — URI инстанса. Пример: `"uri":"/art/"` -> https://skunky.ebloid.ru/art/
-* `cache` — Система кеширования; по умолчанию выключена
-  * `enabled` — Состояние системы кеширования; требуется булёвое значение
-  * `path` — Полный путь до каталога, куда будет сохраняться кеш
-  * `lifetime` — Время жизни файла в кеше, требует целочисленное значение, дополненное суффиксом времени (см. 'Единицы времени')
-  * `max-size` — Максимальный размер файла
-  * `update-interval` — Интервал для автоматической ротации кеша
-* `static-path` — Строка, являющаяся путём до статики. SkunkyArt при запуске скопирует содержимое этого каталога в ОЗУ. Однако, если вы собрали фронтенд с тегом 'embed', то этого не произайдёт
-* `download-proxy` — Адрес прокси для загрузки файлов
-* `user-agent` — Строка, которая используется в качестве User-Agent'а
-
-# Настройка обратного прокси
-Если вы собираетесь хостить инстанс в Интернете, то вам следует настроить заголовок прокси [`X-Forwarded-Proto`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto). В противном случае, все ссылки на вашем инстансе будут вида "http". Ниже есть информация о том, как настроить обратное проксирование:
-
-Nginx:
-```apache
-server {
-    listen 443 ssl;
-    server_name skunky.example.com;
-    
-    # Если используется поддомен, то вместо ((BASE_URL)), укажите '/'.
-    location ((BASE_URL)) {
-        proxy_set_header X-Forwarded-Proto $scheme;
-        proxy_set_header Host $host;
-        proxy_http_version 1.1;
-        proxy_pass http://((IP)):((PORT));
-    }
-}
-```
\ No newline at end of file
diff --git a/SETUP.md b/SETUP.md
index 456318c..12622a2 100755
--- a/SETUP.md
+++ b/SETUP.md
@@ -1,5 +1,3 @@
-[Версия на русском языке 🇷🇺](SETUP-RU.md)
-
 # Units
 Maximum file size in megabytes, requires numeric value.<br>
 Time units:
diff --git a/app/api.go b/app/api.go
index 0398d3c..c891c36 100755
--- a/app/api.go
+++ b/app/api.go
@@ -57,7 +57,7 @@ func (a API) sendMedia(d *devianter.Deviation) {
 	}
 }
 
-// TODO: сделать фильтры
+// TODO: add filters
 func (a API) Random() {
 	// Bounded retries: the loop used to be unbounded, and the DeviantArt-error
 	// path never incremented attempt, so a single request could spin forever
diff --git a/app/cache.go b/app/cache.go
index e03db67..1cb8988 100755
--- a/app/cache.go
+++ b/app/cache.go
@@ -1,4 +1,4 @@
-// TODO: реализовать кеширование JSON и почистить код
+// TODO: implement JSON caching and clean up the code
 package app
 
 import (
diff --git a/app/parsers.go b/app/parsers.go
index 229b4b5..976c1b5 100755
--- a/app/parsers.go
+++ b/app/parsers.go
@@ -188,7 +188,7 @@ type text struct {
 	To      int
 }
 
-// переписать весь этот пиздец нахуй
+// TODO: rewrite this whole mess
 func ParseDescription(dscr devianter.Text) string {
 	var parsedDescription strings.Builder
 	TagBuilder := func(content string, tags ...string) string {
diff --git a/app/router.go b/app/router.go
index ac65c3d..13e8415 100755
--- a/app/router.go
+++ b/app/router.go
@@ -52,7 +52,7 @@ func Router() {
 		return fileReaded
 	}
 
-	// функция, что управляет всем
+	// the function that drives everything
 	handle := func(w http.ResponseWriter, r *http.Request) {
 		path := parsepath(r.URL.Path)
 		Host = "http://" + r.Host
diff --git a/app/util.go b/app/util.go
index c886b29..1eecc13 100755
--- a/app/util.go
+++ b/app/util.go
@@ -261,13 +261,13 @@ func GetValueOfTag(t *html.Tokenizer) string {
 	}
 }
 
-// навигация по страницам
+// page navigation
 type DeviationList struct {
 	Pages int
 	More  bool
 }
 
-// FIXME: на некоротрых артах первая страница может вызывать полное отсутствие панели навигации.
+// FIXME: on some artworks the first page can make the navigation panel disappear entirely.
 func (s skunkyart) NavBase(c DeviationList) string {
 	var list strings.Builder
 
diff --git a/app/wrapper.go b/app/wrapper.go
index 0f69159..9668ce0 100755
--- a/app/wrapper.go
+++ b/app/wrapper.go
@@ -167,7 +167,7 @@ func (s skunkyart) GRUser() {
 	}
 }
 
-// посты
+// posts
 func (s skunkyart) Deviation(author, postname string) {
 	id_search := regexp.MustCompile("[0-9]+").FindAllString(postname, -1)
 	if len(id_search) < 1 {
@@ -209,7 +209,7 @@ func (s skunkyart) Deviation(author, postname string) {
 		}
 	}
 
-	// хештэги
+	// hashtags
 	for _, x := range post.Post.Deviation.Extended.Tags {
 		var tag strings.Builder
 		tag.WriteString(` <a href="`)
@@ -270,7 +270,7 @@ func (s skunkyart) Search() {
 		ss.Content, daError, err = devianter.PerformSearch(s.Query, s.Page, s.Type)
 	case 'g', 'f':
 		ss.Content, daError, err = devianter.PerformSearch(s.Query, s.Page, s.Type, s.Args.Get("usr"))
-	case 'r': // скраппер, поскольку девиантартовцы зажопили гостевое API для поиска групп
+	case 'r': // scraper, since DeviantArt withholds the guest API for group search
 		var (
 			usernames = make(map[int]string)
 			url       strings.Builder
diff --git a/static/templates-noembed.go b/static/templates-noembed.go
index 7a3c541..c0dfe7f 100755
--- a/static/templates-noembed.go
+++ b/static/templates-noembed.go
@@ -91,7 +91,7 @@ func try(err error) {
 	}
 }
 
-/* сделано на основе https://github.com/psanford/memfs; требуется для корректной работы templates.ParseFS */
+/* based on https://github.com/psanford/memfs; required for templates.ParseFS to work correctly */
 type fileInfo struct {
 	name string
 }