Only Hiring

io.github.hassanaziz0012由 GitHub 帳號 hassanaziz0012 發布v1.0.0更新於 Nov 7, 2026

Search scam-scored hiring posts from Reddit's job subreddits: freelance, remote and contract work.

已驗證Streamable HTTP可網頁執行效率與工作流網頁搜尋與抓取

概覽

AI 產生的概覽

搜尋 Reddit 徵才子版塊的職缺貼文,附詐騙評分、薪資、技能、地點,並連結回 Reddit 原帖應徵。

可以做什麼
  • 依最新優先搜尋 Reddit 徵才子版塊的職缺貼文,可依子版塊篩選
  • 查看單一職缺的完整資訊:摘要、薪資、技能、語言、測試任務、應徵方式,以及詐騙評分與風險訊號
  • 列出收錄的子版塊及其開放職缺數量和張貼內容
適用情境
適合想瀏覽從 Reddit 彙整的自由接案、遠端、兼職或約聘職缺的人,也適合想判斷某則 Reddit 徵才貼文是否為詐騙時參考。
執行需求
遠端 MCP 端點;未宣告需要安裝套件、帳號、API 金鑰或環境變數。應徵需透過 Reddit 原帖完成。
安裝前請注意
摘要與詐騙評分由語言模型產生,可能出錯,應在 Reddit 上核對原帖。評分 0.4 以上會顯示警告,0.6 以上預設隱藏,應把警告轉達給使用者。此服務不會代替使用者應徵,已刪除的貼文可能在下一次同步前仍顯示。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Only Hiring,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.hassanaziz0012%2Fonly-hiring/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "only-hiring": {
      "type": "http",
      "url": "https://onlyhiring.hassandev.me/mcp"
    }
  }
}

README

Only Hiring

[Only Hiring - Listed on Claude AI Directory] [mcptry]

A job board for Reddit's hiring subreddits, minus the noise.

About three in four posts on subreddits like r/forhire, r/slavelabour or r/DesignJobs are people advertising their own services, discussion or spam. This site lists only the posts where someone is actually hiring. Each job has a short summary, structured fields (pay, role, work mode, location, skills) and a link back to the original Reddit post, which is where you apply.

How it works

[private pipeline (not in this repo)]  scrape new posts → grade each post with a language model → sync to Postgres                                                                   │ writes                                                                   ▼                                                          Neon Postgres, `jobs` table                                                                   ▲ reads only                                                                   │[this repo, on Vercel]  Next.js reads the table server-side and renders the list
  • Collect. On a schedule, the pipeline reads the newest posts from about 19 hiring subreddits. Posts tagged [For Hire] or [Offer] are skipped.
  • Grade. A language model decides whether each post is hiring, writes a summary, extracts pay, skills and location, and gives it a scam score from 0 to 1.
  • Publish. Only hiring posts are written to the database. Of each post's body, only the opening lines (about 320 characters) are stored; the site shows its own summary and links to Reddit for the rest. Jobs whose Reddit post was deleted or removed are taken off the board.

The scraper and grader are not part of this repository. A separate, private pipeline collects and grades posts on a schedule and writes them to the database. This repo is only the website, and it only ever reads from the database.

Product rules

RuleValueWhere
Jobs older than this move to a collapsed "older posts" section14 dayssrc/lib/site.ts
Jobs at or above this scam score are hidden by default0.6src/lib/site.ts
Jobs at or above this scam score show a warning0.4src/lib/site.ts
Lists, counts and stats refreshafter every sync (refresh.sh), else dailysrc/lib/db.ts (cacheLife)
A job's page refresheswhen a sync adds, changes or removes it, when it expires, else monthlysrc/lib/db.ts (getJob)

Filtering, search and sorting run in the browser, since the dataset is small. Filters are kept in the URL, so filtered views can be shared. "Applied" marks are stored in the visitor's localStorage, or in their account if they sign in. Accounts are optional (email and password, or Google, via better-auth); signing in merges the browser's marks into the account. A signed-out visitor who marks a job or opens a post on Reddit is offered an account once, then not again for 14 days after dismissing it.

Running it locally

Requirements: Node 20+ and npm.

bash
npm installcp .env.example .env.local   # then set WEB_DATABASE_URL (and optionally REMOVAL_EMAIL)npm run dev

WEB_DATABASE_URL is a Postgres connection string for a role that can only SELECT from the jobs table.

DATABASE_URL is a second, separate Postgres database for accounts and their applied marks; create its tables with db/schema.sql. BETTER_AUTH_SECRET signs session cookies (openssl rand -base64 32).

GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET are optional and turn on "Continue with Google". They come from an OAuth client of type "Web application" in Google Cloud Console, with https://<your domain>/api/auth/callback/google as an authorized redirect URI (add http://localhost:3000/... for local use). The button is shown only when both are set at build time.

REMOVAL_EMAIL is optional config: the address shown for removal requests in the footer and on the About page. It is read on the server at build time. If it's unset, the site links to this repo's issue tracker instead.

RESEND_API_KEY is optional: it emails each message from the header's Feedback dialog to REMOVAL_EMAIL, sent from [email protected] (a domain verified in Resend). Messages are also stored in the accounts database's feedback table, so a failed email loses nothing (emailed stays false). Each IP can send 5 an hour.

On Vercel, set these in the project's environment variables for Production and Preview.

