#+title: skunkyart * fork fork of SkunkyArt (https://git.macaw.me/skunky/SkunkyArt). upstream hasn't updated in over a year, has open bugs, and its listed instances are dead links. this fork keeps it maintained. * what skunkyart. alternative frontend for deviantart. works with no javascript. one instance, one config file, no database. instances: [[file:INSTANCES.md][INSTANCES.md]] pages: - ~/~ search box, links to daily deviations and about - ~/dd~ daily deviations; ~?atom=true~ for the feed - ~/search?q=&type=all|tag|r~ search art, tags, or groups - ~/post//~ one deviation, with a link to its comments - ~/group_user?q=&type=about|gallery|favourites~ a user or group; ~&atom=true~ on a gallery for its feed - ~/api/...~ json, documented in [[file:API.md][API.md]] [[file:REDIRECTS.md][REDIRECTS.md]] maps deviantart.com urls onto these, for browser redirector extensions such as libredirect. deviantart blocks egress ips that ask too often, so the instance keeps its upstream traffic down: api responses are cached in memory and coalesced, media and avatars are cached on disk, comments load on request, pages carry cache-control headers, crawlers get a robots.txt, and each client has a request budget. all of it is on by default and tunable in [[file:SETUP.md][SETUP.md]]. * build build with the embed tag to embed presets in the binary. skip the tag if you'll modify templates. add ~-ldflags "-w -s"~ (~gccgo: gccgoflags~) to shrink the output: #+begin_src sh go build -tags embed -ldflags "-w -s" #+end_src that build reports its version as dev. stamp one in with ~-X main.version=~, as the release workflow does from the git tag. or let the makefile do both: #+begin_src sh make build # embed tag, version from git describe make test make lint make dist # tarballs for linux, darwin and freebsd under dist/ #+end_src release tags also get those tarballs attached on the github mirror's release page. * run without docker: put the binary (and ~static/~, unless built with the embed tag) in a directory with a ~config.json~, then #+begin_src sh ./skunkyart -c config.json #+end_src ~config.json~ is optional; without it the built-in defaults listen on 127.0.0.1:3003 with the caches on. service files for systemd and openrc are in [[file:services/][services/]]. put a reverse proxy with tls in front; SETUP.md has the nginx stanza. * where things live the repository, issues and merge requests are on gitbay (https://gitbay.org/krz/skunky-art). github.com/krazywarez/skunky-art is a push mirror that exists to build the container image; do not open issues there. * docker multi-arch images (~linux/amd64~, ~linux/arm64~) publish to ghcr on every release tag, built by the github mirror's workflow: #+begin_src sh docker pull ghcr.io/krazywarez/skunky-art:latest #+end_src each release is tagged 1.3.3, 1.3, 1, and latest. pin an exact version for reproducible upgrades. [[file:compose.example.yaml][compose.example.yaml]] uses the image; [[file:compose.vpn_example.yml][compose.vpn_example.yml]] adds an optional vpn egress sidecar. * config sample config in [[file:config.example.json][config.example.json]]. custom config with ~--config~. directive details in [[file:SETUP.md][SETUP.md]]. * develop #+begin_src sh go test ./... -race go run github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.13.2 run ./... #+end_src ci runs both on every push. the roadmap is [[file:ROADMAP.md][ROADMAP.md]]. * instances instances are checked daily by ci (~scripts/check-instances.py~); a dead one turns the build red. add yours by merge request to [[file:instances.json][instances.json]] and [[file:INSTANCES.md][INSTANCES.md]] (or use ~--add-instance~ to write both), or open an issue.