8.9 KiB
System Settings Module
Last Verified: January 20, 2026
Version: 1.8.4
Status: ✅ Active
Backend Path: backend/igny8_core/modules/system/
Frontend Path: frontend/src/pages/Settings/
Note (v1.8.0): AI & Automation settings have been consolidated into Site Settings → Automation tab. See AUTOMATION.md for the unified settings API.
Quick Reference
| What | File | Key Items |
|---|---|---|
| Global Models | modules/system/global_settings_models.py |
GlobalIntegrationSettings, GlobalAIPrompt, GlobalAuthorProfile |
| Account Models | modules/system/settings_models.py |
SystemSettings, UserSettings |
| Email Models | modules/system/email_models.py |
EmailSettings, EmailTemplate, EmailLog |
| AI Settings | modules/system/ai_settings.py |
SystemAISettings |
| Provider Model | modules/system/models.py |
IntegrationProvider |
| Views | modules/system/settings_views.py |
Settings ViewSets |
| Integration Views | modules/system/integration_views.py |
AI integration settings |
| Unified Settings | api/unified_settings.py |
v1.8.0 Site-level consolidated settings |
| Frontend | pages/Settings/*.tsx |
Settings pages |
Purpose
The System Settings module manages:
- Platform-wide global settings (API keys, defaults)
- Per-account settings overrides
- AI prompts and configurations
- Module enable/disable
- Author profiles and content strategies
Settings Hierarchy
Global Settings (Platform-wide)
↓
Account Settings (Per-account overrides)
↓
User Settings (Per-user preferences)
Priority: User > Account > Global
Global Settings Models
GlobalIntegrationSettings (Singleton)
Admin: /admin/system/globalintegrationsettings/
Purpose: Platform-wide API keys and defaults
| Field | Type | Purpose |
|---|---|---|
| openai_api_key | CharField | OpenAI API key (all accounts) |
| openai_model | CharField | Default model (gpt-4o-mini) |
| openai_temperature | Float | Default temperature (0.7) |
| openai_max_tokens | Integer | Default max tokens (8192) |
| dalle_api_key | CharField | DALL-E API key |
| dalle_model | CharField | Default model (dall-e-3) |
| dalle_size | CharField | Default size (1024x1024) |
| dalle_quality | CharField | Default quality (standard) |
| dalle_style | CharField | Default style (vivid) |
| anthropic_api_key | CharField | Anthropic API key |
| runware_api_key | CharField | Runware API key |
Critical: This is a singleton (only 1 record, pk=1). All accounts use these API keys.
GlobalAIPrompt
Admin: /admin/system/globalaiprompt/
Purpose: Default AI prompt templates
| Field | Type | Purpose |
|---|---|---|
| prompt_type | CharField | clustering/ideas/content_generation/etc. |
| prompt_value | TextField | The actual prompt text |
| description | TextField | What this prompt does |
| variables | JSON | Available variables ({keyword}, {industry}) |
| version | Integer | Prompt version |
| is_active | Boolean | Enable/disable |
GlobalAuthorProfile
Admin: /admin/system/globalauthorprofile/
Purpose: Default author persona templates
| Field | Type | Purpose |
|---|---|---|
| name | CharField | Profile name |
| description | TextField | Description |
| tone | CharField | professional/casual/technical |
| language | CharField | en/es/fr |
| structure_template | JSON | Content structure config |
| category | CharField | saas/ecommerce/blog/technical |
| is_active | Boolean | Enable/disable |
Account Settings Models
IntegrationSettings
Purpose: Per-account AI model overrides (NOT API keys)
| Field | Type | Purpose |
|---|---|---|
| account | FK | Owner account |
| integration_type | CharField | openai/runware/image_generation |
| config | JSON | Model, temperature, max_tokens overrides |
| is_active | Boolean | Enable/disable |
Important:
- Free plan cannot create overrides
- Starter/Growth/Scale can override model/settings
- API keys ALWAYS come from GlobalIntegrationSettings
ModuleEnableSettings
Purpose: Enable/disable modules per account
| Field | Type | Purpose |
|---|---|---|
| account | FK | Owner account |
| planner_enabled | Boolean | Enable Planner |
| writer_enabled | Boolean | Enable Writer |
| thinker_enabled | Boolean | Enable Thinker (AI settings) |
| automation_enabled | Boolean | Enable Automation |
| site_builder_enabled | Boolean | Enable Site Builder |
| linker_enabled | Boolean | Enable Linker |
| optimizer_enabled | Boolean | Enable Optimizer |
| publisher_enabled | Boolean | Enable Publisher |
Current Implementation:
- Controls sidebar navigation visibility
- ⚠️ Pending: Extend to other pages and references
AIPrompt (Account-Level)
Purpose: Per-account prompt customizations
| Field | Type | Purpose |
|---|---|---|
| account | FK | Owner account |
| prompt_type | CharField | Prompt type |
| prompt_value | TextField | Current prompt (custom or default) |
| default_prompt | TextField | Original default (for reset) |
| is_customized | Boolean | True if user modified |
API Endpoints
Integration Settings
| Method | Path | Handler | Purpose |
|---|---|---|---|
| GET | /api/v1/system/settings/integrations/openai/ |
Get OpenAI settings | Get current model/params |
| PUT | /api/v1/system/settings/integrations/openai/ |
Save OpenAI settings | Save overrides |
| GET | /api/v1/system/settings/integrations/image_generation/ |
Get image settings | Get DALL-E/Runware settings |
| PUT | /api/v1/system/settings/integrations/image_generation/ |
Save image settings | Save overrides |
| POST | /api/v1/system/settings/integrations/test/ |
Test connection | Test API connectivity |
Prompts
| Method | Path | Handler | Purpose |
|---|---|---|---|
| GET | /api/v1/system/prompts/ |
List prompts | Get all prompts |
| GET | /api/v1/system/prompts/{type}/ |
Get prompt | Get specific prompt |
| PUT | /api/v1/system/prompts/{type}/ |
Save prompt | Save customization |
| POST | /api/v1/system/prompts/{type}/reset/ |
Reset prompt | Reset to default |
Module Settings
| Method | Path | Handler | Purpose |
|---|---|---|---|
| GET | /api/v1/system/modules/ |
Get module settings | Get enable/disable state |
| PUT | /api/v1/system/modules/ |
Save module settings | Update enabled modules |
Settings Flow (Frontend → Backend)
Getting OpenAI Settings
- Frontend requests:
GET /system/settings/integrations/openai/ - Backend checks account's
IntegrationSettings - Gets global defaults from
GlobalIntegrationSettings - Merges: account overrides > global defaults
- Returns (NEVER includes API keys):
{
"model": "gpt-4o-mini",
"temperature": 0.7,
"max_tokens": 8192,
"using_global": true
}
Saving OpenAI Settings
- Frontend sends:
PUT /system/settings/integrations/openai/ - Backend STRIPS any API key fields (security)
- Validates account plan allows overrides
- Saves to
IntegrationSettings.config - Returns updated settings
Module Enable/Disable
How It Works (Current)
- On app load, frontend fetches module settings
useModuleStore.isModuleEnabled(name)checks stateAppSidebar.tsxconditionally renders menu items:
if (isModuleEnabled('linker')) {
workflowItems.push({
name: "Linker",
path: "/linker/content",
});
}
Current Limitations (⚠️ Pending Implementation)
- Only hides sidebar menu items
- Direct URL access still works
- Other page references still show module links
- Dashboard cards may still show disabled modules
Required Extension
Need to add ModuleGuard component to:
- Route-level protection
- Dashboard cards/widgets
- Cross-module references
- Settings page links
Frontend Pages
AI Settings (/settings/ai)
- OpenAI model selection
- Temperature and max tokens
- Image generation settings
- Test connection button
Prompts (/thinker/prompts)
- List all prompt types
- Edit prompt text
- Reset to default
- Variable reference
Module Settings (Admin Only)
- Enable/disable modules
- Per-account configuration
Common Issues
| Issue | Cause | Fix |
|---|---|---|
| Settings not saving | Plan restriction | Upgrade plan |
| API key exposed | Security flaw | Should never happen - check code |
| Module still visible | Cache stale | Clear cache, reload |
| Prompt reset not working | default_prompt missing | Re-run migration |
Planned Changes
| Feature | Status | Description |
|---|---|---|
| Module guard extension | 🔜 Pending | Extend disable to all pages, not just sidebar |
| AIModelConfig database | 🔜 Planned | Move model pricing to database |
| Strategy templates | 🔜 Planned | Global strategy library |
| Per-user preferences | 🔜 Planned | User-level setting overrides |