הוא ישב על פלטפורמה ששכרתי ולא זז. היום זו תיקייה על המחשב שלי, שמתעדכנת תוך כדי העבודה, לא פעם בחמש שנים.
2026.
לאתר הישן אין כפתור ייצוא. לכן ההוראה הראשונה שנתתי לסוכן הייתה:
"תוריד את כל האתר שלי ב-Adobe Portfolio, כל העמודים, כל התמונות, כל הנכסים, לתיקייה מסודרת ונקייה על המחשב שלי."

שורות בסקריפט שעבר על 19 עמודי פרויקט ועל ארבעה עמודים כלליים. האתר הישן מסתיר כל תמונה עד שגוללים אליה, ולכן חיפשנו אותה בשלושה מקומות שונים בקוד של העמוד.
for img in soup.find_all("img"):
for attr in ("src", "data-src", "data-image"):
src = img.get(attr, "").strip()
if src and not src.startswith("data:"):
image_urls.add(urljoin(base, src))פלטפורמות שבהן ישבו הסרטונים: פייסבוק, יוטיוב ווימאו. כל סרטון ירד בכלי נפרד, ומה שנכשל נשמר כקישור.
result = subprocess.run(
[
"python3", "-m", "yt_dlp",
"--no-playlist",
"-o", str(dest_dir / "%(id)s.%(ext)s"),
url,
],סרטונים ואבטיפוסים שאי אפשר להוריד בכלל: 17 בנגן של Adobe בעמוד הפוסט פרודקשן, ושניים ב-Adobe XD. הם נשמרו כקישור, ונכנסו לאתר החדש כחלון מוטמע.
elif "adobe.io" in src or "xd.adobe.com" in src:
reference_urls.add(src)עשר דקות אחרי ההתחלה: 19 תיקיות פרויקט ו-99 קבצים. iCount חזר ריק, כי האתר הישן נעל אותו בסיסמה, ואותו בנינו אחר כך בנפרד.
{
"slug": "leadershipaticount",
"title": "Password Protected Page",
"url": "https://www.meravish.com/leadershipaticount",
"media_count": 0
}
משקל GIF אחד בפרויקט המושן. בפרויקט הזה לבד ישבו 22 קובצי GIF, ו-53MB שכל מבקר באתר מוריד.
26M 539a8e1f-c10c-41ff-836f-3879b7565906_rw_1200.gif
3.5M a4ca336f-fa48-410e-bbf7-98848459e70c_rw_600.gif
3.2M 2c11e7f0-510c-4d6a-9119-740ee2947faf_rw_1200.gif1,044 שורות בסקריפט שבנה מהתיקייה את האתר: עמוד בית, 18 עמודי פרויקט ועמוד עבודה איתי. כל פרויקט ביקש משהו אחר: iCount נבנה בנפרד, ותיאור בעברית הוחלף בתיאור מהרשימה.
def build_project(slug, year, title, desc_short):
if slug == "leadershipaticount":
build_icount_page()
return
...
# If tagline contains Hebrew characters, fall back to the PROJECTS-list desc
if any('\u0590' <= c <= '\u05ff' for c in (tagline or "")):
tagline = desc_shortבגודל הזה האתר הישן חתם את התמונות המוקטנות, והן יצאו מטושטשות. ניסינו להגדיל, ובסוף ויתרנו ולקחנו לכל פרויקט את התמונה המקורית מהתיקייה.
def hires_thumb_url(url):
"""Upgrade MyPortfolio CDN thumbnail from x32 → x800."""
import re
return re.sub(r'x32\.(png|gif|jpg)', r'x800.\1', url)
...
return False # Always use first_local_media fallback insteadאחרי שהאתר עלה, Netlify השעה אותו על עודף תעבורה. Vercel נתקע בהתחברות של הכלי שלו, בגרסה 52. רק בניסיון השלישי, ב-Cloudflare, הוא נשאר באוויר, והכתובת עברה אליו.
registrar GoDaddynameservers dora.ns.cloudflare.com odin.ns.cloudflare.comA record Netlify (deleted)$ npx wrangler@latest deploy --name meravishועדיין meravish.com הציג דף שגיאה. Netlify החזיק את הכתובת שלי במקום שלא יכולתי לראות. להסיר את הדומיין לא הספיק, ורק מחיקת החשבון שם שחררה אותה.
ובקצרה, ככה זה הרגיש:
אחריו באו מכשולים, עיכובים, וחודשים של ליטוש.
אז הקייס לא נכתב בדיעבד. הוא נשלף ממה שכבר קרה.
ספר כללים אחד, שכל עמוד חדש קורא לפני שהוא נבנה.
שישה מוצרים ואתרים עלו ב־2026. הפורטפוליו הוא מה שנשאר אחרי.
העבודות שלך עוברות איתך.
Every project from your current site, rebuilt as a site you own in a few minutes. Change anything with AI. Your files, your domain, no subscription.
מהיום הראשון כיוונתי את הסוכן לשם: נייר, דיו חציל, אלמוג אחד וקו שמצויר ביד. Promtfolio נולד לתוך אותה משפחה.
איך נבנה המנוע שמצייר ←






חמש עשרה דקות כדי להבין מה צריך, ולראות אם יש לי איך לעזור. בלי מצגת ובלי התחייבות.