Sluice

July 05, 2026

Sluice is a Cloudfare Workers-backed system to problem reports from your app submitted by users, allowing you, the maintainer of the app to triage the reports into GitHub issues.

Sluice
Sluice

Overview

I built Sluice when I realized a need for user-reports triaging for system for Petrichor. The background is that when a user of Petrichor found an issue or missed a feature in the app, their only option was to go to GitHub repo and open an issue there. This added a friction for mostly non-technical users who may not be familiar with how issues in open source projects work, or sometimes they would’t even have a GitHub account to be able to quickly report the issue. Even if user managed to go through that hassle of reporting a problem, if I would ask follow-up questions, chances are they will miss GitHub notifications unless they check their mail for updates.

My requirement was to have a system (mostly free) that can integrate into my app, allowing users to report the problem using existing app UI, along with attaching additional information (i.e. app log file), without having to even opening GitHub. While I, on the other end of this process, can look at all these reports in a centralized place and manually promote them to be issues on the project repo.

Sluice Architecture
Sluice Architecture

Sluice uses Cloudflare Worker on the backend, gated by my app key, to receive a report from any client (Petrichor in this case) and splits the report into two pieces; the report containing data field (ID, title, description, etc.) and attachment blobs (eg; text file, images, videos). The report record is stored in D1 database, whereas the attachments are stored in R2 Object Storage.

The reports are then accessible via integrated web UI (using SvelteKit) that can be deployed as pages site on provider of your choice (eg; Cloudflare Pages). Frontend pulls the report data via Cloudflare Worker API, gated by my admin key, where you can do whatever you want with the user submitted reports.

By default, Sluice comes with good set of defaults when it comes to setting API limits such that you can deploy it on a free Cloudflare account without ever hitting their usage limits, although this is subject to the limits that Cloudflare enforces on free plans.

Project Homepage

View Source on GitHub