mcpField
O
Only Hiring

Only Hiring

リモート
onlyhiring.hassandev.meビジネス・マーケティング01 日前に更新
リポジトリ公式サイト

Only Hiring について

Only Hiringは、Redditの求人サブレディットで仕事を探す人向けの求人掲示板です。求人と判定された投稿を、項目別情報や詐欺スコア、元投稿へのリンクとともに掲載します。

主な機能

  1. 01Redditの求人サブレディットを集約
  2. 02給与、職種、勤務地、スキルを表示
  3. 03詐欺スコアと警告を表示
  4. 04絞り込み、検索、並べ替え
  5. 05任意のアカウントで応募状況を記録

活用シーン

  1. 01Redditでリモートや契約の仕事を探す
  2. 02スキル、勤務地、給与で求人を絞る
  3. 03警告を確認して元投稿から応募する

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://onlyhiring.hassandev.me/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

詳細

採用情報のみ

Only Hiring - Listed on Claude AI Directory mcptry

Redditの採用サブレディットから、ノイズを除いた求人掲示板です。

r/forhire、r/slavelabour、r/DesignJobsなどのサブレディットでは、投稿の約4分の3が自分のサービスの宣伝、議論、またはスパムです。このサイトには、実際に人を採用している投稿だけが掲載されます。各求人には短い概要、構造化された項目(報酬、職種、勤務形態、勤務地、スキル)、および応募先となる元のReddit投稿へのリンクがあります。

仕組み

