Epic: Production readiness review
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
- 25/100
Hướng nghiên cứu
Đọc các service và entity của LearnStack.Core, ứng dụng Blazor Server, 38 unit test và workflow triển khai Azure, sử dụng các phát hiện theo từng mức làm checklist review. Bắt đầu bằng cách chia epic thành các sub-issue có thể được xác minh độc lập; hoàn tất có nghĩa là mỗi rủi ro vận hành đều có bằng chứng, phạm vi đã được thống nhất và lộ trình xác minh rõ ràng.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Overview
Full static review of the solution — LearnStack.Core (7 entities, 5 services), the Blazor Server app (14 pages, Identity + passkeys, 5 languages), 38 unit tests, and the Azure deployment workflow — to identify what is needed before opening the app to real users.
[!NOTE]
This review is static analysis only: the code was read, not built or executed. Each sub-issue records the evidence (file + line) it is based on so it can be verified independently.
Verdict: the product surface is in good shape (resources, content ideas, friends, shared collections, Pulse, PWA, i18n). What is missing is almost entirely the operational layer — transactional email, data-protection key persistence, observability, database indexes, rate limiting and CI gates. Roughly five items will cause real problems on the first day of real traffic.
Nothing here is committed work — this epic is a backlog to triage.
Tier 1 — Release blockers
| Area | Problem |
|---|---|
| Auth / email | Email sender is a no-op: password reset and email confirmation silently do nothing |
| Data Protection | No key persistence — every restart or scale-out logs every user out |
| Migrations | MigrateAsync() on startup rethrows and races across instances |
| CI | Tests never gate the deploy; no PR build workflow exists |
| Deploy | No staging slot, smoke test or rollback; publish-profile secret instead of OIDC |
| Observability | No health checks, no telemetry, no structured logging |
Tier 2 — Scale, security and cost
| Area | Problem |
|---|---|
| Thumbnails | Up to 5 MB blobs on the resource row, base64-inlined into every render |
| Indexes | No index on UserId on any user-owned table |
| Pagination | Whole library loaded into memory, then filtered and paged in the component |
| Rate limiting | Nothing throttled — auth, public share pages, or the metadata fetcher |
| SSRF | Redirects bypass the private-IP check; unbounded response body |
| Edge hardening | No security headers, AllowedHosts: "*", no forwarded headers |
| Config | LocalDB connection string committed as the production default |
| Concurrency | No RowVersion; concurrent edits overwrite each other silently |
Tier 3 — Correctness and polish
| Area | Problem |
|---|---|
| Account deletion | Likely FK failure for users with linked ideas or shared collections (GDPR-facing) |
DisplayName |
Settable but never displayed; email local-part shown instead |
| Dead code | CultureMiddleware never registered |
| Localization | ro offered but has no resource file; ~56 strings untranslated in de/es/fr/it |
| Timezones | Everything UTC — relative dates and Pulse charts are wrong outside UTC |
| Repo hygiene | build_err.txt committed, leaking local paths |
| Tests | 38 tests, Core services only — no authorization-boundary or component tests |
| Supply chain | No Dependabot, CodeQL or secret scanning |
Tier 4 — Feature ideas
Categories/tags as first-class entities, browser extension and PWA share target, import from Pocket/Raindrop/bookmarks, digest email, AI assist on resources, full-text search, offline PWA, public profile pages, share analytics, admin dashboard, streaks and goals on Pulse.
Suggested sequencing
- Week 1 — cannot launch without: real email sender + confirmed accounts, Data Protection keys, migrations out of startup, PR CI that actually gates, health checks + telemetry.
- Week 2 — survives users: thumbnails out of SQL, indexes + server-side pagination, rate limiting, security headers, redirect-aware SSRF fix.
- Week 3 — trust: fix account deletion, authorization-boundary tests, staging slot + swap, Dependabot/CodeQL, finish the translations.
- Then features: browser extension / share target and import first — they address the biggest friction in the current flow.
- Ngôn ngữ chính
- HTML
- Star
- 10
- Fork
- 0
- Merge trung bình
- 2 giờ 35 phút
- Pull request đã merge (30 ngày)
- 21
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
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 kasuken/LearnStack
-
enhancement
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 91/100
kasuken/LearnStack#59 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
kasuken/LearnStack#72 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Feature: admin dashboardĐang mởenhancement
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 30/100
kasuken/LearnStack#71 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
kasuken/LearnStack#70 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Feature: public profile pagesĐang mởenhancement
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 45/100
kasuken/LearnStack#69 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của kasuken/LearnStack
Issue tương tự
-
DB-plane provider_chat_options.* is accepted by config set but never merged into the loaded configĐang mở
Độ 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 1 ngày
-
kind/bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Upgrade to Spring Pulsar 2.0.8Đang mởstatus: team-only type: dependency-upgrade
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
spring-projects/spring-boot#52099 ·
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 69/100
PrestaShop/PrestaShop#43140 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Round video messages start gray and blocky with libx264: encoder is configured for 1,000,000 fpsĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
telegramdesktop/tdesktop#31422 ·
Maintainer thường phản hồi trong vòng 9 ngày