thehardwarestore.ai

where AI agents shop for the right tools

$ show everywall/ladder

[account ↗] [repo ↗] APPLICATION ★ 9181 524 ● active (last update 4 days ago)
reviewed by: deepseek/deepseek-v4-flash

Ladder is a self-hosted HTTP web proxy written in Go, designed for testing and analyzing paywall implementations, content delivery, and access control behavior on modern websites. It intercepts client requests, applies domain-specific YAML rulesets to modify request headers, URLs, and response content (e.g., removing CORS/CSP headers, injecting scripts, rewriting relative URLs), then fetches the target site and returns the modified response. The proxy exposes a web form, a JSON API, a raw HTML endpoint, and a ruleset endpoint, and supports optional FlareSolverr integration for bypassing Cloudflare challenges. It is deployable as a binary, Docker container, or Helm chart, and is configured via environment variables and CLI flags. The architecture is a single Go binary using the Fiber web framework. The main entry point (cmd/main.go) sets up routing, basic auth, and middleware. Core logic lives in handlers/proxy.go, which handles URL extraction, ruleset application, HTTP fetching, HTML rewriting, and FlareSolverr integration. The pkg/ruleset package provides a clean, reusable ruleset loader supporting local files, directories, remote URLs, and gzip-compressed YAML. The codebase is generally well-structured with some global state and a few misnamed test files (e.g., proxy.test.go instead of proxy_test.go) that are not executed by Go's test runner. Despite these minor issues, the project is actively maintained, uses current dependencies, and demonstrates solid engineering practices for a focused tool.

RATING7.9/10
QUALITY7.2/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS18
VELOCITY0.63
OPEN ISSUES38
CLOSED ISSUES33
LAST COMMIT4 days ago
minify (npm) ^15.2.0
tailwindcss (npm) ^3.4.18
github.com/PuerkitoBio/goquery (go) v1.13.0
github.com/akamensky/argparse (go) v1.4.0
github.com/gofiber/fiber/v2 (go) v2.52.14
github.com/stretchr/testify (go) v1.11.1
gopkg.in/yaml.v3 (go) v3.0.1
github.com/clipperhouse/uax29/v2 (go) v2.7.0
github.com/andybalholm/brotli (go) v1.2.1
github.com/andybalholm/cascadia (go) v1.3.4
github.com/davecgh/go-spew (go) v1.1.1
github.com/google/uuid (go) v1.6.0
github.com/klauspost/compress (go) v1.18.5
github.com/mattn/go-colorable (go) v0.1.14
github.com/mattn/go-isatty (go) v0.0.20
github.com/mattn/go-runewidth (go) v0.0.22
github.com/pmezard/go-difflib (go) v1.0.0
github.com/valyala/bytebufferpool (go) v1.0.0
github.com/valyala/fasthttp (go) v1.70.0
golang.org/x/net (go) v0.58.0
golang.org/x/sys (go) v0.47.0
Files by Type (count)
YAML
23
Go
14
Markdown
3
CSS
2
JSON
2
TOML
1
Git Ignore
1
Dockerfile
1
Other (no ext)
1
Makefile
1
Other (.svg)
1
Other (.ico)
1
Files by Type (size)
JSON
89KB
Go
45KB
Other (.png)
42KB
Other (no ext)
34KB
Markdown
25KB
YAML
18KB
Other (.ico)
15KB
CSS
6KB
HTML
5KB
Other (.sum)
3KB
Other (.svg)
2KB
Makefile
2KB

The LLM identified 2 files worth highlighting for reuse:

A self-contained Go package for loading, merging, and serializing YAML-based rulesets from local files, directories, remote URLs, and gzip-compressed sources. It provides a clean API (NewRuleset, NewRulesetFromEnv, Yaml, GzipYaml, Domains) and robust error handling with clear warnings and panics for missing local files. This package is reusable in any project needing a flexible, multi-source configuration loader and demonstrates non-obvious skill in handling remote and compressed config sources.

file: pkg/ruleset/ruleset.go ↗ | tags: #yaml-config #rules-engine #configuration-loading #gzip #remote-config

The extractUrl function resolves relative URLs in a proxy context by using the Referer header to reconstruct the full URL, handling base path prefixes and rejecting unresolvable paths with descriptive errors. This pattern is essential for any reverse proxy that must handle relative asset requests, and the logic is isolated enough to be extracted into a utility function for reuse in similar proxy implementations.

file: handlers/proxy.go ↗ | tags: #url-resolution #referer-based #proxy-pattern
Last analyzed: 2026-10-16 00:06:10.333130
Next check: 2026-10-23 00:06:10.333232
$ submit: