book
This commit is contained in:
+7
-3
@@ -2226,8 +2226,12 @@
|
||||
"toggleContextBlocks": "بدّل كتل السياق لترى كيف تتجمع. لاحظ عدد الرموز!",
|
||||
"overContextLimit": "تجاوز حد السياق! سيتم اقتطاع بعض المحتوى.",
|
||||
"enableContextBlocksToBuild": "فعّل بعض كتل السياق لبناء أمر",
|
||||
"testContext": "اختبار السياق"
|
||||
}
|
||||
"testContext": "اختبار السياق",
|
||||
"links": "روابط"
|
||||
},
|
||||
"printTitle": "كتاب هندسة الأوامر",
|
||||
"printSubtitle": "دليل لإنشاء أوامر واضحة وفعالة",
|
||||
"downloadPdf": "تحميل كملف PDF"
|
||||
},
|
||||
"userExamples": {
|
||||
"addMyExample": "إضافة مثالي",
|
||||
@@ -2254,4 +2258,4 @@
|
||||
"communityExamples": "أمثلة المجتمع",
|
||||
"userExample": "مثال المستخدم"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-3
@@ -2240,8 +2240,12 @@
|
||||
"toggleContextBlocks": "Kontekst bloklarını açın/bağlayın və birləşdirmələrini izləyin. Token sayına diqqət yetirin!",
|
||||
"overContextLimit": "Kontekst limitini aşdı! Bəzi məzmun kəsiləcək.",
|
||||
"enableContextBlocksToBuild": "Prompt qurmaq üçün bəzi kontekst bloklarını aktiv edin",
|
||||
"testContext": "Konteksti Test Et"
|
||||
}
|
||||
"testContext": "Konteksti Test Et",
|
||||
"links": "Keçidlər"
|
||||
},
|
||||
"printTitle": "Prompting Kitabı",
|
||||
"printSubtitle": "Aydın və Effektiv Promptlar Yaratmaq üçün Bələdçi",
|
||||
"downloadPdf": "PDF olaraq yüklə"
|
||||
},
|
||||
"userExamples": {
|
||||
"addMyExample": "Nümunəmi Əlavə Et",
|
||||
@@ -2268,4 +2272,4 @@
|
||||
"communityExamples": "İcma Nümunələri",
|
||||
"userExample": "İstifadəçi nümunəsi"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-3
@@ -2240,8 +2240,12 @@
|
||||
"toggleContextBlocks": "Schalten Sie Kontextblöcke ein/aus, um zu sehen, wie sie sich kombinieren. Achten Sie auf die Token-Anzahl!",
|
||||
"overContextLimit": "Kontextlimit überschritten! Einige Inhalte werden gekürzt.",
|
||||
"enableContextBlocksToBuild": "Aktivieren Sie einige Kontextblöcke, um einen Prompt zu erstellen",
|
||||
"testContext": "Kontext Testen"
|
||||
}
|
||||
"testContext": "Kontext Testen",
|
||||
"links": "Links"
|
||||
},
|
||||
"printTitle": "Das Prompting-Buch",
|
||||
"printSubtitle": "Ein Leitfaden zur Erstellung Klarer und Effektiver Prompts",
|
||||
"downloadPdf": "Als PDF herunterladen"
|
||||
},
|
||||
"userExamples": {
|
||||
"addMyExample": "Mein Beispiel Hinzufügen",
|
||||
@@ -2268,4 +2272,4 @@
|
||||
"communityExamples": "Community-Beispiele",
|
||||
"userExample": "Benutzerbeispiel"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-3
@@ -2231,8 +2231,12 @@
|
||||
"toggleContextBlocks": "Εναλλαγή blocks context για να δείτε πώς συνδυάζονται. Παρακολουθήστε την καταμέτρηση tokens!",
|
||||
"overContextLimit": "Υπέρβαση ορίου context! Κάποιο περιεχόμενο θα περικοπεί.",
|
||||
"enableContextBlocksToBuild": "Ενεργοποιήστε blocks context για να δημιουργήσετε ένα prompt",
|
||||
"testContext": "Δοκιμή Context"
|
||||
}
|
||||
"testContext": "Δοκιμή Context",
|
||||
"links": "Σύνδεσμοι"
|
||||
},
|
||||
"printTitle": "Το Βιβλίο του Prompting",
|
||||
"printSubtitle": "Ένας Οδηγός για τη Δημιουργία Σαφών και Αποτελεσματικών Prompts",
|
||||
"downloadPdf": "Λήψη ως PDF"
|
||||
},
|
||||
"userExamples": {
|
||||
"addMyExample": "Προσθήκη του Παραδείγματός μου",
|
||||
@@ -2259,4 +2263,4 @@
|
||||
"communityExamples": "Παραδείγματα Κοινότητας",
|
||||
"userExample": "Παράδειγμα Χρήστη"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-3
@@ -2244,8 +2244,12 @@
|
||||
"toggleContextBlocks": "Toggle context blocks on/off to see how they combine. Watch the token count!",
|
||||
"overContextLimit": "Over context limit! Some content will be truncated.",
|
||||
"enableContextBlocksToBuild": "Enable some context blocks to build a prompt",
|
||||
"testContext": "Test Context"
|
||||
}
|
||||
"testContext": "Test Context",
|
||||
"links": "Links"
|
||||
},
|
||||
"printTitle": "The Prompting Book",
|
||||
"printSubtitle": "A Guide to Crafting Clear and Effective Prompts",
|
||||
"downloadPdf": "Download as PDF"
|
||||
},
|
||||
"userExamples": {
|
||||
"addMyExample": "Add My Example",
|
||||
@@ -2272,4 +2276,4 @@
|
||||
"communityExamples": "Community Examples",
|
||||
"userExample": "User example"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-3
@@ -2243,8 +2243,12 @@
|
||||
"toggleContextBlocks": "Activa/desactiva bloques de contexto para ver cómo se combinan. ¡Observa el conteo de tokens!",
|
||||
"overContextLimit": "¡Límite de contexto excedido! Algunos contenidos serán truncados.",
|
||||
"enableContextBlocksToBuild": "Habilita algunos bloques de contexto para construir un prompt",
|
||||
"testContext": "Probar Contexto"
|
||||
}
|
||||
"testContext": "Probar Contexto",
|
||||
"links": "Enlaces"
|
||||
},
|
||||
"printTitle": "El Libro del Prompting",
|
||||
"printSubtitle": "Una Guía para Crear Prompts Claros y Efectivos",
|
||||
"downloadPdf": "Descargar como PDF"
|
||||
},
|
||||
"userExamples": {
|
||||
"addMyExample": "Añadir Mi Ejemplo",
|
||||
@@ -2271,4 +2275,4 @@
|
||||
"communityExamples": "Ejemplos de la Comunidad",
|
||||
"userExample": "Ejemplo de usuario"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-3
@@ -2224,8 +2224,12 @@
|
||||
"toggleContextBlocks": "بلوکهای زمینه را تغییر دهید تا ببینید چگونه ترکیب میشوند. تعداد توکنها را ببینید!",
|
||||
"overContextLimit": "از محدودیت زمینه فراتر رفت! برخی محتوا قطع میشود.",
|
||||
"enableContextBlocksToBuild": "بلوکهای زمینه را فعال کنید تا یک پرامپت بسازید",
|
||||
"testContext": "آزمایش زمینه"
|
||||
}
|
||||
"testContext": "آزمایش زمینه",
|
||||
"links": "لینکها"
|
||||
},
|
||||
"printTitle": "کتاب پرامپتنویسی",
|
||||
"printSubtitle": "راهنمای ایجاد پرامپتهای واضح و مؤثر",
|
||||
"downloadPdf": "دانلود PDF"
|
||||
},
|
||||
"userExamples": {
|
||||
"addMyExample": "افزودن مثال من",
|
||||
@@ -2252,4 +2256,4 @@
|
||||
"communityExamples": "مثالهای جامعه",
|
||||
"userExample": "مثال کاربر"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-3
@@ -2243,8 +2243,12 @@
|
||||
"toggleContextBlocks": "Activez/désactivez les blocs de contexte pour voir comment ils se combinent. Surveillez le compteur de tokens !",
|
||||
"overContextLimit": "Limite de contexte dépassée ! Certains contenus seront tronqués.",
|
||||
"enableContextBlocksToBuild": "Activez quelques blocs de contexte pour construire un prompt",
|
||||
"testContext": "Tester le Contexte"
|
||||
}
|
||||
"testContext": "Tester le Contexte",
|
||||
"links": "Liens"
|
||||
},
|
||||
"printTitle": "Le Livre du Prompting",
|
||||
"printSubtitle": "Un Guide pour Créer des Prompts Clairs et Efficaces",
|
||||
"downloadPdf": "Télécharger en PDF"
|
||||
},
|
||||
"userExamples": {
|
||||
"addMyExample": "Ajouter Mon Exemple",
|
||||
@@ -2271,4 +2275,4 @@
|
||||
"communityExamples": "Exemples de la Communauté",
|
||||
"userExample": "Exemple utilisateur"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-3
@@ -2224,8 +2224,12 @@
|
||||
"toggleContextBlocks": "החלף בלוקי הקשר כדי לראות איך הם משתלבים. עקוב אחרי ספירת הטוקנים!",
|
||||
"overContextLimit": "חריגה ממגבלת ההקשר! חלק מהתוכן ייחתך.",
|
||||
"enableContextBlocksToBuild": "הפעל בלוקי הקשר כדי לבנות פרומפט",
|
||||
"testContext": "בדוק הקשר"
|
||||
}
|
||||
"testContext": "בדוק הקשר",
|
||||
"links": "קישורים"
|
||||
},
|
||||
"printTitle": "ספר הפרומפטינג",
|
||||
"printSubtitle": "מדריך ליצירת פרומפטים ברורים ויעילים",
|
||||
"downloadPdf": "הורד כ-PDF"
|
||||
},
|
||||
"userExamples": {
|
||||
"addMyExample": "הוסף את הדוגמה שלי",
|
||||
@@ -2252,4 +2256,4 @@
|
||||
"communityExamples": "דוגמאות קהילה",
|
||||
"userExample": "דוגמת משתמש"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-3
@@ -2246,8 +2246,12 @@
|
||||
"toggleContextBlocks": "Attiva/disattiva i blocchi di contesto per vedere come si combinano. Guarda il conteggio dei token!",
|
||||
"overContextLimit": "Limite di contesto superato! Alcuni contenuti verranno troncati.",
|
||||
"enableContextBlocksToBuild": "Abilita alcuni blocchi di contesto per costruire un prompt",
|
||||
"testContext": "Testa Contesto"
|
||||
}
|
||||
"testContext": "Testa Contesto",
|
||||
"links": "Link"
|
||||
},
|
||||
"printTitle": "Il Libro del Prompting",
|
||||
"printSubtitle": "Una Guida per Creare Prompt Chiari ed Efficaci",
|
||||
"downloadPdf": "Scarica come PDF"
|
||||
},
|
||||
"userExamples": {
|
||||
"addMyExample": "Aggiungi il Mio Esempio",
|
||||
@@ -2274,4 +2278,4 @@
|
||||
"communityExamples": "Esempi della Community",
|
||||
"userExample": "Esempio utente"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-3
@@ -2228,8 +2228,12 @@
|
||||
"toggleContextBlocks": "コンテキストブロックを切り替えて組み合わせを確認。トークン数に注意!",
|
||||
"overContextLimit": "コンテキスト制限を超えました!一部のコンテンツが切り捨てられます。",
|
||||
"enableContextBlocksToBuild": "コンテキストブロックを有効にしてプロンプトを構築",
|
||||
"testContext": "コンテキストをテスト"
|
||||
}
|
||||
"testContext": "コンテキストをテスト",
|
||||
"links": "リンク"
|
||||
},
|
||||
"printTitle": "プロンプティングブック",
|
||||
"printSubtitle": "明確で効果的なプロンプトを作成するためのガイド",
|
||||
"downloadPdf": "PDFでダウンロード"
|
||||
},
|
||||
"userExamples": {
|
||||
"addMyExample": "私の例を追加",
|
||||
@@ -2256,4 +2260,4 @@
|
||||
"communityExamples": "コミュニティの例",
|
||||
"userExample": "ユーザーの例"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-3
@@ -2228,8 +2228,12 @@
|
||||
"toggleContextBlocks": "컨텍스트 블록을 토글하여 어떻게 결합되는지 확인하세요. 토큰 수에 주목하세요!",
|
||||
"overContextLimit": "컨텍스트 한도 초과! 일부 콘텐츠가 잘립니다.",
|
||||
"enableContextBlocksToBuild": "프롬프트를 구축하려면 컨텍스트 블록을 활성화하세요",
|
||||
"testContext": "컨텍스트 테스트"
|
||||
}
|
||||
"testContext": "컨텍스트 테스트",
|
||||
"links": "링크"
|
||||
},
|
||||
"printTitle": "프롬프팅 북",
|
||||
"printSubtitle": "명확하고 효과적인 프롬프트를 만들기 위한 가이드",
|
||||
"downloadPdf": "PDF 다운로드"
|
||||
},
|
||||
"userExamples": {
|
||||
"addMyExample": "내 예제 추가",
|
||||
@@ -2256,4 +2260,4 @@
|
||||
"communityExamples": "커뮤니티 예제",
|
||||
"userExample": "사용자 예제"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-3
@@ -2231,8 +2231,12 @@
|
||||
"toggleContextBlocks": "Schakel contextblokken om te zien hoe ze combineren. Let op de token-telling!",
|
||||
"overContextLimit": "Context limiet overschreden! Sommige content wordt afgekapt.",
|
||||
"enableContextBlocksToBuild": "Schakel contextblokken in om een prompt te bouwen",
|
||||
"testContext": "Test Context"
|
||||
}
|
||||
"testContext": "Test Context",
|
||||
"links": "Links"
|
||||
},
|
||||
"printTitle": "Het Prompting Boek",
|
||||
"printSubtitle": "Een Gids voor het Maken van Duidelijke en Effectieve Prompts",
|
||||
"downloadPdf": "Downloaden als PDF"
|
||||
},
|
||||
"userExamples": {
|
||||
"addMyExample": "Voeg Mijn Voorbeeld Toe",
|
||||
@@ -2259,4 +2263,4 @@
|
||||
"communityExamples": "Community Voorbeelden",
|
||||
"userExample": "Gebruikers Voorbeeld"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-3
@@ -2242,8 +2242,12 @@
|
||||
"toggleContextBlocks": "Ative/desative blocos de contexto para ver como eles se combinam. Observe a contagem de tokens!",
|
||||
"overContextLimit": "Limite de contexto excedido! Alguns conteúdos serão truncados.",
|
||||
"enableContextBlocksToBuild": "Ative alguns blocos de contexto para construir um prompt",
|
||||
"testContext": "Testar Contexto"
|
||||
}
|
||||
"testContext": "Testar Contexto",
|
||||
"links": "Links"
|
||||
},
|
||||
"printTitle": "O Livro de Prompting",
|
||||
"printSubtitle": "Um Guia para Criar Prompts Claros e Eficazes",
|
||||
"downloadPdf": "Baixar como PDF"
|
||||
},
|
||||
"userExamples": {
|
||||
"addMyExample": "Adicionar Meu Exemplo",
|
||||
@@ -2270,4 +2274,4 @@
|
||||
"communityExamples": "Exemplos da Comunidade",
|
||||
"userExample": "Exemplo do usuário"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-3
@@ -2225,8 +2225,12 @@
|
||||
"toggleContextBlocks": "Переключай блоки контекста, чтобы увидеть, как они комбинируются. Следи за счётчиком токенов!",
|
||||
"overContextLimit": "Превышен лимит контекста! Часть контента будет обрезана.",
|
||||
"enableContextBlocksToBuild": "Включи блоки контекста для построения промпта",
|
||||
"testContext": "Тестировать контекст"
|
||||
}
|
||||
"testContext": "Тестировать контекст",
|
||||
"links": "Ссылки"
|
||||
},
|
||||
"printTitle": "Книга по Промптингу",
|
||||
"printSubtitle": "Руководство по созданию чётких и эффективных промптов",
|
||||
"downloadPdf": "Скачать PDF"
|
||||
},
|
||||
"userExamples": {
|
||||
"addMyExample": "Добавить мой пример",
|
||||
@@ -2253,4 +2257,4 @@
|
||||
"communityExamples": "Примеры сообщества",
|
||||
"userExample": "Пример пользователя"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-3
@@ -2239,8 +2239,12 @@
|
||||
"toggleContextBlocks": "Bağlam bloklarını açıp kapatarak nasıl birleştiklerini görün. Token sayısını takip edin!",
|
||||
"overContextLimit": "Bağlam limiti aşıldı! Bazı içerikler kırpılacak.",
|
||||
"enableContextBlocksToBuild": "Bir prompt oluşturmak için bazı bağlam bloklarını etkinleştirin",
|
||||
"testContext": "Bağlamı Test Et"
|
||||
}
|
||||
"testContext": "Bağlamı Test Et",
|
||||
"links": "Bağlantılar"
|
||||
},
|
||||
"printTitle": "Prompt Kitabı",
|
||||
"printSubtitle": "Net ve Etkili Promptlar Hazırlamak için Bir Rehber",
|
||||
"downloadPdf": "Kitabı PDF olarak indir"
|
||||
},
|
||||
"userExamples": {
|
||||
"addMyExample": "Örneğimi Ekle",
|
||||
@@ -2267,4 +2271,4 @@
|
||||
"communityExamples": "Topluluk Örnekleri",
|
||||
"userExample": "Kullanıcı örneği"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-3
@@ -2228,8 +2228,12 @@
|
||||
"toggleContextBlocks": "切换上下文块查看它们如何组合。注意token计数!",
|
||||
"overContextLimit": "超出上下文限制!部分内容将被截断。",
|
||||
"enableContextBlocksToBuild": "启用一些上下文块来构建提示词",
|
||||
"testContext": "测试上下文"
|
||||
}
|
||||
"testContext": "测试上下文",
|
||||
"links": "链接"
|
||||
},
|
||||
"printTitle": "提示词工程之书",
|
||||
"printSubtitle": "创建清晰有效提示词的指南",
|
||||
"downloadPdf": "下载PDF版"
|
||||
},
|
||||
"userExamples": {
|
||||
"addMyExample": "添加我的示例",
|
||||
@@ -2256,4 +2260,4 @@
|
||||
"communityExamples": "社区示例",
|
||||
"userExample": "用户示例"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Generated
+888
-3
File diff suppressed because it is too large
Load Diff
+7
-1
@@ -22,7 +22,12 @@
|
||||
"test:watch": "vitest",
|
||||
"test:ui": "vitest --ui",
|
||||
"test:coverage": "vitest run --coverage",
|
||||
"lint:mdx": "node scripts/lint-mdx.js"
|
||||
"lint:mdx": "node scripts/lint-mdx.js",
|
||||
"book:pdf": "npx tsx scripts/generate-book-pdf.ts",
|
||||
"book:pdf:all": "npx tsx scripts/generate-book-pdf.ts --all",
|
||||
"book:pdf:convert": "npx tsx scripts/html-to-pdf.ts",
|
||||
"book:pdf:print": "npx tsx scripts/generate-book-pdf.ts --print && npx tsx scripts/html-to-pdf.ts --print",
|
||||
"book:pdf:print:all": "npx tsx scripts/generate-book-pdf.ts --all --print && npx tsx scripts/html-to-pdf.ts --all --print"
|
||||
},
|
||||
"dependencies": {
|
||||
"@auth/prisma-adapter": "^2.11.1",
|
||||
@@ -101,6 +106,7 @@
|
||||
"jsdom": "^25.0.1",
|
||||
"picocolors": "^1.1.1",
|
||||
"prisma": "^6.19.0",
|
||||
"puppeteer": "^24.37.1",
|
||||
"tailwindcss": "^4",
|
||||
"tsx": "^4.21.0",
|
||||
"tw-animate-css": "^1.4.0",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,174 @@
|
||||
#!/usr/bin/env npx tsx
|
||||
/**
|
||||
* Convert HTML book to PDF using Puppeteer
|
||||
*
|
||||
* Usage:
|
||||
* npx tsx scripts/html-to-pdf.ts [locale]
|
||||
* npx tsx scripts/html-to-pdf.ts [locale] --print # Print-ready with bleed
|
||||
*
|
||||
* Prerequisites:
|
||||
* npm install puppeteer (run once)
|
||||
*
|
||||
* Examples:
|
||||
* npx tsx scripts/html-to-pdf.ts # Convert English version
|
||||
* npx tsx scripts/html-to-pdf.ts tr # Convert Turkish version
|
||||
* npx tsx scripts/html-to-pdf.ts --all # Convert all available HTML files
|
||||
* npx tsx scripts/html-to-pdf.ts --all --print # All locales, print-ready
|
||||
*/
|
||||
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
|
||||
const OUTPUT_DIR = path.join(process.cwd(), 'public/book-pdf');
|
||||
|
||||
// Print dimensions
|
||||
const SCREEN_WIDTH = '6in';
|
||||
const SCREEN_HEIGHT = '9in';
|
||||
const PRINT_WIDTH = '6.25in'; // 6 + 0.125*2 bleed
|
||||
const PRINT_HEIGHT = '9.25in'; // 9 + 0.125*2 bleed
|
||||
|
||||
async function convertToPdf(htmlPath: string, pdfPath: string, printReady: boolean): Promise<void> {
|
||||
// Dynamic import to avoid issues if puppeteer isn't installed
|
||||
const puppeteer = await import('puppeteer');
|
||||
|
||||
const mode = printReady ? 'print-ready' : 'screen';
|
||||
console.log(` 🔄 Converting ${path.basename(htmlPath)} to PDF (${mode})...`);
|
||||
|
||||
const browser = await puppeteer.default.launch({
|
||||
headless: true,
|
||||
args: ['--no-sandbox', '--disable-setuid-sandbox'],
|
||||
});
|
||||
|
||||
try {
|
||||
const page = await browser.newPage();
|
||||
|
||||
// Load the HTML file via file:// URL for better CJK support
|
||||
await page.goto(`file://${htmlPath}`, {
|
||||
waitUntil: 'load',
|
||||
timeout: 60000,
|
||||
});
|
||||
|
||||
if (printReady) {
|
||||
// Print-ready: bleed page size, no header/footer, prefer CSS page size
|
||||
// Print-ready: margins = screen margins + bleed (0.125in) + safe zone
|
||||
await page.pdf({
|
||||
path: pdfPath,
|
||||
width: PRINT_WIDTH,
|
||||
height: PRINT_HEIGHT,
|
||||
printBackground: true,
|
||||
margin: {
|
||||
top: '0.7in',
|
||||
right: '0.65in',
|
||||
bottom: '0.75in',
|
||||
left: '0.65in',
|
||||
},
|
||||
});
|
||||
} else {
|
||||
// Screen version: standard margins with page numbers
|
||||
try {
|
||||
await page.pdf({
|
||||
path: pdfPath,
|
||||
width: SCREEN_WIDTH,
|
||||
height: SCREEN_HEIGHT,
|
||||
printBackground: true,
|
||||
margin: {
|
||||
top: '0.55in',
|
||||
right: '0.5in',
|
||||
bottom: '0.6in',
|
||||
left: '0.5in',
|
||||
},
|
||||
displayHeaderFooter: true,
|
||||
headerTemplate: '<div></div>',
|
||||
footerTemplate: `
|
||||
<div style="font-family: 'Palatino Linotype', Georgia, serif; font-size: 9px; width: 100%; text-align: center; color: #666; padding-top: 0.25in;">
|
||||
<span class="pageNumber"></span>
|
||||
</div>
|
||||
`,
|
||||
});
|
||||
} catch {
|
||||
// Retry without header/footer (can fail with CJK content)
|
||||
console.log(` ⚠ Retrying without page numbers...`);
|
||||
await page.pdf({
|
||||
path: pdfPath,
|
||||
width: SCREEN_WIDTH,
|
||||
height: SCREEN_HEIGHT,
|
||||
printBackground: true,
|
||||
margin: {
|
||||
top: '0.55in',
|
||||
right: '0.5in',
|
||||
bottom: '0.6in',
|
||||
left: '0.5in',
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const stats = fs.statSync(pdfPath);
|
||||
const sizeMB = (stats.size / (1024 * 1024)).toFixed(2);
|
||||
|
||||
console.log(` ✅ PDF saved: ${pdfPath} (${sizeMB} MB)`);
|
||||
} finally {
|
||||
await browser.close();
|
||||
}
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const args = process.argv.slice(2);
|
||||
const convertAll = args.includes('--all');
|
||||
const printReady = args.includes('--print');
|
||||
const requestedLocale = args.find(arg => !arg.startsWith('--')) || 'en';
|
||||
|
||||
const mode = printReady ? '(print-ready)' : '(screen)';
|
||||
console.log(`📄 HTML to PDF Converter ${mode}\n`);
|
||||
|
||||
// Check if puppeteer is available
|
||||
try {
|
||||
await import('puppeteer');
|
||||
} catch (e) {
|
||||
console.error('❌ Puppeteer is not installed.');
|
||||
console.log('\n Run: npm install puppeteer\n');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// Check output directory
|
||||
if (!fs.existsSync(OUTPUT_DIR)) {
|
||||
console.error(`❌ Output directory not found: ${OUTPUT_DIR}`);
|
||||
console.log('\n Run: npx tsx scripts/generate-book-pdf.ts first\n');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// Get HTML files to convert -- match print suffix
|
||||
const suffix = printReady ? '-print' : '';
|
||||
const pattern = suffix ? `-print.html` : '.html';
|
||||
const files = fs.readdirSync(OUTPUT_DIR).filter(f => {
|
||||
if (printReady) return f.endsWith('-print.html');
|
||||
return f.endsWith('.html') && !f.endsWith('-print.html');
|
||||
});
|
||||
|
||||
if (files.length === 0) {
|
||||
console.error(`❌ No ${printReady ? 'print-ready ' : ''}HTML files found.`);
|
||||
console.log(`\n Run: npx tsx scripts/generate-book-pdf.ts ${printReady ? '--print ' : ''}first\n`);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const filesToConvert = convertAll
|
||||
? files
|
||||
: files.filter(f => f === `book-${requestedLocale}${suffix}.html`);
|
||||
|
||||
if (filesToConvert.length === 0) {
|
||||
console.error(`❌ HTML file for locale '${requestedLocale}' not found.`);
|
||||
console.log(`\n Available: ${files.join(', ')}`);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
for (const htmlFile of filesToConvert) {
|
||||
const htmlPath = path.join(OUTPUT_DIR, htmlFile);
|
||||
const pdfPath = htmlPath.replace('.html', '.pdf');
|
||||
|
||||
await convertToPdf(htmlPath, pdfPath, printReady);
|
||||
}
|
||||
|
||||
console.log('\n✅ All conversions complete!\n');
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
@@ -1,11 +1,11 @@
|
||||
import Link from "next/link";
|
||||
import Image from "next/image";
|
||||
import { Schoolbell } from "next/font/google";
|
||||
import { ArrowRight, BookOpen, Sparkles, Brain, Layers, Target, Lightbulb, Gamepad2 } from "lucide-react";
|
||||
import { ArrowRight, BookOpen, Sparkles, Brain, Layers, Target, Lightbulb, Gamepad2, Download } from "lucide-react";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import type { Metadata } from "next";
|
||||
import { PixelRobot } from "@/components/kids/elements/pixel-art";
|
||||
import { getTranslations } from "next-intl/server";
|
||||
import { getTranslations, getLocale } from "next-intl/server";
|
||||
import { ContinueReadingButton } from "@/components/book/continue-reading";
|
||||
|
||||
const kidsFont = Schoolbell({
|
||||
@@ -114,6 +114,7 @@ const jsonLd = {
|
||||
|
||||
export default async function BookHomePage() {
|
||||
const t = await getTranslations("book");
|
||||
const locale = await getLocale();
|
||||
|
||||
const highlights = [
|
||||
{ icon: Brain, text: t("highlights.understanding") },
|
||||
@@ -215,6 +216,12 @@ export default async function BookHomePage() {
|
||||
{t("skipToChapter1")}
|
||||
</Link>
|
||||
</Button>
|
||||
<Button asChild variant="outline" size="lg">
|
||||
<a href={`/book-pdf/book-${locale}-print.pdf`} download>
|
||||
<Download className="mr-2 h-4 w-4" />
|
||||
{t("downloadPdf")}
|
||||
</a>
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
{/* Note */}
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
import Link from "next/link";
|
||||
import { usePathname } from "next/navigation";
|
||||
import { useTranslations } from "next-intl";
|
||||
import { useTranslations, useLocale } from "next-intl";
|
||||
import { parts } from "@/lib/book/chapters";
|
||||
import { Book, Bookmark, List, Search, X, Globe, Heart } from "lucide-react";
|
||||
import { Book, Bookmark, List, Search, X, Globe, Heart, Download } from "lucide-react";
|
||||
import { cn } from "@/lib/utils";
|
||||
import { ScrollArea } from "@/components/ui/scroll-area";
|
||||
import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from "@/components/ui/sheet";
|
||||
@@ -249,6 +249,7 @@ export function BookSidebar() {
|
||||
const [searchQuery, setSearchQuery] = useState("");
|
||||
const { bookmark, saveBookmark } = useBookmark();
|
||||
const t = useTranslations("book");
|
||||
const locale = useLocale();
|
||||
|
||||
return (
|
||||
<>
|
||||
@@ -266,6 +267,16 @@ export function BookSidebar() {
|
||||
{t("donate")}
|
||||
</a>
|
||||
|
||||
{/* Download PDF button */}
|
||||
<a
|
||||
href={`/book-pdf/book-${locale}-print.pdf`}
|
||||
download
|
||||
className="flex items-center justify-center gap-1.5 w-full mb-3 px-3 py-1.5 text-xs rounded-md border border-muted-foreground/20 bg-muted/50 text-muted-foreground hover:bg-muted hover:text-foreground transition-colors"
|
||||
>
|
||||
<Download className="h-3 w-3" />
|
||||
{t("downloadPdf")}
|
||||
</a>
|
||||
|
||||
{/* Header with title and search */}
|
||||
<div className="flex items-center gap-2 mb-4 pb-4 border-b">
|
||||
<Link
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/>
|
||||
<div>
|
||||
<span className="block font-semibold text-lg mt-0!">Fatih Kadir Akın</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">Creator of Awesome ChatGPT Prompts (a.k.a. prompts.chat)</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">Creator of prompts.chat, GitHub Star</span>
|
||||
<span className="block text-sm text-muted-foreground m-0!">
|
||||
Software developer from Istanbul, leading Developer Relations at Teknasyon. Author of books on JavaScript and prompt engineering. Open-source advocate specializing in web technologies and AI-assisted development.
|
||||
</span>
|
||||
|
||||
@@ -127,4 +127,4 @@ Ready to transform how you work with AI? Turn the page and let's get started.
|
||||
|
||||
---
|
||||
|
||||
*This book is part of the [Awesome ChatGPT Prompts](https://github.com/f/prompts.chat) project and is licensed under CC0 1.0 Universal (Public Domain).*
|
||||
*This book is part of the [prompts.chat](https://github.com/f/prompts.chat) project and is licensed under CC0 1.0 Universal (Public Domain).*
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/>
|
||||
<div>
|
||||
<span className="block font-semibold text-lg mt-0!">Fatih Kadir Akın</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">مؤسس مشروع Awesome ChatGPT Prompts (المعروف أيضاً بـ prompts.chat)</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">مؤسس prompts.chat، نجم GitHub</span>
|
||||
<span className="block text-sm text-muted-foreground m-0!">
|
||||
مطور برمجيات من إسطنبول، يقود قسم علاقات المطورين في شركة Teknasyon. مؤلف كتب عن JavaScript وهندسة الأوامر النصية. من دعاة المصادر المفتوحة ومتخصص في تقنيات الويب والتطوير بمساعدة الذكاء الاصطناعي.
|
||||
</span>
|
||||
|
||||
@@ -127,4 +127,4 @@
|
||||
|
||||
---
|
||||
|
||||
*هذا الكتاب جزء من مشروع [Awesome ChatGPT Prompts](https://github.com/f/prompts.chat) ومرخص بموجب CC0 1.0 Universal (ملكية عامة).*
|
||||
*هذا الكتاب جزء من مشروع [prompts.chat](https://github.com/f/prompts.chat) ومرخص بموجب CC0 1.0 Universal (ملكية عامة).*
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/>
|
||||
<div>
|
||||
<span className="block font-semibold text-lg mt-0!">Fatih Kadir Akın</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">Awesome ChatGPT Prompts-un (prompts.chat) yaradıcısı</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">prompts.chat-in yaradıcısı, GitHub Star</span>
|
||||
<span className="block text-sm text-muted-foreground m-0!">
|
||||
İstanbuldan olan proqram tərtibatçısı, Teknasyon-da Developer Relations rəhbəri. JavaScript və prompt mühəndisliyi üzrə kitabların müəllifi. Veb texnologiyaları və süni intellekt dəstəkli inkişaf sahəsində ixtisaslaşmış açıq mənbə müdafiəçisi.
|
||||
</span>
|
||||
|
||||
@@ -127,4 +127,4 @@ Süni intellekt ilə işləmə tərzinizi dəyişdirməyə hazırsınız? Səhif
|
||||
|
||||
---
|
||||
|
||||
*Bu kitab [Awesome ChatGPT Prompts](https://github.com/f/prompts.chat) layihəsinin bir hissəsidir və CC0 1.0 Universal (İctimai Mülkiyyət) altında lisenziyalanıb.*
|
||||
*Bu kitab [prompts.chat](https://github.com/f/prompts.chat) layihəsinin bir hissəsidir və CC0 1.0 Universal (İctimai Mülkiyyət) altında lisenziyalanıb.*
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/>
|
||||
<div>
|
||||
<span className="block font-semibold text-lg mt-0!">Fatih Kadir Akın</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">Schöpfer von Awesome ChatGPT Prompts (auch bekannt als prompts.chat)</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">Schöpfer von prompts.chat, GitHub Star</span>
|
||||
<span className="block text-sm text-muted-foreground m-0!">
|
||||
Softwareentwickler aus Istanbul, leitet Developer Relations bei Teknasyon. Autor von Büchern über JavaScript und Prompt Engineering. Open-Source-Befürworter mit Spezialisierung auf Webtechnologien und KI-gestützte Entwicklung.
|
||||
</span>
|
||||
|
||||
@@ -127,4 +127,4 @@ Bereit, deine Arbeit mit KI zu transformieren? Blättere um und lass uns loslege
|
||||
|
||||
---
|
||||
|
||||
*Dieses Buch ist Teil des [Awesome ChatGPT Prompts](https://github.com/f/prompts.chat) Projekts und ist unter CC0 1.0 Universal (Public Domain) lizenziert.*
|
||||
*Dieses Buch ist Teil des [prompts.chat](https://github.com/f/prompts.chat) Projekts und ist unter CC0 1.0 Universal (Public Domain) lizenziert.*
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/>
|
||||
<div>
|
||||
<span className="block font-semibold text-lg mt-0!">Fatih Kadir Akın</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">Δημιουργός του Awesome ChatGPT Prompts (γνωστό και ως prompts.chat)</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">Δημιουργός του prompts.chat, GitHub Star</span>
|
||||
<span className="block text-sm text-muted-foreground m-0!">
|
||||
Προγραμματιστής λογισμικού από την Κωνσταντινούπολη, επικεφαλής Developer Relations στην Teknasyon. Συγγραφέας βιβλίων για JavaScript και prompt engineering. Υποστηρικτής ανοιχτού κώδικα με εξειδίκευση σε τεχνολογίες web και ανάπτυξη με υποστήριξη AI.
|
||||
</span>
|
||||
|
||||
@@ -127,4 +127,4 @@
|
||||
|
||||
---
|
||||
|
||||
*Αυτό το βιβλίο είναι μέρος του έργου [Awesome ChatGPT Prompts](https://github.com/f/prompts.chat) και είναι αδειοδοτημένο υπό CC0 1.0 Universal (Public Domain).*
|
||||
*Αυτό το βιβλίο είναι μέρος του έργου [prompts.chat](https://github.com/f/prompts.chat) και είναι αδειοδοτημένο υπό CC0 1.0 Universal (Public Domain).*
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/>
|
||||
<div>
|
||||
<span className="block font-semibold text-lg mt-0!">Fatih Kadir Akın</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">Creador de Awesome ChatGPT Prompts (también conocido como prompts.chat)</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">Creador de prompts.chat, GitHub Star</span>
|
||||
<span className="block text-sm text-muted-foreground m-0!">
|
||||
Desarrollador de software de Estambul, liderando Relaciones con Desarrolladores en Teknasyon. Autor de libros sobre JavaScript e ingeniería de prompts. Defensor del código abierto especializado en tecnologías web y desarrollo asistido por IA.
|
||||
</span>
|
||||
|
||||
@@ -127,4 +127,4 @@ La mejor manera de aprender es haciendo. Cada capítulo tiene ejemplos que puede
|
||||
|
||||
---
|
||||
|
||||
*Este libro es parte del proyecto [Awesome ChatGPT Prompts](https://github.com/f/prompts.chat) y está licenciado bajo CC0 1.0 Universal (Dominio Público).*
|
||||
*Este libro es parte del proyecto [prompts.chat](https://github.com/f/prompts.chat) y está licenciado bajo CC0 1.0 Universal (Dominio Público).*
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/>
|
||||
<div>
|
||||
<span className="block font-semibold text-lg mt-0!">Fatih Kadir Akın</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">خالق Awesome ChatGPT Prompts (معروف به prompts.chat)</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">خالق prompts.chat، ستاره GitHub</span>
|
||||
<span className="block text-sm text-muted-foreground m-0!">
|
||||
توسعهدهنده نرمافزار از استانبول، مدیر روابط توسعهدهندگان در Teknasyon. نویسنده کتابهایی درباره JavaScript و مهندسی پرامپت. طرفدار متنباز با تخصص در فناوریهای وب و توسعه با کمک هوش مصنوعی.
|
||||
</span>
|
||||
|
||||
@@ -127,4 +127,4 @@
|
||||
|
||||
---
|
||||
|
||||
*این کتاب بخشی از پروژه [Awesome ChatGPT Prompts](https://github.com/f/prompts.chat) است و تحت مجوز CC0 1.0 Universal (دامنه عمومی) منتشر شده است.*
|
||||
*این کتاب بخشی از پروژه [prompts.chat](https://github.com/f/prompts.chat) است و تحت مجوز CC0 1.0 Universal (دامنه عمومی) منتشر شده است.*
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/>
|
||||
<div>
|
||||
<span className="block font-semibold text-lg mt-0!">Fatih Kadir Akın</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">Créateur de Awesome ChatGPT Prompts (alias prompts.chat)</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">Créateur de prompts.chat, GitHub Star</span>
|
||||
<span className="block text-sm text-muted-foreground m-0!">
|
||||
Développeur logiciel d'Istanbul, responsable des Relations Développeurs chez Teknasyon. Auteur de livres sur JavaScript et l'ingénierie des prompts. Défenseur de l'open source spécialisé dans les technologies web et le développement assisté par l'IA.
|
||||
</span>
|
||||
|
||||
@@ -127,4 +127,4 @@ Prêt à transformer votre façon de travailler avec l'IA ? Tournez la page et c
|
||||
|
||||
---
|
||||
|
||||
*Ce livre fait partie du projet [Awesome ChatGPT Prompts](https://github.com/f/prompts.chat) et est sous licence CC0 1.0 Universal (Domaine Public).*
|
||||
*Ce livre fait partie du projet [prompts.chat](https://github.com/f/prompts.chat) et est sous licence CC0 1.0 Universal (Domaine Public).*
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/>
|
||||
<div>
|
||||
<span className="block font-semibold text-lg mt-0!">Fatih Kadir Akın</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">יוצר Awesome ChatGPT Prompts (הידוע גם כ-prompts.chat)</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">יוצר prompts.chat, GitHub Star</span>
|
||||
<span className="block text-sm text-muted-foreground m-0!">
|
||||
מפתח תוכנה מאיסטנבול, מוביל את תחום יחסי המפתחים ב-Teknasyon. מחבר ספרים על JavaScript והנדסת פרומפטים. תומך בקוד פתוח עם התמחות בטכנולוגיות אינטרנט ופיתוח בסיוע בינה מלאכותית.
|
||||
</span>
|
||||
|
||||
@@ -127,4 +127,4 @@
|
||||
|
||||
---
|
||||
|
||||
*ספר זה הוא חלק מפרויקט [Awesome ChatGPT Prompts](https://github.com/f/prompts.chat) ומורשה תחת CC0 1.0 Universal (נחלת הכלל).*
|
||||
*ספר זה הוא חלק מפרויקט [prompts.chat](https://github.com/f/prompts.chat) ומורשה תחת CC0 1.0 Universal (נחלת הכלל).*
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/>
|
||||
<div>
|
||||
<span className="block font-semibold text-lg mt-0!">Fatih Kadir Akın</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">Creatore di Awesome ChatGPT Prompts (noto anche come prompts.chat)</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">Creatore di prompts.chat, GitHub Star</span>
|
||||
<span className="block text-sm text-muted-foreground m-0!">
|
||||
Sviluppatore software di Istanbul, a capo delle Developer Relations presso Teknasyon. Autore di libri su JavaScript e prompt engineering. Sostenitore dell'open-source specializzato in tecnologie web e sviluppo assistito dall'IA.
|
||||
</span>
|
||||
|
||||
@@ -127,4 +127,4 @@ Pronto a trasformare come lavori con l'IA? Gira pagina e cominciamo.
|
||||
|
||||
---
|
||||
|
||||
*Questo libro fa parte del progetto [Awesome ChatGPT Prompts](https://github.com/f/prompts.chat) ed è rilasciato sotto licenza CC0 1.0 Universal (Pubblico Dominio).*
|
||||
*Questo libro fa parte del progetto [prompts.chat](https://github.com/f/prompts.chat) ed è rilasciato sotto licenza CC0 1.0 Universal (Pubblico Dominio).*
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/>
|
||||
<div>
|
||||
<span className="block font-semibold text-lg mt-0!">Fatih Kadir Akın</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">Awesome ChatGPT Prompts(prompts.chat)の作成者</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">prompts.chat 作成者、GitHub Star</span>
|
||||
<span className="block text-sm text-muted-foreground m-0!">
|
||||
イスタンブール出身のソフトウェア開発者。Teknasyonでデベロッパーリレーションズを統括。JavaScriptとプロンプトエンジニアリングに関する書籍の著者。Web技術とAI支援開発を専門とするオープンソース推進者。
|
||||
</span>
|
||||
|
||||
@@ -127,4 +127,4 @@ AIとの働き方を変革する準備はできましたか?ページをめく
|
||||
|
||||
---
|
||||
|
||||
*この本は[Awesome ChatGPT Prompts](https://github.com/f/prompts.chat)プロジェクトの一部であり、CC0 1.0 Universal(パブリックドメイン)でライセンスされています。*
|
||||
*この本は[prompts.chat](https://github.com/f/prompts.chat)プロジェクトの一部であり、CC0 1.0 Universal(パブリックドメイン)でライセンスされています。*
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/>
|
||||
<div>
|
||||
<span className="block font-semibold text-lg mt-0!">Fatih Kadir Akın</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">Awesome ChatGPT Prompts (prompts.chat) 창시자</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">prompts.chat 창시자, GitHub Star</span>
|
||||
<span className="block text-sm text-muted-foreground m-0!">
|
||||
이스탄불 출신의 소프트웨어 개발자로, Teknasyon에서 개발자 관계를 이끌고 있습니다. JavaScript와 프롬프트 엔지니어링에 관한 책의 저자이며, 웹 기술과 AI 기반 개발을 전문으로 하는 오픈소스 옹호자입니다.
|
||||
</span>
|
||||
|
||||
@@ -127,4 +127,4 @@ AI와 함께 일하는 방식을 변화시킬 준비가 되셨나요? 다음 페
|
||||
|
||||
---
|
||||
|
||||
*이 책은 [Awesome ChatGPT Prompts](https://github.com/f/prompts.chat) 프로젝트의 일부이며 CC0 1.0 Universal (퍼블릭 도메인) 라이선스로 제공됩니다.*
|
||||
*이 책은 [prompts.chat](https://github.com/f/prompts.chat) 프로젝트의 일부이며 CC0 1.0 Universal (퍼블릭 도메인) 라이선스로 제공됩니다.*
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/>
|
||||
<div>
|
||||
<span className="block font-semibold text-lg mt-0!">Fatih Kadir Akın</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">Maker van Awesome ChatGPT Prompts (ook bekend als prompts.chat)</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">Maker van prompts.chat, GitHub Star</span>
|
||||
<span className="block text-sm text-muted-foreground m-0!">
|
||||
Softwareontwikkelaar uit Istanbul, leidt Developer Relations bij Teknasyon. Auteur van boeken over JavaScript en prompt engineering. Open-source voorvechter met specialisatie in webtechnologieën en AI-ondersteunde ontwikkeling.
|
||||
</span>
|
||||
|
||||
@@ -127,4 +127,4 @@ Klaar om te transformeren hoe je met AI werkt? Sla de pagina om en laten we begi
|
||||
|
||||
---
|
||||
|
||||
*Dit boek maakt deel uit van het [Awesome ChatGPT Prompts](https://github.com/f/prompts.chat) project en is gelicentieerd onder CC0 1.0 Universal (Publiek Domein).*
|
||||
*Dit boek maakt deel uit van het [prompts.chat](https://github.com/f/prompts.chat) project en is gelicentieerd onder CC0 1.0 Universal (Publiek Domein).*
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/>
|
||||
<div>
|
||||
<span className="block font-semibold text-lg mt-0!">Fatih Kadir Akın</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">Criador do Awesome ChatGPT Prompts (também conhecido como prompts.chat)</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">Criador do prompts.chat, GitHub Star</span>
|
||||
<span className="block text-sm text-muted-foreground m-0!">
|
||||
Desenvolvedor de software de Istambul, liderando Developer Relations na Teknasyon. Autor de livros sobre JavaScript e engenharia de prompts. Defensor do open-source especializado em tecnologias web e desenvolvimento assistido por IA.
|
||||
</span>
|
||||
|
||||
@@ -127,4 +127,4 @@ Pronto para transformar como você trabalha com IA? Vire a página e vamos come
|
||||
|
||||
---
|
||||
|
||||
*Este livro é parte do projeto [Awesome ChatGPT Prompts](https://github.com/f/prompts.chat) e está licenciado sob CC0 1.0 Universal (Domínio Público).*
|
||||
*Este livro é parte do projeto [prompts.chat](https://github.com/f/prompts.chat) e está licenciado sob CC0 1.0 Universal (Domínio Público).*
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/>
|
||||
<div>
|
||||
<span className="block font-semibold text-lg mt-0!">Fatih Kadir Akın</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">Создатель Awesome ChatGPT Prompts (также известного как prompts.chat)</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">Создатель prompts.chat, GitHub Star</span>
|
||||
<span className="block text-sm text-muted-foreground m-0!">
|
||||
Разработчик программного обеспечения из Стамбула, руководитель отдела Developer Relations в компании Teknasyon. Автор книг о JavaScript и промпт-инженерии. Сторонник открытого исходного кода, специализирующийся на веб-технологиях и разработке с использованием ИИ.
|
||||
</span>
|
||||
|
||||
@@ -127,4 +127,4 @@
|
||||
|
||||
---
|
||||
|
||||
*Эта книга является частью проекта [Awesome ChatGPT Prompts](https://github.com/f/prompts.chat) и распространяется под лицензией CC0 1.0 Universal (Public Domain).*
|
||||
*Эта книга является частью проекта [prompts.chat](https://github.com/f/prompts.chat) и распространяется под лицензией CC0 1.0 Universal (Public Domain).*
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/>
|
||||
<div>
|
||||
<span className="block font-semibold text-lg mt-0!">Fatih Kadir Akın</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">Awesome ChatGPT Prompts'un (prompts.chat) yaratıcısı</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">prompts.chat'in yaratıcısı, GitHub Star</span>
|
||||
<span className="block text-sm text-muted-foreground m-0!">
|
||||
İstanbullu yazılım geliştirici, Teknasyon'da Geliştirici İlişkileri liderliği yapıyor. JavaScript ve prompt mühendisliği üzerine kitapların yazarı. Web teknolojileri ve yapay zeka destekli geliştirme konularında uzmanlaşmış açık kaynak savunucusu.
|
||||
</span>
|
||||
|
||||
@@ -127,4 +127,4 @@ Yapay zeka ile çalışma şeklinizi dönüştürmeye hazır mısınız? Sayfay
|
||||
|
||||
---
|
||||
|
||||
*Bu kitap [Awesome ChatGPT Prompts](https://github.com/f/prompts.chat) projesinin bir parçasıdır ve CC0 1.0 Universal (Kamu Malı) altında lisanslanmıştır.*
|
||||
*Bu kitap [prompts.chat](https://github.com/f/prompts.chat) projesinin bir parçasıdır ve CC0 1.0 Universal (Kamu Malı) altında lisanslanmıştır.*
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/>
|
||||
<div>
|
||||
<span className="block font-semibold text-lg mt-0!">Fatih Kadir Akın</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">Awesome ChatGPT Prompts(又名 prompts.chat)创始人</span>
|
||||
<span className="block text-muted-foreground text-sm mb-3">prompts.chat 创始人,GitHub Star</span>
|
||||
<span className="block text-sm text-muted-foreground m-0!">
|
||||
来自伊斯坦布尔的软件开发者,目前在 Teknasyon 担任开发者关系负责人。著有多本关于 JavaScript 和提示工程的书籍。开源倡导者,专注于 Web 技术和 AI 辅助开发。
|
||||
</span>
|
||||
|
||||
@@ -127,4 +127,4 @@ AI 正在快速发展。今天有效的方法明天可能会被更好的方法
|
||||
|
||||
---
|
||||
|
||||
*本书是 [Awesome ChatGPT Prompts](https://github.com/f/prompts.chat) 项目的一部分,采用 CC0 1.0 通用(公共领域)许可证。*
|
||||
*本书是 [prompts.chat](https://github.com/f/prompts.chat) 项目的一部分,采用 CC0 1.0 通用(公共领域)许可证。*
|
||||
|
||||
Reference in New Issue
Block a user