0dc6272da5
## What & why Removes the `twenty-sdk/ui` reexport. Apps now use Twenty UI by installing [`twenty-ui@1.0.0-alpha.1`](https://www.npmjs.com/package/twenty-ui/v/1.0.0-alpha.1) from npm and importing its subpaths directly. The reexport re-exported types that didn't resolve, forcing typecheck workarounds. ## Changes - **twenty-sdk**: delete `src/ui/index.ts`, drop the `./ui` export, remove it from the browser vite build, and rewire the CLI manifest-mock to `twenty-ui` (`.css` falls through to the empty-CSS loader). `twenty-ui` stays a devDependency for the CLI fixture tests. - **Renderer + create-twenty-app template**: import from `twenty-ui` subpaths; the template pins `twenty-ui@1.0.0-alpha.1`. - **Docs**: new "Using Twenty UI components" section (install + subpath imports + `useTheme()` for theme tokens), codex references, and the cross-doc-contract validator. The `twenty-for-twenty` / `twenty-slack` example apps are intentionally left on `twenty-sdk/ui`: they consume the published SDK (which still ships `./ui`), and `twenty-ui@1.0.0-alpha.1` requires react 19 + a `monaco-editor` peer the react-18 apps can't satisfy. They migrate once the SDK is republished.
Twenty for Twenty
The official Twenty internal app, with modules for Resend and more.
Overview
Twenty for Twenty is the official internal Twenty app. It is organized into modules, each integrating a third-party service with Twenty.
Resend module
Two-way sync between Twenty and the Resend email platform. The module syncs contacts, segments, templates, broadcasts, and emails.
Inbound (Resend → Twenty):
- A cron job runs every 5 minutes to pull all entities from the Resend API.
- A webhook endpoint receives real-time events for contacts and emails.
Outbound (Twenty → Resend):
- Contact and segment changes in Twenty are pushed back to Resend when records are created, updated, or deleted.
Configuration
In Twenty, go to Settings → Applications → Twenty for Twenty and set:
- RESEND_API_KEY — your Resend API key. Create one at https://resend.com/api-keys (full access recommended).
- RESEND_WEBHOOK_SECRET — the signing secret for verifying inbound webhooks (see "Webhook setup" below).
Webhook setup
The app exposes an HTTP endpoint at /s/webhook/resend that receives Resend webhook events. To connect it:
- Go to https://resend.com/webhooks
- Click Add webhook
- Set the Endpoint URL to your Twenty server's public URL +
/s/webhook/resend(e.g.https://your-domain.com/s/webhook/resend) - Set Event types to All Events
- Click Add
- Copy the signing secret Resend displays and paste it into the
RESEND_WEBHOOK_SECRETapp variable in Twenty
Sync behavior
Inbound
| Source | Mechanism | Entities |
|---|---|---|
| Cron (every 5 min) | Polls Resend API, upserts into Twenty | Contacts, segments, templates, broadcasts, emails |
| Webhook (real-time) | Receives Resend events via HTTP | Contacts, emails |
Outbound
| Twenty action | Resend |
|---|---|
| Create contact | Creates the contact in Resend |
| Update contact (name, email, unsubscribed) | Updates the Resend contact |
| Delete contact | Removes the Resend contact |
| Create segment | Creates the segment in Resend |
| Delete segment | Removes the Resend segment |