FTP Deploy Manager
Manage server profiles, bind domains, and deploy with one clickDeploying...
Initializing...
0%
Server Profiles
({{ profiles|length }}) ?New Server Profile
⚠️ FTP is insecure — passwords sent in plaintext. Use SFTP instead.
Edit Server Profile
⚠️ FTP is insecure — passwords sent in plaintext. Use SFTP instead.
{% if profiles %}
{% for profile in profiles %}
{% endfor %}
{% else %}
{{ 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 }}
No server profiles yet. Add one to start deploying.
{% endif %}
Project Bindings
({{ bindings|length }}) ?Bind Domain to Server
{% if bindings %}
{% else %}
| 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 %}
|
No bindings yet. Bind a domain to a server profile to enable deployment.
{% endif %}
Full Pipeline
Auto-augment → Bind unbound → Deploy all → Publish storefront ?
⏳
Augments
Fills every site to min 2 augments (AI-generated widgets)
⏳
Bind Unbound
Binds all unbound domains to the default FTP profile
⏳
Deploy All
Pushes every bound site to its server
⏳
Storefront
Regenerates and publishes the marketplace
Starting...
0%
Batch Package Rebuild
Regenerate site content for multiple domains at once ?
0 selected
{% set bound_domains = bindings | map(attribute='domain') | list %}
{% for d in domains %}
{% if d.domain in domain_has_package %}
{% endif %}
{% endfor %}
Site File Audit
Inventory all assets — find gaps, trigger fills
No audit data yet. Click Run Audit to scan all packages.
Scanning all packages...
Deployment History
({{ logs|length }}) ? Auto-refreshing| 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. | ||||||