פיתוח KeystoneJS ל-CMS ראשי ללא ראש מותאם אישית

כאשר מערכות CMS סטנדרטיות לא מצליחות להתמודד עם לוגיקה עסקית לא שגרתית, אנחנו בונים אתרים על KeystoneJS — מערכת CMS headless מבוססת קוד עם TypeScript ו-API של GraphQL. הצוות שלנו מספק פרויקטים במפתח מלא: מעיצוב סכמת נתונים ועד אינטגרציה עם כל frontend, עם תמיכה מתמשכת.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

אלה רק חלק מהסוגים הטכניים של אתרים שאנו עובדים איתם, ולכל אחד מהם יכולים להיות מאפיינים ופונקציונליות ספציפיים משלו, וכן ניתן להתאים אותם לצרכים ולמטרות הספציפיים של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
פיתוח KeystoneJS ל-CMS ראשי ללא ראש מותאם אישית
מורכב
~1-2 שבועות

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1502
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1344
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1052
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1307
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1049
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1033

כאשר הלוגיקה העסקית לא מתאימה לסוגי תוכן מובנים מראש, KeystoneJS הופך לבסיס. זהו CMS headless מבוסס-קוד שבו סכמות הנתונים חיות ב-TypeScript, וה-API של GraphQL, פאנל הניהול וסכמת Prisma נוצרים אוטומטית. אתה לא מבזבז זמן על עטיפות CRUD: המערכת יוצרת אותן, ומשאירה לך להתמקד בלוגיקה העסקית. תוך 7–10 ימים, אתה מקבל פתרון מוכן עם שדות מותאמים אישית, גישת מבוססת-תפקידים, ואינטגרציה עם כל frontend—מ-Next.js ועד Angular. גישה זו מפחיתה את עלות הפיתוח ומבטלת שאילתות N+1 דרך API גמיש. צור איתנו קשר כדי לדון בפרויקט שלך.

בניגוד ל-CMS מבוסס-ניהול, KeystoneJS נותן שליטה מלאה על הנתונים. אתה מגדיר יחסים, hooks, שדות מחושבים—המערכת בונה migrations דרך Prisma. השתמשנו בגישה זו ביותר מ-10 פרויקטים: מחנויות e-commerce עם קטלוגים מותאמים אישית ועד פורטלים ארגוניים עם multisite. לפי המדידות שלנו, KeystoneJS מאיץ את יצירת ה-backend פי 1.5 בהשוואה ל-Strapi. קבל ייעוץ מהמהנדס שלנו להערכת פרויקט.

מתי לבחור ב-KeystoneJS

KeystoneJS מתאים כאשר:

  • נדרשת שליטה מלאה על סכמת הנתונים והלוגיקה העסקית
  • הצוות נוח עם Node.js ו-TypeScript
  • נדרשת לוגיקת גישה מותאמת אישית, שדות מחושבים מורכבים, ו-hooks ברמת הנתונים
  • GraphQL API הוא הממשק הראשי עבור ה-frontend

זה לא מתאים אם אתה צריך אירוח מובנה ללא DevOps או ממשק משתמש עשיר עבור עורכים לא טכניים (אז שקול את Strapi או Payload).

למה לבחור ב-KeystoneJS?

KeystoneJS עולה על CMS מסורתי בזכות הגישה מבוססת-הקוד שלו. אתה לא מוגבל על ידי מבנים קבועים: כל יחסים, שדות מחושבים ו-hooks על create/update. GraphQL API מספק ל-frontend בדיוק את הנתונים שהוא צריך, ללא שאילתות N+1. לפי התיעוד הרשמי, KeystoneJS יכול להפחית את זמן פיתוח ה-backend ב-30–40% באמצעות יצירה אוטומטית של פעולות CRUD.

קריטריון KeystoneJS Strapi Payload CMS
גישה מבוסס-קוד מבוסס-ניהול מבוסס-קוד
טיפוסים TypeScript JS/TS חלקי TypeScript
GraphQL יצירה אוטומטית מלאה REST + GraphQL REST + GraphQL
התאמה אישית מקסימלית בינונית גבוהה
DevOps נדרש אירוח מובנה נדרש

איך אנו מגדירים גישה ותפקידים

ב-KeystoneJS, זכויות גישה מוגדרות ברמת הפעולה (create/read/update/delete) וברמת השדה דרך access בכל רשימה. אנו מיישמים מודל תפקידים: מנהל, עורך, מחבר, אנונימי. תמיכה מובנית בסשנים דרך cookie או JWT.

// Пример доступа: только автор может редактировать свой пост
access: {
  operation: {
    query: allowAll,
    create: ({ session }) => !!session,
    update: ({ session, item }) => session?.data?.id === item.authorId,
    delete: ({ session }) => session?.data?.role === 'admin',
  },
},

