Plan · plot-app

Trash for Deleted Projects

Delete stops being final. A project waits in Trash for 30 days, then a nightly job removes it.

+ migrations/0042_trash.sql # deleted_at and an index + server/trash/purge.ts # the nightly job + web/trash/TrashView.tsx # the new view ~ server/projects/delete.ts # UPDATE, not DELETE ~ server/projects/scope.ts # skips trashed rows - server/projects/cascade.ts # no longer used add a trash for deleted projects. people delete the wrong one and then email support I deleted Q3 launch by mistake. Is there any way to get it back?
Settings API Cascade Trash projects Purge job Filespurgedkept
Fig. 1Delete becomes an UPDATE. A nightly job does the real delete.

Delete moves a project to Trash for 30 days.

Trash 2 projects
Q3 launch
Deleted by Dana · 29689 days left
Restore
Old roadmap
Deleted by you · 3 days left
Restore
Restore brings back members and tasks too. See claim 2.
30 days 7 days 90 days

Delete sets deleted_at. It removes no rows.

Every project read skips trashed rows.

Add AND p.deleted_at IS NULL here. I found no read that skips this scope, but I did not open all 14 callers.

Restore puts a project back with its members and tasks.

The owner The owner and workspace admins

A nightly job deletes projects older than 30 days.

Yes, in the same run No, keep the files

The job removes the project's files from storage.

Batches of 1,000 keys, the S3 limit for one request.

Shared: one column and one index.

Not changing: billing, exports, and API keys.