מאז הפוסט הקודם שלי בסדרה ביטים רבים זרמו בסיבים, ובחמשת החודשים האחרונים אני עובדת על פרויקט חדש – אפליקציית ספרים.
העבודה על האפליקציה הציגה בפני הרבה אתגרים, והיום רציתי לדבר על אחד המעניינים; המעבר בין פלטפורמת AI מאוד מקיפה שמכוונת ל-No code development – לאירוח עצמאי לחלוטין.
אני אתחיל את הסיפור בהתחלה –
Pageful
לפני חמישה חודשים בערך התחלתי לעבוד על אפליקציית ספרים בשם Pageful, שתהיה אפליקצית הספרים מהחלומות שלי. דומה בבסיסה ל- Goodreads, אבל מכילה את כל הפיצ׳רים שתמיד רציתי ולא קיבלתי.
את האפליקציה התחלתי לבנות בפלפורמת No-Code, מה שאומר שבכל העיצוב היפה כמעט ולא נגעתי. כן בזבזתי כמות לא מבוטלת של זמן בלתאר לאייג׳נט את המרקם המדויק שאני רוצה שיהיה לכריכה ולמדפים של הספרים בספרייה שלי, אבל אני חושבת שזה השתלם.
הספריה:

תראו איזה יופי של מרקם!

אבל, בניגוד לפרונט היפה שהאייג׳נט בנה לי, מהבקאנד הייתי פחות מרוצה.
היה שם המון שכפול קוד, פונקציות כמעט זהות שעשו overfitting למקרה שימוש אחד ספציפי, והגרוע מכל שימוש מאוד לא יעיל ב-DB.
*הערת ביניים חשובה – ברור לי מאוד שמדובר פה באפקט גל-מאן. כיוון שההתמחות שלי היא בקאנד היה לי קל לראות את כל הבעיות בבקאנד. אני בטוחה שאם מפתחת פרונטאנד הייתה מסתכלת על הקוד שה-AI יצר היא הייתה מוצאת לא פחות בעיות.
ביליתי כמעט חודש בלנסות לשכתב את הבקאנד בתוך המעטפת של הפלטפורמה.
לדוגמא; אחת המלחמות הגדולות שלי עם האייג׳נט הייתה לנסות לשכנע אותו לעשות עדכונים לדאטבייס ב-Batch במקום לעדכן כל ספר בנפרד. אחרי המון התעסקות וחפירה בדוקומנטציה, הצלחתי להבין לבסוף שפשוט לא קיימת לו פונקציה של BatchUpdate ב-API. אני חושבת שזו הייתה הנקודה ששברה אותי. אז הגעתי למסקנה שהגעתי לקצת גבול היכולת המרשימה בהחלט של הפלטפורמה, והגיע הזמן להיפרד. העברתי את כל קוד הפרונטאנד לגיט שלי, והתחלתי במשימה של לכתוב לחלוטין מחדש את הבקאנד לפי שלבים.
המעבר
- יציאת מצריים
הדבר הראשון שעשיתי היה לקנות מנוי ל-Claude.ai. בעזרתו, וספציפית בעזרת התוסף המעולה שלו ל-VS הצלחתי תוך שבועיים בערך להגיע לפונקציונליות בסיסית. הישג מדהים בהתחשב בכך שלא היה לי כלום חוץ מפרונטאנד.
- מציאת בית חדש
בשלב השני פניתי לרכוש שירותי אירוח ב-Render. זה שירות ממש נוח ומומלץ עם הרבה מדריכים נחמדים, והיה קל להתחבר אליו. נתתי לו את כתובת הגיט של הפרויקט שלי, את שורת ההרצה של השרת, וכמה מפתחות API. משם הכל רץ חלק.
- טיפול בדאטה
אחד מהדברים שבאים בילד-אין בתוך מעטפת No-Code זה דאטבייס, עם המודלים וה-API הספציפיים שלו. המימוש הזה הוא כורח המציאות שמאפשר לאייג׳נט לשלוט בדאטה, אבל זה אומר שכל החלק הזה לא היה נגיש לי יותר. הייתי צריכה ליצור לעצמי מאפס את כל הדאטה שלי: טבלאות, מודלים, ו-API. לשם כך השתמשתי ב- Postgres DB שרץ ב-Render. בקוד השתמשתי בחבילת Prisma שהייתה מעטפת הדאטבייס הכי נוחה שניסיתי, ובאמת אפשרה לי להרים הכל מאפס בכמה שעות.
החלק הזה ללא ספק היה הכי קל וכיפי בשבילי. אני מאז ומתמיד עובדת בבקאנד וקרוב מאוד לדאטה, אז זה בדיוק העולם שאני מרגישה בו בנוח, בניגוד לפרונטאנד שמפחיד אותי מאוד.
- רישום לגוגל

