c52c983b90
## What - The SDK manifest build now sources an app's `aboutDescription` (the long-form "About" tab content) from its `README.md`. An explicit `aboutDescription` in the config still wins, matching the existing marketplace CDN fallback. - Removed the now-duplicated `aboutDescription` from internal app configs and deleted the standalone `ABOUT_DESCRIPTION` constant files. - Rewrote internal app READMEs to read as user-facing About content: stripped developer/build/source-path noise, and expanded the thin ones. `call-recording` and `self-hosting` (one-liners over substantial apps) and `people-data-labs` were rewritten from a close reading of the code; `twenty-exa` was verified for accuracy. - Added a unit test (and a fixture README) covering README → `aboutDescription` in the build. ## Why The README and the About description were maintained separately and drifted. Making the README the single source keeps the About tab accurate and removes duplicated copy. ## Notes for reviewers - Internal apps depend on the published `twenty-sdk`, so the build change takes effect for them after an SDK release + dependency bump. Until then, published apps still get README → `aboutDescription` via the marketplace CDN sync. - Standard/Custom app descriptions are unchanged (they are resolved in the frontend, not via the manifest). <!-- This is an auto-generated description by cubic. --> <a href="https://cubic.dev/pr/twentyhq/twenty/pull/22012?utm_source=github" target="_blank" rel="noopener noreferrer" data-no-image-dialog="true"><picture><source media="(prefers-color-scheme: dark)" srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source media="(prefers-color-scheme: light)" srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img alt="Review in cubic" src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a> <!-- End of auto-generated description by cubic. -->
28 lines
1.5 KiB
Markdown
28 lines
1.5 KiB
Markdown
# Twenty Partners
|
|
|
|
Turns the CRM into the operating system for the Twenty partner program: intake partner-eligible deals, match them to vetted marketplace partners, and track the matching pipeline end-to-end.
|
|
|
|
## What's inside
|
|
|
|
- **Partner object** — slug, status, availability, served geographies, languages spoken, deployment expertise, Calendly link, and last-match timestamp.
|
|
- **Opportunity extensions** — match status, design-doc status, intro and relance timestamps, and a relation to the matched partner.
|
|
- **Automatic matching** — when an opportunity is set to auto-match, the longest-idle available partner is assigned and the deal is marked matched; if none is available it is handed off for manual matching with an explanatory note.
|
|
- **Views** — a waiting-for-match queue, a matching-funnel overview grouped by status, the partner index, and a log of matched deals, all surfaced in the sidebar.
|
|
|
|
## Match status pipeline
|
|
|
|
`matchStatus` follows the deal lifecycle:
|
|
|
|
| Status | Meaning |
|
|
| --- | --- |
|
|
| `TO_BE_MATCHED` | Default — deal entered, awaiting assignment |
|
|
| `MANUAL_MATCH` | Needs a human to pick a partner |
|
|
| `AUTO_MATCH` | Triggers automatic partner assignment |
|
|
| `MATCHED` | Partner assigned |
|
|
| `INTRODUCED_TO_A_PARTNER` | Customer intro sent |
|
|
| `WORKING_WITH_A_PARTNER` | Engagement underway |
|
|
| `IMPLEMENTING` | Active implementation |
|
|
| `WON` | Deal closed won |
|
|
| `RECONNECT_LATER` | Paused — reconnect in future |
|
|
| `LOST` | Deal closed lost |
|