Without a reachable database the site still builds and renders a "the job list didn't load" state, then retries every minute.

Other scripts: npm run build, npm run start, npm run lint.

npm run dev and npm run build first run scripts/fetch-fonts.mjs, which downloads the Pilcrow Rounded font files from Fontshare into src/app/fonts/. That folder is gitignored on purpose; see License.

Code map

src/  app/    page.tsx              home: masthead + job board (server component)    jobs/[id]/page.tsx    job detail, prerendered for every job    about/page.tsx        how it works, scam scores, limits, removal requests    robots.ts, sitemap.ts, opengraph-image.tsx, icon.svg  components/    account/              sign-in dialog, header link, session sync    FeedbackNav.tsx       header Feedback link and dialog (posts to app/api/feedback)    board/                client-side filters, search, sorting, grouping    JobItem.tsx           one job in the list    JobDetail.tsx         the detail view  lib/    db.ts                 the only database code (server-only, cached)    jobs.ts               row type, defensive parsing, expiry and scam rules    labels.ts             human labels for enum-like columns    format.ts             pay, date and time formatting    applied.ts            the "applied" store: localStorage, or the account when signed in    auth.ts               better-auth config and the accounts database (server-only)    site.ts               site name, thresholds, removal contact

This app uses Next.js 16 with Cache Components enabled (cacheComponents: true), so caching is done with "use cache" and cacheLife rather than export const revalidate.

After each sync the pipeline runs refresh.sh, which sends /api/revalidate the jobs the sync added, changed or removed (from the pipeline's last_sync.json). Only those job pages are rebuilt: every rebuild writes the page, its prefetch segments and its image to Vercel's ISR cache, and the Hobby plan allows 200,000 writes a month. A deploy starts with a fresh cache anyway. Run ./refresh.sh --all to rebuild every job page after changing jobs outside the pipeline, such as by hand in the database.

Design direction

One motif: the square bracket. People on hiring subreddits mark a real job by starting the title with [Hiring]. That bracket is the site's only shape, and it appears in four places:

  • The name, only [hiring].
  • The headline, which gets "tagged" by two large brackets when the page loads. This is the only animation on the page that runs without a click.
  • The age of every job, shown in a bracket tag in the left gutter, like [3h].
  • Selected filters, which get bracketed like a post title.

Colour. One pair, each colour with one meaning. Mint is what we kept (the masthead, selected filters, the apply panel). Pink is what we flagged: scam warnings, the hidden-scams note, and the footer, which reminds you to check posts before you apply. Deep green is used only for actions. Everything else is near-white ground and near-black ink, with surfaces separated by tone instead of lines or shadows. Dark mode uses the same roles in a deep green-black, and follows prefers-color-scheme.

Type. One family, Pilcrow Rounded by the Indian Type Foundry, self-hosted. It is set bold, tight and lowercase for display, with regular weight for reading. There are five sizes and no more: small, body, lead, head and display.

Layout. The list reads like a menu: day headings with counts, job titles on the left and pay right-aligned on the same line, like prices. There are no cards, borders or shadows. On desktop, filters sit in a sticky rail. On phones, they open in a bottom sheet from a sticky search bar.

Motion. It answers what the visitor does: toggles, the filter sheet, bracket marks on selection. All of it respects prefers-reduced-motion.

The art direction was chosen with the frontend-design and taste-skill design skills. Keep new work inside these rules. Don't add a second shape, a third colour, a second typeface or decorative motion.

Known limitations

  • Deleted posts linger until the next pipeline run. Each run re-checks the jobs from the last 14 days and removes any whose Reddit post was deleted or removed. Older jobs aren't re-checked, so their links can go dead.
  • Pay is not converted. Amounts stay in the post's currency. Sorting by pay groups jobs by pay type and currency instead of comparing across them.
  • Grades can be wrong. Summaries, fields and scam scores come from a language model. The site says so and asks visitors to verify posts on Reddit.

Legal

This project is not affiliated with, endorsed by or sponsored by Reddit, Inc. Reddit is a trademark of Reddit, Inc. Only the opening lines of each Reddit post are stored and shown; every listing links to its original post. Removal requests go to the contact shown in the site footer.

License

The code is released under the MIT License.

The typeface, Pilcrow Rounded, is not covered by MIT. It belongs to the Indian Type Foundry and is licensed under the ITF Free Font License, which allows self-hosting on your own site but not redistributing the font files. That's why the files aren't in this repo: the build fetches your own copy from Fontshare, and that copy is subject to the same license.

來源:README.md,提交 5e344bd

工具

3

search_jobs

Search jobs

Search current hiring posts from Reddit's job subreddits, newest first. With no filters, returns the newest open jobs. Each result has pay, type, location, skills, any scam warning, the Only Hiring link and the Reddit link to apply.

輸入參數rolelimitqueryregionskillsmin_paycurrencypay_typesubredditwork_modemax_scam_scoreemployment_type另有 1 個

get_job

Get a job

One job's full details: summary, pay, skills, languages, test task, how to apply, the opening of the post, and its scam score with the red flags behind it. Also answers "is this Reddit job post a scam?" for a post on the board.

輸入參數id必填

list_subreddits

List subreddits

The subreddits Only Hiring reads, with how many open jobs each has and what gets posted there. Use a name as search_jobs' subreddit filter.

無需輸入參數。

版本歷史

1
  1. v1.0.0最新Nov 7, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分