محمدعلی

Mohammadali

دانشجوی مهندسی کامپیوتر و توسعه‌دهنده‌ی نرم‌افزارم. نرم‌افزاری می‌سازم که تماماً در مرورگر شما اجرا می‌شود — بی‌سروری که لازم باشد به آن اعتماد کنید، بی‌حساب کاربری، بی‌آنکه چیزی جایی فرستاده شود — بیشتر با TypeScript، React و Rust.

در یک نگاه
نقشدانشجو و توسعه‌دهنده
ابزارTypeScript · Rust · React · Svelte
تمرکزنرم‌افزاری که سرور نمی‌خواهد
الانساختن Sayso

پروژه‌ها

هر چه ساخته‌ام

یک قاعده در همه‌شان جاری است: اگر چیزی می‌تواند در مرورگر شما اجرا شود، باید همان‌جا اجرا شود. هرکدام پایین‌تر توضیح داده شده — به چه باور دارد، چطور ساخته شده، و معماری‌اش، بازشده.

نامنوعوضعیتسال
TEXTOR.EXEپیام‌رسانمنتشرشده۲۰۲۶
TWOFA.EXEاحرازگرمنتشرشده۲۰۲۶
ELEET.EXEگنجه‌ی رمزنویسیمنتشرشده۲۰۲۶
SAYSO.EXEصندوق رمزشدهدر دست ساخت۲۰۲۶
TSEQ.EXEسامانه‌ی کمّیمنتشرنشده۲۰۲۶
PAPYRA.EXEواژه‌پردازمنتشرنشده۲۰۲۶
MAMMADALI.HTMهمین سایتمنتشرشده۲۰۲۶

۷ پروژه · ۰ پشت‌صحنههمه‌ی مخزن‌ها در گیت‌هاب

پیام‌رسانمنتشرشده۲۰۲۶

Textor

پیام‌رسانی خصوصی که چیزی جز یک صفحه‌ی وب نیست.

فلسفه

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

معماری

هر پیام یک پیام خصوصی NIP-17 است: با NIP-44 مهر می‌شود، بعد زیر کلیدی یک‌بارمصرف کادوپیچ (NIP-59) می‌شود — با زمان مبهم‌شده و اندازه‌ی پرشده — و به چند رله‌ی عمومی Nostr می‌رود که فقط نقش صندوق‌پستی رمزشده را دارند. وقتی هر دو طرف آنلاین باشند، یک کانال مستقیم WebRTC پیام را فوراً می‌رساند. درون مرورگر، رابط کاربری هرگز مستقیم به شبکه یا پایگاه‌داده دست نمی‌زند: از استور، موتور و گاوصندوق می‌گذرد، و هسته زیر آزمون در Node اجرا می‌شود.

شناسنامه
پشت‌صحنهندارد
هویت۱۲ کلمه (NIP-06)
حجم نصبکمتر از ۸۰۰ کیلوبایت
مجوزAGPL-3.0
  • TypeScript
  • React
  • Nostr
  • WebRTC
  • MLS
  • PWA
  1. React UIصفحه‌ها · دوزبانه · راست‌به‌چپ
  2. Zustand storeنمایی از وضعیت برای رابط
  3. Messenger engineرسید · تلاش دوباره · حذف تکراری
  4. VaultXChaCha20 · شیارهای کلید
  5. Nostr transportمجموعه‌ی رله · WebRTC
  6. Public relaysفقط متن رمزشده
معماری، از بالا به پایین

احرازگرمنتشرشده۲۰۲۶

TwoFA

کدهای دومرحله‌ای، دقیق تا ثانیه و فقط برای خودتان.

فلسفه

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

معماری

رمزنگاری پاکتی: یک کلید تصادفی ۲۵۶بیتی و غیرقابل‌استخراج گاوصندوق را با AES-256-GCM مهر می‌کند، و هر روش باز کردن — عبارت عبور از راه PBKDF2 تنظیم‌شده، یا کلید عبور از راه PRF در WebAuthn — آن کلید را جداگانه می‌پیچد، و همه‌ی پارامترها در AAD گره خورده‌اند تا نشود فضای ذخیره را به نسخه‌ی ضعیف‌تر برگرداند. کدها طبق RFC 4226 و 6238 روی WebCrypto ساخته می‌شوند و با هر ۲۸ بردار آزمون منتشرشده سنجیده می‌شوند. حتی رمزگذار و رمزگشای QR هم درون خود مخزن نوشته شده‌اند.

