Skip to content

feat(app): implement objective summary step in contribution flow - #166

Closed
Carter907 wants to merge 10 commits into
bluelearn-org:mainfrom
Carter907:feat/objective-summary-step
Closed

feat(app): implement objective summary step in contribution flow#166
Carter907 wants to merge 10 commits into
bluelearn-org:mainfrom
Carter907:feat/objective-summary-step

Conversation

@Carter907

@Carter907 Carter907 commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Curriculum Receipt (Submit Step): Implemented the final summary view as a "receipt-style" vertical timeline. It clearly lists out the curated targets and their ordered prerequisites in the exact sequence the curator organized them.
  • Subject Tagging: Expanded the Objective Contribution state and the ObjectiveDetails step to include a subjects Combobox, allowing curators to tag their objective with multiple subjects (which are displayed on the summary page).
  • Frictionless Form Validation UX: Overhauled the @stepperize/react validation pattern in both the ObjectiveDetails and Order Guides steps. Instead of silently locking the "Next" button when a form is incomplete, the UI now intercepts the click, shows a clear error toast, and dynamically applies Shadcn's destructive styling (border-destructive ring-destructive) to any missing fields.
  • Strict Sequence Verification: Added validation logic to the Order Guides step that explicitly blocks progression until the curator has visited every single target guide's prerequisite graph. Any unvisited targets are explicitly highlighted in red if they try to skip ahead.

closes #157
closes #164

Type of change

  • Bug fix
  • Feature
  • Refactor (no behavior change)
  • Documentation
  • Build / tooling / CI
  • Other: _________

Verification

  • pnpm -r typecheck passes
  • pnpm -r build passes
  • Manually verified in a browser (for UI / behavior changes)
  • Followed the app layout conventions
  • No new dependencies, or new dependencies are justified and AGPL-compatible
  • Change does not violate any non-negotiable principle
  • Documentation only, no changes to the codebase, so no tests required

Signed-off-by: Carter <speers.carter@gmail.com>
…tion

Signed-off-by: Carter <speers.carter@gmail.com>
…etails

Signed-off-by: Carter <speers.carter@gmail.com>
Signed-off-by: Carter <speers.carter@gmail.com>
@Carter907 Carter907 changed the title Feat/objective summary step feat(app): objective summary step Jul 21, 2026
@Carter907 Carter907 changed the title feat(app): objective summary step feat(app): implement objective summary step in contribution flow Jul 21, 2026
@Carter907 Carter907 self-assigned this Jul 21, 2026
@Carter907 Carter907 added the area:frontend Tasks related to frontend (app) label Jul 21, 2026

@andyrodrigues30 andyrodrigues30 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See annotated screenshot.

Image

Also remove the submit button from the bottom and keep it at the top next to the submit button like the other steps.

Signed-off-by: Carter <speers.carter@gmail.com>

@andyrodrigues30 andyrodrigues30 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See comments

publishText="Submit"
/>

<Separator className="mb-8 bg-border" />

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove this (it already exists in the StepperActionHeader)

<Separator className="mb-8 bg-border" />

<div className="mx-auto mt-8 flex w-full max-w-3xl flex-col gap-12">
<Card className="rounded-md bg-background shadow-none">

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Display this card of "Objective" information like this the following objective card (that way we know what the actual objective card will look like. This card should take up the full width.

Add the tags under the username and created at date.

You don't need the "Not Started" status.
For the stats in the footer - it would be 3 stats:

  • Duration (use M for minutes)
  • Sub-objectives (instead of target guides
  • Guides (this is the total number of guides)
Image


<div className="space-y-6">
<h3 className="px-1 text-lg font-semibold tracking-tight">
Curriculum Paths

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Change to "Sub-objectives"

key={idx}
className="flex flex-col gap-2 md:flex-row md:items-center md:gap-4"
>
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full border border-badge-border bg-badge font-mono text-xs font-semibold text-badge-foreground">

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Increase the spacing between the order number and the card see below (have a look how it is implemented on objectives.index.tsx

Image

</span>
{getGuideDuration(stepSlug) > 0 && (
<span className="shrink-0 font-mono text-[10px] text-muted-foreground uppercase">
{getGuideDuration(stepSlug)} mins

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

change "mins" to "m"

Signed-off-by: Carter <speers.carter@gmail.com>
@Carter907
Carter907 force-pushed the feat/objective-summary-step branch from 78485e8 to b08bd39 Compare July 24, 2026 06:27
Carter907 and others added 2 commits July 24, 2026 04:25
- Persist objective contribution form state in sessionStorage to survive page reloads.
- Decouple PreviewObjectiveCard from ObjectiveCard to safely refine preview styling.
- Center arrows and tighten featured guide graphs on wide screens.
- Append summaries and subject tags to subobjective target cards.
- Synchronize featured guide graph with user's explicitly selected featured guide.
- Format duration as 'min' instead of 'M'.

Signed-off-by: Carter <speers.carter@gmail.com>
@Carter907

Copy link
Copy Markdown
Contributor Author

Here is the updated Objective Card on the preview page:
image

@Carter907

Copy link
Copy Markdown
Contributor Author

here is the sub-objectives:
image

Carter907 added a commit to Carter907/bluelearn that referenced this pull request Jul 26, 2026
Replace static mock data with backend service calls

- Implemented add and removal of objective targets to
  objective-revision.service.ts.
- Fetch walkthrough edges dynamically from /:slug/walkthrough API.
- Placeholder Preview page based on PR bluelearn-org#166
- Added 'Save Draft' button for drafting LOs.

Signed-off-by: Carter <speers.carter@gmail.com>
Carter907 added a commit to Carter907/bluelearn that referenced this pull request Jul 26, 2026
Replace static mock data with backend service calls

- Implemented add and removal of objective targets to
  objective-revision.service.ts.
- Fetch walkthrough edges dynamically from /:slug/walkthrough API.
- Placeholder Preview page based on PR bluelearn-org#166
- Added 'Save Draft' button for drafting LOs.

Signed-off-by: Carter <speers.carter@gmail.com>
Carter907 added a commit to Carter907/bluelearn that referenced this pull request Jul 26, 2026
Replace static mock data with backend service calls

- Implemented add and removal of objective targets to
  objective-revision.service.ts.
- Fetch walkthrough edges dynamically from /:slug/walkthrough API.
- Placeholder Preview page based on PR bluelearn-org#166
- Added 'Save Draft' button for drafting LOs.

Signed-off-by: Carter <speers.carter@gmail.com>
@tonylam0

Copy link
Copy Markdown
Collaborator

Closing this PR because it's changes were included in PR 207.

@tonylam0 tonylam0 closed this Jul 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:frontend Tasks related to frontend (app)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] Add subjects field to objective details page. [Feature] Display objective summary on submit step of contribution flow

3 participants