[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
  • 収集。 定期的に、パイプラインが約19の採用サブレディットから最新の投稿を読み込みます。[For Hire]または[Offer]のタグが付いた投稿は除外されます。
  • 評価。 言語モデルが各投稿について、採用募集かどうかを判断し、概要を作成して、報酬、スキル、勤務地を抽出し、0から1までの詐欺スコアを付けます。
  • 公開。 採用投稿のみがデータベースに書き込まれます。各投稿本文は冒頭部分(約320文字)のみ保存され、サイトでは独自の概要を表示し、残りはRedditへのリンクで案内します。Redditの投稿が削除または除去された求人は、掲示板から取り下げられます。

スクレイパーと評価システムは、このリポジトリには含まれていません。 別の非公開パイプラインが定期的に投稿を収集・評価し、データベースに書き込みます。このリポジトリに含まれるのはウェブサイトのみで、データベースから読み取る処理だけを行います。

プロダクトのルール
ルール値場所
この日数を超えた求人は、折りたたまれた「古い投稿」セクションに移動します14 dayssrc/lib/site.ts
この詐欺スコア以上の求人は、デフォルトで非表示になります0.6src/lib/site.ts
この詐欺スコア以上の求人には、警告が表示されます0.4src/lib/site.ts
リスト、件数、統計情報の更新同期のたびに(refresh.sh)、それ以外は毎日src/lib/db.ts(cacheLife)
求人ページの更新同期によって求人が追加、変更、削除されたとき、および期限切れ時。それ以外は毎月src/lib/db.ts(getJob)

データセットが小さいため、フィルタリング、検索、並べ替えはブラウザーで行います。フィルターはURLに保持されるため、フィルター適用済みの表示を共有できます。「応募済み」のマークは、訪問者のlocalStorageか、サインインしている場合はアカウントに保存されます。アカウントは任意です(better-authを介したメールアドレスとパスワード、またはGoogle)。サインインすると、ブラウザー内のマークがアカウントに統合されます。サインアウト中の訪問者が求人にマークを付けるか、Redditの投稿を開くと、アカウントの作成が一度だけ案内されます。案内を閉じた場合、その後14日間は再表示されません。

ローカルでの実行

必要なもの:Node 20 以降と npm。

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

WEB_DATABASE_URL は、jobs テーブルに対する SELECT のみが許可されたロール用の Postgres 接続文字列です。

DATABASE_URL は、アカウントと応募済みマーク用の、別個の 2 つ目の Postgres データベースです。db/schema.sql でテーブルを作成してください。BETTER_AUTH_SECRET はセッション Cookie に署名します(openssl rand -base64 32)。

GOOGLE_CLIENT_ID と GOOGLE_CLIENT_SECRET は任意です。設定すると、「Google で続行」が有効になります。これらは Google Cloud Console で種類が「Web アプリケーション」の OAuth クライアントから取得します。承認済みのリダイレクト URI として https://<your domain>/api/auth/callback/google を指定してください(ローカルで使用する場合は http://localhost:3000/... も追加してください)。ボタンは、ビルド時に両方が設定されている場合にのみ表示されます。

REMOVAL_EMAIL は任意の設定です。フッターと About ページに表示される削除リクエスト用のメールアドレスです。ビルド時にサーバーで読み込まれます。設定されていない場合、サイトは代わりにこのリポジトリの Issue トラッカーへリンクします。

RESEND_API_KEY は任意です。ヘッダーのフィードバックダイアログから送信された各メッセージを、Resend で認証済みのドメインから [email protected] を送信元として、REMOVAL_EMAIL にメールで送ります。メッセージはアカウント用データベースの feedback テーブルにも保存されるため、メール送信に失敗しても内容が失われることはありません(emailed は false のままです)。各 IP アドレスからは 1 時間に 5 件送信できます。

Vercel では、プロジェクトの環境変数にこれらを設定し、Production と Preview の両方に適用してください。

データベースに接続できなくてもサイトはビルドされ、「求人リストを読み込めませんでした」という状態を表示した後、毎分再試行します。

その他のスクリプト:npm run build、npm run start、npm run lint。

npm run dev と npm run build は、最初に scripts/fetch-fonts.mjs を実行し、Fontshare から Pilcrow Rounded のフォントファイルをダウンロードして src/app/fonts/ に保存します。このフォルダーは意図的に gitignore されています。詳しくはライセンスをご覧ください。

コードマップ
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

このアプリは、Cache Components を有効にした Next.js 16(cacheComponents: true)を使用しているため、キャッシュには export const revalidate ではなく、"use cache" と cacheLife を使用します。

各同期の後、パイプラインは refresh.sh を実行し、同期によって追加、変更、または削除された求人を(パイプラインの last_sync.json から)/api/revalidate に送信します。再ビルドされるのは該当する求人ページのみです。再ビルドのたびに、ページ、そのプリフェッチ用セグメント、および画像が Vercel の ISR キャッシュに書き込まれます。Hobby プランでは、月あたり 200,000 回の書き込みが許可されています。デプロイ時にはいずれにしてもキャッシュが新しくなります。パイプライン外でデータベースを手動編集するなどして求人を変更した後、すべての求人ページを再ビルドするには、./refresh.sh --all を実行してください。

デザインの方向性

モチーフはひとつ、角括弧です。 採用関連のサブレディットでは、実際の求人投稿のタイトルの先頭に [Hiring] と付けます。この角括弧がサイトで使う唯一の形で、次の4か所に登場します。

  • 名前の only [hiring]。
  • 見出し。ページの読み込み時に、大きな角括弧2つで「タグ付け」されます。クリックなしで再生されるアニメーションは、ページ内でこれだけです。
  • すべての求人の経過時間。左側の余白に [3h] のような角括弧付きタグで表示されます。
  • 選択中のフィルター。投稿タイトルと同じように角括弧で囲まれます。

色。 使う色は1組で、それぞれの色に意味をひとつだけ持たせています。ミントは残したもの(マストヘッド、選択中のフィルター、応募パネル)を表します。ピンクは注意を促すもの(詐欺の警告、非表示にした詐欺に関する注記、応募前に投稿を確認するよう促すフッター)を表します。深緑は操作要素だけに使います。それ以外は、ほぼ白の背景とほぼ黒の文字で構成し、線や影ではなく色調の違いで面を区切ります。ダークモードでも深い緑がかった黒の中で同じ役割を保ち、prefers-color-scheme に従います。

書体。 Indian Type Foundry による Pilcrow Rounded を1種類だけセルフホストしています。見出しには太字・詰め気味・小文字で使い、本文にはレギュラーウェイトを使います。サイズは小、本文、リード、見出し、ディスプレイの5種類だけです。

レイアウト。 リストはメニューのように表示します。日付の見出しに件数を付け、求人タイトルを左側に、給与を同じ行の右側に価格のように配置します。カード、枠線、影はありません。デスクトップではフィルターを固定表示のレールに配置します。スマートフォンでは、固定表示の検索バーからボトムシートとして開きます。

動き。 トグル、フィルターシート、選択時の角括弧など、訪問者の操作に応じて動きます。すべて prefers-reduced-motion を尊重します。

アートディレクションは、デザインスキルの frontend-design と taste-skill を使って決定しました。新しい制作物もこのルールに沿ってください。別の形や3つ目の色、2種類目の書体、装飾的な動きを追加しないでください。

既知の制限事項

  • 削除された投稿は、次回のパイプライン実行まで残ります。 各実行では過去14日間の求人を再確認し、対応する Reddit の投稿が削除または削除扱いになっている場合は、求人を取り除きます。それより古い求人は再確認されないため、リンクが無効になることがあります。
  • 給与は換算されません。 金額は投稿に記載された通貨のままです。給与で並べ替える場合は、異なる通貨を比較せず、給与の種類と通貨ごとに求人をまとめます。
  • 評価が間違っていることがあります。 要約、項目、詐欺スコアは言語モデルによって生成されます。サイトではそのことを明記し、訪問者に Reddit の投稿を確認するよう求めています。

法務情報

このプロジェクトは Reddit, Inc. と提携、承認、後援されていません。Reddit は Reddit, Inc. の商標です。各 Reddit 投稿の冒頭部分のみを保存して表示しており、すべての求人情報から元の投稿にリンクしています。削除依頼の連絡先はサイトのフッターに記載されています。

ライセンス

コードは MIT ライセンスの下で公開されています。

書体の Pilcrow Rounded は MIT の対象ではありません。Indian Type Foundry に帰属し、ITF Free Font License の下でライセンスされています。このライセンスでは、自分のサイトでのセルフホストは許可されていますが、フォントファイルの再配布は禁止されています。そのため、ファイルはこのリポジトリに含まれていません。ビルド時に Fontshare から各自のコピーを取得し、そのコピーにも同じライセンスが適用されます。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。