Rutz — מאמן ריצה עם AI
מאמן ריצה שנבנה עם שותף. הקוד עושה את החישובים; ה-AI מסביר אותם.
הדגמה: ריצה שהסתיימה מגיעה כנתוני Garmin גולמיים, הקוד מנקד אותה (ניקוד, כפילויות, עומס אימון, תבניות), ה-AI מסביר בשפה פשוטה, ומאיה הרצה מחליטה מה לעשות עם העצה.
המוצר
Rutz היא אפליקציית iOS שהופכת נתוני Garmin גולמיים של רץ לאימון שאפשר לפעול לפיו. זה מוצר שאני בונה עם שותף, לא פרויקט לקוח, והוא כאן כי הוא מראה את אותו עיקרון שאני מוכר לעסקים: מה שאפשר לחשב מחשבים בקוד, AI נכנס רק איפה שצריך פרשנות, ובן אדם נשאר בשליטה.
שאלת התכנון
אפליקציית אימון יכולה לשלוח כל ריצה למודל שפה ולקבל חזרה פסקה בטוחה בעצמה. אבל אז אין שתי תשובות זהות, אף אחד לא יכול לבדוק את ההיגיון, והרץ סומך על טון במקום על מספר. השאלה הייתה איך לתת לאפליקציה שיקול דעת אמיתי בלי לתת למודל להמציא.
מה נבנה
- הקוד עושה את החישובים
- ניקוד, ניקוי כפילויות, חישובי עומס אימון וזיהוי דפוסים רצים כקוד דטרמיניסטי. אותה ריצה תמיד מקבלת את אותם מספרים.
- ה-AI מפרש את התוצאות
- המודל מקבל תוצאות מחושבות, לא נתונים גולמיים, ומסביר מה הן אומרות לרץ: ניתוח מעמיק אחרי ריצה, וצ׳אט קל יותר.
- צינור נתונים מ-Garmin
- פעילות ה-Garmin של כל רץ זורמת דרך חיבור משלו אל Postgres, ומשם קוד הניתוח אוסף אותה.
- אפליקציית iOS ושרת
- אפליקציית SwiftUI עם Apple Sign-In, שרת FastAPI עם SQL פרמטרי פשוט על Postgres, פרוס על Railway.
- כלי פנימי לניתוח ריצות
- כלי פיתוח שמריץ מחדש ריצות עם פרמטרים שונים בזמן אמת, כדי לראות איך שינוי בניקוד מתנהג לפני שמשחררים אותו.
החלק שלי
אני השותף הטכני ב-Rutz. הארכיטקטורה ותכנון ה-AI שלי, כולל איפה עובר הקו בין מה שרץ כקוד למה שמודל רשאי לפרש. את רוב הקוד כתב השותף שלי, וזה ראוי להיאמר בפשטות.
תוצאות מבוססות
- AI נכנס רק איפה שצריך פרשנות
- כל מספר באפליקציה ניתן לשחזור מהקוד
- הרץ נשאר בשליטה על מה לעשות עם העצה
כלים
SwiftUI, FastAPI, Postgres, Garmin, Claude, Gemini, Railway