Synaplan
開源 AI 平台,供企業使用:自行託管的 AI 代理、符合 GDPR 的聊天機器人小工具、RAG 知識庫、WhatsApp 與 Outlook AI、MCP、多模型路由。Docker、Kubernetes 或託管於 Germ
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Portail de remboursement de dépenses pour les entraîneurs des As de Québec AAA et des Chevaliers de la Seigneurie (10 équipes). Chaque entraîneur-chef coche qui était présent à un match ou un tournoi, le kilométrage et le per diem se calculent automatiquement, et le rapport (PDF + courriel) part directement de la plateforme. Site séparé de l'appli M17 (as-quebec-m17) — même palette visuelle et mêmes plateformes (Supabase, Vercel, Resend), mais sa propre base de données : voir /Users/jeangf/.claude/plans/iterative-inventing-map.md pour le détail de cette décision.檢視完整 README ↗
Portail de remboursement de dépenses pour les entraîneurs des As de Québec AAA et des Chevaliers de la Seigneurie (10 équipes). Chaque entraîneur-chef coche qui était présent à un match ou un tournoi, le kilométrage et le per diem se calculent automatiquement, et le rapport (PDF + courriel) part directement de la plateforme.
Site séparé de l'appli M17 (as-quebec-m17) — même palette visuelle et mêmes
plateformes (Supabase, Vercel, Resend), mais sa propre base de données : voir
/Users/jeangf/.claude/plans/iterative-inventing-map.md pour le détail de cette
décision.
Project URL → NEXT_PUBLIC_SUPABASE_URLanon public key → NEXT_PUBLIC_SUPABASE_ANON_KEYservice_role key → SUPABASE_SERVICE_ROLE_KEY (garde-le secret)supabase/schema.sql —
crée les tables (équipes, arénas, entraîneurs, calendrier, tournois, réclamations,
hôtels, rapports) et les politiques RLS.supabase/seed.sql — pré-remplit les
10 équipes, ~30 arénas, les 5 calendriers As déjà validés (157+ matchs) et les 23
tournois de la saison.hotel-docs (non public) —
les politiques RLS pour ce compartiment sont déjà dans schema.sql.Copie .env.local.example vers .env.local et remplis les valeurs ci-dessus, plus :
RESEND_API_KEY=... # même compte Resend que l'appli M17
[email protected]
npm install
npm run dev
Les entraîneurs se connectent avec un code d'accès à 4 chiffres (le même que sur
l'ancien portail — Jean = 1701), pas un mot de passe libre. Le mot de passe
Supabase Auth réel derrière ce code est dérivé du NIP (src/lib/nip.ts,
nipToPassword) — pas un secret en soi, juste ce qu'il faut pour satisfaire la
longueur minimale de Supabase Auth.
Aucun compte n'existe encore — il faut en créer un manuellement pour la première personne (toi), le site n'ayant encore personne pour t'inviter :
AsQc-1701-Rembourse (choisis
« Auto Confirm User »).staff (remplace l'id par celui de l'utilisateur
créé, visible dans la liste des utilisateurs) :
insert into staff (auth_user_id, full_name, email, nip, access_role)
values ('<uuid-de-l-utilisateur>', 'Jean Grignon-Francke', '[email protected]', '1701', 'direction');
1701.scripts/roster-prevu.json pour le rattachement équipe(s)/rôle et le NIP déjà
connu de chacun (les courriels réels restent à obtenir). Les adjoints/extras
(mode « Adjoint / extra ») n'ont besoin que d'un nom. Chaque personne avec
connexion peut se connecter dès que son compte est créé, sans
courriel à confirmer ni mot de passe à choisir.Connecte le dépôt GitHub à un nouveau projet Vercel (détection Next.js automatique), ajoute les mêmes variables d'environnement dans Project Settings → Environment Variables, puis déploie.
src/lib/calc.ts — toutes les règles de remboursement (kilométrage, franchise,
autocar, per diem, journées de tournoi). Vérifié par npx tsx src/lib/calc.test.ts.src/lib/rapports.ts — construit les tableaux d'un rapport ; une seule définition,
utilisée par l'écran, le PDF et le courriel.src/lib/pdf.ts — génération du PDF (jsPDF + jspdf-autotable, côté serveur).src/app/api/envoyer — génère le PDF et l'envoie par Resend (pièce jointe).src/app/api/inviter — crée le compte d'un entraîneur (Supabase Auth, mot de passe
dérivé de son NIP) et ses rattachements d'équipe.src/app/api/connexion — connexion par NIP : retrouve le courriel côté serveur à
partir du nom choisi, puis se connecte avec le mot de passe dérivé du code.src/lib/nip.ts — transforme un code à 4 chiffres en mot de passe Supabase Auth.