עוד אחד מהפתרונות הנוחים שמגיעים עם המעטפת של No-Code, זה לוגין מובנה בעזרת חשבון גוגל. לכל אפליקציה שנבנית בפלטפורמה אפשר להיכנס ולהירשם עם חשבון גוגל. אחרי המעבר עכשיו הייתי צריכה לייצר מנגנון הרשמה חדש. בערך לעשר שניות חלפה לי בראש המחשבה לבנות סתם מנגנון לוגין עם יוזר וסיסמא, אבל מיד פסלתי אותה וניגשתי לבדוק איך ממשים לוגין בעזרת גוגל.
מסתבר שזה לא תהליך מסובך בכלל. רק הייתי צריכה לפתוח פרויקט Google Cloud ולייצר מפתח שבו אפשר יהיה להשתמש בלוגין. הקאצ׳ הוא שכל עוד לא עברתי את תהליך האישור שלהם אני מוגבלת ל-100 משתמשים באפליקציה. אבל זה לגמרי בסדר לשלב הבטא בו אני נמצאת.
- פיצ׳רים(!!)
אחרי שהגעתי לפונקציונליות בסיסית, הגיע הזמן להתחיל לעבוד ״באמת"; לשפר את כל הפיצ׳רים הקיימים, ולהכניס הרבה חדשים. זה כבר לא היה קל וכיף כל כך. יש אינסוף דברים שאני רוצה לעבוד עליהם, ושעות מוגבלות פה ושם שבהן יוצא לי לעשות את זה.
בינתיים התחלתי במימוש הדברים שהרגישו לי (ולבטאיסטים שלי) הכי גדולים ומשמעותיים.
עמוד בית
אחרי התייעצות עם צוות הפרודקט שלשמחתי חולק איתי בית, החלטתי על עמוד בית שמציג את שלושת החלקים הכי חשובים באפליקציית ספרים:
- רשימת הספרים שאני קוראת כרגע עם כפתור שמסמן שסיימתי לקרוא אותם.
- הספרים ברשימת הקריאה שלי עם כפתור שמאפשר לי להתחיל לקרוא אותם.
- חלון חיפוש למציאת ספרים נוספים.

