kasuken / kasuken/LearnStack

Epic: Production readiness review

Open
#38 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement
Dominant language
HTML
Stars
10
Forks
0
Avg merge
2h 52m
Merged PRs (30d)
20

Description

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
  1. 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.
  2. Week 2 — survives users: thumbnails out of SQL, indexes + server-side pagination, rate limiting, security headers, redirect-aware SSRF fix.
  3. Week 3 — trust: fix account deletion, authorization-boundary tests, staging slot + swap, Dependabot/CodeQL, finish the translations.
  4. Then features: browser extension / share target and import first — they address the biggest friction in the current flow.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Read the LearnStack.Core services and entities, the Blazor Server app, the 38 unit tests, and the Azure deployment workflow, using the tiered findings as the review checklist. Start by splitting the epic into independently verifiable sub-issues; done means each operational risk has evidence, an agreed scope, and a clear verification path.

Written by the indexing model from the issue text.

Assessment

Tech stack
azure
Domain
backend, ci-cd, cloud, databases, observability, security, testing
Issue type
Refactor
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.