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:
@@ -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
|
||||||
|
|
||||||
|
|||||||
14
Makefile
14
Makefile
@@ -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)
|
||||||
|
|||||||
91
README.md
91
README.md
@@ -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, A–Z, or Z–A
|
||||||
|
- **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
Reference in New Issue
Block a user