Improvement: Stop re-uploading bundled cover images to S3 on every project create
Maintainers usually reply within 1 day
@manshi-n is already working on this.
Since Oct 9, 2026.
Assessment
- Difficulty
- 3/5
- Estimated time
- Half a day
- Newbie friendliness
- 50/100
- Issue type
- Refactor
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- python, typescript
Research direction
Start in apps/web/components/projects/create/root.tsx around lines 72-79, where the upload runs on every project create, then check needsUpload in apps/web/helpers/cover-image.helper.ts near line 189 to see when a bundled static cover is already treated as needing no upload. The backend key generation is at apps/api/plane/app/views/asset/v2.py line 389. Done means a project created with a bundled cover makes no new S3 object, while uploaded covers still work. The issue leaves open whether to skip the upload or hash the bytes, so confirm the approach with a maintainer first.
Written by the indexing model from the issue text.
Description
What's happening
- Every project create uploads one of the 30 bundled covers (
apps/web/app/assets/cover-images/) to S3 under a new random UUID key - Same file, new S3 object, every time
asset/v2.py:389:asset_key = f"{workspace.id}/{uuid.uuid4().hex}-{name}"
Scale of waste (rough math)
- Say 2,000 teams on Cloud
- Say 3 projects per team = 6,000 projects
- ~50KB per cover × 6,000 = ~300MB of duplicate covers
- Only 30 unique files exist — 6,000 objects store 30 images
Fix
- If cover is
local_static, skip the upload - Store the static path directly — the app already renders static paths as-is (
getCoverImageDisplayURL) - Or:
sha256(bytes)as the S3 key instead ofuuid4(), so identical files dedupe
Files
apps/web/components/projects/create/root.tsx:72-79— upload always runs on createapps/web/helpers/cover-image.helper.ts:189—needsUploadruleapps/api/plane/app/views/asset/v2.py:389— random key per upload
Just a small bug i noticed, not much but can save small s3 cost in cloud version
Let me know if this issue can be taken, would like to raise a pr
- Dominant language
- TypeScript
- Stars
- 60.7k
- Forks
- 6k
- Avg merge
- 1d 9h
- Merged PRs (30d)
- 56
Getting set up
- Ships a Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from makeplane/plane
-
[bug]: Email notifications show a broken avatar for users without a profile photoPossibly taken @gurnoorpannu claimed this 3 days ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
makeplane/plane#10009 · 1 comment ·
Maintainers usually reply within 1 day
-
🐛 Bug: Calendar work items cannot be opened on mobilePossibly taken @pennnnnnnnnn claimed this 5 days ago. Open
Difficulty 1/5 Under an hour Newbie friendliness 75/100
Maintainers usually reply within 1 day
-
[bug]: First day of the week section not translated when Idioma is EspañolPossibly taken @deepcfr claimed this 8 days ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
makeplane/plane#9967 · 2 comments ·
Maintainers usually reply within 1 day
-
[bug]: First day of the week section not translated when Idioma is EspañolPossibly taken @Indira-kumar claimed this 6 days ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
Maintainers usually reply within 1 day
-
[bug]: Analytics "Last 7 / 30 days" windows cover one day too manyPossibly taken @manaskumar3003 claimed this 33 days ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
makeplane/plane#9830 · 1 comment ·
Maintainers usually reply within 1 day
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 90/100
chrisparsons83/flexspotff#215 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
vitest-dev/vitest#11633 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
Maintainers usually reply within 1 day