January 2026
Highlights
Share Links
Create custom shareable links for tracking where form responses come from. Each link can have its own UTM source, optional expiration date, and can be toggled open/closed independently. Perfect for distributing forms to schools, partners, or campaigns.Tideswell Feature Parity
Terra now has complete feature parity with Tideswell, including form freezing, geolocation tracking, scheduled publishing, and outcome fields.Data Access Layer (DAL)
New repository pattern for database access with built-in auth checks, audit logging, and soft delete support.Background Worker
Lifecycle worker for scheduled form publishing, auto-close, auto-freeze, and cleanup tasks.Documentation Overhaul
Comprehensive restructure with new information architecture, Mermaid diagrams, and Tideswell comparison guide.All Changes
Features
Share Links (Jan 18)
- feat(share-links): Custom shareable links with source tracking
- feat(share-links): UTM source customization on link creation
- feat(share-links): Link expiration dates with automatic closure
- feat(share-links): Response count tracking per link
- feat(share-links): Response limits per link (cap submissions)
- feat(share-links): Open/close toggle independent of form status
- feat(share-links): Rename links (UTM stays locked)
- feat(share-links): Duplicate links with new name and UTM
- feat(share-links): URL tooltip on hover
- docs: Add share links documentation page
Tideswell Parity
- feat(submissions): Add outcome field for applicant-visible results
- feat(submissions): Add geolocation tracking (IP, country, city, region)
- feat(forms): Add form freezing after first submission
- feat(forms): Add scheduled publishing (
published_at) - feat(forms): Add scheduled closing (
closes_at) - feat(forms): Add featured questions for submission list display
- feat(worker): Add background worker for form lifecycle automation
- feat(api): Add
/api/cron/workerendpoint for Vercel cron jobs
Data Access Layer
- feat(dal): Create base repository with CRUD operations
- feat(dal): Add forms repository with freeze/unfreeze methods
- feat(dal): Add submissions repository with outcome methods
- feat(dal): Add soft delete pattern with 30-day cleanup
- feat(dal): Add pagination helpers with standardized result types
- feat(dal): Add audit hooks for automatic change logging
Security
- feat(security): Add centralized auth guardrails to server actions
- feat(security): Add PII redaction helpers to logger
- feat(files): Add retry and blocking behavior for required uploads
Fixes
- fix(geolocation): Anonymize IP addresses for privacy (zero last octet)
- fix(worker): Fix logger type errors for nested objects
- fix(security): Add auth guards to form notification settings actions
- fix(security): Add auth guards to notification test actions (email/SMS)
- fix(security): Improve team permission backward compatibility with logging
- fix(a11y): Add
role="combobox"to address field for proper ARIA support - fix(types): Replace explicit
anytypes with proper PostgrestError typing
Documentation
- docs: Add Tideswell vs Terra comparison page
- docs: Update background jobs with lifecycle worker
- docs: Update submissions with geolocation and outcome
- docs: Update publishing with scheduling and freezing
- docs: Restructure with new information architecture
Database Migrations
- migration 087: Add
form_share_linkstable for custom shareable links - migration 088: Add
share_link_idto submissions for source tracking - migration 089: Add
expires_atto share links for expiration - migration 090: Add
response_limitto share links for submission caps - migration 072: Add soft delete columns to forms and submissions
- migration 073: Add Tideswell parity features
outcome,outcome_detailson submissionsip_address,ip_country,ip_country_code,ip_city,ip_region,user_agenton submissionsfrozen,frozen_at,frozen_reasonon formsfeatured_questionson forms
- migration 081: Add composite indexes for submissions performance
idx_submissions_form_deleted- optimizes active submissions queriesidx_submissions_form_deleted_at- optimizes deleted submissions queries
Migration Notes
Running Migration 073
Vercel Cron Configuration
Add tovercel.json:
All Changelogs
View all updates