ایده‌هات رو سریع‌تر از همیشه بساز

ترکیبی از سادگی، زیبایی و دقت؛ همه در قالب اجزای آماده که الهام‌بخش
شروع پروژه بعدی تو خواهند بود.

اجزای رابط کاربری
... ... ... ...

به جمع ما بپیوندید ♥️

عنوان پنجره

لطفاً پیش از ادامه، قوانین و خط‌مشی‌های زیر را مرور کنید:

  1. • استفاده مسئولانه از خدمات
  2. • رعایت حقوق سایر کاربران
  3. • پرهیز از محتوای غیرمجاز

با ادامه استفاده، موافقت خود را با این شرایط اعلام می‌کنید.

... ... ... ... ...

مورد اعتماد +60k توسعه‌دهنده

اطلاعات فروشنده تاریخ خرید مبلغ پرداختی
...
جلال بهرامی راد

۱۵ مرداد ۱۴۰۴

2,550,000 تومان موفق
...
نیکی فرهمند

۲۰ تیر ۱۴۰۴

1,700,000 تومان موفق
...
پرهام آذری

۱۴ تیر ۱۴۰۴

2,220,000 تومان نا موفق
...
رادوین فربد

۱۷ خرداد ۱۴۰۴

4,340,000 تومان موفق
...
ساینا مهرگان

۱۹ اردیبهشت ۱۴۰۴

3,740,000 تومان لغو شده
...

الگوهای آماده

دیدن همه

برای ساخت رابط‌های زیبا، تمیز و چشم‌نواز.

برای ساخت فروشگاه‌های آنلاین مدرن

نورا

رایگان
برای معرفی، رزومه، نمونه کار و وبلاگ

سیگنال‌های تازه

نکته‌های فنی، ایده‌ها و تجربه‌هایی از دنیای توسعه وب؛ شما هم می‌تونید دیدگاه‌ها و دانسته‌هاتون رو با جامعه SpaceDev به اشتراک بذارید.

اینم صفحه اصلیشه. اون آیکن کوچولوی خوشگلش رو توی Status Bar ببینید! :)

پیاده‌سازی همین نوتیفیکیشنش هم کلی ازم وقت گرفت. ولی وقتی به نتیجه نگاه می‌کنم، بیشتر از قبل از کاری که انجام دادم راضیم..

در حین توسعه، هر بخشی رو که پیاده‌سازی می‌کردم یا تغییر می‌دادم تا به چیزی که توی ذهنم ساخته بودم برسم، بیشتر مطمئن می‌شدم که دارم به یه چیز قشنگ می‌رسم.

ارزش کاری که انجام دادم رو وقتی بیشتر حس کردم که رفتم چندتا اپ مشابه رو از گوگل پلی نصب کردم و از نزدیک بررسی‌شون کردم :)

Orbit - Home

اینم یه تصویر از همین اپ Pomodoro که دارم میسازم، حالت تمام‌صفحه یکی از تایمرهاست چون میشه چندین تایمر مختلف ساخت و..

البته من تصویر رو دادم chatgpt که 1:1 در بیاره اینجا میذارم ارتفاع تصویر زیاد نباشه :)

Orbit Pomodoro

روز سوم از تجربه توسعه اپ موبایل :)

تا همین چند دقیقه پیش داشتم روی اپلیکیشن Pomodoroم کار می‌کردم. تقریباً دو روزه که درگیرشم و امروز بالاخره ازش بیلد گرفتم و روی گوشی خودم نصبش کردم تا تستش کنم :)

چند مورد به چشمم خورد که فردا فیکسشون می‌کنم. از طرفی باید یکم هم درباره فرایند بیلد گرفتن تحقیق کنم، چون خروجی apk حدود ۱۱۰ مگابایت شده که خب خیلی زیاده! :)

بعدش رفتم گوگل پلی و چندتا اپ مشابه نصب کردم تا ببینم بقیه چطور طراحی کردن و.. راستش فکر کنم بی‌دلیل نیست که حس می‌کنم بالاخره حوزه‌ای که واقعاً بهش علاقه دارم رو پیدا کردم. خروجی چیزی که ساختم واقعاً قشنگ شده و از نتیجه‌اش راضیم. :)

این اپ رو در اصل ساختم تا دستم بیاد فرایند توسعه یک اپلیکیشن موبایل از شروع تا بیلد گرفتن و نصب روی گوشی چطوریه و ممکنه با چه چالش‌هایی روبه‌رو بشم.

اگر همه‌چیز طبق برنامه پیش بره، امیدوارم تا آخر همین هفته برای دانلود منتشرش کنم.

فعلاً امکان انتشار تو گوگل پلی رو ندارم، ولی حتماً یه راهی برای انتشارش پیدا می‌کنم :)

