Files
igny8/docs/plans/4th-jan-refactor/django-plan.md

7.0 KiB

Django Admin Cleanup - Implementation Status

Status: COMPLETED (January 4, 2026)


What Was Done

1. Fixed Duplicate Model Registration

File: backend/igny8_core/business/billing/admin.py

  • AccountPaymentMethod was registered in BOTH:
    • modules/billing/admin.py (with AccountAdminMixin - KEPT)
    • business/billing/admin.py (simpler version - REMOVED)
  • Commented out the duplicate registration in business/billing/admin.py

2. Simplified Admin Site Configuration

File: backend/igny8_core/admin/site.py

  • Removed complex get_app_list() override (was 250+ lines)
  • Removed get_sidebar_list() override
  • Removed each_context() override with debug logging
  • Kept only:
    • Custom URLs for dashboard, reports, and monitoring
    • Index redirect to dashboard
  • Navigation is now handled by Unfold's built-in SIDEBAR.navigation setting

3. Added Proper Unfold Navigation Configuration

File: backend/igny8_core/settings.py

Added complete UNFOLD["SIDEBAR"]["navigation"] config with:

  • Dashboard link
  • Reports section (6 reports)
  • Accounts & Users group
  • Plans & Billing group
  • Credits group
  • Planning group
  • Writing group
  • Taxonomy group
  • Publishing group
  • Automation group
  • AI Configuration group (NEW - consolidated)
  • Global Settings group
  • Resources group
  • Logs & Monitoring group
  • Django Admin group

Each item has proper Material Design icons.

4. Added Site Logo Configuration

File: backend/igny8_core/settings.py

"SITE_ICON": {
    "light": lambda request: "/static/admin/img/logo-light.svg",
    "dark": lambda request: "/static/admin/img/logo-dark.svg",
},

Note: Logo SVG files need to be created at these paths for the logo to display.


Verification Results

# Django system check
$ docker exec igny8_backend python manage.py check
System check identified no issues (0 silenced).

# Admin registry test
$ docker exec igny8_backend python manage.py shell -c "..."
Total registered models: 63
Admin site ready!

# UNFOLD config test
Navigation items: 20

What Was NOT Done (and why)

Models NOT Hidden from Admin

These models were originally planned for removal but are actively used:

Model Reason Kept
IntegrationSettings Used by AI functions, settings, integration views
AIPrompt Used by ai/prompts.py, management commands
AuthorProfile Used by content generation
Strategy Used by content planning

Admin Sidebar Structure (Final)

Dashboard
Reports
  ├── Revenue
  ├── Usage
  ├── Content
  ├── Data Quality
  ├── Token Usage
  └── AI Cost Analysis

─── Core ───
Accounts & Users
  ├── Accounts
  ├── Users
  ├── Sites
  ├── Sectors
  └── Site Access

Plans & Billing
  ├── Plans
  ├── Subscriptions
  ├── Invoices
  ├── Payments
  ├── Credit Packages
  └── Payment Methods

Credits
  ├── Transactions
  ├── Usage Log
  └── Plan Limits

─── Content ───
Planning
  ├── Keywords
  ├── Clusters
  └── Content Ideas

Writing
  ├── Tasks
  ├── Content
  ├── Images
  └── Image Prompts

Taxonomy
  ├── Taxonomies
  ├── Relations
  ├── Attributes
  └── Cluster Maps

─── Automation ───
Publishing
  ├── Integrations
  ├── Publishing Records
  ├── Deployments
  └── Sync Events

Automation
  ├── Configs
  └── Runs

─── Configuration ───
AI Configuration
  ├── AI Models
  ├── Credit Costs
  ├── Billing Config
  └── AI Task Logs

Global Settings
  ├── Integration Settings
  ├── Module Settings
  ├── AI Prompts
  ├── Author Profiles
  └── Strategies

Resources
  ├── Industries
  ├── Industry Sectors
  └── Seed Keywords

─── System ───
Logs & Monitoring
  ├── System Health
  ├── API Monitor
  ├── Debug Console
  ├── Celery Tasks
  └── Admin Log

Django Admin
  ├── Groups
  ├── Permissions
  ├── Content Types
  └── Sessions

Files Changed

File Change
backend/igny8_core/settings.py Added full UNFOLD navigation config
backend/igny8_core/admin/site.py Simplified to ~60 lines (was ~350)
backend/igny8_core/business/billing/admin.py Commented out duplicate AccountPaymentMethod

Phase 2: AI Models & Credits Refactor - COMPLETED

IntegrationProvider Model Created

  • New model: IntegrationProvider in modules/system/models.py
  • Centralized storage for ALL external service API keys
  • Supports: AI providers, payment gateways, email services, storage
  • Migrated OpenAI and Runware API keys from GlobalIntegrationSettings
  • Admin interface added in modules/system/admin.py
  • Added to admin sidebar under "Global Settings"

AIModelConfig Enhanced

  • Added tokens_per_credit - for text models (e.g., 1000 tokens = 1 credit)
  • Added credits_per_image - for image models (e.g., 1, 5, 15 credits)
  • Added quality_tier - for frontend UI (basic/quality/premium)
  • Migration 0025_add_aimodel_credit_fields adds fields
  • Migration 0026_populate_aimodel_credits sets initial values

ModelRegistry Updated

  • Removed fallback to constants.py - database is now authoritative
  • Added get_provider(), get_api_key(), get_api_secret(), get_webhook_secret()
  • Provider caching with TTL

CreditService Updated

  • Added calculate_credits_for_image(model_name, num_images) - uses AIModelConfig.credits_per_image
  • Added calculate_credits_from_tokens_by_model(model_name, total_tokens) - uses AIModelConfig.tokens_per_credit
  • Added deduct_credits_for_image() - convenience method

Files Changed (Phase 2)

File Change
modules/system/models.py Added IntegrationProvider model
modules/system/admin.py Added IntegrationProviderAdmin
business/billing/models.py Added tokens_per_credit, credits_per_image, quality_tier to AIModelConfig
business/billing/services/credit_service.py Added image/model-based credit calculation
ai/model_registry.py Removed constants fallback, added provider methods
ai/ai_core.py Use ModelRegistry for API keys, removed constants fallback
ai/constants.py Marked MODEL_RATES, IMAGE_MODEL_RATES as DEPRECATED
ai/settings.py Use ModelRegistry for model validation
ai/validators.py Removed constants fallback
modules/system/integration_views.py Use ModelRegistry for cost calculation
modules/billing/serializers.py Added new fields to AIModelConfigSerializer

Next Steps

  1. Django Admin Cleanup - DONE
  2. Simplify AI Settings - Merge content + image settings into AccountSettings
  3. Create IntegrationProvider - DONE (API keys now in dedicated model)
  4. AIModelConfig Enhancement - DONE (tokens_per_credit, credits_per_image, quality_tier added)