{% extends "base.html" %} {% block title %}Admin β AppManager{% endblock %} {% block content %}
Manage sub-apps, members, roles, flairs & access
| Application | Source / Runtime | State | Health | Actions |
|---|---|---|---|---|
|
{{ app.name }}
{% if app.is_default %}Default{% endif %}
{% if app.app_type == 'extension' %}Ext{% endif %}
/apps/{{ app.slug }}
|
{{ app.source_type|upper }}
mode: {{ config.get('APP_VENV_MODE', 'singular') }}
|
|
{% if hlog %}
{% if hlog.status == 'healthy' %}
Healthy
{% elif hlog.status == 'degraded' %}
Degraded
{% else %}
Down
{% endif %}
{% else %}
β
{% endif %}
{% if hhist %}
{{ render_sparkline(hhist) }}
{% endif %}
|
Use the forms above to install your first sub-app.
| Member | Role | Status | Last Login | Actions |
|---|---|---|---|---|
|
{{ u.name or u.email }} {{ render_user_flair_badge(u.id) }}
{{ u.email }}
|
{% if u.role == 'admin' %}Admin{% else %}{{ u.role }}{% endif %} | {% if u.is_online() %}Online{% else %}Offline{% endif %} {% if not u.is_active %}Disabled{% endif %} | {{ u.last_login_at.strftime('%Y-%m-%d %H:%M') if u.last_login_at else 'Never' }} |
Members appear here once they register or log in.
| Role | Slug | Type | Members | Actions |
|---|---|---|---|---|
| {{ r.name }} | {{ r.slug }} |
{% if r.is_system %} System {% else %} Custom {% endif %} | {{ role_counts.get(r.slug, 0) }} | {% if not r.is_system %} {% else %} Protected {% endif %} |
Click any preset flair to quickly apply it in the member assignment table.
| Member | Current Flair | Assign / Update |
|---|---|---|
|
{{ u.name or u.email }}
{{ u.email }}
|
{% if f and f.title %} {{ f.title }} {% else %} No Flair {% endif %} |
Manage member access by application, member, or full matrix view.
You need both registered users and installed sub-apps to manage permissions.
Append-only trail of security-relevant actions
| Timestamp | Action | Actor | App | Details |
|---|---|---|---|---|
| {{ e.timestamp.strftime('%Y-%m-%d %H:%M:%S') if e.timestamp else 'β' }} | {{ e.action }} | {{ e.actor_type }}{% if e.actor_id %}:{{ e.actor_id }}{% endif %} | {{ e.app_id or 'β' }} | {% if e.details_json %} {{ e.details_json[:120] }}{% if e.details_json|length > 120 %}β¦{% endif %} {% else %}β{% endif %} |
No audit log entries match the current filters.
Host-level configuration: SEO, dashboard/login, and app visibility