Create your Link in Bio for Bluesky
CLAUDE.md#
このファイルは、Claude Code (claude.ai/code) がこのリポジトリで作業する際のガイドラインを提供します。
プロジェクト概要#
LinkatはBlueskyアカウントを使用してリンク集を整理・共有できるWebアプリケーションです。ATProtocol/Blueskyエコシステムと深く統合されており、データはローカルとユーザーのPersonal Data Server (PDS)の両方に保存されます。
開発コマンド#
# ビルド
pnpm build # プロダクションビルド
# テスト
pnpm test # ユニットテスト実行
pnpm test -- app/models/board.spec.ts # 特定のテストファイル実行
# コード品質
pnpm lint # ESLintとPrettierチェック
pnpm format # ESLint修正とPrettierフォーマット
pnpm typecheck # TypeScript型チェック
pnpm all # typecheck、format、testを全て実行
アーキテクチャ#
技術スタック#
- フレームワーク: React Router v7 (旧Remix)
- 言語: TypeScript
- データベース: PostgreSQL (Prisma経由)
- 認証: ATProtocol OAuth 2.0
- 状態管理: Jotai (トースト通知などのクライアント状態)
- スタイリング: Tailwind CSS
- テスト: Vitest (ユニット)、Playwright (E2E)
主要ディレクトリ#
app/routes/: ページコンポーネントとAPIルートapp/server/: サーバーサイドロジックとサービスapp/features/: 機能別コンポーネントapp/models/: データ検証用Zodスキーマprisma/: データベーススキーマとマイグレーション
データフロー#
- ユーザーデータは楽観的にローカルのPostgreSQLに保存
- 変更はATProtoレコードとしてユーザーのBluesky PDSに同期
- JetstreamがPDSの更新を監視してローカルDBに同期
- ボードデータは
blue.linkat.boardレキシコンスキーマに従う
ATProto統合#
- レコードは
blue.linkat.boardコレクションに保存 - OAuthクライアント認証情報はDBに保存
- bsky.socialとセルフホストPDSインスタンスの両方をサポート
- Bluesky firehoseからのリアルタイム更新にJetstreamを使用
開発ガイドライン#
テスト#
- モデルとサービスのユニットテストはVitestで記述
- テストではPrismaモッククライアントを使用(自動設定済み)
- E2EテストはPlaywrightで複数ブラウザをサポート
- テストファイルはソースファイルと同じ場所に
*.spec.tsとして配置
データベース変更#
# prisma/schema.prismaを変更した後
pnpm prisma migrate dev --name 変更内容の説明
pnpm prisma generate
環境変数#
必要な変数は.env.exampleに定義されています。主なもの:
DATABASE_URL: PostgreSQL接続文字列PRIVATE_JETSTREAM_URL: JetstreamサービスURLORIGIN: アプリケーションURL (開発環境: http://linkat.localhost:3000)
エラーハンドリング#
- 一貫したエラーハンドリングには
tryCatchユーティリティを使用 - サービスは見つからない場合
nullを返す - バリデーションエラーはZodスキーマで処理