{key:'primary_color',value:'#de0f1e',type:SettingType.STRING,category: SettingCategory.BRANDING,description:'Primary brand color (hex)'},
{key:'secondary_color',value:'#053d57',type:SettingType.STRING,category: SettingCategory.BRANDING,description:'Secondary brand color (hex)'},
{key:'accent_color',value:'#557f8c',type:SettingType.STRING,category: SettingCategory.BRANDING,description:'Accent color (hex)'},
{key:'session_duration_hours',value:'24',type:SettingType.NUMBER,category: SettingCategory.SECURITY,description:'Session duration in hours'},
{key:'magic_link_expiry_minutes',value:'15',type:SettingType.NUMBER,category: SettingCategory.SECURITY,description:'Magic link expiry time in minutes'},
{key:'rate_limit_requests_per_minute',value:'60',type:SettingType.NUMBER,category: SettingCategory.SECURITY,description:'API rate limit per minute'},
{key:'storage_provider',value:'s3',type:SettingType.STRING,category: SettingCategory.STORAGE,description:'Storage provider: s3 (MinIO) or local (filesystem)'},
{key:'local_storage_path',value:'./uploads',type:SettingType.STRING,category: SettingCategory.STORAGE,description:'Base path for local file storage'},
{key:'max_file_size_mb',value:'500',type:SettingType.NUMBER,category: SettingCategory.STORAGE,description:'Maximum file upload size in MB'},
{key:'avatar_max_size_mb',value:'5',type:SettingType.NUMBER,category: SettingCategory.STORAGE,description:'Maximum avatar image size in MB'},
{key:'allowed_file_types',value: JSON.stringify(['application/pdf','video/mp4','video/quicktime','image/png','image/jpeg']),type:SettingType.JSON,category: SettingCategory.STORAGE,description:'Allowed MIME types for file uploads'},
{key:'allowed_image_types',value: JSON.stringify(['image/png','image/jpeg','image/webp']),type:SettingType.JSON,category: SettingCategory.STORAGE,description:'Allowed MIME types for avatar/logo uploads'},
{key:'default_timezone',value:'Europe/Monaco',type:SettingType.STRING,category: SettingCategory.DEFAULTS,description:'Default timezone for date displays'},
{key:'whatsapp_provider',value:'META',type:SettingType.STRING,category: SettingCategory.WHATSAPP,description:'WhatsApp provider (META or TWILIO)'},
{key:'openai_api_key',value:'',type:SettingType.SECRET,category: SettingCategory.AI,description:'OpenAI API Key for AI-powered features',isSecret: true},
]
for(constsettingofsettings){
awaitprisma.systemSettings.upsert({
where:{key: setting.key},
update:{},
create: setting,
})
}
console.log(` Created ${settings.length} settings`)
{name:'Marine Plastic & Ghost Gear Cleanup',description:'Collection and processing of plastic waste, fishing nets, and marine debris from coastal and ocean environments'},
{name:'Industrial & Wastewater Marine Protection',description:'Systems reducing chemical discharge, nutrient runoff, and wastewater pollution before ocean impact'},
{name:'Circular Materials from Marine Waste',description:'Transformation of algae, fishery byproducts, and recovered ocean waste into useful products'},
],
},
{
category:'Climate Mitigation',
color:'#0284c7',
tags:[
{name:'Low-Carbon Blue Supply Chains',description:'Solutions reducing emissions in seafood logistics, cooling, and marine value chains'},
{name:'Ocean Renewable Energy',description:'Wave, tidal, offshore, and hybrid marine energy technologies'},
{name:'Marine Carbon Removal & Sequestration',description:'Approaches that remove and store carbon through ocean-linked biological or mineral pathways'},
],
},
{
category:'Technology & Innovation',
color:'#7c3aed',
tags:[
{name:'Marine Robotics & Autonomous Systems',description:'ROVs, AUVs, and marine drones used for restoration, monitoring, and intervention'},
{name:'AI Ocean Intelligence',description:'Machine learning and advanced analytics for ocean health, biodiversity, or operations optimization'},
{name:'Marine Ecotoxicology & Environmental Testing',description:'Testing platforms that evaluate product or discharge impacts on marine ecosystems'},
],
},
{
category:'Sustainable Shipping',
color:'#053d57',
tags:[
{name:'Cleaner Maritime Operations',description:'Operational innovations that reduce emissions, waste, and fuel intensity in maritime transport'},
{name:'Port Environmental Performance',description:'Technologies and practices that improve sustainability outcomes in ports and harbors'},
{name:'Marine Noise & Vessel Impact Reduction',description:'Solutions that mitigate underwater noise and ecological disturbance from vessel activity'},
],
},
{
category:'Blue Carbon',
color:'#0ea5a4',
tags:[
{name:'Seagrass & Mangrove Carbon Projects',description:'Restoration and protection programs for key blue carbon habitats'},
{name:'Blue Carbon Measurement & Verification',description:'Monitoring and MRV tools for quantifying carbon outcomes in marine ecosystems'},
{name:'Financing Blue Carbon Conservation',description:'Financial models enabling scalable protection and restoration of blue carbon assets'},
],
},
{
category:'Habitat Restoration',
color:'#16a34a',
tags:[
{name:'Coral Restoration & Reef Resilience',description:'Propagation, outplanting, and resilience strategies for coral ecosystems'},
{name:'Coastal Habitat Regeneration',description:'Recovery of dunes, wetlands, estuaries, and nearshore biodiversity hotspots'},
{name:'Biodiversity Threat Mitigation',description:'Targeted interventions for invasive species, habitat degradation, and species decline'},
],
},
{
category:'Community Capacity',
color:'#ea580c',
tags:[
{name:'Coastal Livelihood & Inclusion Models',description:'Community-led business models that improve income while protecting marine ecosystems'},
{name:'Women-Led Blue Economy Initiatives',description:'Programs that strengthen women leadership and participation in sustainable marine enterprises'},
{name:'Ocean Skills & Entrepreneurship Training',description:'Capacity-building and startup enablement for students and coastal entrepreneurs'},
],
},
{
category:'Sustainable Fishing',
color:'#059669',
tags:[
{name:'Regenerative Aquaculture',description:'Aquaculture systems integrating ecological restoration, animal welfare, and reduced environmental pressure'},
{name:'Seaweed & Algae Value Chains',description:'Cultivation and commercialization of algae or seaweed for food, feed, and biomaterials'},
{name:'Cold Chain & Post-Harvest Seafood Efficiency',description:'Technologies reducing fish loss and waste through sustainable preservation and handling'},
],
},
{
category:'Consumer Awareness',
color:'#f59e0b',
tags:[
{name:'Ocean Literacy Platforms',description:'Digital or physical tools that increase public understanding of ocean health issues'},
{name:'Behavior Change for Ocean Protection',description:'Campaigns and products that help consumers reduce harmful marine impact'},
{id:'need_clarity',label:'Need Clarity',description:'How clearly is the problem/need articulated?',scale:'1-5',weight: 20,type:'numeric',required: true},
{id:'solution_relevance',label:'Solution Relevance',description:'How relevant and innovative is the proposed solution?',scale:'1-5',weight: 25,type:'numeric',required: true},
{id:'ocean_impact',label:'Ocean Impact',description:'What is the potential positive impact on ocean conservation?',scale:'1-5',weight: 25,type:'numeric',required: true},
{id:'feasibility',label:'Feasibility & Scalability',description:'How feasible and scalable is the project?',scale:'1-5',weight: 20,type:'numeric',required: true},
{id:'team_strength',label:'Team Strength',description:'How strong and capable is the team?',scale:'1-5',weight: 10,type:'numeric',required: true},
{notificationType:'APPLICATION_SUBMITTED',category:'team',label:'Application Submitted',description:'When a team submits their application',sendEmail: true},
{notificationType:'TEAM_INVITE_RECEIVED',category:'team',label:'Team Invitation Received',description:'When someone is invited to join a team',sendEmail: true},
{notificationType:'TEAM_MEMBER_JOINED',category:'team',label:'Team Member Joined',description:'When a new member joins the team',sendEmail: false},
{notificationType:'ADVANCED_SEMIFINAL',category:'team',label:'Advanced to Semi-Finals',description:'When a project advances to semi-finals',sendEmail: true},
{notificationType:'ADVANCED_FINAL',category:'team',label:'Selected as Finalist',description:'When a project is selected as a finalist',sendEmail: true},
{notificationType:'MENTOR_ASSIGNED',category:'team',label:'Mentor Assigned',description:'When a mentor is assigned to the team',sendEmail: true},
{notificationType:'NOT_SELECTED',category:'team',label:'Not Selected',description:'When a project is not selected for the next round',sendEmail: true},
{notificationType:'WINNER_ANNOUNCEMENT',category:'team',label:'Winner Announcement',description:'When a project wins an award',sendEmail: true},
// Jury notifications
{notificationType:'ASSIGNED_TO_PROJECT',category:'jury',label:'Assigned to Project',description:'When a jury member is assigned to a project',sendEmail: true},
{notificationType:'BATCH_ASSIGNED',category:'jury',label:'Batch Assignment',description:'When multiple projects are assigned at once',sendEmail: true},
{notificationType:'ROUND_NOW_OPEN',category:'jury',label:'Round Now Open',description:'When a round opens for evaluation',sendEmail: true},
{notificationType:'REMINDER_24H',category:'jury',label:'Reminder (24h)',description:'Reminder 24 hours before deadline',sendEmail: true},
{notificationType:'REMINDER_1H',category:'jury',label:'Reminder (1h)',description:'Urgent reminder 1 hour before deadline',sendEmail: true},
{notificationType:'ROUND_CLOSED',category:'jury',label:'Round Closed',description:'When a round closes',sendEmail: false},
{notificationType:'AWARD_VOTING_OPEN',category:'jury',label:'Award Voting Open',description:'When special award voting opens',sendEmail: true},
// Mentor notifications
{notificationType:'MENTEE_ASSIGNED',category:'mentor',label:'Mentee Assigned',description:'When assigned as mentor to a project',sendEmail: true},
{notificationType:'MENTEE_UPLOADED_DOCS',category:'mentor',label:'Mentee Documents Updated',description:'When a mentee uploads new documents',sendEmail: false},
{notificationType:'MENTEE_ADVANCED',category:'mentor',label:'Mentee Advanced',description:'When a mentee advances to the next round',sendEmail: true},
{notificationType:'MENTEE_FINALIST',category:'mentor',label:'Mentee is Finalist',description:'When a mentee is selected as finalist',sendEmail: true},
{notificationType:'MENTEE_WON',category:'mentor',label:'Mentee Won',description:'When a mentee wins an award',sendEmail: true},
// Observer notifications
{notificationType:'ROUND_STARTED',category:'observer',label:'Round Started',description:'When a new round begins',sendEmail: false},
{notificationType:'ROUND_COMPLETED',category:'observer',label:'Round Completed',description:'When a round is completed',sendEmail: true},
{notificationType:'FINALISTS_ANNOUNCED',category:'observer',label:'Finalists Announced',description:'When finalists are announced',sendEmail: true},
{notificationType:'WINNERS_ANNOUNCED',category:'observer',label:'Winners Announced',description:'When winners are announced',sendEmail: true},
// Admin notifications
{notificationType:'FILTERING_COMPLETE',category:'admin',label:'AI Filtering Complete',description:'When AI filtering job completes',sendEmail: false},
{notificationType:'FILTERING_FAILED',category:'admin',label:'AI Filtering Failed',description:'When AI filtering job fails',sendEmail: true},
{notificationType:'NEW_APPLICATION',category:'admin',label:'New Application',description:'When a new application is received',sendEmail: false},
{notificationType:'SYSTEM_ERROR',category:'admin',label:'System Error',description:'When a system error occurs',sendEmail: true},