new-term-radar
신규 AI 용어를 매일 추적, X·Hugging Face·GitHub 등에서 모델·제품·레포 이름을 빠르게 수집
Systeme.io 판매 후 고객에게 자동 후기 요청, 승인 시 판매 페이지에 표시, 무료 시작
Après chaque vente sur Systeme.io, votre client reçoit une demande d'avis à votre nom. Vous validez, et son témoignage s'affiche sur votre page de vente. Gratuit pour commencer.
마케팅TypeScript · PythonGitHub @jawadboughalem온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기PULSACITY — vos ventes deviennent des témoignages, automatiquement.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Vos ventes deviennent des témoignages, automatiquement. Il faut Node.js 22.12 ou plus récent, pnpm 10 (corepack enable suffit : la version est fixée dans package.json) et Docker Desktop pour la base. Valeurs de .env.local pour travailler en local :README 전문 보기 ↗
Vos ventes deviennent des témoignages, automatiquement.
Il faut Node.js 22.12 ou plus récent, pnpm 10 (corepack enable suffit : la version est fixée dans
package.json) et Docker Desktop pour la base.
pnpm install
docker compose up -d # Postgres 16 sur le port 54322
cp .env.example .env.local # puis remplir les valeurs ci-dessous
pnpm db:migrate
pnpm db:seed [email protected] # un espace de démonstration complet pour cette adresse
pnpm dev # http://localhost:3000
Valeurs de .env.local pour travailler en local :
DATABASE_URL=postgres://postgres@localhost:54322/pulsacity
BETTER_AUTH_SECRET=<openssl rand -base64 32>
BETTER_AUTH_URL=http://localhost:3000
NEXT_PUBLIC_APP_URL=http://localhost:3000
EMAIL_FROM_DOMAIN=envois.pulsacity.com
LEGAL_VALIDATED=false
Sans RESEND_API_KEY, aucun e-mail ne part : leur texte s'affiche dans le terminal de pnpm dev.
Les textes légaux parlent au nom de l'équipe PULSACITY : aucun nom, aucune adresse, aucun téléphone de personne. Sans
LEGAL_VALIDATED=true, ils restent en brouillon.
Les demandes d'avis planifiées partent avec la tâche /api/cron/requests. En production, le workflow GitHub
« Send review requests » l'appelle toutes les 15 minutes, et Vercel Cron une fois par jour (le plan Hobby ne permet
pas plus). En local, ajoutez CRON_SECRET=<une valeur au choix> à .env.local et lancez-la à la
main : curl -H "Authorization: Bearer <la même valeur>" http://localhost:3000/api/cron/requests. Le bouton
« Envoyer maintenant » de la page Demandes fait partir une demande sans attendre.
Pour vous connecter, demandez un lien sur /connexion avec l'adresse passée à pnpm db:seed, puis
ouvrez le lien affiché dans le terminal. Les photos demandent un bucket R2 : sans les variables R2_*,
tout fonctionne sauf leur envoi.
pnpm db:seed remet l'espace de démonstration à zéro à chaque passage. Il refuse une base qui n'est
pas sur votre machine, sauf avec --recette. --plan=essentiel ou --plan=pro change le plan.
| Environnement | Adresse | Base | Sert à |
|---|---|---|---|
| Local | http://localhost:3000 | Postgres de compose.yaml | Développer, essayer sans risque |
| Recette | l'aperçu Vercel de chaque PR | Supabase « pulsacity-recette » | Tester une PR avant de la fusionner |
| Production | https://pulsacity.com | Supabase « PULSACITY » | Les vrais créateurs |
Mise en ligne : branche, PR, CI verte, recette sur l'aperçu de la PR, fusion sur main. Vercel construit
alors la production pendant que le workflow « Database migration » applique les nouvelles migrations.
La nouvelle version ne passe en ligne qu'une fois « CI » et « Database migration » verts (Deployment
Checks de Vercel) : le code ne rencontre jamais une base sans ses colonnes.
Une migration doit rester compatible avec le code en place pendant le déploiement : on ajoute d'abord (colonne facultative, nouvelle table), on retire seulement dans une PR suivante, une fois plus rien ne l'utilise.
| Commande | Effet |
|---|---|
pnpm dev | Serveur de développement, http://localhost:3000 |
pnpm build | Build du widget, puis build de production |
pnpm build:widget | Compile le widget vers public/w.js |
pnpm lint | ESLint |
pnpm typecheck | TypeScript strict |
pnpm test | Tests Vitest |
pnpm db:generate | Génère une migration depuis src/db/schema.ts |
pnpm db:migrate | Applique les migrations sur DATABASE_URL (lit .env.local) |
pnpm db:seed | Remplit un espace de démonstration (voir plus haut) |
Pour voir le widget sur une page hôte : pnpm build:widget et pnpm dev, puis ouvrez dans un navigateur
widget/test.html?widget=<identifiant> (l'identifiant termine l'adresse de l'éditeur, /app/widgets/<identifiant> ;
plusieurs, séparés par des virgules). Avec &agressif, la page casse tous les styles qu'elle peut : le
widget doit rester intact.
Migrations des bases Supabase, par GitHub Actions :
main sur la production, à chaque fusion. Sans
nouvelle migration, il ne fait rien. Il lit le secret DATABASE_URL. On peut aussi le lancer à la main.main
ensuite. Il ne lit que le secret RECETTE_DATABASE_URL.La liste complète est dans .env.example. Celles qui demandent une précision :
DATABASE_URL : chaîne du pooler Supabase en mode transaction (port 6543), de la forme
postgres://postgres.<ref-du-projet>:<mot-de-passe>@<hôte-du-pooler>:6543/postgres?sslmode=require.
Sans ?sslmode=require, Supabase refuse la connexion.BETTER_AUTH_SECRET : au moins 32 caractères aléatoires, par exemple openssl rand -base64 32.BETTER_AUTH_URL et NEXT_PUBLIC_APP_URL : sur un aperçu Vercel, l'application prend l'adresse de
la branche à leur place, pour que les liens de connexion et de collecte restent sur l'aperçu.SENTRY_DSN : facultatif. Vide, Sentry reste éteint. Il est aussi transmis au navigateur au build.LEGAL_VALIDATED : false tant que les textes légaux ne sont pas relus.CRON_SECRET : au moins 32 caractères aléatoires, la même valeur dans Vercel (Production) et dans le secret
GitHub CRON_SECRET. Vercel Cron et le workflow l'envoient à /api/cron/requests ; sans lui, la tâche refuse tout
appel.