عملت منتجك بالـ AI؟ يلا نجهّزه للـ production.
بناخد المواقع ومنتجات SaaS وأنظمة ERP وتطبيقات الموبايل اللي اتعملت بالـ AI ونجهّزها للـ production. وكمان بنعمل security review، وبنحمي تطبيقات الموبايل من الـ reverse engineering والتلاعب.
أول مراجعة ببلاش.
حرّك الماوس على الخلفيةدوس على الخلفية: النقط بتترتب، زي ما بنعمل في الكود بتاعك.
- app
- dashboard
- page.tsx(كل حاجة)
- components
- Table.tsx
app/dashboard/page.tsx
const API_KEY = "sk_live_REPLACE_ME"; export default function Dashboard() { const [users, setUsers] = useState([]); useEffect(() => { (async () => { const rows = await db.query("SELECT * FROM users"); for (const u of rows) { u.orders = await db.query( `SELECT * FROM orders WHERE user_id = ${u.id}` ); } setUsers(rows); })(); }, []); return <Table rows={users} />;}Prototype ملاحظات: secret جوه الكود, N+1 loop, مفيش error handling
الـ prototype بيثبت الفكرة. لكن الـ production هو اللي بيخليها تعيش.
أدوات الـ AI بتوصّلك لديمو شغال بسرعة، وده إنجاز حقيقي. الديمو بيثبت الفكرة، لكن اليوزرز الحقيقيين بيختبروا كل حاجة تانية، والمشاكل دي بتظهر كل ما الاستخدام يزيد.
ديمو: إنت وكام حد بيجرّبوا. كل حاجة شكلها شغالة.
Launch: يوزرز حقيقيين وداتا حقيقية. هنا الصلاحيات والـ secrets والـ deploy اللي محدش شايفه بيبتدوا يفرقوا.
النمو: داتا وزيارات وتعديلات أكتر. ودلوقتي الـ architecture نفسها بتبتدي تتعب.
الـ Architecture
Architecture بتتعب مع النمو
Structure كانت ماشية مع 10 يوزرز ممكن تبتدي تتعب عند 1,000.
الـ Performance
صفحات بطيئة و queries تقيلة
Queries من غير indexes، أو بتتكرر لكل record (N+1)، بتبطّأ الصفحات كل ما الداتا تزيد.
الـ Security
ثغرات في الـ login والصلاحيات
مين يقدر يشوف ومين يقدر يعدّل، القواعد دي مش متطبقة في كل حتة المفروض تتطبق فيها.
الـ secrets والـ config والـ environments
الـ keys مكتوبة جوه الكود، أو بتتنقل بالإيد بين الـ environments.
الـ Stability
مفيش tests، فأي تعديل مخاطرة
تصلّح حتة، تبوّظ حتة تانية من غير ما تاخد بالك.
Deploy بالإيد و errors محدش شايفها
الـ deploy بيتعمل بالإيد، والعملاء بيكتشفوا المشاكل قبلك.
Security review للكود المعمول بالـ AI.
أدوات الـ AI بتطلّع features شغالة، بس كتير بيفوتها الصلاحيات وإدارة الـ secrets وحماية الداتابيز اللي أي سيستم على production محتاجها. بنراجع تطبيقات الويب والموبايل وندوّر على الثغرات دي، ونصلّح اللي نلاقيه، ونضيف tests عشان الـ fix يفضل ثابت.
الـ RequestGET /api/invoices/1042من عميل عامل login، لفاتورة بتاعة عميل تاني
- بيانات العملاءمحدش لمسها
403 Forbidden. الصلاحيات وقفته: الفاتورة 1042 بتاعة عميل تاني.
الصلاحيات (Authorization)
بتتأكد من: بتتأكد إن اليوزر ده، بالـ role بتاعه، من حقه يوصل للـ record ده أو يعمل الحركة دي بالذات.
اختار بوابة عشان تشوف بتتأكد من إيه.
المراجعة بتغطي كل البوابات اللي فوق، وكمان
- الـ injection في queries الـ SQL والـ NoSQL
- الـ dependencies والـ packages اللي فيها ثغرات معروفة
- رفع الملفات والـ webhooks وإشعارات الدفع
- الـ CORS والـ security headers
هتستلم إيه
- تقرير مكتوب بالمشاكل مترتب حسب الخطورة
- Fixes أو Pull Requests للمشاكل اللي نلاقيها
- Regression tests تضمن إنها ماترجعش تاني
الـ security review بيقلل المخاطر وبيصلّح المشاكل المعروفة، بس مايقدرش يضمن إن السيستم مفيهوش ثغرات خالص.
اطلب security reviewSecurity تطبيقات الموبايل وتقوية حمايتها
أي حد يقدر ينزّل الـ APK أو حزمة التطبيق ويفكها، أو يعدّل فيها، أو يشغّلها على جهاز متهكّر. بنعمل assessment لتطبيقات Android وiOS وFlutter وبنقوّي حماية الكود والـ keys والبيانات اللي فيها. والحماية المناسبة بتختلف حسب التطبيق ودرجة المخاطرة.
Hardening للتطبيق
إعدادات الـ release والـ obfuscation والحمايات اللي بتصعّب الـ reverse engineering والتعديل على التطبيق.
كشف مخاطر الجهاز وقت التشغيل
اكتشاف الـ debugging والـ hooking والتلاعب والأجهزة اللي عليها root أو jailbreak، والتصرف على قد الخطورة.
الـ keys والبيانات الحساسة
تخزين الـ keys في الأماكن الآمنة اللي بتوفرها المنصة، والتشفير، والـ local storage، والبيانات الحساسة اللي بتفضل في الـ memory.
Assessment لتطبيق الموبايل
أشهر نقط الهجوم: تخزين مش آمن، واتصالات الشبكة، وإعدادات التطبيق، وحاجات التطبيق بيفترضها وهي مش مضمونة.
Security الـ APIs والـ sessions
التعامل مع الـ tokens، والسيرفر يتأكد من الصلاحيات بنفسه بدل ما يثق في التطبيق.
خبرة هندسية على قد اللي منتجك محتاجه.
كل شغل بيبدأ بمراجعة للكود. وكل مشكلة بنلاقيها ليها خدمة من دول.
المشكلة: كود بيتعب كل ما يكبر
Refactoring و architecture
بنعيد تنظيم الكود اللي اتعمل بالـ AI في modules واضحة وحدود واضحة.
إنت بتاخد إيه: Structure فريقك يفهمها ويقدر يكبّرها.
المشكلة: مفيش طريق واضح من الديمو للـ launch
تجهيز للـ production
بنرتب الـ technical debt حسب الأولوية، ونصلّح اللي معطّل الـ launch الأول.
إنت بتاخد إيه: خطة مترتبة تنقلك من الـ prototype للـ launch.
المشكلة: صفحات بطيئة و queries تقيلة
الـ Performance والداتابيز
بنحدد الـ requests البطيئة، ونصلّح الـ N+1 queries، ونضيف الـ indexes المناسبة.
إنت بتاخد إيه: صفحات أسرع و queries تستحمل الضغط.
المشكلة: ثغرات في الصلاحيات و keys مكشوفة
Security و hardening للتطبيقات
مراجعة تطبيقات الويب والموبايل: الـ authentication، والصلاحيات، وحماية التطبيق.
إنت بتاخد إيه: مخاطر أقل وصلاحيات أوضح.
المشكلة: أي تعديل ممكن يبوّظ حاجة
Testing و stability
Tests، وتصليح bugs، و CI، و monitoring، و deploy تقدر تكرره بنفس الطريقة.
إنت بتاخد إيه: تعديلات تنزّلها وإنت مطمّن.
المشكلة: مفيش senior تستشيره
شغل مستمر معاك
دعم هندسي مستمر وتطوير features جديدة.
إنت بتاخد إيه: شريك هندسي senior معاك وإنت بتكبر.
السيستم بتاعك شغال على إيه.
تطبيقات Web و Mobile، والـ Backend اللي كلهم بيستخدموه. اختار منصة عشان تشوف بنراجع إيه الأول، وبنأكدلك الـ stack مناسب ولا لأ بعد ما نقرا الكود.
أنظمة الشركات و ERP والأدوات الداخلية
سيستمز Back-office اللي بتمشّي الشغل اليومي.
أهم الحاجات اللي بنركز عليها
- الـ data model
- الـ roles
- الريبورتات
- الـ audit log
الـ APIs والـ integrations والداتابيز
خدمات الـ Backend، والربط مع خدمات خارجية، والداتا اللي كله قايم عليها.
أهم الحاجات اللي بنركز عليها
- الـ schema
- الـ indexes
- الـ API contracts
- الـ queues
التقنيات اللي بنشتغل بيها.
تحت كل تقنية، أول حاجة بنبص عليها في المراجعة.
اختار منصة من الخريطة اللي فوق، وهنعلّملك التقنيات اللي بتتبني بيها عادةً.
Frontend
ReactAngular
XSS والـ secrets جوه الـ client bundle
Next.js
الـ API routes والـ Server Actions وفحص الـ auth
Remix
الصلاحيات في الـ Loader والـ Action
Vue.js
الـ state المكشوفة والـ template injection والتخزين في المتصفح
Svelte
تغييرات الـ reactive state والـ SSR hydration والتخزين في المتصفح
Vanilla HTML/CSS/JS
الـ secrets في كود المتصفح والـ injection
Mobile
FlutterKotlinSwift
الـ secure storage والتعامل مع الـ API tokens
Backend
ASP.NET Core
Authentication middleware والـ authorization policies والحماية من الـ CSRF
Node.js
مخاطر الـ dependencies والـ input validation
NestJS
الـ Guards والـ validation وفحص الـ roles
Express.js
ترتيب الـ middleware وتنضيف الـ input والتعامل مع الـ errors
Django
أمان الـ ORM queries والـ middleware والوصول للـ admin
FastAPI
الـ validation بـ Pydantic والـ dependency injection للـ auth والـ CORS
Spring Boot
الـ security filter chains والـ method security والـ actuator endpoints
Laravel
الـ Policies والـ Mass Assignment والـ validation
منصات Backend
Firebase
الـ security rules وانكشاف الـ API keys
Supabase
الـ Row Level Security policies
Appwrite
الـ permissions والـ API keys
الداتابيز
PostgreSQL
الـ roles والـ permissions وأمان الـ queries
MySQL
الـ injection ونطاق الصلاحيات
MongoDB
الـ query injection وقواعد الوصول
الـ refactor شكله إيه في الكود.
تلات حاجات بتتكرر في التطبيقات المعمولة بالـ AI، وإزاي بنعملها refactor. الأمثلة متبسّطة عشان تتقري بسهولة.
lib/posts.ts
const posts = await db.post.findMany(); for (const post of posts) { post.author = await db.user.findUnique({ where: { id: post.authorId }, });}// The database does the join, onceconst posts = await db.post.findMany({ include: { author: true }, orderBy: { createdAt: "desc" }, take: 50,}); return posts;فين المشكلة
الـ refactor بيغيّر إيه
app/api/projects/route.ts
export async function DELETE(req: Request) { const { projectId } = await req.json(); const session = await getSession(req); if (!session) return new Response(null, { status: 401 }); await db.project.delete({ where: { id: projectId } }); const { projectId } = DeleteBody.parse(await req.json()); const project = await db.project.findFirst({ where: { id: projectId, ownerId: session.userId }, }); if (!project) return new Response(null, { status: 404 }); await db.project.delete({ where: { id: project.id } }); return Response.json({ ok: true });}فين المشكلة
الـ refactor بيغيّر إيه
lib/invoices.ts
async function saveInvoice(data) {async function saveInvoice(data: InvoiceInput) { const res = await fetch("/api/invoices", { method: "POST", body: JSON.stringify(data), }); const invoice = await res.json(); showToast("Saved!"); if (!res.ok) { logger.warn("invoice.save_failed", { status: res.status }); throw new SaveError(res.status === 422 ? "invalid" : "unavailable"); } const invoice = InvoiceSchema.parse(await res.json()); showToast("Saved"); return invoice;}فين المشكلة
الـ refactor بيغيّر إيه
خمس خطوات، وكل خطوة بتسلّمك حاجة واضحة.
تعديلات صغيرة تقدر تراجعها في كل مرحلة، عشان تعرف دايمًا إيه اللي اتغيّر وليه.
مراجعة
بنراجع الكود والـ architecture والـ data model وإعداد الـ deploy، ونحط baseline للـ security: الصلاحيات والـ secrets وحماية الداتابيز.
هتستلمتقرير مكتوب بالمشاكل، ومعاه مشاكل الـ security
الأولويات
بنرتب المشاكل حسب خطورتها وتأثيرها على البيزنس.
هتستلمخطة و scope واضح
Refactor
بنعمل refactor على خطوات صغيرة تقدر تراجعها.
هتستلمCommits نضيفة وموثقة
Testing
بنضيف tests حوالين الأجزاء الحساسة.
هتستلمشبكة أمان
Deploy
بنجهز deploy يتكرر بنفس الطريقة و monitoring للسيستم.
هتستلمPipeline جاهزة للـ production
هتستلم مننا إيه.
كل اللي بنسلّمه، مكتوب وشغال، عشان المعرفة تفضل عند فريقك.
في الـ repo بتاعك
- Pull Requests بالـ refactor وجاهزة للمراجعة
- Fixes للثغرات اللي لقيناها ومعاها regression tests
- Tests بتغطي الأجزاء الحساسة
- Documentation للـ deploy والـ environments
تقارير مكتوبة
- مراجعة مكتوبة للكود والمشاكل مترتبة حسب الأولوية
- مشاكل الـ security مترتبة حسب الخطورة
- ملاحظات عن الـ architecture
- توصيات للـ security والـ performance
Session تسليم مع فريقك
بنشرح لفريقك إيه اللي اتغيّر وليه، وبنجاوب على أسئلتهم.
أسئلة بتتكرر.
تقدروا تشتغلوا على الكود اللي عندي دلوقتي؟
أيوه. أغلب شغلنا بيبدأ من كود موجود فعلًا. أكتر حاجة متمكنين منها TypeScript و JavaScript (زي React و Next.js و Node)، وبعدها Flutter و Kotlin و Swift، وداتابيز SQL. لو الـ stack بتاعك مختلف، هنقولك بصراحة هو مناسب لينا ولا لأ بعد ما نشوف طلبك.
بتشتغلوا على كود معمول بالـ AI؟ ولازم أبطّل أستخدم أدواته؟
أيوه، بنشتغل على النوع ده من الكود. ولأ، مش لازم تبطّل تستخدم أدوات الـ AI، دي فعلًا بتسرّع الشغل. شغلتنا إن الكود يبقى أساس متين ومتنظم، عشان اللي يبني بعدنا، سواء developer أو أداة AI، مايشتغلش ضد الـ structure بتاعه.
بتتعاملوا إزاي مع الـ security والسرية؟
الـ access بيبقى على قد اللي الشغل محتاجه بس (least privilege). ولو محتاج NDA موجودة. بنراجع الـ authentication والصلاحيات وإدارة الـ secrets كجزء من الشغل. ومش بندّعي إن معانا شهادات اعتماد.
تقدروا تضمنوا إن السيستم بتاعي مفيهوش ثغرات خالص؟
لأ. الـ security review بيقلل المخاطر وبيصلّح المشاكل المعروفة، بس مايقدرش يضمن إن مفيش ثغرات خالص. اللي هتستلمه: تقرير مكتوب بالمشاكل مترتب حسب الخطورة، وfixes للي لقيناه، و regression tests عشان الـ fixes تفضل ثابتة.
الشغل بياخد وقت قد إيه؟
الـ scope والمدة بيعتمدوا على حجم الكود. بنديك تقدير ثابت بعد المراجعة الأولية.
التكلفة كام؟
التكلفة بتعتمد على حجم الكود وحالته والـ scope اللي هتختاره. بنبعتلك عرض السعر بعد المراجعة الأولية، عشان تقرر وقدامك حاجة حقيقية.
محتاجين access لإيه؟
بنبدأ بـ read access على الـ repo بس. بعد كده بنطلب access على الـ staging قبل الـ production، ولو الـ scope محتاج ده بس. من فضلك ماتبعتش passwords أو API keys أو أي بيانات سرية في فورم التواصل. هنتفق سوا على طريقة آمنة نشارك بيها أي حاجة حساسة.
اطلب مراجعة للكود بتاعك.
احكيلنا عملت إيه، وإيه اللي مش شغال زي ما المفروض.