How to Create a Navigation Bar Using Horilla’s HorillaNavView
A CRM list page usually has several things above the records. Users may need to search for records, apply filters, switch between saved views, change the layout, reload the page, or create a new record. These controls also need to work properly with permissions and htmx. If every module builds these elements separately, the same […]
A Complete Guide on How to Create a List View Using HorillaListView
A good list view is one of the most important parts of a CRM application. Whether you are displaying contacts, leads, opportunities, tasks, or any other type of record, users usually expect more than just a basic table. They need to search through records, apply filters, sort information, perform bulk actions, and quickly open individual […]
How to Create Child Campaigns and Build Campaign Hierarchies in Horilla CRM
Marketing campaigns often start with one big idea and gradually grow into several smaller initiatives. A product launch, for example, might include separate campaigns for different regions, customer groups, social media channels, email promotions, or events. When all of these campaigns are managed separately, it can become difficult to understand how they are connected. Horilla […]
How to Set Up Contact Hierarchies with Parent-Child Relationships in Horilla CRM
As your customer and business network grows, simply storing contact information isn’t always enough. Understanding how contacts are connected—whether through reporting structures, departments, or referral relationships—helps your team navigate information more efficiently and maintain better records. Horilla CRM makes this easy with the Parent Contact feature, which allows you to create parent-child relationships between contacts. […]
How to Deploy Horilla CRM to Production with Docker, PostgreSQL, Redis & ASGI
Production Horilla CRM runs PostgreSQL, Redis, Gunicorn/Uvicorn ASGI, Celery workers, and optional Nginx — typically orchestrated with Docker Compose. This post is Part 28 of 28 in the Horilla CRM Technical Blog series. What is production deployment for Horilla CRM? production deployment for Horilla CRM enables you to: ASGI container entrypoint The production container is […]
How to Use Audit History and Recycle Bin in Horilla CRM
HorillaCoreModel includes AuditlogHistoryField for field-level history. Deleted records can land in the recycle bin for restore before permanent removal. This post is Part 27 of 28 in the Horilla CRM Technical Blog series. What is an audit log and recycle bin? audit log and recycle bin enable you to: Audit trail integration Horilla CRM uses […]
How Horilla CRM Handles Background Tasks Using Celery, Beat, and APScheduler
Horilla CRM uses Celery for async tasks and Celery Beat for schedules. AppLauncher merges per-app beat entries at startup; APScheduler handles select in-process jobs. This post is Part 26 of 28 in the Horilla CRM Technical Blog series. What are background jobs in Horilla CRM? Background jobs in Horilla CRM enable you to: Per-app beat […]
The Ultimate Guide to Calendar Integration in Horilla CRM
horilla.contrib.calendar renders CRM calendars and optional Google Calendar sync. Meetings are Activity rows with activity_type meetings. This post is Part 25 of 28 in the Horilla CRM Technical Blog series. What is calendar integration? Calendar integration enables you to: Calendar data model and meeting source horilla.contrib.calendar provides the calendar preferences and external Google Calendar integration. […]
How to Use Keyboard Shortcuts in Horilla CRM for Faster Navigation
horilla.contrib.keys registers global hotkeys — search, navigation, create actions — with per-user preference storage via API. This post is Part 24 of 28 in the Horilla CRM Technical Blog series. What is keyboard shortcuts in Horilla CRM? Keyboard shortcuts in Horilla CRM enable you to: Browser event handling The client integration is short_key.js. Its event […]
How to Implement Dynamic Brand Colors in Horilla CRM with Tailwind CSS
horilla.contrib.theme stores HorillaColorTheme palettes and per-company CompanyTheme. register_html injects runtime Tailwind config into head_end. This post is Part 23 of 28 in the Horilla CRM Technical Blog series. What is theming in Horilla CRM? Theming in Horilla CRM enables you to: Theme module boundaries The theming implementation lives in horilla.contrib.theme. It is a Django app, […]
A Complete Guide to the Horilla CRM Report Builder
horilla.contrib.reports builds pivot reports with folders, sharing, charts, and export. Only models in report_models appear in the module picker. This post is Part 22 of 28 in the Horilla CRM Technical Blog series. What is the reports builder? The reports builder enables you to: Feature registration The reports feature is registered as report_models. This feature […]
Everything You Need to Know About Sales Forecasting in Horilla CRM
Forecasting rolls up opportunities by period and category using configurable forecast types and conditions, visualized with ECharts. This post is Part 21 of 28 in the Horilla CRM Technical Blog series. What is sales forecasting in Horilla CRM? Sales forecasting in Horilla CRM enables you to: Calculation service ForecastCalculator is the domain service that converts […]