Skip to content

Upshift rebrand, privacy patches and Docker release pipeline - #1

Merged
hamza-lem merged 11 commits into
upshift-mainfrom
feat/upshift-rebrand
Oct 7, 2026
Merged

hamza-lem merged 11 commits into
upshift-mainfrom
feat/upshift-rebrand

Conversation

@hamza-lem

Copy link
Copy Markdown
Collaborator

What this adds

The Upshift layer, applied to a fresh Twenty checkout at build time. No Twenty file is modified in git (131 new files, 0 changed), so merging new Twenty versions into upshift-main stays conflict-free.

Branding (upshift/branding)

  • App icons for every size Twenty ships (112), onboarding logo, email logo, social card
  • Name, page titles, PWA manifest, sign-in legal links, email sender name, email footer, 2FA issuer, MCP/OpenAPI names, AI prompts
  • Translations: a hook runs after lingui compile in the Docker build and replaces "Twenty" with "Upshift" in all 34 languages without touching message ids
  • brand.json holds the name, website and legal URLs

Privacy: removed in code, so env vars or the admin panel cannot turn them back on

  • Sign-up telemetry to twenty-telemetry.com (user email and name)
  • Company logos from twenty-icons.com (browser and server)
  • Company enrichment calls to twenty-companies.com during email/calendar sync
  • AI help-center search through twenty-help-search.com
  • Email logo and default workspace logo hosted by Twenty, founder avatars in prefilled data
  • Yarn telemetry during builds
  • An outbound census fails the build if a new Twenty release references a Twenty-owned host anywhere else

Docker and releases

  • upshift/docker: compose file and env template for ghcr.io/exceev-technology/upshift
  • Upshift Release workflow: every morning, builds the latest twenty/vX.Y.Z release with the layer for amd64 and arm64 and publishes vX.Y.Z and latest. On this PR it only builds, nothing is published.
  • Upshift Branding Check workflow: applies the layer to every PR into upshift-main and to the latest Twenty release

Docs: .github/README.md (shown on GitHub instead of Twenty's README) and upshift/README.md (maintainer guide, sync process, what to do when a patch point moves).

Verified locally

  • Layer applies cleanly to Twenty main and twenty/v2.44.0 (114 overlays, 78 replacements in 38 files, census passed on about 18,000 shipped files)
  • Translation hook tested on the real compiled catalogs: 1,045 front, 222 server, 279 email strings across 34 locales
  • The script refuses re-application and refuses to modify the developer's working tree

Not verified yet

  • The full Docker image build. The Upshift Release run on this PR is that check.

@hamza-lem hamza-lem self-assigned this Oct 5, 2026
@hamza-lem hamza-lem added the enhancement New feature or request label Oct 5, 2026
@hamza-lem
hamza-lem force-pushed the feat/upshift-rebrand branch 2 times, most recently from 2ad695c to 04af5ac Compare October 5, 2026 23:00
Everything lives in new files so merging Twenty releases stays conflict-free.
The layer is applied to a fresh Twenty checkout at build time:

- upshift/branding: logo sources, generated app icons, email and social
  assets, brand.json with name, URLs and legal links
- upshift/scripts/apply-branding.mjs: overlays, exact-match source patches,
  translation hook, Yarn telemetry off, and an outbound census that fails
  the build if a shipped file references a Twenty-owned host
- Privacy: sign-up telemetry, twenty-icons, twenty-companies enrichment, the
  help-center proxy and Twenty-hosted email images are removed in code
- upshift/docker: compose file and env template for ghcr.io/exceev-technology/upshift
- upshift-release workflow: builds each Twenty release (twenty/vX.Y.Z) for
  amd64 and arm64 and publishes vX.Y.Z and latest; on PRs it only builds
- upshift-branding-check workflow: applies the layer on PRs to upshift-main
- .github/README.md: Upshift README shown on GitHub instead of Twenty's
- Documentation links go to upshiftcloud.com/docs (shared constant, workflow
  form help, sample dashboard, developer guides in every language)
- Hide the Community settings page and remove the Legal/DPA routes, both
  point to Twenty's own community and legal agreement
- Drop the ChatGPT card that installs Twenty's ChatGPT app, rename the MCP
  server key to upshift and its registry id to com.upshiftcloud/upshift
- Rebrand data-model sample values, the CLI app registration, error
  messages, AI helper and skill text, OpenAPI terms/contact/license, demo
  workflow URLs and email preview URLs
- Translation hook now also rewrites twenty.com links and the example app
  folder name inside compiled catalogs
- apply-branding.mjs prepares every change in memory and writes nothing
  when a patch point is missing; the census also covers visible Twenty links,
  ignores comment lines, and records why each allowed file is acceptable
- docker-compose: optional email settings were passed as empty strings and
  failed the server's config validation on first boot; keep them commented
  until SMTP is configured, like Twenty's compose
- Default workspace logo must be an absolute URL, otherwise avatars prefix it
  with /files and the image 404s
- Rebrand the front component renderer's developer error messages and include
  that package in the reference census
Follows the Codex review: CI built the image but never ran it. The amd64 build now starts with the compose file, checks the branding on the page, manifest and MCP server card, signs up, creates a workspace and signs in through the API. Telemetry and Twenty icons are enabled on purpose, Twenty-owned hosts resolve to a listener on the runner after a positive control, and the job fails if anything connects to it.

The translation hook now asserts that message ids, placeholders and plural structure are unchanged and that SDK commands are untouched. The branding check runs it on the latest Twenty release with --check-catalogs. The compose healthcheck gets a 5 minute start period so first-boot migrations cannot mark the server unhealthy.
The page title check failed in CI with no detail. The page is now loaded as a browser navigation, the check reports status, content type, title and body start, and all branding, auth and privacy checks run before the test fails so one CI run shows the full picture.
Twenty renamed apollo.factory.ts to ApolloFactory.ts and moved the workflow agent prompt and the application description helpers. Patches can now list candidate paths (newest first) so the layer works on both the latest release and Twenty main, and files that only exist in newer Twenty code can be marked optional. The new agent trigger, alternative workspace setup and paused agent step prompts are rebranded too.
@hamza-lem
hamza-lem force-pushed the feat/upshift-rebrand branch from 00a8b80 to 3b099a7 Compare October 7, 2026 22:19
@hamza-lem
hamza-lem merged commit 308ce5b into upshift-main Oct 7, 2026
9 checks passed
@hamza-lem
hamza-lem deleted the feat/upshift-rebrand branch October 8, 2026 22:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant