diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 2348ec0a2..3bd505d8f 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -64,7 +64,11 @@ "Bash(git push:*)", "WebFetch(domain:www.prisma.io)", "WebFetch(domain:pris.ly)", - "Bash(wc:*)" + "Bash(wc:*)", + "Bash(for pkg in /Users/rmac/Documents/metabuilder/packages/*/)", + "Bash(do if [ ! -d \"$pkg/seed\" ])", + "Bash(then basename \"$pkg\")", + "Bash(fi)" ] }, "spinnerTipsEnabled": false diff --git a/dbal/development/src/seeds/index.ts b/dbal/development/src/seeds/index.ts index 6d7322c00..9e9d31d20 100644 --- a/dbal/development/src/seeds/index.ts +++ b/dbal/development/src/seeds/index.ts @@ -59,43 +59,55 @@ export async function seedDatabase(dbal: DBALClient): Promise { } } - // 3. Load PageConfig entries from package seed/metadata.json files + // 3. Load PageConfig entries from package seed/page-config.json files for (const pkg of packagesData.records) { - const metadataPath = path.join(packagesDir, pkg.packageId, 'seed', 'metadata.json') + const seedMetadataPath = path.join(packagesDir, pkg.packageId, 'seed', 'metadata.json') - if (fs.existsSync(metadataPath)) { - const metadata = JSON.parse(fs.readFileSync(metadataPath, 'utf8')) + // Check if this package has seed data + if (fs.existsSync(seedMetadataPath)) { + const seedMetadata = JSON.parse(fs.readFileSync(seedMetadataPath, 'utf8')) - if (metadata.exports?.pages) { - for (const page of metadata.exports.pages) { - // Check if page already exists - const existing = await dbal.pageConfigs.list({ - filter: { path: page.path } - }) + // Get the reference to the actual seed data file (e.g., page-config.json) + const seedFile = seedMetadata.seed?.schema + if (seedFile) { + const seedDataPath = path.join(packagesDir, pkg.packageId, 'seed', seedFile) - if (existing.data.length === 0) { - await dbal.pageConfigs.create({ - id: `page_${pkg.packageId}_${page.path.replace(/\//g, '_')}`, - tenantId: null, - packageId: pkg.packageId, - path: page.path, - title: page.title, - description: page.description || null, - icon: null, - component: page.component, - componentTree: '{}', // Empty for now - will be populated later - level: page.level, - requiresAuth: page.requiresAuth, - requiredRole: null, - parentPath: null, - sortOrder: 0, - isPublished: page.isPublished, - params: null, - meta: null, - createdAt: BigInt(Date.now()), - updatedAt: BigInt(Date.now()) + if (fs.existsSync(seedDataPath)) { + const seedData = JSON.parse(fs.readFileSync(seedDataPath, 'utf8')) + + // seedData should be an array of PageConfig entries + const pages = Array.isArray(seedData) ? seedData : [] + + for (const page of pages) { + // Check if page already exists + const existing = await dbal.pageConfigs.list({ + filter: { path: page.path } }) - console.log(`Created PageConfig for: ${page.path}`) + + if (existing.data.length === 0) { + await dbal.pageConfigs.create({ + id: page.id || `page_${pkg.packageId}_${page.path.replace(/\//g, '_')}`, + tenantId: page.tenantId || null, + packageId: pkg.packageId, + path: page.path, + title: page.title, + description: page.description || null, + icon: page.icon || null, + component: page.component, + componentTree: page.componentTree || '{}', // Empty for now - will be populated later + level: page.level || 0, + requiresAuth: page.requiresAuth === true, + requiredRole: page.requiredRole || null, + parentPath: page.parentPath || null, + sortOrder: page.sortOrder || 0, + isPublished: page.isPublished === true, + params: page.params || null, + meta: page.meta || null, + createdAt: BigInt(Date.now()), + updatedAt: BigInt(Date.now()) + }) + console.log(`Created PageConfig for: ${page.path}`) + } } } } diff --git a/packages/ui_home/package.json b/packages/ui_home/package.json index 0de38e9f4..eed369b1d 100644 --- a/packages/ui_home/package.json +++ b/packages/ui_home/package.json @@ -3,25 +3,25 @@ "packageId": "ui_home", "name": "Home Page", "version": "1.0.0", - "description": "Level 1 home page with hero, features, about, and contact sections - the original MetaBuilder landing experience", - "author": "MetaBuilder", + "description": "Landing page with hero, features, about, and contact sections - the MetaBuilder home experience", + "author": "MetaBuilder Contributors", "license": "MIT", + "repository": "https://github.com/metabuilder/metabuilder", + "homepage": "https://metabuilder.dev", + "bugs": "https://github.com/metabuilder/metabuilder/issues", "category": "ui", "icon": "static_content/icon.svg", - "minLevel": 1, + "minLevel": 0, "primary": true, + "keywords": ["home", "landing", "hero", "ui", "public"], "dependencies": { - "ui_permissions": "*", - "ui_header": "*", - "ui_footer": "*" + "ui_header": "^1.0.0", + "ui_footer": "^1.0.0" }, "devDependencies": { "testing": "*" }, "exports": { - "pages": [ - "level1" - ], "components": [ "home_page", "hero_section", @@ -40,8 +40,11 @@ "navigate" ] }, + "seed": { + "schema": "seed/page-config.json" + }, "tests": { - "suites": [ + "scripts": [ "tests/metadata.test.json" ] } diff --git a/packages/ui_home/seed/metadata.json b/packages/ui_home/seed/metadata.json index 1ac142acf..26d1a43bc 100644 --- a/packages/ui_home/seed/metadata.json +++ b/packages/ui_home/seed/metadata.json @@ -1,23 +1,16 @@ { + "$schema": "https://metabuilder.dev/schemas/package-metadata.schema.json", "packageId": "ui_home", "name": "Home Page", "version": "1.0.0", - "description": "Seed data for ui_home package - defines the home page", - "author": "MetaBuilder Team", + "description": "Seed data for ui_home package", + "author": "MetaBuilder Contributors", + "license": "MIT", "category": "ui", - "exports": { - "components": [], - "pages": [ - { - "path": "/", - "title": "MetaBuilder", - "description": "Data-driven application platform", - "component": "home_page", - "level": 0, - "requiresAuth": false, - "isPublished": true - } - ] - }, - "dependencies": [] + "minLevel": 0, + "primary": true, + "keywords": ["home", "landing", "seed-data"], + "seed": { + "schema": "page-config.json" + } } diff --git a/packages/ui_home/seed/page-config.json b/packages/ui_home/seed/page-config.json new file mode 100644 index 000000000..f1287ca1c --- /dev/null +++ b/packages/ui_home/seed/page-config.json @@ -0,0 +1,15 @@ +[ + { + "id": "page_ui_home_root", + "path": "/", + "title": "MetaBuilder", + "description": "Data-driven application platform", + "packageId": "ui_home", + "component": "home_page", + "level": 0, + "requiresAuth": false, + "isPublished": true, + "sortOrder": 0, + "icon": "🏠" + } +]