Skip to content

engineer-guild-hackathon-2026-05/team-03

Repository files navigation

Team 03 — Curio

1行ピッチ: 「検索履歴から"好きになる前"を可視化する」

スクリーンショット

メイン画面

ホーム マイページ マイマップ
ホーム マイページ 興味マップ

チーム情報

項目 内容
チーム名 Nice to meet U!
プロダクト名 Curio
担当メンター jnsk

メンバー

GitHub 氏名 大学 / 学部 担当役割
@SomaTakata Soma Takata 芝浦工業大学 理工学研究科 システム理工学専攻 PM, FE, Design, Presentation
@jk99k Jokei Kota 同志社大学 情報工学専攻 FE, BE, Infra
@Bioinfo-Rafael Mugi Rafael Suzuki 東北大学 医学部 Data , Biz
@NazmulHayat Nazmul Hayat 九州大学 工学部 FE, BE
@Riochin Rio Ichikawa 津田塾大学 学芸学部 FE, BE

プロダクト概要

Curio は Chrome 拡張で閲覧履歴を自動収集し、AI が関心テーマを「ステッカー」として可視化するサービス。「好きになる前」の好奇心の軌跡をタイムラインで振り返りつつ、同じステッカーを持つ他ユーザーの閲覧テーマに偶然出会える。embedding+pgvector によるオンラインクラスタリングと fal.ai FLUX.1 によるステッカー画像生成で、検索履歴を「偏愛のステッカーブック」に変える。

解決したい課題

毎日のブラウジングには「好きになる前」の好奇心が宿っているが、それは履歴として消えていくだけで誰にも共有されない。「なんとなく気になって調べた」段階の関心を可視化し、同じ場所を通った人と出会えるようにしたい。

ターゲットユーザー

  • 知的好奇心が旺盛で、日常的に幅広いWebブラウジングをしている人
  • ニッチな趣味・偏愛を持ち、同好の士を探している人
  • SNSのフォロー関係ではなく「何かに興味を持ち始めた瞬間」で繋がりたい人

コア機能

  • 自動ステッカー生成:Chrome拡張が閲覧履歴を収集し、AI(embedding + pgvector コサイン類似度クラスタリング)が関心テーマを「ステッカー」として自動生成
  • ステッカービジュアライズ:fal.ai FLUX.1 [schnell] でステッカー画像を生成し、タイムラインで好奇心の軌跡を可視化
  • 共鳴発見:ステッカーをクリックすると同テーマを持つ他ユーザーの閲覧軌跡を閲覧でき、「好きになる前」の段階で偶然出会える
  • Curiosity Map:全ユーザーの関心テーマをマップで俯瞰し、好奇心の地形を探索

提出ステータス(運営チェック用 — 各 Day 終了時に記入)

  • Day1 終了時:テーマ確定(プロダクト名・解決課題・ターゲットを記入済み)
  • Day2 終了時:MVP 動作(デプロイ済み URL が下記「デモ環境」欄に入っている)
  • Day3 終了時:提出完了(プレゼン資料 URL / デモ動画 URL / AI 活用ログ完成)

提出物チェックリスト(Day3 17:00 提出〆切)

  • 動くデモ(デプロイ済み URL を「デモ環境」欄に記載)
  • ソースコード(このリポに push 済み)
  • AI_USAGE_LOG.md(AI 活用ログ、開発期間中の追記必須)
  • プレゼン資料(PDF or Slides URL を記載)

デモ・関連リンク

種別 URL
デモ環境 Backend(Render), Frontend(Vercel)
プレゼン資料 リンク

技術スタック

  • 拡張機能:WXT 0.19 + React 18 + TypeScript
  • フロント:Next.js 15 (App Router) + Tailwind v4 + Framer Motion
  • バックエンド:FastAPI 0.115 + Python 3.11 + Pydantic v2 + psycopg3 (async)
  • DB:Neon Postgres (pgvector)
  • オブジェクトストレージ:Cloudflare R2 (S3 互換, 公開バケット)
  • AI:OpenAI text-embedding-3-small / gpt-4o-mini / fal.ai FLUX.1 [schnell] + rembg
  • モノレポ:pnpm workspaces + Devbox (Node22/Python3.11/poetry)
  • Lint/Format:Biome
  • デプロイ:Vercel (FE) / Render (BE) / Neon (DB) / Cloudflare R2 (画像)

