{% include 'nav.html' %}

FTP Deploy Manager

Manage server profiles, bind domains, and deploy with one click

Server Profiles

({{ profiles|length }}) ?
{% if profiles %} {% for profile in profiles %}
{{ profile.label }} {% if profile.is_default %} Default {% endif %} {% if profile.protocol == 'sftp' %} SFTP {% elif profile.protocol == 'ftps' %} FTPS {% else %} FTP {% endif %}
Host: {{ profile.host }}:{{ profile.port }}
User: {{ profile.username }}
Path: {{ profile.base_path }}
{% endfor %} {% else %}
No server profiles yet. Add one to start deploying.
{% endif %}

Project Bindings

({{ bindings|length }}) ?
{% if bindings %} {% for binding in bindings %} {% endfor %}
Domain Server Target Dir Default Actions
{{ binding.domain }} {% if binding.profile %} {{ binding.profile.label }} {% else %} Profile deleted {% endif %} {{ binding.target_directory }} {% if binding.is_default %} {% else %} {% endif %}
{% if binding.domain in domain_has_package %} {% endif %}
{% else %}
No bindings yet. Bind a domain to a server profile to enable deployment.
{% endif %}

Full Pipeline

Auto-augment → Bind unbound → Deploy all → Publish storefront ?

Batch Package Rebuild

Regenerate site content for multiple domains at once ?

Site File Audit

Inventory all assets — find gaps, trigger fills

Deployment History

({{ logs|length }}) ?
{% if logs %} {% for log in logs %} {% endfor %} {% else %} {% endif %}
Domain Server Status Files Duration Started Error
{{ log.domain }} {% for p in profiles %} {% if p.id == log.ftp_profile_id %}{{ p.label }}{% endif %} {% endfor %} {% if log.status == 'completed' %} completed {% elif log.status == 'failed' %} failed {% elif log.status == 'uploading' %} uploading {% else %} {{ log.status }} {% endif %} {% if log.files_uploaded is not none and log.files_total is not none %} {{ log.files_uploaded }}/{{ log.files_total }} {% else %} — {% endif %} {% if log.duration_seconds is not none %} {{ "%.1f"|format(log.duration_seconds) }}s {% else %} — {% endif %} {% if log.started_at %} {{ log.started_at.strftime('%b %d %H:%M') }} {% elif log.created_at %} {{ log.created_at.strftime('%b %d %H:%M') }} {% else %} — {% endif %} {{ log.error_message or '' }}
No deployments yet. Bind a domain and hit deploy to get started.