From 47ce014204eeb8cb8e64edf123e2ee30773d34fb Mon Sep 17 00:00:00 2001 From: Enno Gelhaus Date: Sun, 3 May 2026 14:17:54 +0200 Subject: [PATCH 01/10] feat: contributor form --- .github/PULL_REQUEST_TEMPLATE.md | 2 ++ .github/workflows/pr-quality.yml | 52 -------------------------------- CONTRIBUTING.md | 4 +++ 3 files changed, 6 insertions(+), 52 deletions(-) delete mode 100644 .github/workflows/pr-quality.yml diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 61a483bd..f47ea4f9 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,3 +1,5 @@ + + # What kind of change does this PR introduce? eg: Bug fix, feature, docs update, ... diff --git a/.github/workflows/pr-quality.yml b/.github/workflows/pr-quality.yml deleted file mode 100644 index 3fdc958b..00000000 --- a/.github/workflows/pr-quality.yml +++ /dev/null @@ -1,52 +0,0 @@ -name: PR Quality - -permissions: - contents: read - issues: read - pull-requests: write - -on: - pull_request_target: - types: [opened, reopened] - -jobs: - anti-slop: - runs-on: ubuntu-latest - steps: - - uses: peakoss/anti-slop@v0 - with: - # Overall - max-failures: 3 - - # Other - require-maintainer-can-modify: true - max-negative-reactions: 3 - require-conventional-title: true - - # Description - max-emoji-count: 2 - max-code-references: 3 - blocked-terms: "Generated with Claude Code,Generated with Codex" - - # PR Template - require-pr-template: true - strict-pr-template-sections: "What kind of change does this PR introduce?,Why was this change needed?,Checklist:" - optional-pr-template-sections: "Other information:" - max-additional-pr-template-sections: 2 - - # User - detect-spam-usernames: true - min-account-age: 30 - max-daily-forks: 5 - min-profile-completeness: 4 - - # Exemptions - exempt-author-association: "OWNER,MEMBER,COLLABORATOR" - exempt-users: "nevo-david,egelhaus" - exempt-bots: "postiz-agent[bot]" - - # Actions - exempt-label: "exempt" - close-pr: true - failure-add-pr-labels: "spam" - failure-pr-message: "This PR has been marked as Spam, please re-open if this is a mistake." diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 960e6f34..344daa29 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,6 +6,10 @@ Contributions are welcome - code, docs, whatever it might be! If this is your fi The main documentation site has a [developer guide](https://docs.postiz.com/developer-guide) . That guide provides you a good understanding of the project structure, and how to setup your development environment. Read this document after you have read that guide. This document is intended to provide you a good understanding of how to submit your first contribution. +## Apply in the contribution form + +To submit your contribution, please fill out the [contribution form](https://contribute.egelhaus.de/p/postiz). This helps us evaluate whether your contribution is a good fit for the project. We will review your submission and get back to you as soon as possible. + ## Write code with others This is an open source project, with an open and welcoming community that is always keen to welcome new contributors. We recommend the two best ways to interact with the community are: From e419e05f09feb596b56f0907ba977c22baab97c6 Mon Sep 17 00:00:00 2001 From: Enno Gelhaus Date: Sun, 3 May 2026 16:27:56 +0200 Subject: [PATCH 02/10] Apply suggestions from code review Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- CONTRIBUTING.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index f47ea4f9..a0d2be05 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,4 +1,4 @@ - + # What kind of change does this PR introduce? diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 344daa29..bb703436 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,7 +6,7 @@ Contributions are welcome - code, docs, whatever it might be! If this is your fi The main documentation site has a [developer guide](https://docs.postiz.com/developer-guide) . That guide provides you a good understanding of the project structure, and how to setup your development environment. Read this document after you have read that guide. This document is intended to provide you a good understanding of how to submit your first contribution. -## Apply in the contribution form +## Apply via the contribution form To submit your contribution, please fill out the [contribution form](https://contribute.egelhaus.de/p/postiz). This helps us evaluate whether your contribution is a good fit for the project. We will review your submission and get back to you as soon as possible. From d056225053c36cbf05932fa00e5e5bf23e2d398d Mon Sep 17 00:00:00 2001 From: Santosh Bhandari Date: Mon, 4 May 2026 08:08:34 +0545 Subject: [PATCH 03/10] fix: remove processing GIF via sharp in linkedin --- .../src/integrations/social/linkedin.provider.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts b/libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts index 81b2fded..978b237b 100644 --- a/libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts +++ b/libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts @@ -478,14 +478,13 @@ export class LinkedinProvider extends SocialAbstract implements SocialProvider { private async prepareMediaBuffer(mediaUrl: string): Promise { const isVideo = mediaUrl.indexOf('mp4') > -1; + const isGif = lookup(mediaUrl) === 'image/gif'; - if (isVideo) { + if (isVideo || isGif) { return Buffer.from(await readOrFetch(mediaUrl)); } - return await sharp(await readOrFetch(mediaUrl), { - animated: lookup(mediaUrl) === 'image/gif', - }) + return await sharp(await readOrFetch(mediaUrl), { animated: false }) .toFormat('jpeg') .resize({ width: 1000 }) .toBuffer(); From 779764aa5d033bdf400e526ee7724dbe8b9e1caa Mon Sep 17 00:00:00 2001 From: Enno Gelhaus Date: Mon, 4 May 2026 10:28:48 +0200 Subject: [PATCH 04/10] Fix contribution form link in PR template Updated contribution form link in PR template. --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index a0d2be05..25427966 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,4 +1,4 @@ - + # What kind of change does this PR introduce? From 1bf32426c72851c35aa61c02da8ef304358aaeb1 Mon Sep 17 00:00:00 2001 From: Enno Gelhaus Date: Mon, 4 May 2026 10:29:09 +0200 Subject: [PATCH 05/10] Update contribution form link in CONTRIBUTING.md --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bb703436..071994c2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,7 +8,7 @@ The main documentation site has a [developer guide](https://docs.postiz.com/deve ## Apply via the contribution form -To submit your contribution, please fill out the [contribution form](https://contribute.egelhaus.de/p/postiz). This helps us evaluate whether your contribution is a good fit for the project. We will review your submission and get back to you as soon as possible. +To submit your contribution, please fill out the [contribution form](https://contribute.postiz.com/p/postiz). This helps us evaluate whether your contribution is a good fit for the project. We will review your submission and get back to you as soon as possible. ## Write code with others From a6967c85190a3affb557a4ccce56b8b767b05309 Mon Sep 17 00:00:00 2001 From: Santosh Bhandari Date: Mon, 4 May 2026 18:41:34 +0545 Subject: [PATCH 06/10] ui: update the modal such that for long text won't cause overflow --- .../src/components/launches/import-debug-post.modal.tsx | 4 ++-- apps/frontend/src/components/layout/impersonate.tsx | 1 + apps/frontend/src/components/layout/new-modal.tsx | 4 +++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/frontend/src/components/launches/import-debug-post.modal.tsx b/apps/frontend/src/components/launches/import-debug-post.modal.tsx index 65c28593..14fed8dd 100644 --- a/apps/frontend/src/components/launches/import-debug-post.modal.tsx +++ b/apps/frontend/src/components/launches/import-debug-post.modal.tsx @@ -147,7 +147,7 @@ export const ImportDebugPostModal: FC<{ close: () => void }> = ({ close }) => {
{t('debug_info', 'Debug Info')}
-
+
{t('provider', 'Provider')}: @@ -175,7 +175,7 @@ export const ImportDebugPostModal: FC<{ close: () => void }> = ({ close }) => { {t('error_details', 'Error Details')}: -
+
{parsed._debug.errors.map((err, i) => (
[{err.platform}] {err.message} diff --git a/apps/frontend/src/components/layout/impersonate.tsx b/apps/frontend/src/components/layout/impersonate.tsx index 4cc6bdad..e81d0429 100644 --- a/apps/frontend/src/components/layout/impersonate.tsx +++ b/apps/frontend/src/components/layout/impersonate.tsx @@ -433,6 +433,7 @@ const ImportDebugPost = () => { const handleClick = useCallback(() => { openModal({ title: t('import_debug_post', 'Import Debug Post'), + maxSize: 800, children: (close) => , }); }, []); diff --git a/apps/frontend/src/components/layout/new-modal.tsx b/apps/frontend/src/components/layout/new-modal.tsx index fdc3704a..090f4366 100644 --- a/apps/frontend/src/components/layout/new-modal.tsx +++ b/apps/frontend/src/components/layout/new-modal.tsx @@ -31,6 +31,7 @@ interface OpenModalInterface { modal?: string; }; size?: string | number; + maxSize?: string | number; height?: string | number; id?: string; } @@ -200,10 +201,11 @@ export const Component: FC<{ modal.size ? '' : 'min-w-[600px]', modal.fullScreen && 'h-full' )} - {...((!!modal.size || !!modal.height) && { + {...((!!modal.size || !!modal.height || !!modal.maxSize) && { style: { ...(modal.size ? { width: modal.size } : {}), ...(modal.height ? { height: modal.height } : {}), + ...(modal.maxSize ? { maxWidth: modal.maxSize } : {}), }, })} onClick={(e) => e.stopPropagation()} From 18a1a808710963986fafd07090aa9dc03e529ef0 Mon Sep 17 00:00:00 2001 From: Santosh Bhandari Date: Mon, 4 May 2026 19:05:21 +0545 Subject: [PATCH 07/10] feat: update notification list to be scrollable and added time --- .../src/components/layout/set.timezone.tsx | 2 ++ .../notifications/notification.component.tsx | 26 ++++++++++++++----- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/apps/frontend/src/components/layout/set.timezone.tsx b/apps/frontend/src/components/layout/set.timezone.tsx index f37b4f0f..ac5b74a5 100644 --- a/apps/frontend/src/components/layout/set.timezone.tsx +++ b/apps/frontend/src/components/layout/set.timezone.tsx @@ -3,8 +3,10 @@ import dayjs, { ConfigType } from 'dayjs'; import { FC, useEffect } from 'react'; import timezone from 'dayjs/plugin/timezone'; import utc from 'dayjs/plugin/utc'; +import relativeTime from 'dayjs/plugin/relativeTime'; dayjs.extend(timezone); dayjs.extend(utc); +dayjs.extend(relativeTime); const { utc: originalUtc } = dayjs; diff --git a/apps/frontend/src/components/notifications/notification.component.tsx b/apps/frontend/src/components/notifications/notification.component.tsx index 4b890706..731b80f9 100644 --- a/apps/frontend/src/components/notifications/notification.component.tsx +++ b/apps/frontend/src/components/notifications/notification.component.tsx @@ -4,6 +4,7 @@ import { useFetch } from '@gitroom/helpers/utils/custom.fetch'; import useSWR from 'swr'; import { FC, useCallback, useState } from 'react'; import clsx from 'clsx'; +import dayjs from 'dayjs'; import { useClickAway } from '@uidotdev/usehooks'; import ReactLoading from '@gitroom/frontend/components/layout/loading'; import { useT } from '@gitroom/react/translation/get.transation.service.client'; @@ -26,16 +27,29 @@ export const ShowNotification: FC<{ const [newNotification] = useState( new Date(notification.createdAt) > new Date(props.lastReadNotification) ); + const createdAt = dayjs(notification.createdAt); + const isWithin24h = dayjs().diff(createdAt, 'hour') < 24; + const fullDate = createdAt.format('MMM D, YYYY h:mm A'); return (
+ > +
+
+ {isWithin24h ? createdAt.fromNow() : fullDate} +
+
); }; export const NotificationOpenComponent = () => { @@ -57,7 +71,7 @@ export const NotificationOpenComponent = () => { {t('notifications', 'Notifications')}
-
+
{isLoading && (
From 53f0967e67f034981f73ded9ccba2079e476f32b Mon Sep 17 00:00:00 2001 From: Enno Gelhaus Date: Mon, 4 May 2026 15:50:13 +0200 Subject: [PATCH 08/10] feat: merge queue --- .github/workflows/build.yml | 2 ++ .github/workflows/codeql.yml | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ee5c0f84..242c7c88 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,6 +3,8 @@ name: Build on: push: + merge_group: + pull_request: jobs: build: diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 79d64857..0974256d 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -1,5 +1,5 @@ --- -name: "Code Quality Analysis" +name: "Code Quality Analysis" on: push: @@ -9,6 +9,8 @@ on: - apps/** - '!apps/docs/**' - libraries/** + merge_group: + jobs: analyze: From 22f436e72ebbfab36fa15a0c6ce66540284c638d Mon Sep 17 00:00:00 2001 From: Enno Gelhaus Date: Mon, 4 May 2026 21:00:24 +0200 Subject: [PATCH 09/10] feat: simplify pr template --- .github/PULL_REQUEST_TEMPLATE.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 25427966..d4c6ad9c 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -18,5 +18,5 @@ Put a "X" in the boxes below to indicate you have followed the checklist; - [ ] I have read the [CONTRIBUTING](https://github.com/gitroomhq/postiz-app/blob/main/CONTRIBUTING.md) guide. - [ ] I confirm I have not used AI to submit this PR or generate code for it. -- [ ] I checked that there were not similar issues or PRs already open for this. -- [ ] This PR fixes just ONE issue (do not include multiple issues or types of change in the same PR) For example, don't try and fix a UI issue and include new dependencies in the same PR. +- [ ] I checked that there were no similar issues or PRs already open for this. +- [ ] This PR fixes just ONE issue From dcb1b0188a8ecaa93322c07b2fd381d22fbc4aa0 Mon Sep 17 00:00:00 2001 From: Santosh Bhandari Date: Wed, 6 May 2026 10:46:25 +0545 Subject: [PATCH 10/10] fix: lowercase email on local registration --- apps/backend/src/services/auth/auth.service.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/backend/src/services/auth/auth.service.ts b/apps/backend/src/services/auth/auth.service.ts index 32b43f3b..187c08ed 100644 --- a/apps/backend/src/services/auth/auth.service.ts +++ b/apps/backend/src/services/auth/auth.service.ts @@ -43,6 +43,9 @@ export class AuthService { if (process.env.DISALLOW_PLUS && body.email.includes('+')) { throw new Error('Email with plus sign is not allowed'); } + if (body instanceof CreateOrgUserDto) { + body.email = body.email.toLowerCase(); + } const user = await this._userService.getUserByEmail(body.email); if (body instanceof CreateOrgUserDto) { if (user) {