Custom Fields
Let each workspace add the extra fields their process needs.
What it adds
User-defined fields with stable IDs, typed validation, server-enforced visibility, and defined behaviour on type change and deletion.
What your agent is told to do
5
What your agent is told to do
5-
1
Give every field a stable internal ID that never changes, and treat the label as display-only. Renaming a field must not touch a single stored value — key data by ID, never by label.
-
2
Support a small, deliberate set of types: text, number, date, single-select, multi-select, checkbox, and user reference. Each type validates on the server; a client-side date picker is not validation.
-
3
Enforce per-field visibility and editability by role on the server, and apply the same rules to list views, exports, filters, and API responses — not just the record form.
-
4
Handle type changes explicitly: check every existing value against the new type first, show the user how many would fail, and refuse or quarantine rather than silently blanking them.
-
5
Do not let custom fields become an unbounded schema. Cap the field count per record type and reject deeply nested or free-form JSON values — an untyped bag of data cannot be validated, filtered, or exported reliably.
Edge cases it handles
6
Edge cases it handles
6- Making a field required after records exist must not block editing every old record. Enforce it on new saves and report the backlog.
- Deleting a field needs a defined fate for its data: soft-delete and retain, or purge with an explicit warning and count.
- Removing an option from a select while records still use it must either keep it as a read-only legacy value or force reassignment.
- Exports and imports must round-trip custom fields by ID, so a re-import does not create duplicate fields with the same label.
- Filtering and sorting on custom fields needs indexing thought through; an unindexed value column turns every list query slow as the workspace grows.
- A user-reference field must handle the referenced user being deactivated or removed from the workspace.
Definition of done
8
Definition of done
8- Values are stored against stable field IDs, and renaming a field loses no data.
- Every field type is validated on the server, not only in the form.
- Field-level visibility and edit permissions apply to forms, lists, filters, exports, and API responses.
- A type change reports how many existing values would fail before anything is written.
- Field deletion and select-option removal have documented, non-destructive-by-default behaviour.
- There is a cap on fields per record type and free-form nested values are rejected.
- The feature matches the existing design system.
- No existing functionality is broken.
Related features
Location Map Block
Location Map Block
Put an interactive map on a page showing one location or a whole list of them.
What it does
A reusable map block rendering one or many pinned locations, with a static fallback and a text address alternative.
How it works
- 1 The app already has Mapbox Geocoding and Google Places Address Lookup. Turn addresses into coordinates through the existing integration and store the result on the record; do not add a second geocoding path for this block.
- 2 Make the block take either a single location or a collection, and render the same component for both. A one-pin map is a collection of one, not a separate feature.
- 3 Reserve the block's height before the map initialises so the surrounding page does not jump when tiles arrive. The placeholder should occupy exactly the space the map will fill.
Copy the prompt
No account needed
Add this feature to my app:
https://addthisfeature.com/x/location-map-block
Weather Widget
Weather Widget
Show current conditions and a short forecast for a place your users care about.
What it does
A compact widget showing current conditions and a few days of forecast for a chosen location.
How it works
- 1 Add this as a tile in the app's existing Customizable Dashboard Widgets rather than as a fixed element bolted into a layout, so users who do not want it can remove it.
- 2 Fetch the forecast on the server on a schedule and serve the widget from the app's own cache. Calling the weather source from every visitor's browser leaks the credential and multiplies the request count by your traffic.
- 3 Show the observation time alongside the reading, and reuse the app's Stale Data Indicator conventions so ageing weather looks the same as any other ageing data in the product.
Copy the prompt
No account needed
Add this feature to my app:
https://addthisfeature.com/x/weather-widget
Record Merge
Record Merge
Combine two duplicate records into one without losing anything attached.
What it does
A merge flow that picks a surviving value per field, reparents all related data, redirects old references, and can be audited afterwards.
How it works
- 1 Show the two records side by side, field by field, and require an explicit survivor for every field where they differ. Do not default to 'newest wins' silently; the user is merging because they know which one is right.
- 2 Reparent every related object — children, comments, attachments, activity, links, memberships — onto the survivor in a single transaction. A half-finished merge is worse than two duplicates.
- 3 Detect relationships that would become duplicates after reparenting (the same person as a member of both records, the same tag applied twice) and collapse them rather than violating a uniqueness constraint mid-merge.
Copy the prompt
No account needed
Add this feature to my app:
https://addthisfeature.com/x/record-merge
How it works
-
1
Copy the link
Grab the Markdown instruction URL for this feature.
-
2
Give it to your AI
Paste it into Claude Code, Cursor, v0, Lovable — whatever you build with.
-
3
It inspects, then implements
Your agent reads your existing app first, then adds the feature to fit it.
Works with your stack
These instructions are written to adapt. They tell the agent to detect your framework, match your existing design system, and reuse what you already have — rather than assuming a particular stack.
Need it tighter than that? Customize the feature and tell it exactly what you're running.