Easy-to-manage touch screens
무료 오픈소스 터치스크린으로 USB 설정 가이드, 드래그‑드롭 편집기, 로컬 제어를 제공하며 Home Assistant용으로 제작되었습니다
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗カメラでISBNのバーコードを撮影し、普段利用している図書館に蔵書があるかどうかを確認するWebアプリケーション。
カメラを利用できるモダンブラウザ(スマートフォン・PC)。HTTPS もしくは localhost 上で動作します。
利用には Google アカウントでのログインが必要です(登録図書館・検索履歴を端末間で同期するため)。
@emotion)PNG には draw.io の図面 XML が埋め込まれているため、draw.io(デスクトップアプリ or app.diagrams.net)で開くとそのまま編集できます。
Clean Architecture に基づく3層構成。
.
├── index.html # エントリーHTML
├── src/
│ ├── main.tsx # エントリーポイント
│ ├── App.tsx # アプリケーションルート
│ ├── app/ # ルーター・DI(dependencies)
│ ├── domain/ # ドメイン層
│ │ ├── models/ # ドメインモデル
│ │ ├── repositories/ # リポジトリインターフェース
│ │ ├── data/ # ドメインデータ(都道府県等)
│ │ └── utils/ # ISBN バリデーション等
│ ├── data/ # データ層
│ │ ├── datasources/ # API クライアント
│ │ ├── repositories/ # リポジトリ実装
│ │ ├── models/ # レスポンスモデル
│ │ ├── providers/ # データ層プロバイダ
│ │ └── exceptions/ # カスタム例外
│ └── presentation/ # プレゼンテーション層
│ ├── pages/ # 画面
│ ├── widgets/ # 共通ウィジェット
│ ├── auth/ # 認証(Google ログイン・AuthProvider 等)
│ ├── hooks/ # UI 状態フック
│ ├── theme/ # テーマ・配色
│ └── utils/ # エラーメッセージ解決等
├── public/
│ └── _redirects # Cloudflare Pages の SPA フォールバック
├── functions/ # Cloudflare Pages Functions(Workers ランタイム)
│ ├── _shared/ # 共有(googleAuth: ID トークン検証)
│ └── api/
│ ├── calil/[action].js # カーリル API プロキシ(library / check のみ許可)
│ ├── me.js # ログインユーザー情報
│ ├── registered-libraries.js # 登録図書館の取得 / 保存(D1)
│ └── search-history.js # 検索履歴の取得 / 保存(D1)
└── infra/
├── d1/migrations/ # D1 スキーマのマイグレーション(追加手順は infra/d1/README.md)
└── *.bicep # 旧 Azure 用 IaC(撤去予定 #78)
カーリル API の appkey は サーバ側でのみ 注入され、クライアントのバンドルには含まれません。
登録図書館・検索履歴はログインユーザー単位で Cloudflare D1 に永続化されます。
詳細は DEPLOY.md を参照してください。
# 依存パッケージのインストール
npm install
cp .env.local.example .env.local # CALIL_APP_KEY=... を記入
npm run dev # http://localhost:5173
本番と同一構成(静的配信 + Pages Functions)で確認したい場合は npm run pages:dev(Cloudflare Pages のローカルエミュレーション)を利用します。
手順の詳細は DEPLOY.md を参照してください。
# ユニットテスト・コンポーネントテスト(Vitest + Testing Library)
npm test
# ウォッチモード
npm run test:watch
# 型チェック
npx tsc -b
# 型チェック + プロダクションビルド(出力先: dist/)
npm run build
# ビルド成果物のプレビュー
npm run preview
main への push で .github/workflows/cloudflare-pages.yml が Cloudflare Pages へ自動デプロイします(デプロイ前に D1 マイグレーションを --remote で適用)。
PR では ci.yml(型チェック + テスト)と d1-migrate.yml(マイグレーションの --local 検証)が走ります。
リソース作成・シークレット登録・手動デプロイの手順は DEPLOY.md、スキーマ運用は infra/d1/README.md を参照してください。
GitHub Flow を採用。
main: プロダクションブランチ。テスト済み・レビュー済みのコードのみマージされるfeature/[ISSUE番号]-[短い説明]: 機能開発用ブランチ。main から作成し、完了後 main へマージmain から feature/[ISSUE番号]-[短い説明] ブランチを作成するnpm test と npx tsc -b が通ることを確認するnpx tsc -b でエラーが出ない状態を維持するnpm test)が通っていること