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. -->
37 lines
1.3 KiB
TypeScript
37 lines
1.3 KiB
TypeScript
import { defineApplication } from 'twenty-sdk/define';
|
|
import { APPLICATION_UNIVERSAL_IDENTIFIER } from 'src/constants/universal-identifiers';
|
|
|
|
export default defineApplication({
|
|
universalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER,
|
|
displayName: 'Linear',
|
|
description:
|
|
'Connect Linear to Twenty. Each workspace member connects their own Linear account; logic functions can then create issues and read team data on their behalf.',
|
|
logoUrl: 'public/linear-logomark.svg',
|
|
applicationVariables: undefined,
|
|
author: 'Twenty',
|
|
category: 'Product management',
|
|
emailSupport: 'contact@twenty.com',
|
|
screenshots: [
|
|
'public/gallery/command-menu-item-1.png',
|
|
'public/gallery/command-menu-item-2.png',
|
|
'public/gallery/command-menu-item-3.png',
|
|
'public/gallery/command-menu-item-4.png',
|
|
],
|
|
termsUrl: 'https://github.com/twentyhq/twenty?tab=License-1-ov-file#readme',
|
|
websiteUrl: 'https://www.twenty.com',
|
|
serverVariables: {
|
|
LINEAR_CLIENT_ID: {
|
|
description:
|
|
'OAuth client ID from your Linear OAuth application (linear.app/settings/api/applications).',
|
|
isSecret: false,
|
|
isRequired: true,
|
|
},
|
|
LINEAR_CLIENT_SECRET: {
|
|
description:
|
|
'OAuth client secret from your Linear OAuth application. Stored encrypted; never exposed in API responses.',
|
|
isSecret: true,
|
|
isRequired: true,
|
|
},
|
|
},
|
|
});
|