{% extends "base.html" %} {% block title %}Admin — AppManager{% endblock %} {% block content %}
Applications
{{ apps|length }}
{{ apps|selectattr('is_active')|list|length }} active
Members
{{ users|length }}
{{ users|selectattr('is_online')|list|length }} online
Roles
{{ roles|length }}
{{ roles|selectattr('is_system')|list|length }} system
Extensions
{{ apps|selectattr('app_type', 'equalto', 'extension')|list|length }}
UI slot plugins

Pull & Install from GitHub

Upload & Install ZIP

Installed Sub-Applications

{{ apps|length }} total
{% if apps %}
{% for app in apps %} {% set hlog = health_map.get(app.id) %} {% set hhist = health_history.get(app.id, []) %} {% endfor %}
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 app.is_active %} {% else %} {% endif %}
{% if app.requires_auth %} {% else %} {% endif %}
{% if hlog %} {% if hlog.status == 'healthy' %} Healthy {% elif hlog.status == 'degraded' %} Degraded {% else %} Down {% endif %} {% else %} {% endif %} {% if hhist %} {{ render_sparkline(hhist) }} {% endif %}
{% if app.source_type == 'git' %}
{% else %} {% endif %} {% if app.has_web_ui %} Launch {% endif %}
{% if app.is_default %} {% else %} {% endif %}
{% else %}

No sub-applications installed

Use the forms above to install your first sub-app.

{% endif %}

Registered Members

{{ members_pagination.total if members_pagination else users|length }} total
{% if members_pagination %} {% include 'admin/_members_table.html' %} {% elif users %} {# Legacy fallback: render the full list inline (no pagination context) #}
{% for u in users %} {% endfor %}
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' }}
{% else %}

No registered members

Members appear here once they register or log in.

{% endif %}

Create New Role

Configured Roles

{{ roles|length }}
{% for r in roles %} {% endfor %}
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 %}

Preset Flair Badges

Click any preset flair to quickly apply it in the member assignment table.

{% for preset in presets %}
{{ preset.title }} {{ preset.color }}
{% endfor %}

Member Flair Assignments

{{ users|length }}
{% for u in users %} {% set f = user_flairs.get(u.id) %} {% endfor %}
Member Current Flair Assign / Update
{{ u.name or u.email }}
{{ u.email }}
{% if f and f.title %} {{ f.title }} {% else %} No Flair {% endif %}
{% if f and f.title %} {% endif %}

App Access Permissions Matrix

{{ users|length }} × {{ apps|length }}
{% if users and apps %}
{% for app in apps %} {% endfor %} {% for u in users %} {% for app in apps %} {% set is_checked = perms_map.get((u.id, app.id), True) %} {% endfor %} {% endfor %}
User / Email Role
{{ app.name }}
/apps/{{ app.slug }}
{{ u.name or u.email }}
{{ u.email }}
{{ u.role }} {% if u.is_admin() %} Full {% else %} {% endif %}
{% else %}

Nothing to manage yet

You need both registered users and installed sub-apps to manage permissions.

{% endif %}
{% endblock %} {% block extra_js %} {% endblock %}