دو سه روز پیش نصفه‌شب، در حالی که با گوشی مشغول چت با Claude بودم، ازش درباره React Native پرسیدم. اینکه یاد گرفتنش آسونه یا نه؟ میشه راحت باهاش شروع کرد؟ اصلاً می‌تونی یه اپ ساده رو قدم‌به‌قدم برام بسازی تا ببینم روند کار چطوریه؟

خلاصه Claude هم شروع کرد به توضیح دادن React Native و Expo و... راستش چیزی که دیدم خیلی ساده‌تر از چیزی بود که تصور می‌کردم.

فرداش با کمک Claude یه اپ ساده در حد Todo ساختیم و تجربه واقعاً جالبی بود.

تصمیم گرفتم فعلاً یه اپ ساده Pomodoro بسازم، ازش بیلد بگیرم و منتشرش کنم. بعدش هم برم سراغ یه ایده کاربردی‌تر برای مدیریت دخل‌وخرج و حساب‌وکتاب شخصی خودم.

اگه خوب از آب دربیاد، منتشرش می‌کنم تا شما هم اگه دوست داشتید ازش استفاده کنید. :)

در کل تجربه خیلی قشنگی بوده تا اینجا. احساس می‌کنم شاید بالاخره توی ۲۷ سالگی یه علاقه جدید و جدی توی خودم پیدا کردم.

البته هنوز نمی‌دونم با React Native و Expo تا کجا میشه پیش رفت...

حالا یه مشکلی که برام پیش اومده اینه که این‌قدر ایده اپلیکیشن ریخته توی سرم که دیگه نمی‌دونم از کدوم شروع کنم! :)))

به Claude و ChatGPT هم گفتم ایده بدید، اونا هم کلی پیشنهاد دادن. اصلاً یه وضعیه! 🤣

با شناختی که از خودم دارم، اگه هیچ اپی هم جایی منتشر نکنم، مطمئنم یه روزی میاد که همه اپ‌های روی گوشیم رو خودم نوشتم! 💯

دوست دارم برگردم به دورانی که مقاله‌ی «معرفی ۱۰ تا تم پرطرفدار VS Code» یکی از مقاله‌های خفن برنامه‌نویسی بود :))

بعضی وقتا لازم نیست برای تغییر یه چیز، کاربر وارد یه صفحه‌ی جدید بشه.

این ایده توی UX به Edit in Place معروفه؛ یعنی کاربر بتونه یه مقدار رو همون جایی که میبینه، ویرایش کنه.

مثلاً توی یه پنل مدیریت فروشگاه، لیست محصولات رو داریم و موجودی هر محصول هم کنار اون نمایش داده میشه.

به‌جای اینکه برای تغییر موجودی، کاربر وارد صفحه‌ی جزئیات محصول یا.. بشه، میشه با یک کلیک روی موجودی، همون‌جا اون رو به یه فیلد تبدیل کرد تا کاربر مقدار جدید رو وارد کنه.

کاربر برای یه تغییر ساده مجبور نیست صفحه رو ترک کنه، چیزی رو پیدا کنه و دوباره برگرده.

یجورایی لازم نیست برای یه کار ساده، کاربر رو از چند مرحله رد کنیم :)

توی TypeScript اگه بخوایم از یه Type استفاده کنیم ولی چندتا property اون رو نداشته باشیم، می‌تونیم از Omit استفاده کنیم.

مثلاً:

type User = {
  id: number
  name: string
  email: string
}

type CreateUser = Omit<User, 'id'>

اینجا CreateUser همه‌ی propertyهای User رو داره، به جز id.

یعنی به جای اینکه دوباره Type مربوط به ساخت User رو بنویسیم، از همون Type قبلی استفاده می‌کنیم و فقط چیزی که لازم نداریم رو حذف می‌کنیم.

اگه بیشتر از یه property رو هم نخواستیم، اسم propertyها رو با | از هم جدا می‌کنیم:

type CreateUser = Omit<User, 'id' | 'email'>

اینجا CreateUser فقط name رو داره.

برای Typeهایی که خیلی شبیه هم هستن، این می‌تونه جلوی کلی تکرار رو بگیره.

یه اصطلاح توی برنامه‌نویسی هست با عنوان Technical Debt یا بدهی فنی.

وقتی برای اینکه سریع‌تر به نتیجه برسیم، یه راه‌حل موقتی یا نه‌چندان اصولی انتخاب می‌کنیم و می‌ذاریم تمیز کردن یا بهتر کردنش رو برای بعد، در واقع داریم Technical Debt ایجاد می‌کنیم.

مثلاً یه بخشی از کد رو می‌دونیم میشه بهتر نوشت، ولی چون الان عجله داریم یا کارهایی با اولویت بالاتری وجود داره، همونطوری که هست نگهش می‌داریم و میگیم بعداً برمی‌گردیم سراغش.

