Zero-config request logging built into SmallStack.
A single middleware intercepts every request and creates a RequestLog:
RequestLog
path
user
timestamp
method
ip_address
duration_ms
status_code
user_agent
Static files, health checks, and admin media are excluded by default.
Available at /activity/ for staff users.
/activity/
Stat cards: Requests today, unique visitors, active users, avg response time
Request log table: Filterable list with path, method, status, user, and color-coded response times
Access requires is_staff=True — no extra permissions needed.
is_staff=True
Key settings in settings.py:
settings.py
ACTIVITY_TRACKING_ENABLED
ACTIVITY_EXCLUDE_PATHS
/static/
/media/
ACTIVITY_RETENTION_DAYS
Pruning runs daily via django-tasks background worker. ~60 MB storage for 10k requests/day over 30 days.
django-tasks
Dashboard stats update every 10 seconds via hx-trigger="every 10s" — no page reload.
hx-trigger="every 10s"
Dual-response pattern: Views return a full page normally, or just the HTML fragment for htmx requests.
No WebSockets needed — simple polling works behind any reverse proxy.
Choose the color mode for your app.
The accent color for your app.
Choose the font family that fits your app.
Choose the gray shade for your app.
Choose the border radius factor for your app.
Choose the page layout for your app.