Replies: 1 comment
-
|
In my opinion the overall idea sounds good and would make it way more usable especially for the new AI features. I have a question for the layered approach: Is this a conceptual design for how it could be implemented? Like a GuidanceService that you can turn on or off if you need it or not. I did not quite understand that. The Phase priorities seem fine to me. An additional UI pattern we need to consider is how we make the AI features stand out in the UI that you can identify them at first glance and know that they are a "nice to have" but not necessary. E.g. with a special color or something. I think this would make the user experience also a lot better. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Status: Draft
Related: #11940 (Problem statement refinement), #11594 (Problem statement generation)
Summary
Introduce a progressive, contextual user guidance system for the new AI-powered problem statement generation and refinement features, helping first-time users understand the feature's value within 30–60 seconds, teaching at the moment of intent, and fading out once the user has successfully used the feature.
Motivation (Why)
Proposal (Approach)
Implement a layered guidance strategy with four levels:
All guidance elements are:
Architecture
flowchart TB subgraph Client["Client (Angular)"] subgraph Components ProblemComponent[ProgrammingExerciseProblemComponent] EditableInstructions[EditableInstructionComponent] InlineButton[InlineRefinementButtonComponent] DiffEditor[MonacoDiffEditorComponent] end subgraph Guidance["Guidance Layer"] GuidanceService[FeatureGuidanceService] EmptyState[Empty State Component] Tooltips[Enhanced Tooltips] Coachmarks[Coachmark Component] Toast[Success Toast] end GuidanceService -->|"tracks state"| LocalStorage[(localStorage)] ProblemComponent --> EmptyState ProblemComponent --> Tooltips EditableInstructions --> Coachmarks InlineButton --> Tooltips DiffEditor --> Toast end subgraph Storage["Persistence"] LocalStorage -->|"stores"| Keys["artemis.guidance.*"] endUX Flow
First-Time User Journey
sequenceDiagram participant I as Instructor participant UI as Problem Editor participant G as Guidance System participant LS as localStorage I->>UI: Opens Problem Statement step UI->>G: Check first visit G->>LS: artemis.guidance.visited? LS-->>G: false G-->>UI: Show empty state + pulse animation I->>UI: Hovers "Generate Draft" button UI->>I: Show enhanced tooltip (300ms delay) I->>UI: Types requirements, clicks Generate UI->>API: POST /generate API-->>UI: Generated problem statement UI->>G: Mark generation complete G->>LS: Set artemis.guidance.psGenerated = true UI->>I: Show success toast + diff view I->>UI: Selects text in editor UI->>I: Show inline refinement button G->>LS: artemis.guidance.inlineRefinementUsed? LS-->>G: false UI->>I: Show first-use explanation on button I->>UI: Uses inline refinement G->>LS: Set artemis.guidance.inlineRefinementUsed = true Note over G,LS: Guidance no longer shownGuidance Persistence Logic
flowchart TD A[User Action] --> B{Which action?} B -->|"First page visit"| C[Show pulse animation] C --> C1[Dismiss after 2s] C1 --> C2[Store in sessionStorage] B -->|"First generation"| D[Show success toast] D --> D1[Store psGenerated in localStorage] D1 --> D2[Hide textarea hint forever] B -->|"First inline refinement"| E[Show refinement success] E --> E1[Store inlineRefinementUsed] E1 --> E2[Hide inline explanation forever] B -->|"Coachmark dismissed"| F[Store coachmarkDismissed] F --> F1[Never show coachmarks again]UI Patterns & Copy
Empty State (When editor is empty)
Enhanced Tooltips
First-Use Diff View Guidance
Implementation Plan
Phase 1: Quick Wins (2-3 days)
programming-exercise-problem.component.htmlprogramming-exercise-problem.component.html/tsprogramming-exercise-problem.component.tsinline-refinement-button.component.htmlprogrammingExercise.json(en/de)Phase 2: Enhanced Guidance (1 week)
FeatureGuidanceServicefor state trackingfeature-guidance.service.tscoachmark.component.ts/html/scssprogramming-exercise-problem.component.tsprogramming-exercise-editable-instruction.component.tssettings.component.tsSuccess Metrics
Tracking Implementation
Technical Details
Storage Keys
Service Interface
i18n Additions
{ "problemStatement": { "emptyState": { "title": "Create Your Problem Statement", "description": "Describe your exercise idea above, then click 'Generate Draft' to create a structured problem statement.", "seeExample": "See example input", "orWriteManually": "Start typing in the editor to write manually." }, "tooltips": { "generateButton": "Transform your exercise idea into a complete, structured problem statement with tasks and test placeholders.", "refineButton": "Improve your existing problem statement. Describe what changes you want to make.", "inlineRefinement": "Refine just your selected text. Try 'make clearer' or 'add more detail'." }, "firstUse": { "generationSuccess": "Problem statement generated! Review the changes below.", "refinementNudge": "Select any text to refine specific sections with AI." }, "diffGuidance": { "title": "Review Mode", "description": "Green lines (+) will be added. Red lines (-) will be removed. You can edit the right side before accepting changes.", "gotIt": "Got it" } } }Out of Scope (Future)
Open Questions
Feedback welcome. Particularly interested in:
Beta Was this translation helpful? Give feedback.
All reactions