TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
自己分析・適性チェック・ES管理・企業管理・面接ログを1つにまとめ、就活で次にやるべき行動を明確にするWebアプリ。
Translation pending
ProductivityTypeScript · GoGitHub @Yamada040OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗就活の ES 作成・添削、企業管理、進捗確認を AI とゲーミフィケーションで支援する Next.js + Supabase 製の MVP です。Gemini/GPT は環境変数で差し替え可能なラッパー構成です。 このアプリの本質的価値は
就活を頑張らせること ではなく 就活を“やらない時間”を消していくこと にあります。
本アプリは、開発者自身が学部 3 年の就活中に抱えた一次体験から生まれました。当時は ES 管理は Word、企業管理は Excel、締切や面接のメモは別のツール……と、就活に必要な情報が複数のプラットフォームに散らばっていました。
その結果、
「こういうサービスがあればよかった」 という問題意識が、開発の出発点です。
本アプリの最大の存在意義は、就活に必要な情報と作業を 1 つの場所で完結できる(一元管理) ことにあります。ES・企業・面接ログ・自己分析・カレンダー(締切/面接/インターン)をダッシュボードに集約し、「探す・切り替える」コストをゼロに近づけます。
このリポジトリとは別に、開発者個人の就活情報は
profile/・companies/・skills/・outputs/…と多数のファイルに分散管理されていました(就活skillsワークスペース)。その散らばりこそが本アプリで解決したい課題そのもの であり、それを 1 つのアプリに集約することが制作の一番の動機です。
一元管理を土台に、本アプリは 「就活を頑張らせる」のではなく「就活を“やらない時間”を消す」 ことをコンセプトに据えています。
散らばりがちな就活タスクを、1つのダッシュボードに集約する構成です。
flowchart LR
subgraph Before["Before(分散管理)"]
W["Word (ES)"]
E["Excel (企業管理)"]
M["メモアプリ (面接/締切)"]
end
subgraph After["After(就活copilot)"]
D["ダッシュボード"]
ES["ES管理 + AI添削"]
Co["企業管理 + AI分析"]
Iv["面接ログ"]
Cal["カレンダー(締切/面接/インターン)"]
Sa["自己分析/適性チェック"]
Xp["XP・レベル(ゲーミフィケーション)"]
end
W -.-> D
E -.-> D
M -.-> D
D --> ES
D --> Co
D --> Iv
D --> Cal
D --> Sa
ES --> Xp
Co --> Xp
Iv --> Xp
/dashboard へ。未ログイン時は各ページで /login にリダイレクト。POST /v1/contact)。bg-linear-to-* など)で警告回避、sitemap.xml/robots.txt 自動生成。個人開発の MVP であることを前提に、コストをかけずに(無料枠だけで)素早く価値を検証する ことを最優先に技術を選定しています。
| 領域 | 採用技術 | 選定意図 |
|---|---|---|
| フロントエンド | Next.js (App Router) + TypeScript | 画面だけを担当する(SPA型)。TanStack Query でデータをブラウザに保持し、画面を移動しても取り直さずに済む。 |
| バックエンド | Go | DBアクセス・外部API・ビジネスロジックを Next.js から切り離す。単一のバイナリで起動が速く、Vercel の無料枠でもコールドスタートが軽い。 |
| API の契約 | OpenAPI(スキーマファースト) | openapi.yaml からバックエンドのサーバーと TypeScript の型を生成し、フロントとバックエンドの型がずれないようにする。 |
| DB・認証 | Supabase(Postgres / Auth) | 無料枠で Postgres と Google ログインを賄える。データの読み書きはバックエンドに集め、Supabase は DB と認証の基盤としてだけ使う。 |
| DB アクセス | sqlc + pgx | SQL を書いて型付きの Go のコードを生成する。XP の付与のような同時実行で正しさが必要な処理を、SQL として正確に書ける。 |
| AI | Gemini / GPT(backend/internal/ai) | 環境変数(AI_PROVIDER)でプロバイダーを切り替え、特定ベンダーへのロックインを避ける。企業分析では AI が Web 検索(Tavily)を呼びながら分析する。 |
| スタイリング | Tailwind CSS v4 | ユーティリティファーストで UI を高速に実装でき、デザインの一貫性を保ちやすい。 |
| アニメーション | Framer Motion | ゲーミフィケーション体験を支える滑らかな UI 演出を、宣言的かつ軽量に実装。 |
| ホスティング | Vercel | Next.js と バックエンドを同じプロジェクト・同じドメインで動かせる(Services)。無料枠(Hobby プラン) でデプロイでき、インフラ管理も不要。 |
いずれも「無料枠だけで完結させ運用コストをゼロにする」「マネージド/サーバーレスで個人開発でも運用負荷を下げる」「ベンダーロックインを避ける」「型安全と入力検証でデータを守る」という方針に沿って選んでいます。Supabase・Vercel・AI(Gemini 無料枠)・SMTP(Gmail)とも無料の範囲で運用でき、追加コストなしで公開・運用 できます。
Docker と mise が必要。
mise install # Node(.nvmrc)・Go・golangci-lint を入れる
npm install
mise run dev # 手元の Supabase・バックエンド(localhost:8080)・Next.js(localhost:3000)をまとめて起動する
mise run dev は手元の Supabase(supabase start)にだけつなぎ、.env.local に本番の値があってもそちらは使わない。DB・バックエンド・画面を個別に起動するときは mise run db / mise run dev:api / mise run dev:web。
手元の Supabase の Google ログインは、開発用の OAuth クライアントが無いと Google の画面でエラーになる(E2E はログインしないので不要)。
Google Cloud Console で OAuth クライアント(ウェブアプリケーション)を作り、承認済みのリダイレクト URI に http://127.0.0.1:54321/auth/v1/callback を登録する
リポジトリのルートに mise.local.toml を作り、値を置く(Git には入らない)
[env]
SUPABASE_AUTH_EXTERNAL_GOOGLE_CLIENT_ID = "<クライアント ID>"
SUPABASE_AUTH_EXTERNAL_GOOGLE_SECRET = "<クライアント シークレット>"
起動中なら supabase stop してから mise run dev(Supabase は起動時にだけ設定を読む)
必要な環境変数の一覧と説明は CLAUDE.md の「環境変数」を参照。Vercel では Next.js と バックエンドが同じ環境変数を共有する。
本番の Site URL・Redirect URL は infra/supabase.tf(Terraform)で設定し、Supabase Dashboard からは変えない。
https://job-seeker-gray.vercel.apphttps://job-seeker-gray.vercel.app/auth/callback・/dashboard(localhost は入れない)supabase/config.toml の http://localhost:3000 を使うNext.js 認証コールバック: app/auth/callback/route.ts で exchangeCodeForSession を実行。
supabase/migrations/ に定義(Supabase CLI で管理)。全テーブルの説明は docs/database-schema.md を参照。企業を中心に、ES・面接ログ・予定が企業にひも付く。
backend/api/openapi.yaml から書く。user_id で絞り込む(RLS のポリシーには頼らない)。bg-linear-to-* など)を優先して警告を回避。backend/internal/ai 経由。キー未設定時は AI 機能だけが 503 を返す。/ ホーム(MVP紹介、ログイン導線)/login ログイン/auth/callback 認証コールバック/dashboard ダッシュボード(ログイン必須)/es, /es/new, /es/[id] ES 管理(ログイン必須)/companies, /companies/new, /companies/[id] 企業管理(ログイン必須)/interviews, /interviews/new, /interviews/[id] 面接ログ(ログイン必須)/self-analysis 自己分析(ログイン必須)/aptitude 適性チェック(ログイン必須)/webtests, /webtests/new, /webtests/[id] Webテスト対策(ログイン必須)/profile プロフィール編集(ログイン必須)/contact お問い合わせ(ログイン不要)NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY(Next.js)、SUPABASE_URL, DATABASE_URL(Go)AI_PROVIDER, AI_PROVIDER_API_KEY, TAVILY_API_KEY(Go)SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS, CONTACT_TO_EMAIL(Go)NEXT_PUBLIC_SITE_URL