AutonomousVehicleControlBeginnersGuide
자율주행 차량 제어 알고리즘 샘플 코드와 문서로, 초보자가 알고리즘과 소프트웨어 구조를 공부할 수 있는 기술 가이드
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Reviix est une application de révision pour lycéens/étudiants : elle transforme des notes de cours (texte, photos, PDF, Word) en fiches de révision structurées, génère un planning de révision par répétition espacée à partir des examens à venir, et propose un quiz par chapitre pour se tester.
Copier .env.example en .env.local et renseigner :
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=
SUPABASE_SECRET_KEY=
ANTHROPIC_API_KEY=
WHOP_API_KEY=
WHOP_WEBHOOK_SECRET=
WHOP_PLAN_ID_TIER1=
WHOP_PLAN_ID_TIER2=
WHOP_PLAN_ID_TIER3=
WHOP_ACCOUNT_ID=
NEXT_PUBLIC_SITE_URL=http://localhost:3000
SUPABASE_SECRET_KEY et ANTHROPIC_API_KEY ne doivent jamais être
exposées côté client : elles ne sont lues que dans des Route Handlers /
modules serveur (marqués import "server-only").
http://localhost:3000/auth/callback et l'équivalent en production
(https://ton-domaine/auth/callback).signInWithPassword), sans
nouveau lien à envoyer.Les migrations vivent dans supabase/migrations/ :
0001_init.sql : schéma complet (profiles, subjects, chapters, fiches,
exams, exam_chapters, planning_tasks, quizzes, quiz_attempts,
subscriptions), RLS auth.uid() = user_id sur chaque table, trigger
handle_new_user qui crée la ligne profiles à l'inscription.0002_ai_lock.sql : table ai_lock + fonctions try_acquire_ai_lock /
release_ai_lock, un verrou global qui sérialisait tous les appels à
Claude — supprimé par 0012_drop_ai_lock.sql une fois la génération de
fiches parallélisée (voir plus bas).0003_fiche_drafts.sql : table fiche_drafts, stockage temporaire entre
la génération d'une fiche et son assignation matière/chapitre — voir
"Flux d'enregistrement d'une fiche" plus bas.Appliquer avec la CLI Supabase :
supabase link --project-ref <ton-project-ref>
supabase db push
(ou coller le contenu des deux fichiers dans l'éditeur SQL du dashboard, dans l'ordre.)
npm install
npm run dev
L'application est servie sur http://localhost:3000.
Whop n'a pas d'équivalent de la Stripe CLI pour relayer les webhooks vers
localhost. Pour tester en local, exposer le serveur de dev via un tunnel
(ex. ngrok http 3000) et configurer l'URL publique obtenue comme endpoint
webhook (https://<tunnel>/api/whop/webhook) dans le dashboard Whop, avec
au minimum les événements membership.activated, membership.deactivated
et payment.succeeded.
Sans webhook configuré, un paiement Whop ne mettra jamais à jour la table
subscriptions — l'abonnement ne passera donc jamais à active en local.
Mode sandbox : WHOP_SANDBOX=true fait basculer lib/whop/client.ts
vers https://sandbox-api.whop.com/api/v1 et vers les variables
WHOP_API_KEY_SANDBOX/WHOP_WEBHOOK_SECRET_SANDBOX/
WHOP_PLAN_ID_TIER1_SANDBOX/WHOP_PLAN_ID_TIER2_SANDBOX/
WHOP_PLAN_ID_TIER3_SANDBOX/WHOP_ACCOUNT_ID_SANDBOX au lieu des
variables de production — permet de
tester un paiement complet avec de fausses cartes sans jamais toucher aux
identifiants ni à l'argent réel. Le webhook ne vérifie qu'un seul secret à
la fois selon ce réglage : un événement sandbox est rejeté tant que
WHOP_SANDBOX=false, et inversement — sandbox et production se testent
l'un après l'autre, jamais simultanément. Remettre WHOP_SANDBOX=false (ou
la retirer) repasse en production sans toucher au reste du code.
lib/anthropic/client.ts — appel Claude avec validation strictegenerateJson() encapsule l'appel à l'API Messages de Claude (modèle
claude-opus-5) et exige une réponse JSON strictement valide. Une réponse
peut être un succès HTTP (200) tout en étant vide ou tronquée
(stop_reason === "max_tokens") — dans les deux cas, comme en cas de JSON
invalide ou de structure incomplète (le paramètre validate fourni par
l'appelant), la fonction relance automatiquement l'appel (jusqu'à 3
tentatives) avant d'abandonner avec une erreur explicite.
Le system prompt (identique à chaque appel pour un même label) est envoyé
avec cache_control: { type: "ephemeral" }, pour que les appels fiche/quiz
qui se suivent ou tournent en parallèle le lisent en cache plutôt que de le
repayer au prix plein.
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