עמוד הבית היה בעצם העמוד החדש הראשון שכתבתי אחרי המעבר, ופעם ראשונה שצללתי קצת יותר עמוק לעולם הפרונטאנד.
האתגר העיקרי שהתרכזתי בו הייתה בנייה של קונטקסט ספרים – כזה שמחזיק כמה רשימות ספרים בעבור המשתמשת המחוברת, ומעדכן אותם בזמן אמת, כדי שהאפליקציה לא תדרוש רענונים מהשרת כל הזמן.
זו הייתה פעם ראשונה שיצא לי לכתוב Context בריאקט ולהבין לעומק איך משתמשים בו, ואני ממש שמחה שיצא לי לעשות את זה.
מטאדאטה וכריכות
הדבר החשוב ביותר למען הנראות של האפליקציה הוא לטעמי כריכות הספרים. כריכות ספרים הן דבר כל כך יפה ומלא רגש. כריכה טובה ישר תחבר אותך לעולם של ספר שקראת, או תסקרן אותך לגבי ספר חדש.
לפי כך, ברור היה לי לחלוטין שאני הולכת לשאוף למאה אחוז כריכות ספרים מעודכנות באפליקציה שלי.
לאן הלכו הכריכות אתן שואלות? ובכן…
הרעיון הראשוני שלי לאפליקציה היה פשוט – המשתמשת תעביר לי רשימה של ספרים שהיא קראה, מיוצאת מ-Goodreads, ואני אטען את הרשימה לדאטבייס שלי, ואייצר עליו כל מיני סטטיסטיקות יפות.
הדבר הראשון ששמתי לב אליו מאוחר יותר כשרציתי להציג את הספרים שהמשתמשת קראה הוא שהרשימה שגודרידס מייצאת כוללת רק את שם הספר, וכמה פרטים בסיסיים כמו ISBN ושנת הוצאה, אבל לא את הדבר הכי חשוב – הכריכה. את הכריכה הייתי צריכה להשיג בעצמי.
בנסיון הראשון שלי השתמשתי ב-ISBN שהוא מזהה חד ערכי, לא רע, אבל רחוק ממושלם, וב-ISBNDB, שהוא API שמחזיר מידע על ספרים לפי ה-ISBN שלהם. ובכן, מהר גיליתי שמספרי ISBN עולים כסף, ולכן קיימים רק אצל חלק מהספרים, ושהם משתנים בין גרסאות ופורמטים.
בנסיון השני שלי עברתי להשתמש בשמות הספרים אבל אבוי, שמות חוזרים על עצמם! או שאין התאמה מושלמת! ספרים יכולים להופיע עם מקפים וסוגריים או בלי, סדרות יכולות להיות עם מספר נומרי או טקסטואלי. הצרה הכי גדולה כמובן הייתה שלא היו לי רק ספרים באנגלית במאגר, אלא גם הרבה ספרים בעברית וברוסית.
אחרי הרבה איטרציות וטסטים מימשתי התאמה שהיא פאזי וממושקלת לפי שם ספר ושם סופר. עבדתי על העניין הספציפי הזה במשך כמה שבועות עד שהגעתי לגרסה הסבירה שיש לי כרגע – אני משתמשת בשלושה API-ים שונים – Google Books API, Ineternet Archive, וה-API של הספרייה הלאומית הישראלית (כל הכבוד להם!). יש לי כריכות לבערך 90% מהספרים, והחלטתי שבינתיים אני חייבת להמשיך לפיצ׳רים אחרים ולא להיתקע. אני בטוחה שאני אחזור להתאבסס על זה אחר כך.
עוד פיצ׳רים חשובים
- חיפוש טקסטואלי חזק.
- הסטטיסטיקות היפות והצבעוניות שהיו הסיבה המרכזית שרציתי לבנות את האפליקציה הזו מלכתחילה.
- משחקים!



העבודה על הפרויקט הזה היא מתישה, אבל כיפית ומרתקת, ואני כל כך שמחה שאני עושה אותה. זו באמת הפעם הראשונה שיוצא לי לעבוד על מוצר באופן שהוא כל כך Full Stack, וזה הרבה דברים שהם מחוץ לאזור הנוחות שלי ושלא יצא לי מעולם להתעסק איתם בעבודה היומיומית שלי.
אז צפו לעדכונים (אבל לא בנשימה עצורה, כי בואו) ותחזיקו לי אצבעות.
אפליקציית ספריה זה משהו שאני חולם לבנות שנים.
שילוב בין גודרידס לסימניה.
היו הרבה בעיות בשלב התכנון, הבעיה העיקרית שלי באמת הייתה שאין דאטהבייס לספרים בעברית. מאז הם כנראה הוציאו אחד, אבל הוא בתשלום ולא הצלחתי לחפש בו עם דאנאקוד.
אשמח להצטרף לבטאיסטים, אם זה עוד אפשרי
כמו שהלל אמר
1. מתי אנחנו זוכים להשתמש?
2. האם זה יהיה בקוד פתוח?
3. גם אני לא הצלחתי למצוא מאגר ISBN
4. אפליקציית ספרים נוספת מגניבה שצריך ליצור לה אלטרנטיבה היא AnyBooks, היא מתעדת את מדף הספרים הנוכחי ומאפשרת להשאיל בין חברים. הפיצ'ר הכי חזק שם הוא שקל מאוד להוסיף ספרים, פשוט סורקים את הISBN שלהם אחד אחרי השני ברצף.
את יכולה בבקשה לתאר מה חסר בcalibre-web שגרם לך לרצות לכתוב אפליקציה בעצמך?