============================================================ SCHEMA SPECIFICATION: landing ============================================================ Name: landing Slug: landing Status: registered Default: No Pages using this schema: 0 Created: 2026-04-16T13:19:26.593658+00:00 Updated: 2026-04-16T14:00:14.559749+00:00 --- DESCRIPTION --- specy landing page --- REQUIREMENTS --- - Public route shape: /landing/:slug - Route ownership: isolated - Canonical frontend URL: https://specy.net - Temporary frontend URLs allowed: Yes - Preferred page discovery: schema-scoped-api - Published pages API: https://service-cms.jay-rathjen55.workers.dev/api/schemas/landing/pages --- DO NOT CHANGE --- - Keep the implementation isolated to the configured route space. Do not replace unrelated dynamic routes. - Confirm the final production frontend URL before registration whenever possible. --- DATA SOURCE --- Use the schema-scoped published pages API instead of inferring schema membership from raw table reads whenever possible. GET https://service-cms.jay-rathjen55.workers.dev/api/schemas/landing/pages Returns only these fields for published pages: - id - slug - name - status - content - domain_url - updated_at --- SCHEMA DEFINITION --- { "faq": { "type": "array", "items": { "type": "object", "properties": { "answer": { "type": "ContentBlock[]" }, "question": { "type": "string" } } }, "description": "Standard accordion for common technical hurdles", "meta_description": "Addresses technical objections (Pricing, Open Source license, Integration). AI should generate 3-5 questions that a CTO or Lead Developer would ask." }, "hero": { "type": "object", "properties": { "media": { "type": "media", "meta_description": "A high-fidelity visual representing the product. For technical products, this should be an abstract 'aura' graphic, a dashboard preview, or a code-snippet visualization." }, "headline": { "type": "string", "meta_description": "The main H1. Should use a bold, two-part structure (e.g., 'Stop just storing content. Start coordinating your business.'). Max 12 words." }, "primaryCTA": { "type": "object", "properties": { "link": { "type": "string" }, "label": { "type": "string", "meta_description": "Action-oriented text like 'Get Started' or 'Install Now'." } } }, "subheadline": { "type": "ContentBlock[]", "meta_description": "A 2-3 sentence paragraph explaining the 'How' and 'Who'. Mention target audience (e.g., 'high-performance service providers') and key technical differentiators." }, "secondaryCTA": { "type": "object", "properties": { "link": { "type": "string" }, "label": { "type": "string", "meta_description": "Lower-friction action like 'View on GitHub' or 'Book Demo'." } } } }, "description": "The primary 'above-the-fold' section of the landing page", "meta_description": "The most critical conversion section. Includes a punchy H1 headline that focuses on a 'Stop [Problem]. Start [Solution]' framework. The description should be technical yet benefit-driven. Includes primary and secondary call-to-action buttons. AI should focus on high-energy, authoritative language." }, "closingCTA": { "type": "object", "properties": { "title": { "type": "string", "meta_description": "A 3-word summary of the product's USP." }, "description": { "type": "string", "meta_description": "A final 1-2 sentence pitch emphasizing the 'Future' or 'Community' aspect." }, "primaryButton": { "type": "string", "meta_description": "Final conversion button text." }, "secondaryButton": { "type": "string", "meta_description": "Link to documentation or whitepaper." } }, "description": "The final conversion block at the bottom of the page", "meta_description": "A high-contrast section designed to catch 'scrollers'. It should reiterate the product's identity in 3 words (e.g., 'Open Source. Edge Native. Agent Ready.') and provide a final invitation to join the ecosystem." }, "valueProps": { "type": "array", "items": { "type": "object", "properties": { "icon": { "type": "string", "meta_description": "Lucide icon name that semantically matches the pillar (e.g., 'zap', 'shield', 'code')." }, "title": { "type": "string", "meta_description": "Short, punchy pillar title (e.g., 'Agentic by Design')." }, "bulletPoints": { "type": "array", "items": { "type": "string" }, "meta_description": "Exactly 3 bullet points per card. Each should start with a strong verb or adjective and highlight a specific technical capability." } } }, "description": "A grid of core feature/benefit cards", "meta_description": "A set of 3 cards highlighting the 'Engineered for...' philosophy. Each card should focus on a distinct pillar (e.g., Design, Commerce, Developer Experience). AI should generate an icon name, a title, and 3 specific bullet points for each." }, "technicalSpecs": { "type": "object", "properties": { "rows": { "type": "array", "items": { "type": "object", "properties": { "capability": { "type": "string", "meta_description": "The feature name (e.g., 'Protocol Support', 'Database')." }, "supportedBy": { "type": "string", "meta_description": "The provider or underlying engine (e.g., 'Native Agent Communication', 'Supabase')." }, "specification": { "type": "string", "meta_description": "The specific technology or standard used (e.g., 'MCP / REST / GraphQL')." } } } }, "sectionTitle": { "type": "string" } }, "description": "A structured table for technical transparency and trust", "meta_description": "A table layout intended for 'Reliable Enterprise Scaling'. Lists technical capabilities against specific technologies. AI should populate this with industry-standard stacks relevant to the product (e.g., Edge-native, SQL, React)." } } --- CONTENT BLOCK TYPES --- ContentBlock is a union type. Each block has { id: string, type: string } plus type-specific fields: text: { content: string } heading: { content: string, level: "heading1" | "heading2" | "heading3" | "heading4" | "heading5" | "heading6" } image: { src: string, alt: string, caption?: string, width?: number, height?: number } quote: { text: string, author?: string, source?: string } list: { style: "ordered" | "unordered", items: string[] } video: { src: string, provider: "youtube" | "vimeo" | "other", caption?: string } Block IDs follow the pattern: ${prefix}-${timestamp}-${random} --- REVALIDATION --- - The CMS derives the full route path from slug_structure and the stored page slug. - Your revalidation endpoint should accept Authorization: Bearer . - The CMS sends ?path= and ?slug=. - Use the full path as the primary invalidation target. --- FRONTEND INFO --- Frontend URL: https://specy.net Slug Structure: /landing/:slug Revalidation Endpoint: /api/revalidate ============================================================ --- CODE BLOCK FIELD TYPE --- Schemas may also use the custom field type "CodeBlock[]" for structured code examples. Each item is typically stored as: { id: string, language: string, code: string, label?: string, pattern?: string, frameworks?: string[] } The optional items.properties definition can be used to configure placeholders, help text, required flags, and enum options for language, pattern, frameworks, or extra metadata fields. If frameworks.items.enum is provided, the Page Builder renders a multi-select checkbox group for frameworks. ============================================================