Django Admin Forge — Because the default admin deserved better
Overview
Built a modern, customizable UI layer on top of Django’s admin—keeping everything developers love (models, permissions, ModelAdmin) while replacing the part everyone tolerates: the interface.
Django Admin Forge upgrades the admin experience with better navigation, theming, dashboards, and usability—without forcing developers to relearn how Django works (because no one asked for that).
The problem
Django’s admin is powerful, but… let’s be honest:
- The UI feels outdated for modern applications
- Customization is possible, but painful and inconsistent
- Navigation breaks down as projects scale
- There’s no real dashboard or high-level visibility
- Most teams either live with it—or spend too much time reinventing it
So you end with a production-grade backend wrapped in a 2008 UI.
My role
Sole engineer responsible for:
- Designing and building the package architecture
- Extending Django’s
AdminSitewithout breaking core patterns - Creating a theming and configuration system
- Improving UX across changelists, forms, and navigation
- Packaging, documentation, and distribution (PyPI)
Also responsible for making sure this didn’t turn into a polished UI with everything else broken.
Key design decisions
Django-first, not Django-replacement
- Built as a drop-in
AdminSitereplacement (forge_admin_site) - Fully compatible with existing models, permissions, and
ModelAdmin
Developers keep their workflow—just with less suffering.
Configuration over customization
- Centralized config via
DJANGO_ADMIN_FORGE - No need to override templates for common use cases
Example:
1
2
3
4
5
DJANGO_ADMIN_FORGE = {
"brand_name": "Forge Admin",
"accent_color": "green",
"default_theme": "system",
}
Copying templates just to change a color shouldn’t be the default workflow.
UI/UX as a first-class concern
Focused on real usability improvements:
- Sidebar navigation with search
- Command/search bar in header
- Collapsible layout
- Improved changelist and forms
- Meaningful empty states (instead of existential ones)
Theming that doesn’t fight you
- Light, dark, and system themes
- Configurable accent colors
- Branding support (logo, tagline, identity)
Making internal tools feel like actual products.
Key engineering challenges & trade-offs
Extending Django Admin without breaking it
- Challenge: Django admin is powerful but tightly coupled
- Approach: Hook into
AdminSitecleanly instead of rewriting behavior
Goal: enhance, not fight the framework.
Balancing flexibility vs simplicity
- Challenge: Make it customizable without becoming another framework
- Trade-off: Opinionated defaults with controlled extension points
Template overrides vs maintainability
- Challenge: Django admin relies heavily on templates
- Approach: Strategic overrides instead of full replacement
Avoided the “upgrade Django → everything breaks” experience.
UX improvements without performance cost
- Challenge: Rich UI (search, dashboards, filters) vs admin responsiveness
- Approach: Lightweight enhancements, minimal overhead
Core capabilities
Modern admin interface
- Clean layout with collapsible sidebar
- Sidebar search and navigation tabs
- Header command/search bar
Dashboard & analytics
- Configurable KPI cards powered by your models
- Simple query-based metrics
- Extensible for future analytics
Improved data management
Enhanced changelist:
- Filters modal
- Bulk actions
- Better empty states
Improved change forms:
- Cleaner layout
- Better usability
Customization & branding
- Config-driven branding (name, logo, tagline)
- Theme system (light/dark/system)
- Accent color tokens
- Menu icons and navigation control
Impact & use case
- Reduces friction in day-to-day admin usage
- Improves internal tooling experience for teams
- Saves time otherwise spent customizing Django admin manually
- Makes Django admin viable for more polished production environments
What’s next
- Expand analytics capabilities beyond simple counts
- Improve extensibility for custom components
- Add richer interactions to the command bar
- Continue refining UI/UX based on real-world usage
Links
- PyPI: django-admin-forge