> ## Documentation Index
> Fetch the complete documentation index at: https://docs-terra.withunify.org/llms.txt
> Use this file to discover all available pages before exploring further.

# January 2026

> Updates from January 2026

# 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/worker` endpoint 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 `any` types 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_links` table for custom shareable links
* **migration 088**: Add `share_link_id` to submissions for source tracking
* **migration 089**: Add `expires_at` to share links for expiration
* **migration 090**: Add `response_limit` to share links for submission caps
* **migration 072**: Add soft delete columns to forms and submissions
* **migration 073**: Add Tideswell parity features
  * `outcome`, `outcome_details` on submissions
  * `ip_address`, `ip_country`, `ip_country_code`, `ip_city`, `ip_region`, `user_agent` on submissions
  * `frozen`, `frozen_at`, `frozen_reason` on forms
  * `featured_questions` on forms
* **migration 081**: Add composite indexes for submissions performance
  * `idx_submissions_form_deleted` - optimizes active submissions queries
  * `idx_submissions_form_deleted_at` - optimizes deleted submissions queries

***

## Migration Notes

### Running Migration 073

```bash theme={null}
# Apply the Tideswell parity migration
supabase migration up
```

### Vercel Cron Configuration

Add to `vercel.json`:

```json theme={null}
{
  "crons": [
    {
      "path": "/api/cron/worker",
      "schedule": "* * * * *"
    }
  ]
}
```

***

<Card title="All Changelogs" icon="list" href="/reference/changelog/overview">
  View all updates
</Card>