شناسنامه
وابستگی زمان اجرا۰
حجم بسته≈ ۳۶ کیلوبایت JS فشرده
آزمون‌ها۱۱۰
مجوزMIT
  • TypeScript
  • WebCrypto
  • WebAuthn
  • PWA
  1. Signal UIبدون فریم‌ورک
  2. Vaultپاکت AES-256-GCM
  3. Key wrappersPBKDF2 · کلید عبور
  4. OTP engineRFC 4226 / 6238
  5. QR codecرید–سولومون، درون مخزن
  6. Service workerپیش‌ذخیره‌ی آفلاین
معماری، از بالا به پایین

گنجه‌ی رمزنویسیمنتشرشده۲۰۲۶

Eleet

گنجه‌ای از نوشتن پنهانی، از اسکیتالی تا SHA-3.

فلسفه

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

معماری

موتوری مستقل از فریم‌ورک هر ابزار را به‌شکل یک شِمای گزینه‌ی نوع‌دار به‌اضافه‌ی چند تابع خالص تعریف می‌کند، و رابط کاربری فرم‌هایش را از همان شِما می‌سازد. موتور در یک Web Worker ماژولی، پشت یک RPC نوع‌دار و لغوپذیر اجرا می‌شود، پس رابط هیچ‌وقت قفل نمی‌کند، حتی وسط یک رمزگشایی خودکار عمیق. پیوندهای اشتراک وضعیت را فشرده در بخش # نشانی نگه می‌دارند، که مرورگر هرگز برای میزبان نمی‌فرستد.

شناسنامه
ابزارها۵۵
پرونده‌ها۱۴، به دو زبان
آزمون‌ها۳۲۹
مجوزMIT
  • TypeScript
  • Svelte 5
  • Web Workers
  • WebCrypto
  1. Svelte 5 UIفرم‌های ساخته‌شده از شِما
  2. Sessions + routerوضعیت در بخش # نشانی
  3. Engine RPCنوع‌دار · لغوپذیر
  4. Web Worker۵۰ تبدیل · ۴ تحلیلگر
  5. Language modelرمزگشای پرتوی دوحرفی
  6. Service workerپوسته‌ی آفلاین
معماری، از بالا به پایین

صندوق رمزشدهدر دست ساخت۲۰۲۶

Sayso

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

فلسفه

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

معماری

هسته با Rust نوشته شده و به WebAssembly ترجمه می‌شود. پاکت‌ها با X-Wing — ترکیب ML-KEM-768 و X25519 — و ChaCha20-Poly1305 مهر می‌شوند، چون یک پاکت مهرشده ممکن است آن‌قدر در فضای عمومی بماند که به مهاجمی کوانتومی برسد. تحویل به‌ترتیب سه لایه را امتحان می‌کند: اتصال زنده‌ی QUIC رمزشده از راه iroh، یک میانگیر عمومیِ ذخیره و ارسال، و در آخر پیکی در GitHub Actions که متن رمزشده را در یک گاوصندوق خصوصی می‌نویسد.

شناسنامه
وضعیتگام ۱ از ۴
تبادل کلیدX-Wing (ML-KEM-768 + X25519)
هستهRust → WebAssembly
بازبینی امنیتیهنوز نه
  • Rust
  • WebAssembly
  • iroh
  • Post-quantum
  1. Web pageنمای فرستنده · داشبورد مالک
  2. sayso-wasmرابط سمت جاوااسکریپت
  3. sayso-wireپروتکل روی iroh
  4. sayso-coreقالب‌ها · رمزنگاری
  5. Three tiersسیم زنده · میانگیر · پیک
  6. Data branchمانیفست امضاشده · دوره‌ها
معماری، از بالا به پایین

سامانه‌ی کمّیمنتشرنشده۲۰۲۶

TSEQ

سامانه‌ی معاملاتی کمّی برای بورس تهران که تماماً در مرورگر اجرا می‌شود.

