Case Study
ranoz-go
A Go-based CLI uploader for Ranoz.gg that streams multiple files concurrently with retry handling, a real-time terminal progress bar, and release-friendly distribution via GitHub Actions.
ranoz-go is a CLI tool I built to simplify uploading files to Ranoz.gg straight from the terminal. The main goal is a fast, lightweight, script-friendly workflow for Linux users and developers who would rather stay in the command line than open a browser just to upload files one at a time.
It looks simple from the outside, but it is designed to feel mature for daily use. Users can upload many files at once, tune the worker count to their machine, watch a real-time progress bar, and get a clean structured output that is easy to consume in a shell script or automated pipeline.
Key Features
- Concurrent Multi-File Upload: Upload many files at once with a configurable worker pool from 1 to 32 goroutines.
- Real-Time Progress Display: Shows per-file progress in the terminal so large file transfers or batch uploads stay easy to monitor.
- Retry for Transient Failures: Upload requests are retried automatically for temporary network failures without breaking the workflow.
- File Validation Before Upload: Files are checked locally first so basic errors can be caught before any network traffic.
- Structured Terminal Output: Colored, clear, and consistent output that is comfortable to read by humans and easy to pipe into other tools.
- Release-Friendly Distribution: Prebuilt binaries, version metadata, and a release workflow through GitHub Actions.
Technical Challenge
The hardest part of this project was keeping the CLI experience responsive and clean when handling many uploads at the same time. In a terminal app, overlapping progress bars, messy output, or unclear retry behavior can ruin the UX even when the upload logic itself works.
The fix was to separate argument parsing, file validation, and the upload pipeline into a more structured flow. The upload itself runs through a goroutine-based worker pool for parallel execution, paired with a dedicated progress bar and formatted output so the user always knows what is going on. Files are streamed from disk to keep memory usage stable on large uploads, and the release build uses tighter compiler flags to keep the binary small for distribution.
Tech Stack
- Language: Go
- Interface: Native CLI
- Concurrency Model: Goroutines + worker pool
- Terminal UX: fatih/color, progressbar/v3
- Distribution: Prebuilt binaries + GitHub Actions release workflow
