Synaplan
开源 AI 软件平台,面向企业:自托管 AI 代理,符合 GDPR 的聊天机器人小部件,RAG 知识库,WhatsApp 与 Outlook AI,MCP,多模型路由。支持 Docker、Kubernetes 或在 Germ 托管。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证**Jaay** (« vendre » en wolof) est une app web (PWA) de gestion d'activité de **dépôt-vente de sacs**
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Gestion d'activité de dépôt-vente de sacs : stock confié par les fournisseurs, ventes au prix négocié, dû au fournisseur, retours, dépenses, bénéfice net et catalogue public partageable sur WhatsApp. Application web installable (PWA), multi-boutiques, en français.
docs/SPEC.md · Modèle de données : docs/DATA_MODEL.md · Design : docs/DESIGN.mddocs/DECISIONS.mddocs/RAPPORT.mdNext.js 16 (App Router, cacheComponents, TypeScript strict) · Tailwind CSS 4 + shadcn/ui · Motion · React Hook Form + Zod · Recharts · Supabase (Postgres, Auth, Storage, RLS, fonctions RPC) · Vitest · Playwright · pgTAP · pnpm.
Prérequis : Node 22, pnpm 11. Pas de Docker : on travaille sur un projet Supabase en ligne dédié au développement.
cp .env.example .env.local # puis remplir les valeurs (voir ci-dessous)
pnpm install
pnpm supabase link --project-ref <ref-du-projet-de-dev>
pnpm db:push # applique les migrations au projet lié
pnpm db:types # régénère src/lib/supabase/database.types.ts
pnpm dev # http://localhost:3000
Pour essayer avec des données réalistes : DEMO_EMAIL=… DEMO_PASSWORD=… pnpm db:seed crée un compte et une boutique de démonstration (fournisseurs, modèles, réceptions, ventes, règlement, retour, dépenses).
| Variable | Rôle |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | URL du projet Supabase (publique) |
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY | Clé publique (sb_publishable_…) |
SUPABASE_SECRET_KEY | Clé secrète (sb_secret_…), serveur uniquement : création des comptes membres |
NEXT_PUBLIC_SITE_URL | URL publique de l'app (liens du catalogue, aperçus) |
SUPABASE_ACCESS_TOKEN, SUPABASE_DB_PASSWORD, SUPABASE_PROJECT_REF | CLI Supabase uniquement |
DEMO_EMAIL, DEMO_PASSWORD | Facultatif : compte créé par pnpm db:seed |
.env.local n'est jamais versionné.
Authentication → Providers → Email : désactiver « Confirm email », pour qu'un compte soit utilisable dès l'inscription (aucun e-mail n'est envoyé par l'app). Renseigner aussi Site URL avec l'URL de l'app.
| Commande | Effet |
|---|---|
pnpm dev / pnpm build / pnpm start | Développement, build et serveur de production |
pnpm lint · pnpm typecheck · pnpm format | ESLint, TypeScript, Prettier |
pnpm test | Tests unitaires (Vitest) |
pnpm test:e2e | Tests de bout en bout (Playwright, sur le projet de dev ; les comptes jaay-e2e-* sont supprimés à la fin) |
pnpm supabase migration new <nom> | Nouvelle migration SQL |
pnpm db:push · pnpm db:types | Appliquer les migrations · régénérer les types |
pnpm db:test | Tests pgTAP sur le projet lié (refuse de tourner hors du projet de dev) |
pnpm db:seed | Compte et boutique de démonstration (projet de dev uniquement) |
À la demande :
SCREENS=1 pnpm exec playwright test screens --project=desktop # captures 375/768/1280, clair et sombre
pnpm build && pnpm start -p 3100 # puis, dans un autre terminal :
PERF=1 PERF_URL=http://localhost:3100 pnpm exec playwright test perf --project=mobile
Ne jamais lancer pnpm db:test ni pnpm db:seed sur le projet de production. Les deux scripts vérifient le projet lié et refusent de tourner ailleurs que sur le projet de dev.
Le workflow .github/workflows/backup.yml fait chaque dimanche à 2 h (heure de Dakar) un pg_dump de la base (schémas public, auth et storage), le chiffre (AES-256) et le garde 30 jours en artefact GitHub. Il est désactivé tant que les réglages ci-dessous ne sont pas faits. Les fichiers des photos et logos restent dans Supabase Storage et ne sont pas dans la sauvegarde.
Le chiffrement est obligatoire : le dépôt est public, et les artefacts d'un dépôt public peuvent être téléchargés par n'importe quel compte GitHub. Passer le dépôt en privé reste recommandé (Settings → General → Danger Zone → Change visibility).
Activer (GitHub → dépôt → Settings → Secrets and variables → Actions) :
SUPABASE_DB_URL : Supabase → bouton Connect → Session pooler → l'URI postgresql://postgres.<ref>:[YOUR-PASSWORD]@aws-…pooler.supabase.com:5432/postgres, avec le mot de passe de la base à la place de [YOUR-PASSWORD].BACKUP_PASSPHRASE : une longue phrase de passe aléatoire (32 caractères ou plus). La garder dans un gestionnaire de mots de passe : sans elle, les sauvegardes sont illisibles.BACKUP_ENABLED = true.jaay-backup-<date> apparaît en bas du résumé.Pour suspendre les sauvegardes : passer BACKUP_ENABLED à false.
Restaurer (sur un poste avec le client PostgreSQL 17 et gpg, fourni avec Git pour Windows) dans un projet Supabase vide dont les migrations ont été appliquées (pnpm db:push) :
gpg --decrypt jaay-2026-10-18.dump.gpg > jaay.dump # demande la phrase de passe
pg_restore --data-only --no-owner -n auth -t users -t identities -f auth.sql jaay.dump
pg_restore --data-only --no-owner -n public -f public.sql jaay.dump
pg_restore --data-only --no-owner -n storage -t objects -f storage.sql jaay.dump
psql "<SUPABASE_DB_URL du projet cible>" --single-transaction -v ON_ERROR_STOP=1 \
-c "set session_replication_role = replica" -f auth.sql -f public.sql -f storage.sql
session_replication_role = replica coupe les triggers pendant la restauration (le profil est restauré tel quel au lieu d'être recréé). Les photos sont à recopier séparément depuis l'ancien Storage. Faire un essai de restauration sur un projet jetable une fois les sauvegardes activées.
src/app/ pages (fines) : (auth), (public)/b/[slug], s/[shopSlug]/…, manifest, icônes
src/features/<domaine> composants, requêtes serveur, Server Actions, schémas Zod
src/components/ ui (shadcn/ui adaptés), layout (AppShell…), shared (Money, PriceInput…)
src/lib/ format, permissions, supabase (client, server, admin, public, proxy)…
src/messages/fr.ts tous les textes de l'interface
supabase/migrations SQL versionné (tables, RLS, fonctions RPC)
supabase/tests tests pgTAP
e2e/ tests Playwright, données de démonstration
scripts/ db-test (pgTAP sans Docker), seed-demo, with-env
Règles d'architecture : toute table métier a shop_id et l'isolation est garantie par RLS ; les écritures sensibles (réceptions, ventes, retours, annulations, règlements) passent uniquement par des fonctions Postgres security definer ; rien ne se supprime (annulation avec motif, archivage) ; le rôle manager ne reçoit jamais de coût, de marge ni de solde fournisseur.