使用した外部 API / サービス

サービス名 用途 プラン 備考
OpenAI API embedding / 命名 LLM(ステッカーオブジェクト抽出) Pay-as-you-go 新規ステッカー時のみ
fal.ai FLUX.1 [schnell] 画像生成 + rembg 背景除去 Pay-as-you-go 新規ステッカー作成時のみ
Neon Postgres + pgvector Free tier サーバーレス Postgres
Cloudflare R2 ステッカー透明 PNG 配信 Free tier public bucket
Render FastAPI ホスティング Free スリープあり
Vercel Next.js ホスティング Hobby

→ API キー・秘匿情報は .env.gitignore 対象)で管理。公開リポ化に備えて漏らさないこと。

セットアップ手順

1. Devbox インストール

curl -fsSL https://get.jetify.com/devbox | bash
# 詳細: https://www.jetify.com/devbox

2. 依存インストール

devbox shell                # Node22/Python3.11/pnpm/poetry/psql が PATH に入る
devbox run install:all      # pnpm install + (cd packages/backend && poetry install)

install:all は pnpm の postinstall フックでも自動実行されるので、pnpm install だけでも全部入る。

3. 環境変数

cp .env.example .env
cp packages/backend/.env.example  packages/backend/.env
cp packages/extension/.env.example packages/extension/.env
cp packages/frontend/.env.example packages/frontend/.env.local
  • OPENAI_API_KEY をバックエンドの .env に書く
  • Neon: ダッシュボードから接続文字列を取得し packages/backend/.envDATABASE_URL に貼る(?sslmode=require 付き)
  • Cloudflare R2: アカウントID・アクセスキー・公開URL (pub-xxxx.r2.dev または独自ドメイン) を packages/backend/.envR2_* に貼り、フロントの .env.local NEXT_PUBLIC_R2_PUBLIC_HOST にホスト名(プロトコル抜き)を入れる

4. Neon スキーマ適用

export DATABASE_URL='postgresql://USER:PASS@ep-xxxx.neon.tech/neondb?sslmode=require'
psql "$DATABASE_URL" -f db/schema.sql
psql "$DATABASE_URL" -f db/seed.sql   # 開発用シード (任意)

詳細は db/README.md

5. 全部一括起動

devbox run dev:all
# - Backend:  http://localhost:8000  (docs: /docs)
# - Frontend: http://localhost:3000
# - Extension: packages/extension/.output/chrome-mv3 を Chrome に「読み込む」

個別起動:

devbox run dev:backend      # FastAPI のみ
devbox run dev:frontend     # Next.js のみ
devbox run dev:extension    # WXT 開発モード(Chrome 自動起動)

6. 拡張機能の Chrome ロード

  1. chrome://extensions を開く
  2. 右上「デベロッパーモード」を ON
  3. 「パッケージ化されていない拡張機能を読み込む」
  4. packages/extension/.output/chrome-mv3 を選択
  5. ポップアップで「今すぐ同期」、または5分待って自動同期

7. その他のコマンド

devbox run lint             # biome check
devbox run typecheck        # 全ワークスペース tsc --noEmit
devbox run release:ext      # 拡張機能 zip を packages/frontend/public/extension.zip にコピー
cd packages/backend && poetry run pytest   # backend テスト

詳細は docs/architecture.mddocs/ml-pipeline.md を参照。

既知の問題 / 未実装機能(Day3 審査員向け)

開発期間が短いため、Day3 提出時点で「ここまでやった/ここは諦めた」を正直に書く。 正直に書くことは減点ではなく加点要素(自己評価力として審査される)。

