fix: Intelligence Library schema - add slug, tech_stack, identity fields and geo_clusters/geo_locations collections

This commit is contained in:
cawcenter
2025-12-14 09:34:52 -05:00
parent 65ea0971aa
commit 6b1000c136
2 changed files with 264 additions and 5 deletions

View File

@@ -0,0 +1,77 @@
#!/usr/bin/env python3
"""
Fix Intelligence Library schema mismatches
"""
import json
with open('unified_schema.json', 'r') as f:
schema = json.load(f)
# Fix avatar_intelligence collection
for collection in schema:
if collection['collection'] == 'avatar_intelligence':
# Replace fields with what frontend expects
collection['fields'] = [
{"field": "avatar_key", "type": "string", "meta": {"interface": "input", "required": True, "note": "Unique slug"}},
{"field": "slug", "type": "string", "meta": {"interface": "input", "required": True, "note": "URL-friendly identifier"}},
{"field": "base_name", "type": "string", "meta": {"interface": "input", "required": True}},
{"field": "wealth_cluster", "type": "string", "meta": {"interface": "select-dropdown", "options": {"choices": [
{"text": "High Net Worth", "value": "high_net_worth"},
{"text": "Mass Affluent", "value": "mass_affluent"},
{"text": "Emerging", "value": "emerging"}
]}}},
{"field": "business_niches", "type": "json", "meta": {"interface": "list", "note": "Array of niche strings"}},
{"field": "tech_stack", "type": "json", "meta": {"interface": "list", "note": "Technologies used"}},
{"field": "identity_male", "type": "string", "meta": {"interface": "input"}},
{"field": "identity_female", "type": "string", "meta": {"interface": "input"}},
{"field": "identity_neutral", "type": "string", "meta": {"interface": "input"}},
{"field": "pain_points", "type": "json", "meta": {"interface": "list"}},
{"field": "goals", "type": "json", "meta": {"interface": "list"}},
{"field": "data", "type": "json", "meta": {"interface": "input-code", "options": {"language": "json"}, "note": "Additional JSON data"}}
]
print("✅ Fixed avatar_intelligence fields")
# Add geo_clusters collection
geo_clusters = {
"collection": "geo_clusters",
"meta": {"icon": "map", "note": "Geographic clusters for targeting"},
"fields": [
{"field": "cluster_key", "type": "string", "meta": {"interface": "input", "required": True}},
{"field": "name", "type": "string", "meta": {"interface": "input", "required": True}},
{"field": "state", "type": "string", "meta": {"interface": "input"}},
{"field": "description", "type": "text", "meta": {"interface": "input-multiline"}},
{"field": "data", "type": "json", "meta": {"interface": "input-code", "options": {"language": "json"}}}
]
}
# Add geo_locations collection
geo_locations = {
"collection": "geo_locations",
"meta": {"icon": "location_on", "note": "Individual locations within clusters"},
"fields": [
{"field": "cluster", "type": "uuid", "meta": {"interface": "select-dropdown-m2o", "special": ["m2o"]}},
{"field": "city", "type": "string", "meta": {"interface": "input", "required": True}},
{"field": "state", "type": "string", "meta": {"interface": "input"}},
{"field": "zip", "type": "string", "meta": {"interface": "input"}},
{"field": "population", "type": "integer", "meta": {"interface": "input"}},
{"field": "coordinates", "type": "json", "meta": {"interface": "input-code", "options": {"language": "json"}, "note": "{lat, lng}"}}
]
}
# Check if collections exist
has_geo_clusters = any(c['collection'] == 'geo_clusters' for c in schema)
has_geo_locations = any(c['collection'] == 'geo_locations' for c in schema)
if not has_geo_clusters:
schema.append(geo_clusters)
print("✅ Added geo_clusters collection")
if not has_geo_locations:
schema.append(geo_locations)
print("✅ Added geo_locations collection")
# Save
with open('unified_schema.json', 'w') as f:
json.dump(schema, f, indent=4)
print(f"\n✅ Intelligence schema fixed! Total collections: {len(schema)}")

View File

@@ -869,35 +869,109 @@
"meta": {
"interface": "input",
"required": true,
"unique": true
"note": "Unique slug"
}
},
{
"field": "slug",
"type": "string",
"meta": {
"interface": "input",
"required": true,
"note": "URL-friendly identifier"
}
},
{
"field": "base_name",
"type": "string",
"meta": {
"interface": "input"
"interface": "input",
"required": true
}
},
{
"field": "wealth_cluster",
"type": "string",
"meta": {
"interface": "input"
"interface": "select-dropdown",
"options": {
"choices": [
{
"text": "High Net Worth",
"value": "high_net_worth"
},
{
"text": "Mass Affluent",
"value": "mass_affluent"
},
{
"text": "Emerging",
"value": "emerging"
}
]
}
}
},
{
"field": "business_niches",
"type": "json",
"meta": {
"interface": "input-code"
"interface": "list",
"note": "Array of niche strings"
}
},
{
"field": "tech_stack",
"type": "json",
"meta": {
"interface": "list",
"note": "Technologies used"
}
},
{
"field": "identity_male",
"type": "string",
"meta": {
"interface": "input"
}
},
{
"field": "identity_female",
"type": "string",
"meta": {
"interface": "input"
}
},
{
"field": "identity_neutral",
"type": "string",
"meta": {
"interface": "input"
}
},
{
"field": "pain_points",
"type": "json",
"meta": {
"interface": "list"
}
},
{
"field": "goals",
"type": "json",
"meta": {
"interface": "list"
}
},
{
"field": "data",
"type": "json",
"meta": {
"interface": "input-code"
"interface": "input-code",
"options": {
"language": "json"
},
"note": "Additional JSON data"
}
}
]
@@ -1774,5 +1848,113 @@
}
}
]
},
{
"collection": "geo_clusters",
"meta": {
"icon": "map",
"note": "Geographic clusters for targeting"
},
"fields": [
{
"field": "cluster_key",
"type": "string",
"meta": {
"interface": "input",
"required": true
}
},
{
"field": "name",
"type": "string",
"meta": {
"interface": "input",
"required": true
}
},
{
"field": "state",
"type": "string",
"meta": {
"interface": "input"
}
},
{
"field": "description",
"type": "text",
"meta": {
"interface": "input-multiline"
}
},
{
"field": "data",
"type": "json",
"meta": {
"interface": "input-code",
"options": {
"language": "json"
}
}
}
]
},
{
"collection": "geo_locations",
"meta": {
"icon": "location_on",
"note": "Individual locations within clusters"
},
"fields": [
{
"field": "cluster",
"type": "uuid",
"meta": {
"interface": "select-dropdown-m2o",
"special": [
"m2o"
]
}
},
{
"field": "city",
"type": "string",
"meta": {
"interface": "input",
"required": true
}
},
{
"field": "state",
"type": "string",
"meta": {
"interface": "input"
}
},
{
"field": "zip",
"type": "string",
"meta": {
"interface": "input"
}
},
{
"field": "population",
"type": "integer",
"meta": {
"interface": "input"
}
},
{
"field": "coordinates",
"type": "json",
"meta": {
"interface": "input-code",
"options": {
"language": "json"
},
"note": "{lat, lng}"
}
}
]
}
]