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 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 […]
How to Manage Campaigns in Horilla CRM with Members, Metrics, and Smart Insights
The campaigns module tracks members, responses, and ROI metrics with signals updating stats when leads and opportunities change. This post is Part 20 of 28 in the Horilla CRM Technical Blog series. What are marketing campaigns in Horilla CRM? Marketing campaigns in Horilla CRM enable you to: Opportunity attribution An Opportunity has primary_campaign_source for its […]
A Complete Guide to Importing and Exporting Data in Horilla CRM
horilla.contrib.core owns the CSV/XLSX import wizard and ExportSchedule. List views use HorillaBulkExportMixin; Celery runs process_scheduled_exports. This post is Part 15 of 28 in the Horilla CRM Technical Blog series. What is import and export in Horilla CRM? Import and export in Horilla CRM enable you to: Import and export ownership The import/export foundation lives in […]
Everything You Need to Know About Global Search in Horilla CRM
GlobalSearchView (horilla.contrib.generics) queries models in FEATURE_REGISTRY[‘global_search_models’], with company scoping and view_own_* row filters via get_allowed_user_ids(). This post is Part 14 of 28 in the Horilla CRM Technical Blog series. What is global search in Horilla CRM? Global search in Horilla CRM enables you to: Global search entry point Global search is implemented by GlobalSearchView in […]