未実装

  • 拡張機能のプレゼンス向上:ブラウジング中に「同期された」ことをユーザーが気づけるような通知風インタラクション — 開発期間内に未着手
  • Chrome Web Store への正式公開:ストア審査が必要なため未提出。現状は手動ロードでの動作確認のみで、一般ユーザーへの導線として現実的でない
  • こっそりモード:ユーザーが閲覧履歴の収集を一時停止できる設定。プライバシー配慮として当初構想していたが期間内に不採用
  • ステッカー交換機能:他ユーザーのニッチなステッカーをクリック・閲覧することでそのステッカーを獲得できるソーシャル機能
  • プライバシーを考慮したデータ収集:現在は生のquery / url / titleをそのままhistory_nodesに保存しており、ユーザーが送信する情報を選択・除外できる機能が未実装
  • レアリティ設計の実装:仕様上定義していたCommon / Rare / Epic(好奇心スコア連動)や「珍しい探索ルートそのもののレア度」の判定ロジックが未実装

既知の問題

  • 閲覧履歴提供の動機付けが弱い:個人情報を渡す代わりに得られる体験の訴求が不十分で、初回オンボーディングのUXに改善余地がある
  • データ販売モデルの実現性が未検討:企業への集計データ販売を構想しているが、必要なデータ収集量・達成見込み・プライバシー設計が未整理
  • ユーザー間のソーシャルUXが薄い:同じステッカーを持つ他ユーザーとの接点が「閲覧のみ」に留まっており、繋がりを実感できる体験になっていない
  • ステッカーの粒度が粗い:1日分のURLと検索クエリを平均ベクトルで集約しているため、ユーザーの「興味」を正確に抽出できていない可能性がある
  • ノイズの混入:マルチタスクで複数テーマを並行して調べていたり、誤ってクリックしたURLも記録されるため、ステッカーの精度が下がることがある
  • レアステッカー狙いの不健全なHack:レアリティ設計が「興味のない項目を意図的に検索し続ける」などの行動を誘発するリスクがある
  • ステッカー生成画像の品質が不安定:プロンプトエンジニアリングで対応しているが、生成結果にばらつきがあり一定品質を保証できていない

担当メンター・壁打ち履歴

メンター壁打ちの議事録。スポンサー側が事後に振り返る材料にもなるので、要点だけでも記入する。

日時 メンター 議論内容(要点) 採用 / 一部採用 / 不採用
Day2 10:30 jnsk こっそりモード実装検討 → 期間内は不採用 / 収益モデルの弱さ(課金理由・ユーザー継続)/ 将来性(AI検索移行リスク)/ プロダクトコア体験の明確化 / Eコマース連携の可能性 一部採用(Eコマース展開とステッカー偏愛可視化をアイデアとして検討継続)
Day2 16:30 jnsk データ販売モデルの具体化(生データではなく集計トレンドを販売)/ 各画面のUX・体験整理(ジャーニーマップ)/ 個人情報提供の説得力向上 / プレゼン戦略 採用(集計データ販売モデル・UX整理・実例作成)

AI 活用ログ

審査項目「AI 活用度」の根拠資料 → AI_USAGE_LOG.md

開発期間中に最低 1 日 3 件以上の追記を目安に。

公開許諾(チーム全員合意のうえ記入 — Day3 終了時までに)

提出後の運営側での扱いに関するチーム全員合意です。いずれも N で構いません(審査に一切影響なし)

項目 許諾 (Y/N) 補足・条件
① このリポを Public 化してよい(コードがすべて公開される) Y
② プロダクト名・スクリーンショット・1行ピッチを HTV / Mercari の SNS・記事で掲載してよい Y
スポンサー企業(Mercari, P&G 等)の広報・採用ページでプロダクト紹介してよい Y

謝辞

メンターの jnsk さん、スポンサー企業の皆様、および Engineer Guild Hackathon 2026 運営チームの皆様に心より感謝いたします。

運営連絡先

  • Slack: #eg-hackathon-2026-05(または #pjt_swe_event
  • 緊急時: 運営メンバー(Mercari HQ 受付 → 運営呼び出し)

About

🏆 Engineer Guild Hackathon 2026 メルカリ賞受賞 【Curio】

Resources

License

Stars

5 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors