Skip to content

[Epic]: V1→V2 parity — Custom Fields & Uploads #675

Description

@nielsdrost7

Domain epic under the V1→V2 feature-parity umbrella (#136). Full audit: 07-customfields-uploads.md (2026-07-18 parity audit, v1 prep/v180 vs v2 develop).

Summary: Custom fields have a data model (polymorphic, company-scoped) but zero UI — no admin CRUD, no value entry on any form, no choice types, wired only to Company. Uploads/attachments: models exist, AttachmentObserver is an empty stub, and the invoice form's FileUpload field is a dead control (no attachments column, nothing handles it).

Adjacent v2-new (not v1 parity) trackers, not attached here: #369 (rich-text field type), #99/#87/#272 (expense receipts epic), #86/#63 (product images/client logos).

Sub-issues

Specific

Reach custom-fields and uploads feature parity with v1: a working admin UI to define per-entity custom fields (including choice types), value entry/display wired to entity forms, and a complete attachment lifecycle (upload, client-visibility, guest download, email attachment).

Measurable

All 5 sub-issues closed; an admin can define a custom field and see it on the target entity's form; an uploaded document can be marked client-visible, downloaded via guest link, and attached to outgoing email.

Achievable

#142 (custom fields UI) and #510 (attachment UI) are the two foundational pieces; #371 and #674 build directly on top of #510; #133 is the output-side integration once #142 exists.

Relevant

Custom Fields was v1's most-requested feature carried into v2's design (schema already reflects it) but is currently invisible to users; uploads are similarly schema-complete but UI-dead.

Time-Bound

#142: 1 sprint core + 1 follow-up for remaining entities. #510: 1 sprint. #371/#674: same sprint as #510 or immediately after.

Metadata

Metadata

Assignees

No one assigned

    Labels

    epicrefinedRefined with SMART plan / test suggestions

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions