Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
9f10f0f
fix(migrate-auth-secret): exit cleanly when there are no 2FA records
ngenohkevin May 12, 2026
a714e0f
Merge pull request #4394 from ngenohkevin/fix/migrate-auth-secret-exi…
Siumauricio May 12, 2026
754774e
feat(compose): add import from base64 in create service dropdown
Siumauricio May 12, 2026
63e33a2
[autofix.ci] apply automated fixes
autofix-ci[bot] May 12, 2026
7a568aa
Merge pull request #4395 from Dokploy/feat/import-compose-from-base64
Siumauricio May 12, 2026
f8fcf68
Enhance version synchronization workflow to include SDK repository
Siumauricio May 12, 2026
558d809
feat(deployment): add readLogs procedure to fetch deployment logs
Siumauricio May 13, 2026
aff200f
feat(deployment): add server access validation for deployment actions
Siumauricio May 13, 2026
67278d8
feat(organization): prevent inviting users with owner role
Siumauricio May 13, 2026
1fdbe87
feat(user): implement session cleanup on user update
Siumauricio May 13, 2026
a50f958
feat(settings): add copy button to server IP in web server settings (…
Siumauricio May 13, 2026
8d88a34
fix: copy Dokploy server IP when clicking server badge (#4390)
vadamk May 13, 2026
ef0cf9b
fix: responsive layout (#4391)
nhridoy May 13, 2026
6e342ee
fix: automatically converting username to lowercase both in creation …
Baker May 13, 2026
af8072d
fix: allow square brackets in zip path validation for Next.js dynamic…
Siumauricio May 22, 2026
b06138b
fix: prevent webhook deploy crash when commit data lacks modified fil…
Siumauricio May 22, 2026
f6e6e5c
fix: add type="button" to TooltipTrigger in form components to preven…
mixelburg May 22, 2026
34d38cf
fix: enable comment toggle shortcut in env variable editor (#4402) (#…
Siumauricio May 22, 2026
103e2f7
fix: add tls=true label for domains when certificateType is none (#40…
Siumauricio May 22, 2026
2f43f60
chore: update version to v0.29.5 in package.json
Siumauricio May 22, 2026
6675aa6
chore(deps): upgrade next to 16.2.6 (#4477)
jasael May 24, 2026
8018027
feat: add self-hosted enterprise restrictions (remote-servers-only, e…
Siumauricio May 30, 2026
4ba0f71
fix: grant create and delete SSH key permissions when canAccessToSSHK…
Siumauricio May 30, 2026
d7d6422
fix: use create permission for basic auth delete instead of delete (#…
Siumauricio May 30, 2026
ad680ae
fix: wrap long server names and keep actions menu visible (#4434)
pparage May 30, 2026
9bd4451
chore: update version to v0.29.6 in package.json
Siumauricio May 30, 2026
85211af
fix: preserve HOME in compose deploy so --with-registry-auth can read…
youcefzemmar May 30, 2026
d56a17c
Merge branch 'main' into canary
Siumauricio May 30, 2026
6ff2ca0
fix: scope dokploy-server schedules to organization instead of user (…
Siumauricio May 31, 2026
41c09cd
feat: implement forward authentication settings and UI components
Siumauricio Jun 2, 2026
4f6e57c
refactor: simplify forward authentication handling in UI and API
Siumauricio Jun 6, 2026
a3c8b3b
refactor: unify branch validation imports across provider components
Siumauricio Jun 6, 2026
931203a
refactor: remove obsolete SQL migration files and snapshots
Siumauricio Jun 6, 2026
35f452d
Merge branch 'canary' into feat/forward-auth-sso
Siumauricio Jun 6, 2026
1df6774
refactor: update forward authentication handling in domain schema and…
Siumauricio Jun 6, 2026
238bb2f
chore: remove PR quality workflow configuration
Siumauricio Jun 6, 2026
f886010
Delete .github/workflows/pr-quality.yml
Siumauricio Jun 6, 2026
28673a6
Merge branch 'canary' into feat/forward-auth-sso
Siumauricio Jun 6, 2026
51b5af5
refactor: enhance forward authentication UI and API integration
Siumauricio Jun 6, 2026
aa545ec
feat: add SQL migration for lucky echo and update foreign key constra…
Siumauricio Jun 6, 2026
705ca54
refactor: improve path validation in Traefik configuration schema
Siumauricio Jun 6, 2026
b29a87a
Merge pull request #4555 from Dokploy/feat/forward-auth-sso
Siumauricio Jun 6, 2026
57ef96a
fix: swarm health check fields not resetting to default values (#4558)
Siumauricio Jun 6, 2026
e6fc3db
fix: add docker cleanup toggle to remote server creation (#4559)
Siumauricio Jun 6, 2026
e944603
fix: use stop-first update order for all database services (#4560)
Siumauricio Jun 6, 2026
c377be0
fix: respect gitProviders permissions in git provider UI (#4561)
Siumauricio Jun 6, 2026
f35f306
chore: bump dokploy version to v0.29.8
Siumauricio Jun 6, 2026
c968a27
fix: strip credentials from service-level API responses (#4564)
Siumauricio Jun 6, 2026
0f76d8f
refactor: improve restore logging for database backups (#4566)
Siumauricio Jun 7, 2026
4900204
fix: use swarm advertise address in docker swarm join command (#4567)
Siumauricio Jun 7, 2026
a0288f8
fix: enforce docker:read on container start/stop/kill/restart mutatio…
Siumauricio Jun 7, 2026
0f77c40
refactor: replace BETTER_AUTH_SECRET with betterAuthSecret in forward…
Siumauricio Jun 7, 2026
c1c887d
fix: update deriveCookieSecret to meet oauth2-proxy requirements
Siumauricio Jun 7, 2026
dfbae18
fix: correct deriveCookieSecret test to validate 16-byte hex secret a…
Siumauricio Jun 7, 2026
6b68fca
fix: strip credentials from gitProvider.getAll API response (#4569)
Siumauricio Jun 7, 2026
e9a0932
fix: correct git provider access check for existing deploys (#4570)
Siumauricio Jun 7, 2026
1f4f940
fix: prevent registry password from appearing in error messages and s…
Siumauricio Jun 8, 2026
439f575
refactor: unify server admin tools into dashboard pages with server s…
Siumauricio Jun 12, 2026
24b02f5
Feat/concurrent deployments in memory queue (#4645)
Siumauricio Jun 17, 2026
b4e2d27
fix: resolve server from parent entity in deployment.readLogs (#4689)
elijahdev0 Jun 29, 2026
ed0abb2
feat: enhance TLS certificate selection UI in AddDomain component (#4…
Siumauricio Jun 29, 2026
8b64815
fix: add method="post" to auth forms to prevent credential leak in UR…
vikyw89 Jun 29, 2026
3ca5afd
Feat/tailwind v4 shadcn update (#4706)
Siumauricio Jun 30, 2026
c2a9587
feat: add claim mapping functionality to OIDC registration dialog (#4…
Siumauricio Jun 30, 2026
aa72091
fix: allow members with git providers permission to create and delete…
Siumauricio Jun 30, 2026
e32133d
prevent social icons from overlapping in onboarding layout (#4692)
Phoenix1808 Jun 30, 2026
ec9dd28
fix(registry): preserve username case for ECR compatibility (#4632) (…
rafaumeu Jun 30, 2026
8d44c6a
fix: don't let ssh-keyscan abort SSH git clones (#4605)
weibeu Jun 30, 2026
6431e9b
fix(validation): allow hashtag in git branch names (#4714)
Siumauricio Jun 30, 2026
1bf661b
fix: prevent request path truncation in request logs (#4643)
Siumauricio Jun 30, 2026
d87229c
fix: resolve traefik container dynamically in access-log cleanup (#4646)
Siumauricio Jun 30, 2026
f5ded8b
fix: use github owner login for webhook deploy matching (#4674)
agentHits Jul 1, 2026
91abc93
refactor(whitelabeling): update CSS variables to use oklch color format
Siumauricio Jul 1, 2026
db0cb66
fix(server-setup): report the installed Docker version in the setup b…
ioanbeilic Jul 5, 2026
b2692cd
fix(domain): validate hostname format to reject invalid characters (#…
Siumauricio Jul 5, 2026
3e74f9a
fix(user): scope user.get relation columns to reduce SSR payload size…
Siumauricio Jul 5, 2026
b96c5e8
fix(projects): make project cards grid fill available width on wide s…
Siumauricio Jul 5, 2026
3e11c0a
fix(ai): use nullable instead of optional for configFiles in AI sugge…
Siumauricio Jul 5, 2026
8a0e442
fix(deployment): resolve schedule to its service before permission ch…
Siumauricio Jul 5, 2026
475a01c
fix(databases): update default Redis version from 7 to 8 (#4224)
GuillaumeLecomte1 Jul 5, 2026
aa93897
chore(package): bump dokploy version to v0.29.9
Siumauricio Jul 5, 2026
cb23d72
feat(databases): add copy button to User and Database Name fields (#4…
Siumauricio Jul 5, 2026
38de9ef
fix(ai): allow configFiles to be null in template generator Details t…
Siumauricio Jul 5, 2026
f8a3561
fix(backup): redact S3 credentials from logs and error output (#4648)
rafaumeu Jul 5, 2026
ca2708a
fix(ai): allow Ollama Cloud API key in AI settings (#4262)
VincentEmmanuel Jul 5, 2026
2440e8f
Merge branch 'main' into canary
Siumauricio Jul 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions .claude/skills/frontend-design/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
name: frontend-design
description: Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
license: Complete terms in LICENSE.txt
---

This skill guides creation of distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices.

The user provides frontend requirements: a component, page, application, or interface to build. They may include context about the purpose, audience, or technical constraints.

## Design Thinking

Before coding, understand the context and commit to a BOLD aesthetic direction:
- **Purpose**: What problem does this interface solve? Who uses it?
- **Tone**: Pick an extreme: brutally minimal, maximalist chaos, retro-futuristic, organic/natural, luxury/refined, playful/toy-like, editorial/magazine, brutalist/raw, art deco/geometric, soft/pastel, industrial/utilitarian, etc. There are so many flavors to choose from. Use these for inspiration but design one that is true to the aesthetic direction.
- **Constraints**: Technical requirements (framework, performance, accessibility).
- **Differentiation**: What makes this UNFORGETTABLE? What's the one thing someone will remember?

**CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work - the key is intentionality, not intensity.

Then implement working code (HTML/CSS/JS, React, Vue, etc.) that is:
- Production-grade and functional
- Visually striking and memorable
- Cohesive with a clear aesthetic point-of-view
- Meticulously refined in every detail

## Frontend Aesthetics Guidelines

Focus on:
- **Typography**: Choose fonts that are beautiful, unique, and interesting. Avoid generic fonts like Arial and Inter; opt instead for distinctive choices that elevate the frontend's aesthetics; unexpected, characterful font choices. Pair a distinctive display font with a refined body font.
- **Color & Theme**: Commit to a cohesive aesthetic. Use CSS variables for consistency. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
- **Motion**: Use animations for effects and micro-interactions. Prioritize CSS-only solutions for HTML. Use Motion library for React when available. Focus on high-impact moments: one well-orchestrated page load with staggered reveals (animation-delay) creates more delight than scattered micro-interactions. Use scroll-triggering and hover states that surprise.
- **Spatial Composition**: Unexpected layouts. Asymmetry. Overlap. Diagonal flow. Grid-breaking elements. Generous negative space OR controlled density.
- **Backgrounds & Visual Details**: Create atmosphere and depth rather than defaulting to solid colors. Add contextual effects and textures that match the overall aesthetic. Apply creative forms like gradient meshes, noise textures, geometric patterns, layered transparencies, dramatic shadows, decorative borders, custom cursors, and grain overlays.

NEVER use generic AI-generated aesthetics like overused font families (Inter, Roboto, Arial, system fonts), cliched color schemes (particularly purple gradients on white backgrounds), predictable layouts and component patterns, and cookie-cutter design that lacks context-specific character.

Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices (Space Grotesk, for example) across generations.

**IMPORTANT**: Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details. Elegance comes from executing the vision well.

Remember: Claude is capable of extraordinary creative work. Don't hold back, show what can truly be created when thinking outside the box and committing fully to a distinctive vision.
10 changes: 5 additions & 5 deletions apps/api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,17 @@
"hono": "^4.11.7",
"pino": "9.4.0",
"pino-pretty": "11.2.2",
"react": "18.2.0",
"react-dom": "18.2.0",
"react": "19.2.7",
"react-dom": "19.2.7",
"redis": "4.7.0",
"zod": "^4.3.6"
},
"devDependencies": {
"@types/node": "^24.4.0",
"@types/react": "^18.2.37",
"@types/react-dom": "^18.2.15",
"@types/react": "^19.2.0",
"@types/react-dom": "^19.2.0",
"rimraf": "6.1.3",
"tsx": "^4.16.2",
"tsx": "^4.22.4",
"typescript": "^5.8.3"
},
"packageManager": "pnpm@10.22.0",
Expand Down
50 changes: 50 additions & 0 deletions apps/dokploy/__test__/backups/redact-credentials.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import { redactRcloneCredentials } from "@dokploy/server/utils/backups/redact";
import { describe, expect, it } from "vitest";

describe("redactRcloneCredentials (#4621)", () => {
it("should redact access key in rclone command", () => {
const cmd =
'rclone rcat --s3-access-key-id="AKIAIOSFODNN7EXAMPLE" --s3-secret-access-key="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" :s3:bucket/file.gz';
const redacted = redactRcloneCredentials(cmd);
expect(redacted).not.toContain("AKIAIOSFODNN7EXAMPLE");
expect(redacted).toContain('--s3-access-key-id="[REDACTED]"');
});

it("should redact secret access key in rclone command", () => {
const cmd =
'rclone rcat --s3-access-key-id="key" --s3-secret-access-key="supersecret" :s3:bucket/file.gz';
const redacted = redactRcloneCredentials(cmd);
expect(redacted).not.toContain("supersecret");
expect(redacted).toContain('--s3-secret-access-key="[REDACTED]"');
});

it("should redact both credentials simultaneously", () => {
const cmd =
'rclone lsf --s3-access-key-id="AKIA123" --s3-secret-access-key="secret456" --s3-region="us-east-1" :s3:bucket/';
const redacted = redactRcloneCredentials(cmd);
expect(redacted).not.toContain("AKIA123");
expect(redacted).not.toContain("secret456");
expect(redacted).toContain('--s3-region="us-east-1"');
});

it("should not modify non-credential flags", () => {
const cmd =
'rclone rcat --s3-region="eu-west-1" --s3-endpoint="https://s3.example.com" --s3-no-check-bucket :s3:bucket/file.gz';
const redacted = redactRcloneCredentials(cmd);
expect(redacted).toBe(cmd);
});

it("should handle commands with no credentials", () => {
const cmd = "rclone lsf :s3:bucket/";
expect(redactRcloneCredentials(cmd)).toBe(cmd);
});

it("should handle error strings containing credentials", () => {
const errorStr =
'Error: Command failed: rclone lsf --s3-access-key-id="MYKEY" --s3-secret-access-key="MYSECRET" :s3:bucket/';
const redacted = redactRcloneCredentials(errorStr);
expect(redacted).not.toContain("MYKEY");
expect(redacted).not.toContain("MYSECRET");
expect(redacted).toContain("[REDACTED]");
});
});
Loading
Loading