CLIPのセマンティック埋め込みと時間減衰アルゴリズムで好みを学習し、推薦理由を可視化しながら壁紙イラストを発掘するWebサービス。Go + React + pgvector をフルスタックで個人開発。
「なぜこの壁紙がおすすめされているのか」を可視化しながら、個人の好みをAIが学習するWebサービス。Wallhaven APIをデータソースに、CLIPのセマンティック埋め込みと時間減衰アルゴリズムで好みベクトルを算出し、pgvectorで類似検索を行う。設計から実装・デプロイまで全工程を一人で担当。
| レイヤー | 技術 |
|---|---|
| バックエンド | Go 1.25 + chi v5 |
| フロントエンド | React 19 + TypeScript + Vite 5 |
| AI処理 | Python + open_clip_torch (ViT-B/32) + gRPC |
| データベース | PostgreSQL 16 + pgvector (HNSW index, 512次元) |
| 認証 | JWT + httpOnly Cookie + bcrypt |
| インフラ | Docker × 4サービス(backend / frontend / clip_service / postgres) |
rows.Scan(&vec) で []float32 に直接スキャンしようとしたがOID不一致。pgvector.Vector 型でスキャン後 .Slice() で変換する仕様を習得ResolutionImpossible。ピンを外して pip install open-clip-torch で解消user_id カラムを最初から持つ multi-user 前提の設計が、後の方針変更時に変更不要で済んだM1〜M5(画像取得→CLIP埋め込み→認証→クローラー→UX改善)を約2週間で完了。透明性のある推薦(推薦元いいね画像の表示)と、無限スクロール・色検索・Markdownエクスポートまで実装済み。