Narciso E. Núñez Arias
ccd26e946b
Merge pull request #5655 from ahmedisam99/fix/gitlab-token-refresh-race
...
fix(gitlab): share one token refresh between concurrent callers
2026-10-12 10:08:10 -04:00
Narciso E. Núñez Arias
29107d88fc
Merge pull request #5649 from imrja8/feat/dual-mode-branding
...
feat(enterprise): dual-mode branding with separate light/dark theme logos
2026-10-12 09:59:25 -04:00
ahmedisam99
20701ba272
test(gitlab): cover concurrent token refreshes
2026-10-12 11:54:35 +03:00
Yash Kumar
0898642e32
fix(enterprise): preserve light-mode URLs when toggling dual branding off
2026-10-11 20:00:32 +05:30
Yash Kumar
d2779136c5
fix(enterprise): address review feedback for dual-mode branding
2026-10-11 19:51:21 +05:30
Yash Kumar
0b537a815d
feat(enterprise): dual-mode branding with separate light/dark theme logos
2026-10-11 19:10:06 +05:30
Tom Ron
2674eb200d
fix(dns): enforce the configured OVH zone on record operations
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-08 09:13:50 +03:00
Tom Ron
e8f236c9db
feat(dns): add optional zone to OVH provider
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-07 22:02:45 +03:00
Mauricio Siu
5be17d3dd0
Merge pull request #5584 from libredb/fix/libsql-app-name-validation
...
fix(libsql): validate appName like the other database kinds
2026-10-05 10:11:50 -06:00
Narciso E. Núñez Arias
5aa28bc7d3
Merge pull request #5575 from imrja8/fix/tooltip-overlapping-modals
...
fix(ui): resolve tooltips overlapping open modals on remote servers page
2026-10-05 09:41:01 -04:00
cevheri
06b3bb282a
fix(libsql): validate appName like the other database kinds
2026-10-04 23:06:47 +03:00
Yash Kumar
5c19d1b704
fix(terminal): prevent terminal from collapsing on zoom
2026-10-04 21:37:15 +05:30
autofix-ci[bot]
2bc3741e41
[autofix.ci] apply automated fixes
2026-10-04 08:54:25 +00:00
Yash Kumar
35d26a806b
fix(ui): prevent tooltips from getting stuck when server modals close
2026-10-04 14:23:59 +05:30
Yash Kumar
a4a13b90b8
fix(ui): resolve tooltips overlapping open modals on remote servers page
2026-10-04 13:52:51 +05:30
Yash Kumar
84a1d7093c
Revert "fix(ui): standardize settings layout widths to full width"
2026-10-01 19:33:27 +05:30
Mauricio Siu
c6a2b2437d
Merge branch 'canary' into feat/self-delete-account
2026-09-30 23:53:57 -06:00
Narciso E. Núñez Arias
52f61adfe8
Merge pull request #5022 from Souvik-Cyclic/fix/secure-session-cookie-https-4709
...
fix: mark session cookie as Secure when served over HTTPS
2026-09-29 13:04:42 -04:00
Narciso E. Núñez Arias
169bac2ef8
Merge pull request #5529 from Souvik-Cyclic/fix/deployment-log-tail-leak-5518
...
fix: kill deployment log tail when the client disconnects early
2026-09-29 13:04:25 -04:00
Narciso E. Núñez Arias
916bb50e73
fix: redact S3 credentials in backup logs regardless of shell quoting ( #5527 )
2026-09-29 13:03:59 -04:00
Souvik Kumar
0d3a3966b0
fix: count only physical disks in host Block I/O stats ( #5540 )
...
* fix: count only physical disks in host Block I/O stats and skip partitioned md arrays and test the Block I/O sum
2026-09-29 11:47:05 -04:00
Roshan Singh
560e790e73
fix: preserve compose status when saving provider settings ( #5544 )
...
* fix: preserve compose status when saving provider settings
2026-09-29 10:58:59 -04:00
Narciso E. Núñez Arias
ff2e454dca
Merge pull request #5543 from Souvik-Cyclic/fix/webhook-body-size-5537
...
fix: accept deploy webhook payloads up to 25 MB
2026-09-29 10:37:49 -04:00
Souvik Kumar
82545bf500
revert: go back to a literal 25mb body limit for deploy webhooks
2026-09-29 20:00:05 +05:30
Narciso E. Núñez Arias
302754bd3b
Merge pull request #5535 from y4aniv/fix/tab-headers-consistency
...
fix(ui): unify tab header styles across backups, schedules, volume backups and patches
2026-09-29 10:26:12 -04:00
Narciso E. Núñez Arias
6e7934fc55
Merge pull request #5429 from imrja8/fix/deployments-filter-bar-inline-layout
...
feat(ui): enhance deployments layout and fix visual jumping
2026-09-29 10:14:34 -04:00
Yash Kumar
c18609a127
refactor(ui): remove redundant responsive layout comment
2026-09-29 19:24:03 +05:30
Narciso E. Núñez Arias
618a7df25c
Merge pull request #5455 from roshanasingh4/codex/preserve-app-status-on-provider-save
...
fix: preserve application status when saving provider settings
2026-09-29 09:51:29 -04:00
Souvik Kumar
1c6d333739
fix: parse deploy webhook bodies in the handler so the size limit can be configured
2026-09-29 19:20:41 +05:30
Souvik Kumar
e8be2693e0
refactor: make deploy webhook body limit configurable via DEPLOY_WEBHOOK_MAX_BODY_SIZE
2026-09-29 19:06:44 +05:30
Souvik Kumar
4396451095
fix: accept deploy webhook payloads up to 25 MB
2026-09-29 18:37:57 +05:30
Yash Kumar
7dc066a7bd
Merge branch 'Dokploy:canary' into fix/deployments-filter-bar-inline-layout
2026-09-29 18:08:41 +05:30
Yash Kumar
a0b6f233cb
Merge branch 'Dokploy:canary' into fix/add-invitation-form-reset
2026-09-29 18:08:30 +05:30
Mauricio Siu
382fdfc478
fix(cloud): remove HubSpot chat widget when dashboard unmounts
...
Logout navigates client-side to the sign-in page, so the widget (mounted
outside React) stayed visible after a startup user logged out.
2026-09-29 01:59:29 -06:00
Mauricio Siu
c231c2979b
fix(cloud): load HubSpot chat widget for startup plan users
...
The HubSpot script is loaded app-wide with loadImmediately: false, but
useHubSpotChat was never called, so widget.load() never ran. The old
HubSpotWidget shared the hs-script-loader id and was deduped by next/script.
2026-09-29 01:54:04 -06:00
Yaniv Douieb
3951247ebd
fix(ui): unify tab header styles across backups, schedules, volume backups and patches
2026-09-28 17:48:20 +02:00
Souvik Kumar
7b89d1f948
fix: kill deployment log tail when the client disconnects early
2026-09-27 15:27:14 +05:30
Souvik Kumar
6215c7f159
fix: redact S3 credentials in backup logs regardless of shell quoting
2026-09-27 00:23:23 +05:30
Yash Kumar
52ea2ce071
Merge branch 'Dokploy:canary' into fix/deployments-filter-bar-inline-layout
2026-09-26 09:28:03 +05:30
Yash Kumar
a0f1a5119c
Merge branch 'Dokploy:canary' into fix/add-invitation-form-reset
2026-09-26 09:27:54 +05:30
Mauricio Siu
c453ac3a2f
fix(billing): allow switching billing interval during trial
...
Switching plan mid-trial always forced the monthly price and there was no
way to move to annual. Preserve trial_end on the Stripe update so changing
the interval does not reset the billing cycle and end the trial early.
2026-09-23 15:06:54 -06:00
Yash Kumar
143dfcafe3
fix: correct add-invitation form reset logic and select state
2026-09-21 16:01:50 +05:30
Yash Kumar
3563f585f9
Merge branch 'Dokploy:canary' into fix/deployments-filter-bar-inline-layout
2026-09-20 12:39:36 +05:30
Mauricio Siu
a0e1001808
feat(trial-notifications): add email notification for expiring trials and integrate with webhook
2026-09-18 03:03:51 -06:00
Mauricio Siu
8236c31fcd
Revert "fix(billing): one reminder at 1 day, guarded by an advisory lock"
...
Revert "fix(billing): stop the reminder claim from rewriting stale metadata"
This reverts commits 037230496 and 14e059784 .
2026-09-18 02:49:18 -06:00
Mauricio Siu
037230496c
fix(billing): one reminder at 1 day, guarded by an advisory lock
...
Cloud runs two frontend replicas and node-schedule fires on each, so both
would read the same unset marker and every trial user would get the email
twice. A Postgres advisory lock lets one replica run and the other skip;
it lives in the connection rather than the schema, so no migration.
Drops the 3-day reminder, leaving the single notice before billing starts.
2026-09-18 02:45:46 -06:00
Mauricio Siu
14e059784c
fix(billing): stop the reminder claim from rewriting stale metadata
...
Stripe merges metadata on update, so spreading the snapshot read during
the list call re-asserted stale values over anything written since. Send
only the key being claimed.
The claim is not exclusive and the comment no longer says it is: two
replicas can still read the same unset marker. Marking before the send
only keeps a crash mid-send from resending on the next run.
2026-09-18 02:41:28 -06:00
Mauricio Siu
f34151bc12
refactor(billing): drop the runTrialExpirationJob endpoint
...
Removes the manual trigger and the root guard it needed. The cron job is
the only caller now, so processTrialExpirations goes back to module private.
2026-09-18 02:39:33 -06:00
Mauricio Siu
d00ae31920
refactor(billing): drop the sendTestTrialEmail endpoint
...
The scan endpoint already covers manual runs, so the one-off sender was
redundant. sendTrialExpiringEmail goes back to being module private.
2026-09-18 02:38:02 -06:00
Mauricio Siu
95b2712c26
fix(billing): pick a plan for the trial and warn before it expires
...
Trials were always Hobby, so a trial user who wanted Startup had to go
through Checkout, which created a second subscription on the same
customer. Seven days later Stripe cancelled the trial sub and the webhook,
matching only on customer id, zeroed serversQuantity and deactivated the
servers of someone who was already paying.
The trial now starts on the plan the user chooses and switching plans
mutates that same subscription, so a customer never holds two.
- startFreeTrial takes a tier; TRIAL_SERVER_LIMIT becomes TRIAL_SERVER_LIMITS
(Hobby 1 server, Startup 3)
- onboarding offers both plans with a trial and a subscribe button
- billing exposes Switch to Startup/Hobby during the trial and hides the
checkout CTAs and server steppers that would create a second subscription
- upgradeSubscription caps the server count to the plan's included servers
while trialing and skips proration, which emitted an orphan invoice
- webhook treats trialing as active instead of disabling servers, and
guards invoices that carry no subscription
- getBillingStatus reports hasPaymentMethod, so the banners stop asking for
a card once one is on file
- new cloud-only daily job emails trial users without a payment method at 3
and 1 days left, deduped through subscription metadata claimed before the
send so concurrent replicas cannot double-send
2026-09-18 02:35:27 -06:00