Inspiration

Desktop app for CloudSlash - v2.6. CloudSlash is a desktop application that turns a cloud account into a statement you can read. It runs entirely on your machine: no agents, no keys to paste, nothing uploaded.

What it does

Cloud dashboards show you a total. Almost none show you a cause. The tooling that does lives behind a sales call or a service account pointed at production, and I did not want the second one aimed at my own account.

How I built it

The interface is hand-written. TypeScript and plain DOM, a CSS token layer, charts drawn as SVG, no component framework anywhere. It is styled as a printed ledger rather than a dashboard: ruled hairlines and dot leaders instead of cards and shadows, tabular figures

Under it, a Go engine. Scanners fan out across a worker pool, findings land in a graph, heuristics and optional CEL policy rules decide what counts as waste, and exporters render the statement, the dashboard, the Terraform-correlated view and the remediation plan.

How it uses RevenueCat

RevenueCat handles support end to end. The catalog is products, packages and the cloudslash_pro entitlement; the paywall was generated in the Paywall AI Editor and is attached to the offering the app pins, with a targeting rule serving it. Checkout is RevenueCat Web Billing backed by Paddle, using the purchases-js SDK.

Support is framed as a donation, and nothing in the app is gated — every report, the remediation plan and the rollback script are free. The entitlement exists so the flow is genuine, not to hold a feature back. Patreon and Open Collective sit alongside the plans as a second, gateway-free path.

Challenges I ran into

Throwing the first interface away. The first version used a native GUI toolkit, and the charts rendered as ASCII blocks inside code fences. It looked like a terminal pretending to be an app. Rebuilding it as a web shell cost days and is the only reason the result looks deliberate.

Consent, properly. Reading ~/.aws tells tells you who someone works for and which environments they touch, so the app asks before it looks and refuses a live scan until it has an answer. Demo mode needs no permission, because it reads nothing.

What I learned

Mostly I learned that restraint is a feature. The hardest part was not adding things.

What's next for CloudSlash - GUI

Made for Shipaton. CloudSlash Desktop app.

Built With

  • aws-sdk-for-go
  • css
  • github-actions
  • go
  • gtk4
  • opentelemetry
  • paddle
  • puppeteer
  • revenuecat
  • svg
  • typescript
  • vite
  • wails
  • webkitgtk
Share this project:

Updates

Submission history