···3333 return nil, err
3434 }
35353636+ // Save output to database for public access
3737+ if err := execCtx.SaveOutput("json", string(jsonData), "application/json"); err != nil {
3838+ execCtx.Log("json-output", "error", "Failed to save output: "+err.Error())
3939+ }
4040+3641 execCtx.Log("json-output", "info", string(jsonData))
37423838- // Return the data (for potential chaining)
3943 return data, nil
4044}
4145
+6
nodes/outputs/rss.go
···8787 }
88888989 rssOutput := fmt.Sprintf("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n%s", string(xmlData))
9090+9191+ // Save output to database for public access
9292+ if err := execCtx.SaveOutput("rss", rssOutput, "application/rss+xml"); err != nil {
9393+ execCtx.Log("rss-output", "error", "Failed to save output: "+err.Error())
9494+ }
9595+9096 execCtx.Log("rss-output", "info", rssOutput)
91979298 return data, nil
+13
store/db.go
···78787979 CREATE INDEX IF NOT EXISTS idx_pipes_user_id ON pipes(user_id);
80808181+ -- Pipe outputs (cached output for public feeds)
8282+ CREATE TABLE IF NOT EXISTS pipe_outputs (
8383+ id TEXT PRIMARY KEY,
8484+ pipe_id TEXT NOT NULL REFERENCES pipes(id) ON DELETE CASCADE,
8585+ format TEXT NOT NULL,
8686+ content TEXT NOT NULL,
8787+ content_type TEXT NOT NULL,
8888+ created_at INTEGER NOT NULL
8989+ );
9090+9191+ CREATE INDEX IF NOT EXISTS idx_outputs_pipe_id ON pipe_outputs(pipe_id);
9292+ CREATE UNIQUE INDEX IF NOT EXISTS idx_outputs_pipe_format ON pipe_outputs(pipe_id, format);
9393+8194 -- Scheduled jobs
8295 CREATE TABLE IF NOT EXISTS scheduled_jobs (
8396 id TEXT PRIMARY KEY,