{% extends 'base.html' %}
{% block title %}Changelog - AgentForms{% endblock %}
{% block head_extra %}
<meta name="description" content="Latest updates and feature releases for AgentForms.">
<link rel="canonical" href="https://agentforms.io/changelog">
<meta property="og:type" content="website">
<meta property="og:url" content="https://agentforms.io/changelog">
<meta property="og:title" content="Changelog - AgentForms">
<meta property="og:description" content="Latest updates and feature releases for AgentForms.">
<meta property="og:image" content="https://agentforms.io/static/og-image.png">
<meta property="og:site_name" content="AgentForms">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Changelog - AgentForms">
<meta name="twitter:description" content="Latest updates and feature releases for AgentForms.">
<meta name="twitter:image" content="https://agentforms.io/static/og-image.png">
<link rel="icon" href="{{ url_for('static', filename='images/logo.svg') }}" type="image/svg+xml">
<style nonce="{{ csp_nonce }}">
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: #f8fafc; color: #1e293b; line-height: 1.6; }
.container { max-width: 800px; margin: 0 auto; padding: 2rem 1.5rem; }
header { text-align: center; margin-bottom: 3rem; }
.logo { margin-bottom: 1rem; }
header h1 { font-size: 2rem; margin-bottom: 0.5rem; }
header p { color: #64748b; font-size: 1.125rem; }
.version { margin-bottom: 2.5rem; }
.version-header { display: flex; align-items: center; gap: 1rem; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid #e2e8f0; }
.version-tag { background: #3b82f6; color: white; padding: 0.25rem 0.75rem; border-radius: 999px; font-size: 0.875rem; font-weight: 600; }
.version-date { color: #64748b; font-size: 0.875rem; }
.changes { list-style: none; padding: 0; }
.changes li { padding: 0.5rem 0; padding-left: 1.5rem; position: relative; }
.changes li::before { content: ''; position: absolute; left: 0; top: 0.85rem; width: 6px; height: 6px; background: #94a3b8; border-radius: 50%; }
.changes li.new::before { background: #22c55e; }
.changes li.fix::before { background: #f59e0b; }
.changes li.sec::before { background: #ef4444; }
.changes li.improve::before { background: #3b82f6; }
.changes li.breaking::before { background: #a855f7; }
.changes li code { background: #f1f5f9; padding: 0.125rem 0.375rem; border-radius: 4px; font-size: 0.875em; }
footer { text-align: center; margin-top: 4rem; padding: 2rem 0; border-top: 1px solid #e2e8f0; color: #94a3b8; font-size: 0.875rem; }
a { color: #3b82f6; text-decoration: none; }
</style>
{% endblock %}
{% block content %}
<div class="container">
<header>
<div class="logo">
<img src="{{ url_for('static', filename='images/logo.svg') }}" alt="AgentForms" height="40">
</div>
<h1>Changelog</h1>
<p>What's new in AgentForms</p>
</header>
<div class="version">
<div class="version-header">
<span class="version-tag">v1.5.0</span>
<span class="version-date">June 26, 2026</span>
</div>
<ul class="changes">
<li class="new">AI chain suggestions — LLM-powered workflow suggester with keyword scoring and template fallback at <code>/api/chains/suggest</code></li>
<li class="new">7 chain templates: <code>client_onboarding</code>, <code>quote_approval</code>, <code>signup_welcome</code>, <code>team_notification</code>, <code>submission_alert</code>, <code>lead_nurture</code>, <code>follow_up_reminder</code></li>
<li class="new">Full suggestion lifecycle API: list, get, edit, deploy, validate, quota (10 endpoints at <code>/api/chains/*</code>)</li>
<li class="new">OpenAPI 3.0 documentation at <code>/api/docs</code> covering 28 endpoints</li>
<li class="improve">Landing page SEO — og tags, Twitter cards, canonical URLs, JSON-LD structured data</li>
<li class="improve">Test suite expanded to 309/309 passing (100%)</li>
<li class="fix">Chain quota function refactored to resolve tier internally — no stale tier data</li>
<li class="fix">Re-exported <code>CHAIN_TEMPLATES</code> for direct import by suggester and tests</li>
</ul>
</div>
<div class="version">
<div class="version-header">
<span class="version-tag">v1.4.0</span>
<span class="version-date">June 24, 2026</span>
</div>
<ul class="changes">
<li class="sec">Content Security Policy (CSP) headers with nonced inline scripts</li>
<li class="sec">bcrypt password hashing replacing Werkzeug defaults</li>
<li class="sec">SSRF protection for outbound HTTP requests in chain engine</li>
<li class="sec">Encrypted PII storage with AES-256-GCM and per-user keys</li>
<li class="new">Rebrand to "API-First Form & Document Platform"</li>
<li class="new">Landing page full rewrite — problem → solution → flow → CTA with "one API call" value proposition</li>
<li class="new">Session-based admin auth replacing HTTP Basic Auth</li>
<li class="new">Email verification enforced on signup</li>
<li class="new">Account deletion endpoint (GDPR right to erasure)</li>
<li class="new">Off-server backups via SCP</li>
<li class="new">Cookie consent banner (GDPR compliant)</li>
<li class="new">Custom error pages (404, 403, 500)</li>
<li class="new">robots.txt, security.txt, sitemap.xml</li>
<li class="improve">Container renamed to <code>agentforms-app</code> for clarity</li>
<li class="improve">Added <code>is_admin</code> user role flag</li>
<li class="fix">Stripe price IDs corrected for Teams/Teams+ tiers</li>
<li class="fix">DKIM/DMARC DNS records activated</li>
</ul>
</div>
<div class="version">
<div class="version-header">
<span class="version-tag">v1.3.0</span>
<span class="version-date">June 23, 2026</span>
</div>
<ul class="changes">
<li class="new">Agent orchestration layer — multi-agent workflows with <code>SharedContext</code> dict</li>
<li class="new">Orchestrator engine with sequential, parallel, and ordered execution strategies</li>
<li class="new">Agent Registry API at <code>/api/v2/agents</code> — full CRUD with encrypted API keys</li>
<li class="new">Agent Protocol callback endpoint at <code>/api/v2/agent-protocol/callback</code></li>
<li class="new">Agent health check and OpenAPI spec at <code>/api/v2/agent-protocol/health</code> and <code>/api/v2/agent-protocol/spec</code></li>
<li class="new">Tier-gated agent deployment (free: 0, starter: 2, pro: 10, teams: 50, teams+: unlimited)</li>
<li class="new"><code>agent_call</code> and <code>workflow</code> step types in chain engine</li>
<li class="new">15 form templates across multiple categories (template seed library)</li>
<li class="fix"><code>_handle_workflow</code> handler definition order fixed — prevents <code>NameError</code> on import</li>
</ul>
</div>
<div class="version">
<div class="version-header">
<span class="version-tag">v1.2.0</span>
<span class="version-date">June 19, 2026</span>
</div>
<ul class="changes">
<li class="new">Multi-step action chains — chain execution engine with 8 step types: <code>http_request</code>, <code>wait</code>, <code>email</code>, <code>log</code>, <code>condition</code>, <code>parallel</code>, <code>agent_call</code>, <code>workflow</code></li>
<li class="new">Chain routing model — steps reference each other by ID via <code>on_success</code>/<code>on_failure</code> keys</li>
<li class="new">Template interpolation: <code>{% raw %}{{email}}{% endraw %}</code>, <code>{% raw %}{{fields.name}}{% endraw %}</code>, <code>{% raw %}{{data.priority}}{% endraw %}</code> with nested dot access</li>
<li class="new">Chain validation endpoint: <code>POST /api/sites/:site_id/actions/validate/chain</code></li>
<li class="new">Chain template endpoints: list at <code>GET /api/sites/:site_id/actions/chains/templates</code>, clone at <code>POST .../templates/:id/clone</code></li>
<li class="new">3 initial chain templates: <code>quote_approval</code> (5 steps), <code>priority_notification</code> (3 steps, conditional), <code>follow_up_sequence</code> (5 steps)</li>
<li class="new">Wait step via RQ <code>enqueue_at</code> — supports <code>duration_seconds</code> or human-readable (<code>30s</code>, <code>5m</code>, <code>1h</code>, <code>2d</code>, <code>1w</code>)</li>
<li class="new"><code>chains</code> queue registered with RQ worker</li>
<li class="fix"><code>evaluate_condition()</code> signature corrected — takes <code>(field_def, all_data)</code></li>
<li class="fix">Chain config JSON auto-parsed before engine execution</li>
<li class="fix">Step type mismatch fixed — <code>webhook</code> → <code>http_request</code> in DB configs</li>
</ul>
</div>
<div class="version">
<div class="version-header">
<span class="version-tag">v1.0.0</span>
<span class="version-date">May 2026</span>
</div>
<ul class="changes">
<li class="new">Form builder with drag-and-drop field types (text, email, select, checkbox, file upload, signature)</li>
<li class="new">Submission tracking with real-time SSE (Server-Sent Events)</li>
<li class="new">Stripe subscription billing — Free, Starter ($19/mo), Pro ($49/mo), Teams ($99/mo)</li>
<li class="new">Encrypted PII storage (email, name) with AES-256-GCM</li>
<li class="new">Rate limiting & honeypot spam protection</li>
<li class="new">Form versioning & A/B testing</li>
<li class="new">Document generation (PDF/DOCX) from form submissions</li>
<li class="new">Action pipeline — webhook, email, log, redirect, document triggers</li>
<li class="new">15 form template seeds across multiple categories</li>
</ul>
</div>
</div>
{% endblock %}