From c86abd29845fa6feb61b1fddb8e8bb41312d55a8 Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Mon, 15 Jun 2026 09:14:14 +0000 Subject: feat: service gateway framework + playground demo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Formalizes doot as an authenticated reverse proxy for arbitrary upstream services. Any local HTTP service can now be registered behind doot's existing auth + SSL layer with 3 lines of config. - Rename NewClaudomatorProxy → NewServiceProxy (generic) - Replace hard-coded claudomator proxy block with serviceMount slice loop - Add PlaygroundURL config (PLAYGROUND_URL env var) - Add playground/web/server.py: stdlib Python status page on port 9090 - Document pattern in .agent/design.md; update .env.example To add a new service: set its URL env var, add a config field, append one mount entry in main.go. Claudomator's GitHub webhook bypass is expressed as webhookPaths on its mount. Co-Authored-By: Claude Sonnet 4.6 --- internal/config/config.go | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'internal/config') diff --git a/internal/config/config.go b/internal/config/config.go index d3770f1..fe7bca5 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -42,6 +42,9 @@ type Config struct { // Claudomator ClaudomatorURL string // URL of Claudomator service + + // Service gateway — additional upstream services proxied through doot's auth layer + PlaygroundURL string // URL of playground demo service (optional) } // Load reads configuration from environment variables @@ -81,6 +84,9 @@ func Load() (*Config, error) { // Claudomator ClaudomatorURL: getEnvWithDefault("CLAUDOMATOR_URL", "http://127.0.0.1:8484"), + + // Service gateway + PlaygroundURL: os.Getenv("PLAYGROUND_URL"), } // Validate required fields -- cgit v1.2.3