{"id":50270607,"url":"https://github.com/shekit/supertabs","last_synced_at":"2026-05-27T17:02:07.087Z","repository":{"id":357220266,"uuid":"995107932","full_name":"shekit/supertabs","owner":"shekit","description":null,"archived":false,"fork":false,"pushed_at":"2026-05-11T20:33:32.000Z","size":89,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-11T22:26:44.231Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shekit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-03T01:32:03.000Z","updated_at":"2026-05-11T20:33:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/shekit/supertabs","commit_stats":null,"previous_names":["shekit/supertabs"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/shekit/supertabs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shekit%2Fsupertabs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shekit%2Fsupertabs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shekit%2Fsupertabs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shekit%2Fsupertabs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shekit","download_url":"https://codeload.github.com/shekit/supertabs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shekit%2Fsupertabs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33575520,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-27T02:00:06.184Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-27T17:02:06.178Z","updated_at":"2026-05-27T17:02:07.079Z","avatar_url":"https://github.com/shekit.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Supertabs\n\nA VSCode extension that surfaces Reddit posts where you can add value — filtered by Claude against a description of your expertise — and lets you comment on them without leaving the editor.\n\n## How it works\n\n1. You list the subreddits you want to monitor and write a short prompt describing your business, products, or expertise.\n2. Supertabs fetches new posts from those subreddits.\n3. Claude scores each post 1–10 for relevance against your prompt and explains why.\n4. The webview shows you the top-ranked unread post with a comment box. Submit a reply (posted to Reddit via your account) or skip — either way the post is marked seen and won't reappear.\n5. The feed auto-refreshes on a configurable interval.\n\n## Setup\n\n### 1. Create a Reddit OAuth app\n\nGo to https://www.reddit.com/prefs/apps and create a new app:\n\n- Type: **web app**\n- Redirect URI: `http://localhost:54321/callback`\n\nCopy the client ID (under the app name) and the secret.\n\n### 2. Get an Anthropic API key\n\nCreate one at https://console.anthropic.com/.\n\n### 3. Configure environment\n\n```bash\ncp .env.example .env\n```\n\nFill in the three values in `.env`:\n\n```\nREDDIT_CLIENT_ID=...\nREDDIT_CLIENT_SECRET=...\nCLAUDE_API_KEY=...\n```\n\n`.env` is gitignored.\n\n### 4. Install \u0026 build\n\n```bash\nnpm install\nnpm run compile\n```\n\nFor active development:\n\n```bash\nnpm run watch\n```\n\n### 5. Run the extension\n\nOpen the project in VSCode and press `F5` to launch an Extension Development Host with Supertabs loaded.\n\n## Usage\n\nOpen the command palette (`Cmd+Shift+P`) and run:\n\n- **Supertabs: Authenticate with Reddit** — opens a browser, completes OAuth, stores tokens in VSCode SecretStorage.\n- **Supertabs: Open Reddit Feed** — opens the main webview panel.\n- **Supertabs: Fetch from Reddit** — quick subreddit picker (debug helper).\n- **Supertabs: Logout from Reddit** — clears stored tokens.\n\nInside the feed panel:\n\n- **Tracked Subreddits** — add/remove subreddits to monitor.\n- **Your Business/Interests** — the prompt Claude uses to filter posts. Be specific about what you can credibly speak to.\n- **Auto-Refresh Settings** — interval in seconds (60–3600).\n\nPosts are sorted by Claude's relevance score, shown one at a time. Submitting a comment posts it to Reddit immediately under the authenticated account.\n\n## Configuration reference\n\nDefaults live in [`src/storage-service.ts`](src/storage-service.ts) and [`src/constants/constants.ts`](src/constants/constants.ts):\n\n| Setting | Default | Notes |\n| --- | --- | --- |\n| Subreddits | `programming`, `webdev`, `node` | Per-user, stored in `globalState` |\n| Refresh interval | 300s | Min 60, max 3600 |\n| Posts fetched per subreddit | 5 | `REDDIT.NUM_POSTS` |\n| OAuth scopes | `read,submit,identity` | |\n| OAuth callback | `http://localhost:54321/callback` | |\n| Claude model | `claude-sonnet-4-20250514` | |\n\n## Project layout\n\n```\nsrc/\n  extension.ts          # activation, command registration\n  auth.ts               # Reddit OAuth (Express callback server)\n  reddit-service.ts     # Reddit REST client\n  llm-service.ts        # Claude-based relevance filter\n  storage-service.ts    # globalState wrapper (settings + seen posts)\n  webview-provider.ts   # webview panel + message routing\n  constants/constants.ts\nwebview/                # vanilla HTML/CSS/JS UI\nprompts/filter-prompt.txt          # system prompt for the LLM\ntools/analyze-posts-tool.json      # Anthropic tool schema\n```\n\n## Tweaking the filter\n\nThe system prompt and tool schema are externalized — edit them without rebuilding TypeScript:\n\n- [`prompts/filter-prompt.txt`](prompts/filter-prompt.txt) — what counts as \"relevant\"\n- [`tools/analyze-posts-tool.json`](tools/analyze-posts-tool.json) — the schema Claude returns (`postId`, `isRelevant`, `relevanceScore`, `reasoning`)\n\n## Known limitations\n\n- No access-token refresh — re-run **Authenticate** when the token expires (~1h).\n- `processedPosts` is stored indefinitely in `globalState`; clear it via `StorageService.clearProcessedPosts` if needed.\n- Webview renders post bodies as markdown without sanitization — only run on Reddit content you trust.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshekit%2Fsupertabs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshekit%2Fsupertabs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshekit%2Fsupertabs/lists"}