Changelog
What's been built
ContactFire shipped 14 product phases. Here is every capability, from the first form submission endpoint to live draft saving.
14
Phase 14
Live Draft Saving & Partial Submissions
- Partial submission API — POST /api/public/forms/{formId}/partial saves in-progress data
- GET /api/public/forms/{formId}/partial resumes a draft from a sessionId
- sessionId stored in browser localStorage for cross-visit resume
- Live inbox tab shows real-time draft data for LDS-enabled forms
- Idle notification fires after 10 minutes of inactivity on a draft
- Full submission with matching sessionId upgrades the partial record
13
Phase 13
Chat Widget
- Conversational chat overlay for any page
- Astro component: <ContactFireChat> with token and formId props
- JS snippet for non-Astro sites: data-token and data-form-id attributes
- Live Draft Saving built into the chat widget by default
- Fully branded with ContactFire flame colour scheme
12
Phase 12
Database-Driven Pricing
- Plans table stores all plan metadata — name, slug, limits, overage settings
- plan_pricing table supports monthly, yearly, lifetime, and trial billing models
- plan_features table with rich feature descriptions per plan
- GET /api/plans and GET /api/plans/{planId} return live pricing data
- Admin pricing dashboard at /dashboard/administration/pricing
- $1 first-month trial toggle per plan
11
Phase 11
Form Studio — AI Generation & Import/Export
- AI form generation: describe your form in plain language, get a complete schema
- Autosave with undo/redo history (up to 30 states)
- Import form schema from JSON
- Export form schema to JSON for backup or reuse
- Duplicate a published form
10
Phase 10
Form Studio — Multi-Step & Conditional Logic
- Sections create multi-step forms with progress indicators
- Conditional rules: show/hide fields based on other field values
- Per-section titles and descriptions
- Section navigation: back/next buttons auto-generated by embed script
- Conditional rules evaluated client-side in real time
09
Phase 9
Form Studio — Core Builder
- Form Studio visual builder launched
- 26 field types: text, textarea, email, phone, number, url, date, time, datetime, select, multi-select, checkbox, radio group, toggle, range slider, star rating, file upload, image upload, signature pad, color picker, address, name (multi-part), payment (Stripe), matrix, hidden, heading/description (display)
- Drag-and-drop field ordering
- Per-field validation rules: required, min/max length, pattern, min/max value
- Custom error messages per validation rule
- Publish / Unpublish toggle
- Copy embed code (HTML, JS, Astro) with one click
- Per-form notification recipients
- GET /api/public/forms/{formId} returns published form schema
- POST /api/public/forms/{formId}/submit accepts form data
08
Phase 8
Notifications & Weekly Digest
- Real-time email notification on every accepted submission
- Reply-To header set to visitor's email field value
- Per-form recipient override in Form Studio settings
- Token-level recipient override on embed tokens and API keys
- Notification precedence chain: form → token → account notification email → account email
- Optional weekly digest email (Mondays)
07
Phase 7
Spam Filtering
- Honeypot field: _honeypot — non-empty value silently discards submission
- Edge rate limiting via Cloudflare Workers KV: 10 req/IP/minute
- Server-side heuristic checks: speed, header anomalies, known spam patterns
- Flagged submissions stored with spam=true — not deleted
- Spam inbox tab for review and recovery
- API returns 200 for spam (submitter unaware)
06
Phase 6
Embed Tokens
- Embed token type introduced (cf_embed_...)
- Public-safe tokens — designed to be shipped in frontend code
- Domain allowlist per token
- GET /api/embed-code/{tokenId}?format=astro|html|js returns ready-to-paste code
- GET /api/embed-script serves the JS embed loader
- Embed token recipient override
05
Phase 5
Analytics & Submission Inbox
- Submission inbox with all, spam, and partial tabs
- Submission detail view with full field data
- submission_analytics table tracks submission counts per day
- Analytics summary card on dashboard home
04
Phase 4
API Keys & Server Submissions
- API key type introduced (cf_api_...)
- Server-to-server form submission via x-api-key header
- POST /api/form/submit accepts both embed tokens and API keys
- API key management UI
03
Phase 3
Stripe Billing
- Stripe Checkout session creation
- Webhook handling for subscription events
- Plan limits enforced on form submission endpoint
- Billing page in dashboard
02
Phase 2
Teams & Onboarding
- Team creation and membership management
- Role-based access: owner, admin, member
- Team invitation flow with email links
- Onboarding wizard: plan selection, team setup, first token
01
Phase 1
Core Platform Launch
- User registration and login (JWT session cookies)
- Authentication on the home page — no separate /sign-in or /sign-up pages
- Dashboard home with submission counts
- Basic form submission endpoint (POST /api/form/submit)
- PostgreSQL with Drizzle ORM
- Next.js App Router with TypeScript