תהליך

  1. גילוי: הגדרת מודלים, יחסים, תפקידים, אינטגרציות
  2. עיצוב: יצירת סכמת TypeScript, הגדרת אחסון (מקומי/S3)
  3. יישום: כתיבת רשימות, hooks, כללי גישה, התאמת Admin UI
  4. בדיקות: שאילתות GraphQL, בדיקות יחידה, בדיקות עומס
  5. פריסה: Prisma migrations, קונטיינר Docker, CI/CD

תצורה והשקה

// keystone.ts
import { config } from '@keystone-6/core';
import { lists } from './schema';
import { withAuth, session } from './auth';

export default withAuth(
  config({
    db: {
      provider: 'postgresql',
      url: process.env.DATABASE_URL!,
      enableLogging: true,
      idField: { kind: 'uuid' }
    },
    lists,
    session,
    ui: {
      isAccessAllowed: (context) => !!context.session?.data
    },
    server: {
      cors: {
        origin: [process.env.FRONTEND_URL!],
        credentials: true
      }
    },
  })
);

מודל לדוגמה: Post

// lists/Post.ts
import { list } from '@keystone-6/core';
import { text, relationship, timestamp, select, image, document } from '@keystone-6/core/fields';

export const Post = list({
  access: {
    operation: {
      query: () => true,
      create: ({ session }) => !!session,
      update: ({ session }) => !!session,
      delete: ({ session }) => session?.data?.role === 'admin',
    },
  },
  fields: {
    title: text({ validation: { isRequired: true } }),
    slug: text({ validation: { isRequired: true }, isIndexed: 'unique' }),
    status: select({
      options: [
        { label: 'Draft', value: 'draft' },
        { label: 'Published', value: 'published' },
        { label: 'Archived', value: 'archived' },
      ],
      defaultValue: 'draft',
    }),
    content: document({ formatting: true, links: true }),
    author: relationship({ ref: 'Author.posts' }),
    featuredImage: image({ storage: 'local_images' }),
  },
});

GraphQL API ואינטגרציית Frontend

לאחר הרצת // Пример доступа: только автор может редактировать свой пост access: { operation: { query: allowAll, create: ({ session }) => !!session, update: ({ session, item }) => session?.data?.id === item.authorId, delete: ({ session }) => session?.data?.role === 'admin', }, }, , GraphQL Playground נפתח ב-// keystone.ts import { config } from '@keystone-6/core'; import { lists } from './schema'; import { withAuth, session } from './auth'; export default withAuth( config({ db: { provider: 'postgresql', url: process.env.DATABASE_URL!, enableLogging: true, idField: { kind: 'uuid' } }, lists, session, ui: { isAccessAllowed: (context) => !!context.session?.data }, server: { cors: { origin: [process.env.FRONTEND_URL!], credentials: true } }, }) ); . שאילתה לדוגמה:

query GetPosts {
  posts(
    where: { status: { equals: "published" } }
    orderBy: { publishedAt: desc }
  ) {
    id
    title
    slug
    author {
      name
    }
  }
}

ב-Next.js, השתמש ב-Apollo Client:

import { ApolloClient, InMemoryCache, createHttpLink } from '@apollo/client';
export const client = new ApolloClient({
  link: createHttpLink({
    uri: process.env.KEYSTONE_API_URL,
  }),
  cache: new InMemoryCache(),
});

מה כלול

  • יצירת סכמת נתונים (רשימות, יחסים, hooks)
  • הגדרת גישה ותפקידים
  • אינטגרציית frontend (Next.js, Nuxt 3, Gatsby)
  • הגדרת אחסון (מקומי, S3)
  • פריסה ו-migrations
  • תיעוד API ו-Admin UI
  • הדרכת צוות עורכים
  • תמיכה חודש לאחר ההשקה

איך KeystoneJS מאיץ פיתוח

בפועל, הגישה מבוססת-הקוד מאפשרת לנו להפחית את זמן ההתקנה הראשוני פי 2–3 בהשוואה ל-CMS מבוסס-ניהול. אנו מקבלים פאנל ניהול ו-API מוכנים מיד לאחר תיאור הסכמה. לדוגמה, בפרויקט e-commerce אחד, חסכנו 4 ימים רק בשלב העיצוב, מה שהביא לחיסכון משמעותי בעלויות ללקוח.

ציר זמן פיתוח אתר טיפוסי

שלב משך
התקנה, הגדרת DB, רשימות בסיסיות יום אחד
3–5 מודלים עם יחסים 2–3 ימים
הגדרת גישה ותפקידים יום אחד
אימות + סשנים 0.5 יום
אינטגרציית frontend 2–3 ימים
פריסה + migrations 0.5–1 יום
סה"כ לאתר בינוני 7–10 ימים

לפרויקטים מורכבים, 3–5 שבועות. קבל ייעוץ מהמהנדס שלנו להערכת פרויקט.