Editor workflow: per-entry 'Ready to publish' flag + 'Publish all marked' action (beyond branches)
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 35/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Ít trao đổi
- Công nghệ
- github, typescript
- Lĩnh vực
- content
Hướng nghiên cứu
Start with PREVIEW.md and the existing branch-picker and branch-based editing flow described in the issue; trace how GitHub-mode saves and the GitHub App handle branches and pull requests. Done means a decided, in-product draft-to-publish workflow that covers the ready status, staged-entry view, publishing action, and any smaller-scope configuration option, with appropriate validation and tests.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Use case
We run a marketing site on Keystatic in GitHub mode. Editors make 5–20 small content edits throughout the day (typo fixes, copy tweaks, swapping a tagline, adding a testimonial, etc.). Today, every Save commits straight to main, which:
- Triggers a fresh production build per Save (Cloudflare Workers Build, in our case — but the same applies to Vercel, Netlify, etc.).
- Clutters git history with one micro-commit per change ("Update Hero", "Update Hero", "Update Hero", …).
- Means a typo in any save ships to production immediately.
What's already possible
We know about branchPrefix + branch-based editing — we use it, and PREVIEW.md in our repo documents a workflow where editors pick a long-lived cms/staging branch in the picker, save many times, then merge a PR to publish.
That does solve the deploy-per-save problem, and we recommend it as the answer today. Thank you for that primitive — it's the foundation.
The UX gap
Non-technical editors still need to:
- Remember to flip the branch picker to
cms/stagingbefore every session (easy to forget; defaults tomain). - Leave Keystatic and go to GitHub to open + merge the PR to publish.
- Understand what "merge a PR" means.
For technical users this is trivial. For marketing/content editors who have never opened a PR, it's the bottleneck — they often default to editing on main because the picker is right there.
Proposed feature
A first-class "draft → publish" workflow built on top of the existing branch primitive, expressed in admin-friendly language:
- A per-entry "Ready to publish" flag in each entry's Save dialog (or as a toggle in the entry form). When unchecked, Save commits to a staging branch. When checked + Save, the entry is marked as ready in the staging branch.
- A dashboard surface listing entries currently staged (changed on the staging branch vs.
main), with their "Ready to publish" status. - A single "Publish all ready" / "Publish all changes" button that merges the staging branch into the production branch (i.e. opens + auto-merges the PR via the GitHub App).
- Optional: a
defaultBranchconfig (e.g."cms/staging") so the picker doesn't default tomain— this alone would already remove a big footgun.
The branch primitive stays exactly as it is; this is purely a UX layer on top, so technical users who prefer raw branches lose nothing.
Why this isn't easily DIY-able
We can — and probably will — build a custom admin page that lists open cms/* branches and exposes a merge button via the GitHub App token. But:
- Re-implementing the auth Keystatic already does on a sibling route is non-trivial.
- It's a separate admin surface that editors have to remember exists.
- It drifts as Keystatic evolves.
A first-class flow inside Keystatic itself would be a much better fit, and would benefit every team running Keystatic at any reasonable editing volume.
Smaller-scope wins, if a full design is out of scope
Either of these alone would already be a big improvement:
defaultBranchconfig option — pickcms/stagingso editors don't accidentally land onmain.- A "Publish to production" action in the branch picker when the current branch is
cms/*— one click to open + merge the PR (instead of leaving Keystatic).
Happy to test any of this on a live editorial site if useful.
- Ngôn ngữ chính
- TypeScript
- Star
- 2.5k
- Fork
- 176
- Merge trung bình
- 5 giờ 46 phút
- Pull request đã merge (30 ngày)
- 3
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của Thinkmill/keystatic
-
Incorrect Dutch translations: “Save” is translated as “Redden”Có thể đã có người làm @MilindChatrabhuji đã nhận 4 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Typo/Grammar on Website HomepageCó thể đã có người làm @Punith1117 đã nhận 149 ngày trước. Đang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 85/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Array field: no visible edit button on rows and no close button in the "Edit item" dialogCó thể đã có người làm @bacarndiaye đã nhận 10 ngày trước. Đang mở
Độ khó 3/5 Nửa ngày Mức phù hợp với người mới 35/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Feature: post-save "publishing" notice / `onCommit` hook so editors know changes aren't live yetĐang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 52/100
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của Thinkmill/keystatic
Issue tương tự
-
bug
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 86/100
awslabs/visual-asset-management-system#937 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
t0ggles
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 82/100
nolimits4web/swiper#8255 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 15 ngày
-
render: --variables-file (and --variables <path>) fails with "io.readFile is not a function" since 0.8.212Có thể đã có người làm @miguel-heygen đã nhận hôm nay. Đang mởbug triage/needs-triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
heygen-com/hyperframes#6830 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug launch local use
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
Maintainer thường phản hồi trong vòng 1 ngày
-
account: profile bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 5 ngày