feat(web): improve UI responsiveness, polish, and update docs

- Add mobile/tablet responsive breakpoints to web UI
- Redesign cards as full-bleed poster layout with gradient overlay
- Add skeleton loading state, comic count badge, and search icon
- Switch to Docker image format for registry compatibility
- Add docker-build and docker-push Makefile targets with versioned tags
- Update README to document web UI, Docker deployment, and serve command
This commit is contained in:
2026-03-08 23:06:50 -04:00
parent 25eee6f76a
commit 9d1ca16704
4 changed files with 557 additions and 225 deletions

View File

@@ -18,7 +18,7 @@ FROM gcr.io/distroless/base-debian12:nonroot
LABEL org.opencontainers.image.title="yoink" \ LABEL org.opencontainers.image.title="yoink" \
org.opencontainers.image.description="Comic downloader web UI" \ org.opencontainers.image.description="Comic downloader web UI" \
org.opencontainers.image.source="https://github.com/bryanlundberg/yoink-go" org.opencontainers.image.source="https://git.brizzle.dev/bryan/yoink-go"
WORKDIR /app WORKDIR /app

View File

@@ -1,7 +1,9 @@
BIN := yoink BIN := yoink
BUILD_DIR := build BUILD_DIR := build
REGISTRY := git.brizzle.dev/bryan/yoink-go
VERSION := $(shell git describe --tags --always --dirty)
.PHONY: all windows linux darwin clean .PHONY: all windows linux darwin clean docker-build docker-push
all: windows linux darwin all: windows linux darwin
@@ -16,5 +18,15 @@ darwin:
GOOS=darwin GOARCH=amd64 go build -o $(BUILD_DIR)/$(BIN)-darwin-amd64 GOOS=darwin GOARCH=amd64 go build -o $(BUILD_DIR)/$(BIN)-darwin-amd64
GOOS=darwin GOARCH=arm64 go build -o $(BUILD_DIR)/$(BIN)-darwin-arm64 GOOS=darwin GOARCH=arm64 go build -o $(BUILD_DIR)/$(BIN)-darwin-arm64
docker-build:
podman build --format docker \
-t $(REGISTRY):$(VERSION) \
-t $(REGISTRY):latest \
.
docker-push: docker-build
podman push $(REGISTRY):$(VERSION)
podman push $(REGISTRY):latest
clean: clean:
rm -rf $(BUILD_DIR) rm -rf $(BUILD_DIR)

View File

@@ -1,6 +1,6 @@
# yoink # yoink
A CLI tool for downloading comics from readallcomics.com and packaging them as `.cbz` archives. A tool for downloading comics from readallcomics.com and packaging them as `.cbz` archives. Available as a CLI command or a self-hosted web application.
## How it works ## How it works
@@ -9,17 +9,33 @@ A CLI tool for downloading comics from readallcomics.com and packaging them as `
3. Packages the images into a `.cbz` (Comic Book Zip) archive 3. Packages the images into a `.cbz` (Comic Book Zip) archive
4. Cleans up downloaded images, keeping only the cover (`001`) 4. Cleans up downloaded images, keeping only the cover (`001`)
---
## Installation ## Installation
Build from source (requires Go 1.22.3+): ### From source
Requires Go 1.22.3+:
```shell ```shell
go build -o yoink go build -o yoink
``` ```
### Pre-built binaries
Pre-built binaries for Linux (arm64) and Windows are available on the [releases page](https://git.brizzle.dev/bryan/yoink-go/releases). Pre-built binaries for Linux (arm64) and Windows are available on the [releases page](https://git.brizzle.dev/bryan/yoink-go/releases).
## Usage ### Docker
```shell
docker pull git.brizzle.dev/bryan/yoink-go:latest
```
---
## CLI
Download a single comic issue:
```shell ```shell
yoink <url> yoink <url>
@@ -37,16 +53,79 @@ The comic title is extracted from the page and used to name the archive. Output
<library>/<Title>/<Title>.cbz <library>/<Title>/<Title>.cbz
``` ```
---
## Web UI
Yoink includes a self-hosted web interface for browsing and downloading comics from your browser.
### Running directly
```shell
yoink serve
```
By default the server listens on port `8080`. Use the `-p` flag to change it:
```shell
yoink serve -p 3000
```
### Running with Docker
A `docker-compose.yml` is included for quick deployment:
```shell
docker compose up -d
```
Or with Podman:
```shell
podman compose up -d
```
The web UI is then available at `http://localhost:8080`.
### Features
- **Download queue** — paste a comic URL into the input bar and track download progress in real time
- **Library grid** — browse your downloaded comics as a 150×300 cover grid
- **Filter & sort** — filter by title and sort by newest, oldest, AZ, or ZA
- **One-click download** — click any cover to download the `.cbz` archive directly
### Library volume
Downloaded comics are stored at the path set by `YOINK_LIBRARY`. When using Docker, mount this as a volume to persist your library across container restarts:
```yaml
# docker-compose.yml
services:
yoink:
image: git.brizzle.dev/bryan/yoink-go:latest
ports:
- "8080:8080"
volumes:
- ./library:/library
environment:
- YOINK_LIBRARY=/library
restart: unless-stopped
```
---
## Configuration ## Configuration
| Variable | Default | Description | | Variable | Default | Description |
|-----------------|--------------|--------------------------------------| |-----------------|------------|-----------------------------------|
| `YOINK_LIBRARY` | `~/.yoink` | Directory where comics are stored | | `YOINK_LIBRARY` | `~/.yoink` | Directory where comics are stored |
```shell ```shell
YOINK_LIBRARY=/mnt/media/comics yoink https://readallcomics.com/some-comic-001/ YOINK_LIBRARY=/mnt/media/comics yoink https://readallcomics.com/some-comic-001/
``` ```
---
## Dependencies ## Dependencies
- [goquery](https://github.com/PuerkitoBio/goquery) — HTML parsing - [goquery](https://github.com/PuerkitoBio/goquery) — HTML parsing

File diff suppressed because it is too large Load Diff