Note
This is a public mirror of the original repository, which can be found here.
A minimal discovery engine for Geminispace. Users submit interesting capsule pages, and visitors are served random pages to explore — weighted toward more recently added content.
Fumble Around is a Gemini protocol server. Visitors hit a single link and land on a random gemtext page from the catalog, with a "Fumble some more..." link at the top to immediately jump to the next discovery. Anyone can grow the catalog by submitting a gemini:// URL.
Pages are weighted so that recently submitted capsules surface more often, while older ones remain reachable. The weighting uses a power-curve distribution: the server picks a random position biased toward the high (recent) end of the ID range, with some fallback logic to avoid trapping users in a narrow slice of the catalog.
fumble-around [flags]
Flags:
-addr string Address to listen on (default ":59650")
-hostname string Hostname the service will serve on (default "fumble-around.localhost")
-store-dir string Path to storage directory (default: temp dir, cleaned up on exit)
Each flag can also be set via environment variable:
| Flag | Env var |
|---|---|
-addr |
FUMBLE_AROUND_ADDR |
-hostname |
FUMBLE_AROUND_HOSTNAME |
-store-dir |
FUMBLE_AROUND_STORE_DIR |
TLS certificates are managed automatically under <store-dir>/certs/. The SQLite database lives at <store-dir>/page.sqlite.
The project uses Nix flakes. Entering the dev shell sets up the environment and loads a set of test capsule URLs automatically:
nix developTo run the server manually:
go run ./cmd/fumble-aroundTo load the bundled test data into an existing store:
go run ./cmd/load-test-dataTo run the tests:
go test ./...cmd/
fumble-around/ Main server binary
load-test-data/ Dev tool: seeds the store with sample URLs
gmi/ Gemini server, request handlers, and gemtext templates
page/ Page domain types, URL validation, and SQLite store
- go-gemini — Gemini protocol server and client
- go-sqlite3 — SQLite driver
- sql-migrate — Database migrations
- mediocre-go-lib — Logging and context utilities