فلسفه

«سرور» فقط میزبان چند فایل ایستاست. دریافت داده، مهندسی ویژگی، آموزش، آزمون گذشته‌نگر و پیش‌بینی همه سمت کاربر انجام می‌شوند — بدون پشت‌صحنه، بدون مرحله‌ی ساخت، بدون npm — و اگر تنها اسکریپت بیرونی‌اش بار نشود، به‌جای از کار افتادن به مدل‌های کلاسیک برمی‌گردد. ارزیابی با معیار یک تحلیلگر کمّی سنجیده می‌شود: تقسیم‌بندی پیش‌رونده‌ی پالایش‌شده با فاصله‌ی ایمنی، و توقف زودهنگام بر پایه‌ی همبستگی رتبه‌ای، نه تابع زیان.

معماری

داده‌ی بازار از یک شبکه‌ی پراکسی پشتیبان‌دار وارد پیکره‌ای در IndexedDB می‌شود که با بارگذاری دوباره از بین نمی‌رود. حدود هفتاد ویژگی مقطعی برای هر نماد به یک شبکه‌ی عصبی چندسری مشترک می‌رسد که با TensorFlow.js در یک Web Worker روی GPU خودتان آموزش می‌بیند و بازده نسبی را پیش‌بینی می‌کند، نه مطلق، با سرهایی برای جهت و چندک‌ها. بعد یک راهزن زمینه‌ای LinUCB وزن را میان دوازده سبد آلفا جابه‌جا می‌کند و از بازده واقعی آن‌ها پاداش می‌گیرد.

شناسنامه
وضعیتمنتشرنشده
مدلچندسری مشترک، TF.js
ویژگی‌هاحدود ۷۰ برای هر نماد
مرحله‌ی ساختندارد
  • JavaScript
  • TensorFlow.js
  • Web Workers
  • IndexedDB
  1. Canvas chartsموتوری دست‌نویس
  2. LinUCB allocator۱۲ سبد آلفا
  3. Multi-head netTF.js در Web Worker
  4. Feature panelحدود ۷۰ برای هر نماد
  5. IndexedDB corpusبا بارگذاری دوباره نمی‌پرد
  6. Proxy fabricرله‌های پشتیبان‌دار
معماری، از بالا به پایین

واژه‌پردازمنتشرنشده۲۰۲۶

Papyra

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

فلسفه

بیشتر کارهای «بنویس و .docx بگیر» نه به مجموعه‌ی اداری دسکتاپ نیاز دارند و نه به حساب ابری. Papyra ابزاری کوچک و صادق است که همین یک کار را انجام می‌دهد، و متن راست‌به‌چپ در آن شهروند درجه‌یک است، نه وصله‌ای که بعداً اضافه شده. وقتی سندی را وارد می‌کند، دقیق گزارش می‌دهد چه چیزی را ساده کرد یا کنار گذاشت، به‌جای اینکه بی‌صدا خراب کند.

معماری

ویرایشگری با React و TypeScript که روی TipTap ساخته شده. سندها با کتابخانه‌ی docx به‌شکل فایل .docx واقعی در خود مرورگر ساخته می‌شوند، با mammoth.js وارد می‌شوند و با docx-preview از نظر وفاداری سنجیده می‌شوند. همه‌چیز با پشتیبان‌گیری و بازگردانی JSON در IndexedDB نگه داشته می‌شود، و کل برنامه به‌شکل یک سایت ایستا منتشر می‌شود.

شناسنامه
وضعیتمنتشرنشده
خروجی.docx واقعی
ذخیرهIndexedDB، روی دستگاه شما
پشت‌صحنهندارد
  • TypeScript
  • React
  • TipTap
  • RTL
  1. React UIراست‌به‌چپ از پایه
  2. TipTap editorمدل سند ProseMirror
  3. Importmammoth.js · گزارش وفاداری
  4. Export.docx واقعی، در مرورگر
  5. IndexedDBپشتیبان و بازگردانی JSON
معماری، از بالا به پایین

همین سایتمنتشرشده۲۰۲۶

mammadali.ir

یک صفحه‌ی خانگی سال ۱۹۹۷، بازسازی‌شده با استانداردهای امروز.

