Synaplan
開源 AI 平台,供企業使用:自行託管的 AI 代理、符合 GDPR 的聊天機器人小工具、RAG 知識庫、WhatsApp 與 Outlook AI、MCP、多模型路由。Docker、Kubernetes 或託管於 Germ
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
飲食店でのアルバイト経験から着想を得た、シフト希望の提出から自動調整・確定までを一気通貫で行うフルスタックWebアプリケーションです。 店長・オーナーがシフト調整に費やす時間と労力を大幅に削減することを目指しています。 バックエンドはRenderの無料プランで稼働しているため、初回アクセス時に起動まで数十秒かかる場合があります。 • シフト状況カレンダー: 月単位で各日の希望提出状況を色分け表示 • 🟢 確定済み / 🟡 希望提出済み(未確定) / 🔴 希望なし • シフト調整・確定: ガントチャートUIでスタッフのシフトを視覚的に調整・確定 • シフト自動調整: 時間帯別定員・スタッフ優先度・累積棄却率を考慮した自動割り当て • 棄却履歴管理: スタッフごとの希望採用率を記録し、長期的な公平性を担保 • 参加リクエスト承認: スタッフの店舗参加リクエストを承認/拒否 • JWT認証: Flask-JWT-Extendedによるセキュアな認証管理 • アカウント管理: プロフィール編集・アカウント削除 単純な優先度順ではなく、累積棄却率を考慮した貪欲法を実装しています。 これにより長期的なシフト割り当ての公平性を担保しています。 モバイルアプリ(Authorizationヘッダー)とWebアプリ(檢視完整 README ↗
飲食店でのアルバイト経験から着想を得た、シフト希望の提出から自動調整・確定までを一気通貫で行うフルスタックWebアプリケーションです。 店長・オーナーがシフト調整に費やす時間と労力を大幅に削減することを目指しています。
| username | role | password |
|---|---|---|
| admin | オーナー(管理者) | pass |
| yamada | スタッフ | pass |
| sato | スタッフ | pass |
| suzuki | スタッフ | pass |
| taro | スタッフ | pass |
| hanako | スタッフ | pass |
| jiro | スタッフ | pass |
| sakura | スタッフ | pass |
| akira | スタッフ | pass |
| yuki | スタッフ | pass |
| hana | スタッフ | pass |
バックエンドはRenderの無料プランで稼働しているため、初回アクセス時に起動まで数十秒かかる場合があります。
| 技術 | 用途 |
|---|---|
| Next.js 15 (App Router) | フレームワーク |
| TypeScript | 言語 |
| Tailwind CSS v4 | スタイリング |
| React Context API | 状態管理 |
| Axios | HTTPクライアント |
| date-fns | 日付処理 |
| 技術 | 用途 |
|---|---|
| Flask (Python) | フレームワーク |
| Flask-JWT-Extended | JWT認証 |
| SQLAlchemy | ORM |
| PostgreSQL | データベース(本番) |
| SQLite | データベース(開発) |
| Gunicorn | WSGIサーバー |
| 技術 | 用途 |
|---|---|
| Flutter | フレームワーク |
| Dart | 言語 |
| Riverpod | 状態管理 |
| go_router | ルーティング |
| Dio | HTTPクライアント |
| 技術 | 用途 |
|---|---|
| Vercel | フロントエンドホスティング |
| Render | バックエンドホスティング |
| Render PostgreSQL | データベースホスティング |
| Docker / Docker Compose | コンテナ化・ローカル開発環境 |
単純な優先度順ではなく、累積棄却率を考慮した貪欲法を実装しています。
ソート基準:
1. 優先度(高い順)
2. 同優先度内 → 累積棄却率(高い順)= 過去に多く棄却されたスタッフを優先
3. 同棄却率 → ランダム(毎回同じスタッフが有利にならないように)
これにより長期的なシフト割り当ての公平性を担保しています。
モバイルアプリ(Authorizationヘッダー)とWebアプリ(Cookie)の両方に対応するため、JWT_TOKEN_LOCATION = ["headers", "cookies"] を設定し、どちらからのリクエストにも対応できる構成にしています。
同一バックエンドAPIをWeb(Next.js)とモバイル(Flutter)の両方から利用できる設計にしており、APIのレスポンス形式を統一しています。
shift-app/
├── frontend/ # Next.js (Vercel)
│ ├── app/
│ │ ├── admin/ # 管理者画面
│ │ ├── shifts/ # スタッフ向けシフト画面
│ │ ├── shop/ # 店舗管理画面
│ │ └── context/ # React Context (認証状態管理)
│ └── components/ # 共通コンポーネント
├── backend/ # Flask (Render)
│ ├── app.py # APIエンドポイント
│ ├── models.py # DBモデル定義
│ └── start.sh # Gunicorn起動スクリプト
├── mobile/ # Flutter (開発中)
│ └── lib/
│ ├── screens/ # 各画面
│ ├── widgets/ # 共通ウィジェット
│ └── repositories/ # API通信層
└── docker-compose.yml # ローカル開発環境
# 1. リポジトリをクローン
git clone https://github.com/taisei0719/shift-app.git
cd shift-app
# 2. 起動
docker compose up -d --build
# 3. アクセス
# フロントエンド: http://localhost:3000
# バックエンド: http://localhost:5000
起動時に以下のデータが自動生成されます。
cd backend
pip install -r requirements-dev.txt
pytest
lint(ruff)は ruff check . で実行できる。pytest・ruffは開発専用のrequirements-dev.txtにのみ含まれ、本番用requirements.txt(Dockerイメージのビルドに使用)には含まれない。
テストはSQLite(一時ファイル)を使い、DATABASE_URL等の環境変数はbackend/conftest.pyがテスト実行時に自動設定するため、.envの値には影響しない。主要エンドポイント(登録・ログイン・ログアウト・シフト提出・シフト確定)をbackend/tests/配下でカバーしている。
cd frontend
npm install
npm run test
Vitest + React Testing Libraryで、Calendarコンポーネント・UserContext(認証セッション取得)・シフト確定ページ(_ShiftViewClient)の最低限のテストをカバーしている。テストファイルはテスト対象と同じディレクトリに*.test.tsxとして配置する。
| メソッド | エンドポイント | 説明 | 権限 |
|---|---|---|---|
| POST | /api/login | ログイン | - |
| POST | /api/logout | ログアウト | - |
| POST | /api/register | ユーザー登録 | - |
| GET | /api/session | セッション確認 | - |
| GET | /api/shifts/month/:year/:month | 月別シフト取得 | ログイン済み |
| POST | /api/shifts/submit_request | シフト希望提出 | ログイン済み |
| GET | /api/admin/shifts/status/:year/:month | 月別シフト状況取得 | 管理者 |
| GET | /api/admin/shifts/:date | 日別シフト取得 | 管理者 |
| POST | /api/admin/shifts/confirm | シフト確定 | 管理者 |
| POST | /api/admin/shifts/auto_adjust/:date | シフト自動調整 | 管理者 |
| GET/POST | /api/shop/:id/auto_adjust/config | 自動調整設定 | 管理者 |
| GET | /api/shop/:id/rejection_history | 棄却履歴取得 | 管理者 |