نُه حوزهی کار که دههها کنار هم پیش رفتهاند باید به سایتی تبدیل میشدند که به روایت خود او وفادار بماند، گشتن در آن راحت باشد و به فارسی پیدا شود.
نقش
تنها طراح و توسعهدهنده: معماری اطلاعات، برند و زبان طراحی، مدل محتوا، ساخت با Payload و Next.js با کمک AI، و زیرساخت داخل کشور.
نتیجه
سایت از ۸ شهریور ۱۴۰۵ روی خط است. صفحههای فارسی نشانیهای خودشان را دارند و خزندهها به آنها میرسند، و رزرو از ۲۱ شهریور باز است. ابزار تحلیل بازدید هنوز نصب نشده و این کمبود صراحتاً ثبت شده است.
شکل 01
شکل 01سایت فارسی روی گوشی: نُه حوزهی کار به شکل ردیفهای خطکشیشده، صفحهی شعر و تقویم رزرو شمسی.
01زمینه
کارنامهای که در یک تیتر نمیگنجد
آرش رضوانی نویسنده، شاعر، معلم، عکاس و ماجراجوست. به روایت خودش، نزدیک به ده عنوان کتاب و بیش از صد شعر منتشر کرده، پانزده سال مربی دوچرخهسواری بوده، بیش از بیستوپنج سال کوهنوردی کرده و بیش از سی سال عکاسی. سفارش کار، یک سایت شخصی و یک دفتر یادداشت برای همهی اینها بود.
فارسی زبان او و خوانندگانش است، پس زبان پیشفرض سایت فارسی است و انگلیسی کنارش میآید. بر پایهی روایت خود او یک سایت نشر ساختم: برای هر بخش از کارش یک صفحه، قفسهای از کتابها که هرکدام صفحهی خودش را دارد، دفتر یادداشت، ترانههایش، جستوجو و تقویمی برای رزرو یک تماس. همهی اینها از یک پنل مدیریت فارسی ویرایش میشود و سایت روی سروری در ایران میزبانی میشود.
/en/experience: صفحهی انگلیسی، با حروف بزرگ لاتین.
/fa/experience: همان صفحه به فارسی، که هیچوقت فاصلهگذاری حروف نمیگیرد.
شکل 02یک صفحه، دو نشانی: هر زبان سندی مستقل است، نه ترجمهای که با یک کوکی عوض شود.
02مسئله
درستی، ساختار و دیده شدن
مسئلهی اول درستی بود. وقتی زندگی کسی اینقدر گوناگون است، آدم وسوسه میشود عددها را بزرگتر بنویسد، و پروژه حالت بدتر را هم دیده بود: نخستین محتوایی که طراحی بر پایهی آن ساخته شد آدم دیگری را توصیف میکرد، و روایت مکتوب خود او تقریباً همهی واقعیتهای آن محتوا را رد میکرد.
مسئلهی دوم ساختار بود. حوزههای کار او دهههاست کنار هم پیش رفتهاند: نوشتن، آموزش موتورسواری به مهارتجو و به مربی، مربیگری دوچرخهسواری، عکاسی، خوشنویسی، کوه، جاده، راهنمایی گردشگری و امدادگری؛ و هیچکدام جای دیگری را نگرفته است. یک صفحهی معرفی این همه را در خود جا نمیدهد، و صفحههایی که هرکدام بخواهند همه را خلاصه کنند، آخر حرف هم را تکرار میکنند.
مسئلهی سوم دیده شدن بود. برای نویسندهای که کتابها و خوانندگانش فارسیاند، صفحههای فارسی باید در نشانیهای خودشان پیدا شوند. سایتی که فارسی را خوب نمایش میدهد اما آن را به هیچ خزندهی موتور جستوجویی نمیرساند، در تنها کاری که برایش ساخته شده شکست خورده است.
03محدودیتها
یک سرور کوچک، پشت شبکهای فیلترشده
سایت روی یک سرور در ایران اجرا میشود که دو هسته و کمتر از ۴ گیگابایت حافظه دارد و سرور Git و ایمیل سایت هم روی آن است. از این سرور، Docker Hub، رجیستری کانتینر گوگل و Quay همه پاسخ 403 میدهند و یوتیوب هم فیلتر است؛ یعنی خود سرور به ویدیوهایی که صفحهی موسیقی سایت فهرست میکند دسترسی ندارد.
ساخت نسخهها هم روی همین سرور انجام میشود و حدود هشت دقیقه هر دو هسته را درگیر میکند. اندازهگیری ۱۱ شهریور نشان داد زمان پاسخ سایت از ۵ ثانیه به ۳۷ ثانیه رسید و بعد تا پایان ساخت هیچ پاسخی نیامد. CI runner هیچوقت نصب نشد، پس قبل از اینکه تغییری روی سایت برود، چیزی آن را بررسی نمیکند. هرکدام از این محدودیتها یکی از تصمیمهایی را شکل داد که در ادامه آمده است.
04نقش من
یک طراح و توسعهدهنده، یک نویسنده
سایت را بهتنهایی طراحی کردم و ساختم، بر پایهی روایت مکتوب خود آرش و پیامهایی که دربارهی هر حوزهی کارش فرستاد. کد از قالب وبسایت Payload شروع شد و سایت را با کمک AI ساختم؛ Claude در ۹۳ کامیت از ۹۷ کامیت بهعنوان همکار ثبت شده است.
مسئولیت با من
↳معماری اطلاعات: اینکه کدام صفحه کدام بخش از روایت او را نگه دارد
↳برند و زبان طراحی مکتوب
↳مدل محتوا: ۸ مجموعه، ۴ بخش سراسری و ۲۱ بلوک صفحه، که ۱۶تایشان برای همین سایت نوشته شد
↳ساخت سایت با Payload و Next.js، به دو زبان
↳سامانهی رزرو و تقویمش
↳زیرساخت داخل کشور، دفتر استقرار و دفتر عملیات محتوا
↳کارگردانی هنری تصویرها: ۳۷ تصویر تولیدشده، با چهرهای برگرفته از عکسهای او
مسئولیت مشترک
—
همکاری
↳آرش: زندگینامهاش، ده پیامش دربارهی حوزههای کار، جلد کتابها و عکسهایش
هر عدد در سایت به حرف خود او برمیگردد و هر جا سایت با یک پیشنویس جور درنیاید، حرف آخر را زندگینامه میزند. امکان پیشنویس، پیشنمایش زنده، زمانبندی انتشار، نمایهی جستوجو و فرمساز همراه قالب آمدند؛ ساختار، قاعدهها و تصمیمها کار من است.
05منبعها
فقط آنچه خودش گفته است
سایت برای معرفی او فقط دو منبع دارد: متنی که خودش دربارهی خودش نوشته، و ده پیامی که ۲۰ شهریور فرستاد، یکی برای هر حوزه. فایل زندگینامه هر دو را نگه میدارد و متن فارسی در آن مرجع است. جدولی از عددهای مستند هم دارد که هر عدد را همانطور ثبت میکند که خودش گفته، با همان ≈ و + خودش. وقتی یک فایل محتوای قدیمیتر با روایت او جور درنمیآمد، این ناهمخوانی در خود زندگینامه ثبت شد و حرف او ماند.
همان فایل فهرست چیزهایی را هم دارد که هنوز وجود ندارند: عنوان بقیهی کتابها، متن شعرها و گواهینامههایش. قاعده برای همهی اینها یکی است: هیچ چیزی نمایش داده نمیشود. برای همین جای خالیها با متن موقت پر نمیشوند و یک جملهی روشن آنها را نشان میدهد. صفحهی کتابها شش عنوان از نزدیک به ده عنوان را فهرست کرده و همین را میگوید، صفحهی شعر چهار قالب را توضیح میدهد و میگوید هنوز شعری اینجا نیست، و صفحهی آثار میگوید خوشنویسیها و عکسها هنوز آنلاین نیستند.
در همان فایل جدولی هست که نشان میدهد هر قطعه از حرفهای او حالا در کدام صفحه و کدام بلوک آمده است، تا در ویرایشهای بعدی یک قطعه بیآنکه کسی متوجه شود در دو جا قرار نگیرد.
سایت ۸ شهریور عمومی شد، اما محتوایش از ۱۲ شهریور درست شد؛ روزی که روایت خود او در همهی صفحهها جای فایل قدیمیتر را گرفت.
«هیچ چیز در اینجا استنباطی نیست، و هیچ عددی بیرون از این جدول نباید در سایت بیاید.»
شکل 03صفحهی کتابها کمبودهای خودش را صریح میگوید: نزدیک به ده عنوان کتاب نوشته، ترجمه و منتشر شده، که شش عنوانش فهرست شده و بقیه هنوز نه.
/fa/poetry: بخش شعرها، که منتظر شعرهای کامل با نام قالبشان است، نه چند سطر گزیده.
06ساختار
هر صفحه یک کار، هر واقعیت یک جا
به هر صفحه یک کار دادم. صفحهی تجربه نمای کلی است: نُه رشته را نشان میدهد که هرکدام به صفحهای پیوند میخورد که آن را کامل روایت میکند، و تنها نوار عددهای سایت را هم دارد. صفحههای آموزش، جاده، «همان نگاه» و شعر هرکدام یک بخش از روایت او را به زبان خودش نگه میدارند. کتابها، یادداشتها و موسیقی مجموعههایی با صفحهی فهرستاند. جستوجو و تماس از همهی صفحهها در دسترساند.
چیزی که این صفحهها را کنار هم نگه میدارد همان اصل زبان طراحی است، این بار برای محتوا: هر صفحه هر چیز را یک بار میگوید و هر واقعیت فقط یک جا دارد. نخستین صفحهای که بازبینی شد آثار بود و در آن شش مطلب سه بار آمده بود: عددها یک بار در سرصفحه و دوباره در نوار آمار، یک جمله یک بار در نقلقول و دوباره در یک فهرست. برای هر واقعیت یک جای اصلی تعیین شد و نسخههای دیگر حذف شدند؛ هیچ جملهای از نو نوشته نشد. در کل، بازبینی چهارده تکرار در پنج صفحه پیدا کرد و همهی اصلاحها حذف بودند.
پیوند جای تکرار را گرفت. صفحههای آموزش و جاده هرکدام کتاب همموضوع خودشان را نشان میدهند و به صفحهی آن کتاب پیوند میدهند، و آموزش، کتابها، موسیقی و تجربه با نواری تمام میشوند که به صفحهی تماس میبرد. وقتی هر واقعیت جایش را در صفحههای داخلی پیدا کرد، صفحهی خانه دیگر حرفی از خودش نداشت؛ پس به فهرست سایت تبدیل شد: کتابها، شش راه ورود، نقشهی ایران، تازهترین ترانهها و آخرین یادداشتها.
دو صفحهی قدیمیتر هنوز هماهنگ نشدهاند. آثار و تجربه پیش از جاده و «همان نگاه» ساخته شدند، و شش پیوند از نُه پیوند صفحهی تجربه هنوز به آثار میرود. آثار حالا فقط یک فهرست کوتاه و نوار «هنوز آنلاین نیست» دارد.
01صفحهی خانه فهرست سایت است. نشانی بیپیشوند به فارسی میرود و هر مسیر زیر /fa و /en وجود دارد.
02درباره، و تجربه: نمای کلی هر نُه رشته، با تنها نوار عددهای سایت.
03آموزش، جاده، «همان نگاه» و شعر: هرکدام یک بخش از روایت او.
04آموزش و جاده کتاب همموضوع خودشان را پیوند میدهند.
05کتابها و یادداشتها: یک فهرست و یک صفحه برای هر رکورد؛ یادداشتها با شش دسته فیلتر میشوند.
07رویکرد
یک اصل که هر صفحه با آن سنجیده شد
سایت نخست با یک سیستم برند نشریهوار روی خط رفت، با پالتی برگرفته از عکسهای خود آرش: جوهری گرم، کهربایی، کاغذ، مهی خنک و کبالتی. کنتراست هر جفت رنگ سنجیده شد. کهربایی روی کاغذ به ۲٫۱:۱ رسید، پس کهربایی هیچوقت رنگ متن روی سفید نمیشود، و «فقط یک کهربایی در هر نما» قاعده شد.
سه روز بعد، زبان طراحی در یک جمله نوشته شد: «هیچ خطی بیپایان نیست». هر خط فقط به سه شکل میتواند تمام شود: روی یک دیواره، روی خطی دیگر یا روی تغییر زمینه. هر پایان دیگری نقص به حساب میآید، نه سبک، و همهی صفحهها از نو ساخته و با این قاعده سنجیده شدند.
این قاعده خیلی از جزئیاتی را که معمولاً سرشان بحث میشود از پیش حل کرد. دیوارهها روی لبهی ستون محتوا قرار گرفتند، پس هر خطی که یک بلوک میکشد روی آنها تمام میشود، بیآنکه بلوک از وجود دیوارهها خبر داشته باشد. نواری که رنگ زمینهی خودش را دارد هیچ خطی نمیکشد، چون تغییر رنگ خودش لبه است. همهی خطها یک ضخامت دارند، ۱٫۵ پیکسل، و هیچ ناحیهای گوشهی گرد ندارد. فیلد فرم یک خط زیرین است که فوکوس را با تغییر رنگ نشان میدهد. کنتراست آن در تم روشن ۶٫۱۸:۱ و در تم تیره ۷٫۴۴:۱ اندازهگیری شد و حداقل لازم ۳:۱ است. فاصلهگذاری حروف هم هیچوقت روی فارسی اعمال نمیشود: همهی مقدارهای tracking، حتی مقدارهای پیشفرض خود Tailwind، برای فارسی صفر شدهاند. قبلاً همین مقدارها اتصال حرفها را در همهی تیترهای فارسی به هم فشرده میکردند.
معیار یک لبه این نیست که مرزی آنجا باشد؛ معیار این است که خواننده ببیند خط در همان نقطه تمام میشود. پرترهی صفحهی خانه با اختلاف ۶۴ پیکسل در این آزمون رد شد، برای همین ستونش حالا خط خودش را میکشد.
از یک قالب تا سایتی زنده و دوزبانه
01
ساخت پایهقالب وبسایت Payload درون Next.js، پنل مدیریت فارسی و خط لولهی استقرار، از ۳ شهریور
02
سیستم برندپالتی سنجیده از عکسهایش؛ روی خط از ۸ شهریور
01خطهای ردیف روی خط ستون تمام میشوند: خطی روی خطی دیگر میایستد.
02خط ستون روی خط نوار زیر فهرست تمام میشود.
03دیوارهها جایی میایستند که زمینه از کاغذ به جوهر میرسد: تغییر زمینه خودش لبه است.
04هر عدد در نوار از جدول مستند آمده، با همان ≈ و + خودش.
08تصویرها
چهرهای برگرفته از عکسهای خودش
سایت با کتابخانهی رسانهای خالی راه افتاد. آرشیو او ۵۹ تصویر داشت و هیچکدام مرجع روشنی از چهرهاش نبود: در ۴۲ تصویر اولی که بررسی کردم، در همهی قابهای نزدیک سرش زیر کلاه، کلاه لبهدار یا کلاه ایمنی بود و معمولاً عینک آفتابی هم زده بود، و در قابهایی که کلاه نداشت، چهرهاش آنقدر کوچک بود که جزئیاتش دیده نمیشد. برای همین تصویرها را با یک مدل تولید تصویر و بر پایهی همان عکسها کارگردانی کردم.
نخستین تصویرهای سایت از دو شیت مرجع اولیه ساخته شدند. یک هفته بعد نُه شیت چرخش لباس ساختم، یکی برای هر سبک لباسی که در عکسهایش بارها تکرار میشود. هرکدام به عکسهای مرجع مشخصی برمیگردد و از نُه زاویهی ثابت دیده میشود. همین شیتها مرجع پیوستگی هفده مطالعهی ادیتوریال شدند. برای همهی تصویرها قاعدههای برند تعیین شده بود: پالت، گوشههای قائم، حداکثر یک کهربایی، و بدون متن، نشان یا عنوان کتاب ساختگی. یازده تصویر سایت به این قاعدهها پایبندند؛ چند مطالعه از حد یک کهربایی فراتر رفتهاند.
هر جا عکس واقعی جواب بدهد، اولویت با عکس واقعی است: پرترهی صفحهی درباره و آواتار برشهایی از یک عکس خود او هستند. اینجا گفته میشود کدام تصویرها تولیدشدهاند، اما در سایت خود او هنوز برچسبی ندارند و این کار هنوز مانده است.
شکل 09«شش راه»، فهرست حوزههای کار او در صفحهی خانه: هر حوزه زیر یکی از کارتهای تصویری تولیدشده مینشیند.
09نشر
رکوردها، و هر جایی که هرکدام به آن میرسد
کتابها، یادداشتها و ترانهها رکوردند، نه بخشی از یک صفحه؛ چون رکورد میتواند نشانی خودش، اطلاعات متای خودش و جایی در جستوجو داشته باشد. منتشر کردن یک رکورد بهتنهایی آن را در دسترس نمیکند، پس هر نوع رکورد به جاهایی وصل شده که خواننده یا خزنده از آنها وارد میشود.
هر کتاب یک صفحه در هر زبان دارد، یک ردیف در نقشهی سایت کتابها و در جستوجو، دادهی ساختاریافتهی Book که نقش او را همانطور که روی جلد چاپ شده نام میبرد، و تصویری برای اشتراکگذاری که از جلدش بریده شده است. هر یادداشت یک صفحه در هر زبان دارد، نقشهی سایت یادداشتها، یک خوراک RSS برای هر زبان، دادهی ساختاریافتهی Article و فیلتر دستهبندی؛ شش دسته همان نام حوزههای کار او را دارند. ترانه صفحهی خودش را ندارد: صفحهی موسیقی و نوار صفحهی خانه از مجموعهی ویدیوها میخوانند و آن را به شکل فهرستی از VideoObjectها توصیف میکنند.
و در کنار همهی اینها: نشانی مرجع (canonical)، جفتهای hreflang با x-default روی فارسی، سه نقشهی سایت، گراف WebSite و Person در همهی صفحهها، و کارتهای اشتراکگذاری؛ هر کتاب جلد خودش را نشان میدهد و بقیهی صفحهها کارت سایت را.
یادداشتها هنوز با قاعدهی خود سایت جور نیستند. از ۲۱ یادداشت، بیستتا در ۱۹ شهریور یکجا ساخته شدند، به زبان اولشخص او، به نام من، و با تاریخهایی که تا دی ۱۴۰۴ عقب میروند؛ یکی دیگر از محتوای قدیمیتر مانده است. تا وقتی نوشتههای خود او جای اینها را نگیرد، سامانه کار میکند اما محتوایش نه.
01یک رکورد در مجموعهی کتابها، که یک بار در پنل مدیریت ویرایش میشود.
02یک صفحه به فارسی و یکی به انگلیسی، که hreflang آنها را جفت میکند.
03یک کارت در قفسهی کتابها، و یک قاب در صفحهی همموضوعش.
04یک ردیف در نقشهی سایت کتابها و در جستوجوی سایت، به هر دو زبان.
05
/fa/posts: همهی تاریخها شمسی و با ارقام فارسی.
10تصمیمهای کلیدی
شش تصمیمی که پابرجا ماند
هیچکدام از سر سلیقه نبود؛ هرکدام را مخاطب، منابع محتوا یا شبکه تحمیل کرد.
01
نشانی مستقل برای هر زبان
نسخهی اول فارسی زبان را با کوکی انتخاب میکرد: یک نشانی، دو خروجی. خزندهی موتور جستوجو کوکی ندارد، پس هیچ صفحهی ترجمهشدهای نشانی قابل دسترسی نداشت و هیچ برچسب hreflang هم نمیشد ساخت. حالا انگلیسی زیر /en است و فارسی زیر /fa، و نشانی بیپیشوند به زبانی میرود که خواننده آخرین بار دیده، یا به فارسی.
گزینههای دیگر
یک نشانی، با انتخاب زبان از راه کوکی
بدهبستان
هر پیوند داخلی باید پیشوندش را همراه داشته باشد، و تعویض زبان باید با بارگذاری کامل صفحه انجام شود.
02
محافظت از رزروها با ایندکس پایگاه داده، نه با هوک
دو تماس تأییدشده هرگز نمیتوانند زمان شروع یکسانی داشته باشند. گزینههای ایندکس خود Payload نمیتوانند بگویند «یکتا فقط در میان ردیفهای تأییدشده»، پس برنامه هنگام راهاندازی یک ایندکس یکتای جزئی میسازد و رزروهای عمومی همه از یک مسیر واحد در API میگذرند. در آزمون رقابت همزمان: یک 201، یک 409، یک ردیف.
گزینههای دیگر
بررسی تکراری بودن در یک هوک ذخیره
بدهبستان
اگر ساخت ایندکس شکست بخورد، سایت بی این تضمین به کارش ادامه میدهد، پس گزارش راهاندازی را باید خواند.
شواهد
ربعساعتهای آزاد یک روز به وقت تهران؛ در نسخهی انگلیسی، تاریخ میلادی زیر تاریخ شمسی میآید.
11راهحل
از خواندن تا پرسیدن
جستوجو یک نمایه دارد که از صفحهها، یادداشتها و کتابها ساخته میشود. از ۲۲ شهریور این نمایه به زبان خود صفحه خوانده میشود، پس یادداشتهای فارسی با عنوان فارسی برمیگردند. نتیجهها حداکثر دوازدهتاست و صفحههای نتیجه از موتورهای جستوجو پنهان میمانند، چون وگرنه هر پرسشی یک صفحهی کممحتوا میساخت.
فرم تماس نواری از فیلدهای زیرخطدار است، با یک فیلد پنهان که رباتها را میگیرد. سرور ایمیل به سایت وصل است و اگر تنظیماتش نباشد، کانتینر اصلاً بالا نمیآید. این سختگیری جلوی یک خطای بیصدا را میگیرد: فرمی که از بازدیدکننده تشکر میکند و به هیچکس خبر نمیدهد. اما برای خود فرم در نسخهی تولید هیچ اعلانی تنظیم نشده، پس پیامها فعلاً در پنل مدیریت منتظر میمانند؛ همان خطای بیصدا، یک لایه بالاتر.
رزرو یک تماس مرحلههای زیر را دارد. همهی قاعدههای زمانی در تنظیماتی است که از پنل مدیریت ویرایش میشود: ساعتهای کاری، استراحتها، طول هر نوبت، فاصلهی میان تماسها، حداقل زمان پیش از رزرو، روزهای بسته و کلیدی که کل رزرو را میبندد. پس تغییر ساعتها هیچوقت به استقرار نیاز ندارد. رزروها هنوز ایمیلی نمیفرستند؛ پنل مدیریت با تماسهای تأییدشدهی پیش رو باز میشود.
جستوجو فقط نیمهکاره درست شده است. کتابها و صفحهها در جستوجوی فارسی هنوز با عنوان انگلیسی برمیگردند، و خلاصه و دستهی زیر هر نتیجه فقط به یک زبان ذخیره میشود؛ برای همین جستوجوی انگلیسی خلاصههای فارسی نشان میدهد و آنچه در توضیح انگلیسی آمده پیدا نمیشود.
/fa/search برای «مربی»: یادداشتها با عنوان فارسی برمیگردند؛ کتاب هنوز عنوان انگلیسیاش را دارد.
رزرو یک تماس، در پنج مرحله
01
انتخاب روزماهی شمسی که با شنبه شروع میشود؛ روزهای گذشته، جمعهها و روزهای پر غیرفعالاند
02
انتخاب ساعتربعساعتهای آزاد به وقت تهران، با ساعت محلی بازدیدکننده در کنارشان
12ادارهی سایت
کار روزمره، بدون استقرار تازه
پنل مدیریت بهطور پیشفرض فارسی است و خودش راستبهچپ میشود؛ نشان صفحهی ورود امضای اوست که جای لوگوی Payload را گرفته. پیشنویس، ذخیرهی خودکار، پیشنمایش زنده و زمانبندی انتشار همراه قالب آمدند، اما زمانبندی تا ۱۷ شهریور هیچ کاری نمیکرد: پنل کاری را در صف میگذاشت ولی چیزی آن را اجرا نمیکرد؛ پس یادداشت زمانبندیشده هیچوقت منتشر نمیشد. حالا برنامهای درون کانتینر هر دقیقه صف را خالی میکند.
از ۱۲ شهریور محتوا در زمان اجرا تغییر میکند، نه در کد. دفتر عملیات محتوا از ۲۰ تا ۲۷ شهریور پانزده نوشتن و یک بازگردانی ثبت کرده است. نوشتنها شرح حوزههای کار، تنظیمات رزرو، کارتهای صفحهی خانه، صفحهی موسیقی و ترانههایش را تغییر دادند. بازگردانی برای نُه کارت صفحهی درباره بود که در مرورگرهای بدون WebGL صفحهی فارسی را از کار میانداختند؛ این کارتها در کمتر از یک ساعت از راه API برداشته شدند و همان روز، بعد از اصلاح کد، برگشتند.
هر نوشتن همین مراحل را طی میکند، و هر ردیف دفتر بررسی خودش را همراه دارد.
عاملهای AI میتوانند محتوا را از راه MCP بخوانند اما نمیتوانند آن را بنویسند؛ باز کردن این دسترسی خودش تغییری در کد است که باید آگاهانه انجام شود.
یک تغییر محتوا، از اول تا آخر
01
دستهبندیمحتواست، تنظیم است، باید یک بار قابل ویرایش شود، یا کد است
02
پشتیبانسند به هر دو زبان، پیش از نوشتن
13نتایج
سایت روی خط است و کمبودهایش هم ثبت شده
سایت از ۸ شهریور ۱۴۰۵ در arashrezvani.me روی خط است و از ۲۱ شهریور رزرو میپذیرد. آنچه هنوز باز مانده هم ثبت شده است: هیچ ابزار تحلیلی از هیچ نوعی در کار نیست، پس آماری از بازدید وجود ندارد؛ CI runner نصب نشده، پس هر تغییر بدون lint و بررسی نوعها به سایت میرسد؛ نه فرم تماس ایمیلی میفرستد و نه رزروها، و هر دو در پنل مدیریت منتظر میمانند؛ جستوجو فقط نیمهکاره دوزبانه است؛ یادداشتها نوشتهی خود او نیستند؛ و تصویرهای تولیدشده در سایتش برچسبی ندارند.
تکرارهای پیداشده و حذفشده
۱۴
ممیزی قاعدهی «هر چیز یک بار» در پنج صفحه؛ هر اصلاح یک حذف بود.
نتیجهی اندازهگیریشده · ممیزی اجرای قاعده در زبان طراحی
آزمونهای موفق در آخرین دروازهی انتشار
۳۰۷
در کنار بررسی نوعها، lint، ساخت نسخهی تولید و یک آزمون سلامت سریع پیش از ارسال.
فارسی پیشفرض است و هر دو زبان در hreflang و نقشههای سایت آمدهاند.
خروجی تحویلشده
دفتر استقراری که شکستهایش را نگه میدارد
۱۸ اجرای تولید ثبت شده که پنجتایش شکست خورده، در کنار دفتری جداگانه از هر نوشتن محتوا و هر بازگردانی.
خروجی تحویلشده
آنچه تحویل شد
↳رزرو شمسی
↳یک نشانی برای هر زبان
14آنچه یاد گرفتم
آنچه نگه میدارم، و آنچه دردسر شد
01
زبان طراحی را در یک جمله بنویس
جملهی «هیچ خطی بیپایان نیست» بحثها را بدون جلسهی دیگری تمام کرد، چون هر اختلافی به یک پرسش میرسید: آیا این خط به جایی ختم میشود؟
02
سایت دوزبانه تا هر زبانش نشانی خودش را نداشته باشد، دوزبانه نیست
طرح کوکی همهی آزمونهایی را که یک آدم میتوانست انجام دهد پشت سر گذاشت، اما برای مهمترین بازدیدکنندهی سایت یک نویسنده کاملاً شکست خورد: خزندهی موتور جستوجو.
03
بهبودی که نتواند بیخطر شکست بخورد، بهبود نیست
یک جلوهی WebGL که با اسکرول ظاهر میشد، در مرورگرهای بدون WebGL خطا داد و یک صفحهی کامل فارسی را با پیام خطا جایگزین کرد. این جلوه پشت یک بررسی توانایی مرورگر و یک مرز خطا برگشت که اگر چیزی خراب شود، همان تصویر ساده را نشان میدهد.
04
قاعده باید به چیزی هم برسد که یکجا اضافه میشود
همهی صفحهها یکییکی با روایت او سنجیده شدند، اما یادداشتها نه: یکجا اضافه شدند. این تنها بخشی از سایت است که از آزمون خود سایت رد میشود، و اولین چیزی است که باید جایگزین شود.
/en/work: هیچکدام از خوشنویسیها و عکسها هنوز آنلاین نیست، و صفحه همین را میگوید.
شکل 04جای خالی به شکل یک جملهی روشن: هر بخش میگوید چه چیزی کم است، بهجای اینکه فضا را پر کند.
06موسیقی از مجموعهی ویدیوها میخواند؛ صفحهی خانه سه ترانهی تازه را نشان میدهد.
07جستوجو صفحهها، یادداشتها و کتابها را میخواند؛ تماس فرم و تقویم رزرو را دارد.
08آثار پیش از جاده و «همان نگاه» ساخته شد؛ جایش در ساختار هنوز روشن نیست.
شکل 05مسیرهای سایت، آنطور که ۵ مهر ۱۴۰۵ شمرده شدند. هر مسیر دو بار وجود دارد: زیر /fa و زیر /en.
شکل 06پایینتر در صفحهی خانه، که فهرست سایت است: نقشهی کشور که به صفحهی تجربه میرسد، و شش یادداشت تازه. جلد کتابها و فریمهای ترانهها که میان این دو هستند متعلق به خود او هستند، برای همین در این تصویر نیامدهاند.
03
روایت خود اوزبان طراحی نوشته شد و همهی صفحهها بر پایهی زندگینامهاش از نو ساخته شدند؛ محتوا از ۱۲ شهریور درست است
04
شرح حوزههاده پیامش ۲۰ شهریور در سایت قرار گرفت، هرکدام فقط در یک جا
05
نشانی مستقل و رزروهر زبان با پیشوند خودش، و تقویمی شمسی برای تماس، از ۲۱ شهریور
06
کتابها با صفحهی خودشانیک صفحه برای هر کتاب، و جستوجویی که به زبان صفحه خوانده میشود، ۲۲ شهریور
07
موسیقیترانههای کانال به شکل کارتهایی که با کلیک بارگذاری میشوند، ۲۷ شهریور
شکل 07
صفحهی تجربه به فارسی: دیوارهها، خطهای ردیف و یک خط ستون، که با نوار اعداد به رنگ جوهر تمام میشود.
شکل 08تصویرها در جای خودشان: صفحهی خانهی سایت با سرصفحهی سهپنجرهای باز میشود، به انگلیسی و به فارسی؛ در نسخهی فارسی کل صفحه از راست به چپ قرینه میشود.
شکل 10همان صفحهی خانه روی گوشی، به فارسی: جملهی آغازین، سرصفحه، شش کارت دوتادوتا در هر ردیف، و یادداشتها.
شکل 11نُه شیت چرخش لباس، یکی برای هر سبکی که میپوشد: هنرمند ادبی، مسافر آسوده، مدرس رسمی، خلاق شهری، موتورسوار کلاسیک، مربی موتورسواری، ماجراجوی جاده، مسافر میدانی و لباس کار امدادی.
شکل 12آنچه به سایت رسید: تصویر سرصفحهی خانه و یک سرصفحهی کلاژی قدیمیتر، شش کارت بخشها، نوار پایانی که بعداً برداشته شد اما برش ۱۲۰۰×۶۳۰ آن هنوز تصویر اشتراکگذاری است، و دو جایگزین موقت در صفحهی درباره تا وقتی از یک تابلوی واقعی نقاشیخط عکس گرفته شود و یکی از عکسهای خود او برسد.
شکل 13هفده مطالعهی ادیتوریال، هرکدام ترکیبی تازه در یکی از نُه پوشش: کلاژ، چاپ سیلک، پرتره در نور سخت، طبیعت بیجان.
دادهی ساختاریافتهی Book، با نقش او همانطور که روی جلد آمده: تألیف، تألیف مشترک یا ترجمه.
06تصویری ۱۲۰۰×۶۳۰ برای اشتراکگذاری، بریده از جلد کتاب.
شکل 14یک کتاب و همهی جاهایی که در سایت دیده میشود. یادداشتها همین الگو را دارند و برای هر زبان یک خوراک RSS هم اضافه میکنند؛ ترانهها صفحهی جداگانهای ندارند و صفحهی موسیقی آنها را میخواند.
/en/posts: همان فهرست، با تاریخ میلادی.
شکل 15فهرست یادداشتها به هر دو زبان: شش دسته به نام حوزههای کار او، دوازده یادداشت در هر صفحه.
03
بارگذاری ویدیو فقط وقتی خواسته شود
در ایران، پخشکنندهی یوتیوب بدون VPN کار نمیکند. هر ترانه کارتی است که با کلیک بارگذاری میشود و پوستر و عنوانش از فضای ذخیرهسازی خود سایت میآید، پس کارت بی VPN هم کامل است و تا پیش از کلیک هیچ پخشکنندهای بارگذاری نمیشود.
گزینههای دیگر
جاسازی پخشکننده در صفحه
بدهبستان
پوسترها فعلاً همان فریمهای خود یوتیوباند که در سایت ذخیره شدهاند، و دستی جایگزین میشوند.
04
نگه داشتن کل زیرساخت داخل ایران
سرور از Docker Hub پاسخ 403 میگیرد: پنج استقرار در مرحلهی دریافت ایمیج پایه شکست خوردند تا اینکه ایمیج از یک آینهی ایرانی رسید. فضای ذخیرهسازی، Git، سکوی استقرار و ایمیل همه داخل کشور اجرا میشوند.
گزینههای دیگر
رجیستریهای عمومی و Git میزبانیشده
بدهبستان
بار بیشتری روی یک سرور کوچک میافتد؛ یکی از ساختها حافظه را تمام کرد و سرور Git را هم با خودش از کار انداخت.
05
هر کتاب یک رکورد با صفحهی خودش
فهرستی که درون بلوک یک صفحه باشد نمیتواند به کتاب نشانی، اطلاعات متای خودش یا هویتی بدهد که صفحههای دیگر به آن اشاره کنند. کتاب بهعنوان رکورد در قفسه، در صفحهی همموضوعش، در جستوجو و در نشانی خودش دیده میشود؛ پس کسی که «مربی شو» را جستوجو میکند مستقیم به خود کتاب میرسد. روی هیچکدام از جلدها سال یا ناشر نیامده، برای همین ترتیب قفسه دستی است و هر کارت همان نقشی را نشان میدهد که روی جلد چاپ شده: تألیف، تألیف مشترک یا ترجمه.
گزینههای دیگر
شش کتاب به شکل ردیفهایی درون صفحهی کتابها
بدهبستان
ترتیب خودکار ندارد، و بخش جزئیات تا وقتی سال یا ناشر معلوم نشود خالی میماند.
06
محتوا داده است، نه نسخهی تازه
از ۱۲ شهریور، محتوا در پایگاه داده است، نه در مخزن کد. هر تغییر اول دستهبندی میشود: محتوا و تنظیمات از راه API نوشته میشوند، هر چیزی که باز هم تغییر خواهد کرد یک بار قابل ویرایش میشود، و فقط ساختار داده، رفتار و زیرساخت به شکل نسخهی تازه منتشر میشوند. ترانهها، صفحهی موسیقی، ساعتهای رزرو و منو همه بیهیچ استقراری تغییر کردند.
گزینههای دیگر
ویرایش محتوا در فایلهای seed و استقرار آن
بدهبستان
متن زنده دیگر در مخزن نیست، پس برای هر نوشتن باید دستی پشتیبان گرفت، آن را مقایسه کرد و ثبتش کرد.
/en/search برای «coach»: عنوانها انگلیسیاند، با خلاصه و دستهای فارسی زیر هرکدام.
شکل 16یک جستوجو به دو زبان روی گوشی، ثبتشده در ۵ مهر ۱۴۰۵: آنچه اصلاح زبان درست کرد و آنچه نکرد.
03
مشخصاتنام، تلفن و ایمیل؛ شماره بررسی میشود و یک فیلد پنهان رباتها را میگیرد
04
بازبینییک صفحه برای تأیید، پیش از آنکه چیزی ثبت شود
05
ثبتپاسخ 201 و یک رسید؛ اگر نوبت در این فاصله گرفته شده باشد پاسخ 409 است و تقویم بقیهی نوبتها را پیشنهاد میکند
شکل 17روی گوشی، به فارسی: ربعساعتهای آزاد روز انتخابشده، و بعد مشخصات.
03
نوشتناول انگلیسی، بعد فارسی، با حفظ شناسهی همهی ردیفها
04
بازخوانیمقایسه با پشتیبان: فقط فیلدهای موردنظر حق تغییر دارند
05
ثبتیک ردیف در دفتر عملیات محتوا، همراه با بررسیاش