این کار همیشه هم اشتباه نیست؛ گاهی یه تصمیم آگاهانه‌ست برای اینکه سریع‌تر جلو بریم. چیزی که مشکل‌ساز میشه اینه که این بدهی‌ها زیاد بشن و هیچ‌وقت براشون وقت نذاریم.

اون موقع همون کدی که قرار بود بعداً درستش کنیم می‌تونه تبدیل بشه به چیزی که توسعه و تغییر دادن پروژه رو سخت‌تر می‌کنه.

گاهی سریع‌تر جلو رفتن ارزش ایجاد کردن بدهی فنی رو داره؛ به شرطی که بعداً فراموشش نکنیم :)

وقتی تو ایران زندگی می‌کنی، Ctrl+C بخشی از فرایند ارسال پرامپته :)

برای پیاده‌سازی قابلیت چندزبانه توی Laravel می‌تونیم از پکیج laravel-translatable از Spatie استفاده کنیم.

ایده‌ی این پکیج اینه که برای فیلدهای چندزبانه، به‌جای اینکه برای هر زبان یه ستون جدا داشته باشیم، فقط یک ستون از نوع json داشته باشیم و ترجمه‌ها رو داخل همون ستون نگه داریم.

اول پکیج رو نصب می‌کنیم:

composer require spatie/laravel-translatable

مثلاً فرض کنیم مدل Product داریم و می‌خوایم name و description چندزبانه باشن. توی migration، این فیلدها رو به‌صورت json تعریف می‌کنیم:

$table->json('name');
$table->json('description');

بعد توی مدل مشخص می‌کنیم که این فیلدها قابل ترجمه هستن:

use Spatie\Translatable\HasTranslations;

class Product extends Model
{
    use HasTranslations;

    public array $translatable = [
        'name',
        'description',
    ];
}

حالا مقدار name می‌تونه چیزی شبیه این باشه:

{
    "fa": "محصول جدید",
    "en": "New product"
}

و می‌تونیم ترجمه‌ها رو با خود مدل مدیریت کنیم:

$product->setTranslation('name', 'fa', 'محصول جدید');
$product->setTranslation('name', 'en', 'New product');

$product->save();

اینجوری اضافه شدن زبان جدید هم به تغییر ساختار جدول نیاز نداره؛ فقط ترجمه‌ی زبان جدید به همون JSON اضافه می‌شه.

ایده‌ی اصلی پکیج هم دقیقاً همینه: چندزبانه بودن رو داخل خود فیلد مدیریت کنیم، نه با اضافه کردن ستون برای هر زبان.

🔗 مشاهده در GitHub

CANVAS

هر چیزی که تصور می‌کنی، می‌توانی بسازی

الهام بگیر، کد را بررسی کن و ایده‌های خودت را بساز؛ از مینی‌اپ‌ها و صفحات فرود گرفته تا رابط‌های کاربری و پیاده‌سازی چالش‌های واقعی.

spacedev.ir/canvas

کیت‌های رابط کاربری

دیدن همه

مجموعه‌ای از رابط های کاربری آماده برای شروع سریع طراحی و استفاده مستقیم در پروژه‌ها.

دانیا

برای طراحی وب‌سایت‌های آموزشی

رابط کاربری برنامه

چیدمان فرم‌ها، جدول‌ها، مودال‌ها — هرچیزی که برای ساخت اپلیکیشن‌های وب زیبا و ریسپانسیو نیاز دارید.

اجزای پایه

...

دکمه

3 کامپوننت

...

تصویر نمایه

3 کامپوننت

...

فهرست کشویی

1 کامپوننت

...

نشانک

2 کامپوننت

...

پنجره‌های محاوره‌ای

1 کامپوننت

چیدمان‌های داده‌ای

...

جدول

1 کامپوننت

...

نمای شبکه‌ای

1 کامپوننت

...

جریان فعالیتها

-

فرم ها

...

فیلدهای ورودی

2 کامپوننت

...

فیلد انتخاب

-

...

انتخاب چندگانه

1 کامپوننت

...

گزینه‌های انتخابی

1 کامپوننت

...

فیلد چندخطی

2 کامپوننت

...

روشن/خاموش

1 کامپوننت

...

فرم ورود

1 کامپوننت

ساختار صفحات

...

چیدمان‌ با نوار کناری

1 کامپوننت

...

چینش عمودی

-

الگوهای صفحه

...

چت

1 کامپوننت

...

صفحه فرود

1 کامپوننت

بازاریابی

بخش‌های شاخص، معرفی ویژگی‌ها و فرم‌های عضویت در خبرنامه و همه‌چیزی که برای ساخت وب‌سایت‌های بازاریابی زیبا نیاز داری.

اجزای صفحه

...

دعوت به اقدام

2 کامپوننت

تازه‌ترین نوشته‌ها

دیدن همه

تجربه‌ها، دیدگاه‌ها و نکات الهام‌بخشی که با شما به اشتراک می‌گذاریم.