arielshemesh1999@gmail.com · ישראל
← כל הפרויקטים

Prompt Engineer

בניתי כלי local-first שהופך רעיון גולמי לפרומפט מדויק דרך ארבע שאלות מנחות - Role, Context, Output, Constraints. מאחורי הממשק: React 19 שעוטף state machine של vanilla JS, Supabase עם 7 טבלאות מנורמלות ו-RLS, ושרשרת LLM שמתחילה ב-Ollama מקומי ונופלת לבונה תבניות דטרמיניסטי - כך שהמוצר עובד גם בלי שום setup.

7
טבלאות מנורמלות
43
בדיקות ירוקות
4
שאלות מנחות
מאחורי הקלעים

מרעיון גולמי לפרומפט מדויק

רעיון גולמיהמשתמש מתחיל מתיאור חופשי של מה שהוא צריך
4 שאלות מנחותראיון מובנה שממפה תפקיד, הקשר, פלט ומגבלות
LLM ChainOllama מקומי, אחריו proxy בצד שרת, ואם אין - תבנית דטרמיניסטית
PersistenceSupabase עם RLS למשתמשים מחוברים, localStorage לכל השאר
Exportשמירה, תיוג, המרת פורמט וייצוא של הפרומפט המוכן

כל שלב ענן מוגן - כשרכיב לא זמין, הזרימה נופלת לנתיב המקומי בלי לשבור כלום.

המערכת במספרים
שורות state machine3.5k
בדיקות Vitest43
טבלאות Supabase7

החלק החכם הוא חוזה השדות: במקום שה-AI יחזיר טקסט חופשי שדורש רכיב תצוגה חדש, הוא מחויב להחזיר בדיוק את אותם חמישה שדות מובנים שהבונה הדטרמיניסטי מייצר, והתוצאה מתמזגת לתוך ה-snapshot הקיים של הכרטיס. פלט AI ופלט תבנית הופכים לאותו טיפוס נתונים, אז עריכה, המרת פורמט, שמירה וייצוא עובדים על שניהם בלי branch נוסף. אותו עיקרון חוזר בשכבת הענן: הלוגיקה היא IIFE של vanilla JS שלא יכול לעשות import, אז React טוען את ה-ES modules של Supabase ו-Ollama וחושף אותם על bridge גלובלי לפני שהוא מזריק את הסקריפט. כל קריאת ענן מוגנת בדגל שמפיל אותה ל-localStorage, כך שהענן, השרת וה-AI כולם אופציונליים - והנתיב הדטרמיניסטי הוא האינווריאנט שתמיד עובד.

מה זה

Prompt Engineer הוא כלי local-first שהופך רעיון גולמי לפרומפט מדויק. במקום להתחיל מדף ריק, המערכת מובילה את המשתמש דרך ארבע שאלות מנחות - Role, Context, Output, Constraints - ובסוף מייצרת פרומפט מובנה שאפשר לשמור, לתייג, להמיר בין פורמטים ולייצא.

הפרויקט התחיל כפרויקט גמר של קורס פיתוח מוצרי AI, אבל הוא מוצר חי: רץ ב-prompt-engineer-v1.vercel.app עם backend אמיתי, ועובד גם בלי שום הגדרה מוקדמת.

הבעיה

רוב האנשים כותבים פרומפטים כגוש טקסט אחד - תפקיד, הקשר, פורמט ומגבלות מעורבבים בלי הפרדה - ומקבלים תוצאות לא עקביות. הידע איך בונים פרומפט טוב קיים, אבל אין תהליך שמוביל מהרעיון הגולמי לניסוח מדויק צעד אחר צעד.

הצבתי גם דרישה נוקשה של פרטיות: הכלי צריך לעבוד בלי חשבון, בלי מפתח API ובלי לשלוח טקסט לענן כברירת מחדל. הדרישה הזאת הכתיבה ארכיטקטורה שבה הענן הוא שדרוג אופציונלי, לא תלות.

מה בניתי

shell של React 19 עם Vite ו-Tailwind 4, שעוטף state machine של vanilla JS באורך כ-3.5 אלף שורות שמנהל את כל זרימת השיחה. React אחראי על הטעינה ועל ה-bridge לענן, והלוגיקה עצמה נשארת framework-free.

מאחור יש Supabase עם 7 טבלאות מנורמלות - users, conversations, messages, prompts, settings, tags, prompt_tags - עם RLS ברמת הבעלים על כולן, כך שכל משתמש רואה רק את הנתונים שלו. trigger בהרשמה יוצר אוטומטית את שורת הפרופיל וההגדרות.

שכבת ה-AI בנויה כשרשרת: קודם Ollama מקומי, אחר כך proxy בצד שרת, ואם אף אחד מהם לא זמין - בונה תבניות דטרמיניסטי שעובד תמיד. כל נתיב הענן מגובה ב-localStorage מלא, אז המוצר עובד out of the box בלי שום setup.

איך זה עובד

המשתמש מתחיל מרעיון חופשי, והמערכת מריצה ראיון קצר של ארבע שאלות שממפות את הכוונה לשדות מובנים. בסיום, שרשרת ה-LLM מחדדת את הפרומפט - וקלט בעברית מקבל scaffold מלא בעברית, כולל כותרות ומבנה.

הטריק המרכזי: ה-AI מחזיר בדיוק את אותם חמישה שדות מובנים שהתבנית מייצרת, והם מתמזגים לתוך ה-snapshot של הכרטיס. כך כל נתיב קיים - עריכה בקליק, המרת פורמט, שמירה, ייצוא - מרנדר את פלט ה-AI בלי שכתוב של רכיב התצוגה.

הסנכרון לענן דחוי ונעול לשיחה ספציפית, וה-hydration ממזג טיוטות מקומיות במקום לדרוס אותן - כך ש-reload באמצע זרימה או מעבר למכשיר שני לא מאבדים כלום. מפתחות ה-API חיים בצד השרת בלבד ולעולם לא מגיעים ל-bundle.

התוצאה

המוצר חי עם AI אמיתי בצד השרת, ו-43 בדיקות Vitest עוברות ירוק. את המסלול המלא אימתתי מקצה לקצה בהרצת דפדפן headless - כל הזרימה בעברית, עד כרטיס שחודד על ידי ה-AI - ובנוסף round-trip חי מול ה-API בפרודקשן.

הרצתי על המערכת audit אדברסרי בארבעה ממדים - הקשר שיחה, שיפור AI, איכות תבנית ופרסיסטנטיות - שהעלה 11 ממצאים מאומתים, וכולם תוקנו.

והכי חשוב, ההבטחה המקורית נשמרה: בלי חשבון ובלי מפתח, הכלי עדיין מפיק פרומפט מובנה ושלם דרך הבונה הדטרמיניסטי. הענן משדרג, אף פעם לא חוסם.