Timestamp-derived IDs were guessable, and the ID is what grants access to indexed source. crypto/rand.Text gives 26 base32 characters.
Implements the API routes (jobs, progress events, snapshots, search, entities, source delivery with release) to net/http and serves the static frontend from the same binary on the same origin.