فلسفه

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

معماری

یک اسکریپت Node بدون وابستگی هر زبان را با CSS درون‌خطی به HTML ایستا تبدیل می‌کند، و GitHub Actions خروجی را بررسی و روی Pages منتشر می‌کند. همه‌ی جلوه‌های سه‌بعدی تبدیل‌های CSS هستند — تونلی سیمی از عنصرهای یک‌پیکسلی، پشته‌های معماری بازشده و یک مکعب — که یک حلقه‌ی requestAnimationFrame آن‌ها را می‌گرداند و فقط وقتی چیزی در حرکت است کار می‌کند.

شناسنامه
وابستگی زمان اجرا۰
صفحه‌ی اولحداکثر ۱۴ کیلوبایت فشرده
سه‌بعدیفقط تبدیل‌های CSS
فونت وبفقط صفحه‌های فارسی
  • HTML
  • CSS
  • JavaScript
  • Node.js
  1. Static HTMLیک صفحه برای هر زبان
  2. Inline CSSویژگی‌های منطقی · راست‌به‌چپ
  3. CSS 3Dتونل · پشته‌ها · مکعب
  4. app.jsیک حلقه‌ی rAF، با تأخیر
  5. Node buildبدون وابستگی
  6. GitHub Pagesانتشار با Actions
معماری، از بالا به پایین

اصول

وجه مشترکشان

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

سروری برای اعتماد نیست

هر پروژه تماماً در مرورگر شما اجرا می‌شود. پشت‌صحنه یا میزبان چند فایل ایستاست یا زیرساختی عمومی که هر کسی می‌تواند راه بیندازد — هرگز سروری از من که مجبور باشید چشم‌بسته به آن اعتماد کنید.

در Textor · TwoFA · Eleet · Sayso · TSEQ · Papyra

کلیدها پیش خودتان می‌ماند

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

در Textor · TwoFA · Sayso

ادعاهایی که می‌شود سنجید

هر تضمین سازوکاری را که اجرایش می‌کند و راه بررسی‌اش را نام می‌برد: بردارهای آزمون منتشرشده که در CI اجرا می‌شوند، سیاست امنیت محتوای سخت‌گیر، و مدل‌های تهدیدی که طوری نوشته شده‌اند که بشود ردشان کرد.

در TwoFA · Textor · Eleet

محدودیت‌ها، با صدای بلند

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

در Textor · Sayso · TwoFA

فارسی درجه‌یک است

چیدمان راست‌به‌چپ و تایپوگرافی فارسی از همان آغاز در طراحی هستند، نه اینکه آخر کار ترجمه شوند — تا جزئیاتی مثل ارقام فارسی، فینگلیش و درست کردن متنی که با چیدمان اشتباه صفحه‌کلید تایپ شده.

در Textor · Eleet · Papyra · mammadali.ir

کوچک، از روی عمد

وابستگی کم یا هیچ، و بودجه‌هایی که مرحله‌ی ساخت اجرایشان می‌کند: Textor با کمتر از ۸۰۰ کیلوبایت نصب می‌شود، TwoFA حدود ۳۶ کیلوبایت جاوااسکریپت دارد، و همین صفحه از ۱۴ کیلوبایت اولش نمایش داده می‌شود.

در TwoFA · Textor · mammadali.ir

درباره

کمی توضیح

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

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

الان Sayso را می‌سازم و Textor، TwoFA و Eleet را جلو می‌برم.

جعبه‌ابزار

چیزهایی که با آن‌ها کار می‌کنم

دستهابزارها
زبان‌ها
  • TypeScript
  • JavaScript
  • Rust
  • HTML
  • CSS
پلتفرم وب
  • React
  • Svelte
  • Web Workers
  • WebAssembly
  • Service workers
رمزنگاری و شبکه
  • WebCrypto
  • WebAuthn
  • Nostr
  • WebRTC
  • iroh
ابزارها
  • Vite
  • Node.js
  • Vitest
  • GitHub Actions

تماس

در تماس باشیم

برای همکاری روی کارهای متن‌باز آماده‌ام، و با کمال میل درباره‌ی هر چیزی که در این صفحه هست حرف می‌زنم.