هيثم العسوليRead this page in Arabicاقرأ هذه الصفحة بالإنجليزية

الويب2026

pastehtml

أفلِت ملف HTML، واحصل على رابط عام على نطاق مستقل.

  • يعمل الآن
  • مختار
pastehtml — لقطة الغلاف

Project factsبيانات المشروع

باختصار

انشر صفحة بخطوة واحدة: أفلِت ملفًا، أو الصق شيفرة، أو أرسلها بـ curl، أو مرّرها لوكيل عبر MCP. ويُحوَّل الـ Markdown إلى صفحة مكتفية بذاتها عند الرفع. بلا حساب وبلا خطوة بناء.

الخانات

الدور
منفردًا
السنة
2026
الحالة
يعمل الآن

بُني بـ

  • Next.js
  • TypeScript
  • Convex
  • MCP
  • Tailwind CSS

What it isما هو

I kept generating single-file HTML pages like reports, mockups and one-off tools, and having nowhere nowhere to put them. Every option was heavier than the artefact: a repo and a deploy for a page that exists to be looked at once.

pastehtml is the missing step. The drop zone, a paste, a curl and an MCP call from an agent all end at the same function and come back with a URL. Markdown is converted to real HTML at upload time, so the stored paste is a page and every view of it behaves identically: the live origin, the raw view, the sandboxed preview, the ETag.

كنت أُولّد باستمرار صفحات HTML بملف واحد، من تقارير ونماذج وأدوات لمرة واحدة، ولا أجد أين أضعها. كل الخيارات أثقل من الشيء نفسه: مستودع ونشر لصفحة وُجدت لتُرى مرة.

pastehtml هو الخطوة الناقصة. منطقة الإفلات واللصق وcurl ونداء MCP من وكيل، كلها تنتهي عند الدالة نفسها وتعود برابط. ويُحوَّل الـ Markdown إلى HTML حقيقي عند الرفع، فتكون النسخة المخزّنة صفحةً وتتصرّف كل الواجهات تحتها بالطريقة ذاتها: النطاق المباشر، والعرض الخام، والمعاينة المعزولة، وETag.

النتائج

  • Publish from a browser, a terminal, or an AI agent over MCP.
  • Per-paste origins, so pages cannot reach each other.
  • Markdown becomes a styled, self-contained page at upload.
  • النشر من المتصفح أو الطرفية أو وكيل ذكاء اصطناعي عبر MCP.
  • نطاق مستقل لكل نسخة، فلا تصل الصفحات إلى بعضها.
  • يتحوّل الـ Markdown إلى صفحة منسّقة مكتفية بذاتها عند الرفع.

التحديات

كل خانة تُفتح مرتين: ما الذي تعثّر، ثم ما الذي فعلته.

01

استضافة HTML عشوائي هي استضافة JavaScript عشوائي

المشكلة

كل نسخة صفحة كاملة تحوي شيفرات. ولو قُدّمت كل النسخ من نطاق واحد لأمكن لأيٍّ منها قراءة الكعكات والتخزين وDOM لكل النسخ الأخرى، فتتحول الخدمة إلى منصة استضافة لهجمات XSS.

ما فعلته

تُقدَّم كل نسخة من نطاق خاص بها، فتتولى سياسة أصل المتصفح نفسها العزل بدل مُنقٍّ عليّ أن أظل متقدمًا عليه. تنقية HTML غير موثوق سباق خاسر؛ أما ألا تترك له ما يستحق السرقة فليس كذلك.

02

معاينات الروابط تحتاج وسومًا لكل صفحة

المشكلة

ينبغي أن يُعاين الرابط المشارَك بوصفه الصفحة التي يشير إليها. لكن الصفحة تخصّ المستخدم الذي لم يكتب وسوم Open Graph، وحقنها في شيفرته يعني إعادة كتابة مستنده.

ما فعلته

تُكتشف زواحف الفهرسة عند الحافة وتُحوَّل إلى دالة منفصلة تُنتج وسوم OG لتلك النسخة، بينما يحصل الزائر البشري على المستند كما هو. لا تُعدَّل شيفرة المستخدم أبدًا. الزاحف وحده يتلقى استجابة مختلفة.

03

مسار نشر واحد وأربع نقاط دخول

المشكلة

منطقة الإفلات وصندوق اللصق ونداء REST وأداة MCP أربعة عملاء مختلفين. وتنفيذ النشر أربع مرات يضمن تباعدها، ويكون مسار الوكيل، وهو أكثر ما أردته، أقلّها اختبارًا.

ما فعلته

الأربعة أغلفة رقيقة فوق دالة Convex واحدة. وما يعمل من المتصفح يعمل بالطريقة ذاتها من curl ومن وكيل، لأنه مسار الشيفرة نفسه.

Keep goingتابع

الرفّ

كل المشاريعالـ 40 كلها في ستّ خانات.