/** * God Mode - Site Provisioning Extension * * Automates complete site setup: * - Creates site record * - Generates homepage with blocks * - Sets up navigation * - Creates all necessary collection entries * - Establishes relationships * - Creates folder structure */ export default (router, { services, database, env, logger }) => { const { ItemsService } = services; const godAuth = (req, res, next) => { const token = req.headers['x-god-token']; if (!token || token !== env.GOD_MODE_TOKEN) { return res.status(403).json({ error: 'Forbidden' }); } req.accountability = { user: 'god-mode', role: null, admin: true, app: true }; next(); }; router.use(godAuth); /** * POST /god/sites/provision * Complete site setup with all collections */ router.post('/provision', async (req, res) => { try { const { name, domain, create_homepage = true, include_collections = [], template = 'default' } = req.body; logger.info(`God mode: Provisioning site ${name}`); const created = { site: null, homepage: null, navigation: null, collections: [], folders: [], relationships: [] }; // 1. Create site const sitesService = new ItemsService('sites', { schema: req.schema, accountability: req.accountability }); created.site = await sitesService.createOne({ name, domain, status: 'active', settings: { theme: 'default', logo: null } }); logger.info(`Created site: ${created.site}`); // 2. Create homepage if requested if (create_homepage) { const pagesService = new ItemsService('pages', { schema: req.schema, accountability: req.accountability }); created.homepage = await pagesService.createOne({ site: created.site, title: 'Home', slug: 'home', permalink: '/', status: 'published', seo_title: name, seo_description: `Welcome to ${name}`, blocks: [ { type: 'hero', data: { heading: `Welcome to ${name}`, subheading: 'Your new site is ready', cta_text: 'Get Started', cta_link: '/contact' } }, { type: 'features', data: { title: 'Features', items: [ { icon: 'rocket', title: 'Fast', description: 'Lightning fast performance' }, { icon: 'shield', title: 'Secure', description: 'Enterprise-grade security' }, { icon: 'users', title: 'Scalable', description: 'Grows with your business' } ] } } ] }); created.collections.push({ collection: 'pages', id: created.homepage }); } // 3. Create navigation if (include_collections.includes('navigation')) { const navService = new ItemsService('navigation', { schema: req.schema, accountability: req.accountability }); created.navigation = await navService.createOne({ site: created.site, name: 'Main Navigation', position: 'header', items: [ { label: 'Home', link: '/', order: 1 }, { label: 'About', link: '/about', order: 2 }, { label: 'Contact', link: '/contact', order: 3 } ] }); created.collections.push({ collection: 'navigation', id: created.navigation }); } // 4. Create default form if (include_collections.includes('forms')) { const formsService = new ItemsService('forms', { schema: req.schema, accountability: req.accountability }); const formId = await formsService.createOne({ site: created.site, name: 'Contact Form', fields: [ { name: 'name', type: 'text', required: true, label: 'Name' }, { name: 'email', type: 'email', required: true, label: 'Email' }, { name: 'message', type: 'textarea', required: true, label: 'Message' } ], submit_button_text: 'Send Message', success_message: 'Thank you! We will be in touch soon.' }); created.collections.push({ collection: 'forms', id: formId }); } // 5. Create globals for site if (include_collections.includes('globals')) { const globalsService = new ItemsService('globals', { schema: req.schema, accountability: req.accountability }); const globalId = await globalsService.createOne({ site: created.site, key: 'site_settings', value: { company_name: name, tagline: 'Your tagline here', phone: '', email: '', address: '', social_links: [] } }); created.collections.push({ collection: 'globals', id: globalId }); } // 6. Set up folders (if media management exists) created.folders = [ `media/sites/${created.site}`, `media/sites/${created.site}/logos`, `media/sites/${created.site}/images`, `media/sites/${created.site}/documents` ]; // 7. Record relationships created.relationships = [ { from: 'pages', to: 'sites', field: 'site', type: 'many-to-one' }, { from: 'navigation', to: 'sites', field: 'site', type: 'many-to-one' }, { from: 'forms', to: 'sites', field: 'site', type: 'many-to-one' }, { from: 'globals', to: 'sites', field: 'site', type: 'many-to-one' } ]; logger.info(`Site provisioning complete: ${created.site}`); res.json({ success: true, site_id: created.site, homepage_id: created.homepage, navigation_id: created.navigation, collections_created: created.collections, folders_created: created.folders, relationships: created.relationships, preview_url: `https://launch.jumpstartscaling.com/preview/site/${created.site}` }); } catch (error) { logger.error('God mode site provisioning failed:', error); res.status(500).json({ error: error.message, stack: error.stack }); } }); /** * POST /god/sites/:siteId/add-page * Add new page to existing site */ router.post('/:siteId/add-page', async (req, res) => { try { const { siteId } = req.params; const { title, slug, template = 'default' } = req.body; const pagesService = new ItemsService('pages', { schema: req.schema, accountability: req.accountability }); const pageId = await pagesService.createOne({ site: siteId, title, slug, permalink: `/${slug}`, status: 'draft', seo_title: title, blocks: [] }); res.json({ success: true, page_id: pageId, preview_url: `https://launch.jumpstartscaling.com/preview/page/${pageId}` }); } catch (error) { res.status(500).json({ error: error.message }); } }); logger.info('God Mode Site Provisioning Extension loaded'); };