bparrino commited on
Commit
cf80e69
Β·
verified Β·
1 Parent(s): 4b4280d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +632 -432
app.py CHANGED
@@ -2,11 +2,12 @@ import streamlit as st
2
  import json
3
  import time
4
  import random
 
5
 
6
  # Set page config
7
  st.set_page_config(
8
- page_title="Training Content Format Discovery",
9
- page_icon="πŸŽ“",
10
  layout="wide",
11
  initial_sidebar_state="collapsed"
12
  )
@@ -41,35 +42,95 @@ st.markdown("""
41
  background-color: white;
42
  margin-bottom: 20px;
43
  }
44
- .format-card {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  border: 1px solid #e0e0e0;
46
  border-radius: 8px;
47
  padding: 15px;
48
  margin-bottom: 15px;
49
  background-color: #fafafa;
50
  }
51
- .format-title {
52
- font-size: 1.2rem;
53
  font-weight: 600;
54
  color: #2c3e50;
55
  margin-bottom: 8px;
56
  }
57
- .format-description {
58
- color: #5a6c7d;
59
- margin-bottom: 10px;
60
  }
61
- .format-details {
62
- font-size: 0.9rem;
63
- color: #7f8c8d;
64
  }
65
- .match-score {
66
- background-color: #e8f5e8;
67
- color: #2d6a2d;
68
- padding: 4px 8px;
69
- border-radius: 12px;
70
- font-size: 0.8rem;
 
 
 
 
 
 
 
 
 
 
 
 
 
71
  font-weight: 600;
72
- float: right;
 
 
 
 
 
 
 
 
 
 
 
 
73
  }
74
  .stButton button {
75
  width: 100%;
@@ -79,18 +140,6 @@ st.markdown("""
79
  color: #6c757d;
80
  margin-top: 2rem;
81
  }
82
- .settings-section {
83
- background-color: #f8f9fa;
84
- padding: 15px;
85
- border-radius: 5px;
86
- margin-bottom: 20px;
87
- }
88
- .examples-section {
89
- background-color: #e9f7fe;
90
- padding: 15px;
91
- border-radius: 5px;
92
- margin-bottom: 20px;
93
- }
94
  .placeholder-area {
95
  border: 2px dashed #ddd;
96
  border-radius: 10px;
@@ -99,462 +148,613 @@ st.markdown("""
99
  background-color: #f8f9fa;
100
  color: #666;
101
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
  </style>
103
  """, unsafe_allow_html=True)
104
 
105
  # Title and description
106
  st.markdown("""
107
  <div class="title-area">
108
- <h1>Training Content Format Discovery πŸŽ“</h1>
109
- <p>Find the perfect training content format for your audience, budget, and goals. Get personalized recommendations in seconds!</p>
110
  </div>
111
  """, unsafe_allow_html=True)
112
 
113
  # Initialize session state
114
- if "recommendations" not in st.session_state:
115
- st.session_state["recommendations"] = None
116
- if "analysis_history" not in st.session_state:
117
- st.session_state["analysis_history"] = []
 
 
 
 
118
 
119
- # Training content formats database
120
- TRAINING_FORMATS = {
121
- "video_tutorials": {
122
- "name": "Video Tutorials",
123
- "description": "Engaging visual content with step-by-step demonstrations",
124
- "best_for": ["Visual learners", "Technical skills", "Software training"],
125
- "budget": "Medium",
126
- "production_time": "High",
127
- "engagement": "High",
128
- "scalability": "High",
129
- "interaction": "Low",
130
- "sample_link": "https://youtu.be/HPUWGE9B_UQ?si=a4vr6BL43eMCR9Th"
 
 
131
  },
132
- "powerpoint_presentations": {
133
- "name": "PowerPoint Presentations",
134
- "description": "Slide-based presentations for structured information delivery",
135
- "best_for": ["Information sharing", "Concepts explanation", "Quick updates"],
136
- "budget": "Very Low",
137
- "production_time": "Low",
138
- "engagement": "Low",
139
- "scalability": "High",
140
- "interaction": "Low"
 
 
 
141
  },
142
- "microlearning_modules": {
143
- "name": "Microlearning Modules",
144
- "description": "Bite-sized content focused on specific skills or concepts",
145
- "best_for": ["Busy professionals", "Just-in-time learning", "Skill reinforcement"],
146
- "budget": "Low",
147
- "production_time": "Low",
148
- "engagement": "Medium",
149
- "scalability": "Very High",
150
- "interaction": "Medium"
 
 
 
 
151
  },
152
- "elearning_courses": {
153
- "name": "E-Learning Courses",
154
- "description": "Comprehensive online courses with structured learning paths",
155
- "best_for": ["Certification programs", "Comprehensive training", "Self-paced learning"],
156
- "budget": "Medium",
157
- "production_time": "High",
158
- "engagement": "Medium",
159
- "scalability": "Very High",
160
- "interaction": "Medium"
 
 
 
161
  },
162
- "simulation_training": {
163
- "name": "Simulation Training",
164
- "description": "Virtual environments for safe practice of real-world scenarios",
165
- "best_for": ["High-risk training", "Technical skills", "Safety training"],
166
- "budget": "Very High",
167
- "production_time": "Very High",
168
- "engagement": "Very High",
169
- "scalability": "Medium",
170
- "interaction": "Very High"
 
 
 
 
171
  },
172
- "gamified_learning": {
173
- "name": "Gamified Learning",
174
- "description": "Game elements integrated into training content for motivation",
175
- "best_for": ["Engagement challenges", "Younger audiences", "Skill practice"],
176
- "budget": "High",
177
- "production_time": "High",
178
- "engagement": "Very High",
179
- "scalability": "High",
180
- "interaction": "High"
 
 
 
181
  },
182
- "mobile_learning": {
183
- "name": "Mobile Learning",
184
- "description": "Training content optimized for smartphones and tablets",
185
- "best_for": ["Remote workforce", "Field training", "Accessibility"],
186
- "budget": "Medium",
187
- "production_time": "Medium",
188
- "engagement": "Medium",
189
- "scalability": "Very High",
190
- "interaction": "Medium"
 
 
 
191
  },
192
- "blended_learning": {
193
- "name": "Blended Learning",
194
- "description": "Combination of online and in-person training methods",
195
- "best_for": ["Comprehensive programs", "Varied learning styles", "Flexibility"],
196
- "budget": "High",
197
- "production_time": "High",
198
- "engagement": "High",
199
- "scalability": "Medium",
200
- "interaction": "High"
 
 
 
 
201
  },
202
- "webinar_series": {
203
- "name": "Webinar Series",
204
- "description": "Live or recorded online presentations with Q&A sessions",
205
- "best_for": ["Expert knowledge sharing", "Large audiences", "Thought leadership"],
206
- "budget": "Low",
207
- "production_time": "Low",
208
- "engagement": "Medium",
209
- "scalability": "Very High",
210
- "interaction": "Medium"
 
 
 
211
  },
212
- "pdf_guides": {
213
- "name": "PDF Guides & Manuals",
214
- "description": "Downloadable documents with detailed instructions and references",
215
- "best_for": ["Reference materials", "Policy training", "Quick deployment"],
216
- "budget": "Very Low",
217
- "production_time": "Low",
218
- "engagement": "Low",
219
- "scalability": "Very High",
220
- "interaction": "Very Low"
221
- }
222
- }
 
 
 
223
 
224
- # Scoring algorithm
225
- def calculate_format_scores(audience_type, budget, objectives, goals, timeline, interaction_level):
226
- scores = {}
 
 
227
 
228
- for format_id, format_data in TRAINING_FORMATS.items():
229
- score = 0
230
-
231
- # Budget matching
232
- budget_map = {"Very Low": 1, "Low": 2, "Medium": 3, "High": 4, "Very High": 5}
233
- user_budget = budget_map.get(budget, 3)
234
- format_budget = budget_map.get(format_data["budget"], 3)
235
-
236
- if format_budget <= user_budget:
237
- score += 20
238
- else:
239
- score -= (format_budget - user_budget) * 5
240
-
241
- # Timeline matching
242
- timeline_map = {"ASAP (1-2 weeks)": 1, "1 month": 2, "2-3 months": 3, "3+ months": 4}
243
- user_timeline = timeline_map.get(timeline, 3)
244
- production_map = {"Low": 1, "Medium": 2, "High": 3, "Very High": 4}
245
- format_production = production_map.get(format_data["production_time"], 2)
246
-
247
- if format_production <= user_timeline:
248
- score += 15
249
- else:
250
- score -= (format_production - user_timeline) * 5
251
-
252
- # Audience type matching
253
- audience_matches = {
254
- "Corporate employees": ["elearning_courses", "webinar_series", "blended_learning", "mobile_learning", "powerpoint_presentations"],
255
- "Technical professionals": ["video_tutorials", "simulation_training", "elearning_courses"],
256
- "Sales teams": ["gamified_learning", "mobile_learning", "powerpoint_presentations", "microlearning_modules"],
257
- "Remote workers": ["mobile_learning", "elearning_courses", "webinar_series", "microlearning_modules"],
258
- "New hires": ["blended_learning", "elearning_courses", "powerpoint_presentations", "video_tutorials"],
259
- "Managers/Leaders": ["webinar_series", "blended_learning", "powerpoint_presentations", "elearning_courses"],
260
- "External customers": ["video_tutorials", "webinar_series", "pdf_guides", "elearning_courses"],
261
- "Field workers": ["mobile_learning", "microlearning_modules", "video_tutorials", "pdf_guides"]
262
- }
263
-
264
- if format_id in audience_matches.get(audience_type, []):
265
- score += 25
266
-
267
- # Objectives matching
268
- objective_matches = {
269
- "Skill development": ["simulation_training", "video_tutorials", "gamified_learning", "elearning_courses"],
270
- "Compliance training": ["elearning_courses", "pdf_guides", "webinar_series", "blended_learning", "powerpoint_presentations"],
271
- "Product knowledge": ["video_tutorials", "elearning_courses", "webinar_series", "mobile_learning", "powerpoint_presentations"],
272
- "Onboarding": ["blended_learning", "elearning_courses", "video_tutorials", "powerpoint_presentations"],
273
- "Certification prep": ["elearning_courses", "blended_learning", "webinar_series", "pdf_guides"],
274
- "Behavior change": ["gamified_learning", "simulation_training", "microlearning_modules", "video_tutorials"],
275
- "Knowledge sharing": ["webinar_series", "pdf_guides", "elearning_courses", "video_tutorials", "powerpoint_presentations"]
276
- }
277
-
278
- for objective in objectives:
279
- if format_id in objective_matches.get(objective, []):
280
- score += 15
281
-
282
- # Interaction level matching
283
- interaction_map = {"Low": 1, "Medium": 2, "High": 3, "Very High": 4}
284
- user_interaction = interaction_map.get(interaction_level, 2)
285
- format_interaction = interaction_map.get(format_data["interaction"], 2)
286
-
287
- if abs(format_interaction - user_interaction) <= 1:
288
- score += 10
289
-
290
- # Goals matching
291
- goal_matches = {
292
- "Reduce training costs": ["microlearning_modules", "pdf_guides", "webinar_series", "elearning_courses", "powerpoint_presentations"],
293
- "Improve engagement": ["gamified_learning", "simulation_training", "video_tutorials", "mobile_learning"],
294
- "Scale training globally": ["elearning_courses", "mobile_learning", "webinar_series", "microlearning_modules"],
295
- "Faster deployment": ["microlearning_modules", "pdf_guides", "webinar_series", "mobile_learning", "powerpoint_presentations"],
296
- "Better retention": ["gamified_learning", "simulation_training", "microlearning_modules", "video_tutorials"],
297
- "Measurable results": ["elearning_courses", "gamified_learning", "simulation_training", "blended_learning"]
298
- }
299
-
300
- for goal in goals:
301
- if format_id in goal_matches.get(goal, []):
302
- score += 10
303
-
304
- scores[format_id] = max(0, min(100, score))
305
 
306
- return scores
307
-
308
- # Main content
309
- col1, col2 = st.columns([1, 1])
 
 
 
 
 
310
 
311
- with col1:
312
- st.markdown('<div class="custom-subheader">Tell Us About Your Training Needs</div>', unsafe_allow_html=True)
 
313
 
314
- # Audience Type
315
- audience_type = st.selectbox(
316
- "Who is your target audience?",
317
- [
318
- "Corporate employees",
319
- "Technical professionals",
320
- "Sales teams",
321
- "Remote workers",
322
- "New hires",
323
- "Managers/Leaders",
324
- "External customers",
325
- "Field workers"
326
- ],
327
- help="Select the primary audience for your training content"
328
- )
329
 
330
- # Budget
331
- budget = st.select_slider(
332
- "What's your budget range?",
333
- options=["Very Low", "Low", "Medium", "High", "Very High"],
334
- value="Medium",
335
- help="Consider development, production, and deployment costs"
336
- )
 
 
 
 
 
 
 
337
 
338
- # Timeline
339
- timeline = st.selectbox(
340
- "When do you need this deployed?",
341
- [
342
- "ASAP (1-2 weeks)",
343
- "1 month",
344
- "2-3 months",
345
- "3+ months"
346
- ],
347
- index=1,
348
- help="How quickly do you need the training content ready?"
349
- )
 
350
 
351
- # Objectives
352
- objectives = st.multiselect(
353
- "What are your main training objectives?",
354
- [
355
- "Skill development",
356
- "Compliance training",
357
- "Product knowledge",
358
- "Onboarding",
359
- "Certification prep",
360
- "Behavior change",
361
- "Knowledge sharing"
362
- ],
363
- help="Select all that apply (you can choose multiple)"
364
- )
365
 
366
- # Goals
367
- goals = st.multiselect(
368
- "What are your key goals?",
369
- [
370
- "Reduce training costs",
371
- "Improve engagement",
372
- "Scale training globally",
373
- "Faster deployment",
374
- "Better retention",
375
- "Measurable results"
376
- ],
377
- help="What outcomes are most important to you?"
378
- )
 
379
 
380
- # Interaction Level
381
- interaction_level = st.select_slider(
382
- "How much interaction do you want?",
383
- options=["Low", "Medium", "High", "Very High"],
384
- value="Medium",
385
- help="Level of learner interaction and engagement"
386
- )
 
 
 
 
 
 
 
387
 
388
- # Additional Context
389
- additional_context = st.text_area(
390
- "Any additional context or specific requirements?",
391
- placeholder="e.g., Must work on mobile devices, need multilingual support, integration with LMS required...",
392
- height=80,
393
- help="Tell us about any special requirements or constraints"
394
- )
 
 
 
 
 
 
 
395
 
396
- # Examples for inspiration
397
- with st.expander("Need help? See example scenarios", expanded=False):
398
- st.markdown('<div class="examples-section">', unsafe_allow_html=True)
399
-
400
- example_scenarios = [
401
- {
402
- "title": "New Employee Onboarding",
403
- "audience": "New hires",
404
- "budget": "Medium",
405
- "objectives": ["Onboarding", "Skill development"],
406
- "goals": ["Better retention", "Faster deployment"]
407
- },
408
- {
409
- "title": "Sales Team Product Training",
410
- "audience": "Sales teams",
411
- "budget": "High",
412
- "objectives": ["Product knowledge", "Skill development"],
413
- "goals": ["Improve engagement", "Measurable results"]
414
- },
415
- {
416
- "title": "Compliance Training Rollout",
417
- "audience": "Corporate employees",
418
- "budget": "Low",
419
- "objectives": ["Compliance training"],
420
- "goals": ["Scale training globally", "Reduce training costs"]
421
- }
422
- ]
423
-
424
- for i, example in enumerate(example_scenarios):
425
- st.markdown(f"**{example['title']}**")
426
- st.markdown(f"*Audience: {example['audience']}, Budget: {example['budget']}, Objectives: {', '.join(example['objectives'])}, Goals: {', '.join(example['goals'])}*")
427
- st.markdown("---")
428
-
429
- st.markdown('</div>', unsafe_allow_html=True)
430
 
431
- # Generate recommendations button
432
- generate_button = st.button(
433
- "🎯 Get My Recommendations",
434
- disabled=not objectives or not goals,
435
- use_container_width=True
436
- )
 
 
 
 
 
 
 
437
 
438
- if not objectives:
439
- st.info("Please select at least one training objective")
440
- elif not goals:
441
- st.info("Please select at least one goal")
442
 
443
- # Display recommendations
444
- with col2:
445
- st.markdown('<div class="custom-subheader">Your Personalized Recommendations</div>', unsafe_allow_html=True)
446
-
447
- if generate_button and objectives and goals:
448
- with st.spinner("Analyzing your requirements and matching formats..."):
449
- # Simulate processing time
450
- time.sleep(2)
451
-
452
- # Calculate scores
453
- scores = calculate_format_scores(
454
- audience_type, budget, objectives, goals, timeline, interaction_level
455
- )
456
-
457
- # Sort by score
458
- sorted_formats = sorted(scores.items(), key=lambda x: x[1], reverse=True)
459
-
460
- # Store recommendations
461
- st.session_state["recommendations"] = {
462
- "formats": sorted_formats,
463
- "params": {
464
- "audience": audience_type,
465
- "budget": budget,
466
- "timeline": timeline,
467
- "objectives": objectives,
468
- "goals": goals,
469
- "interaction": interaction_level,
470
- "context": additional_context
471
- }
472
- }
473
-
474
- st.success("βœ… Analysis complete! Here are your recommendations:")
475
 
476
- if st.session_state["recommendations"] is not None:
477
- recommendations = st.session_state["recommendations"]
478
-
479
- st.markdown('<div class="results-container">', unsafe_allow_html=True)
 
 
 
 
 
480
 
481
- # Show top 5 recommendations
482
- for i, (format_id, score) in enumerate(recommendations["formats"][:5]):
483
- format_data = TRAINING_FORMATS[format_id]
484
-
485
- st.markdown(f'<div class="format-card">', unsafe_allow_html=True)
486
- st.markdown(f'<div class="format-title">{format_data["name"]} <span class="match-score">{score}% Match</span></div>', unsafe_allow_html=True)
487
- st.markdown(f'<div class="format-description">{format_data["description"]}</div>', unsafe_allow_html=True)
488
-
489
- # Add sample link if available
490
- if "sample_link" in format_data:
491
- st.markdown(f'<a href="{format_data["sample_link"]}" target="_blank" style="color: #1f77b4; text-decoration: none;">πŸ”— View Sample</a>', unsafe_allow_html=True)
492
- st.markdown("<br>", unsafe_allow_html=True)
493
 
494
- # Show key details
495
  st.markdown(f"""
496
- <div class="format-details">
497
- <strong>Best for:</strong> {', '.join(format_data['best_for'])}<br>
498
- <strong>Budget:</strong> {format_data['budget']} |
499
- <strong>Production Time:</strong> {format_data['production_time']} |
500
- <strong>Engagement:</strong> {format_data['engagement']}
501
  </div>
502
  """, unsafe_allow_html=True)
503
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
504
  st.markdown('</div>', unsafe_allow_html=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
505
 
506
- st.markdown('</div>', unsafe_allow_html=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
507
 
508
- # Show analysis summary
509
- with st.expander("View Analysis Summary", expanded=False):
510
- st.markdown("**Your Requirements:**")
511
- st.write(f"- **Audience:** {recommendations['params']['audience']}")
512
- st.write(f"- **Budget:** {recommendations['params']['budget']}")
513
- st.write(f"- **Timeline:** {recommendations['params']['timeline']}")
514
- st.write(f"- **Objectives:** {', '.join(recommendations['params']['objectives'])}")
515
- st.write(f"- **Goals:** {', '.join(recommendations['params']['goals'])}")
516
- st.write(f"- **Interaction Level:** {recommendations['params']['interaction']}")
517
- if recommendations['params']['context']:
518
- st.write(f"- **Additional Context:** {recommendations['params']['context']}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
519
 
520
- # Action buttons
521
- col_b1, col_b2 = st.columns(2)
 
 
522
 
523
- with col_b1:
524
- # Generate report
525
- report_data = {
526
- "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
527
- "recommendations": recommendations
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
528
  }
529
 
530
- report_json = json.dumps(report_data, indent=2)
531
-
532
- st.download_button(
533
- label="πŸ“Š Download Report",
534
- data=report_json,
535
- file_name=f"training_recommendations_{int(time.time())}.json",
536
- mime="application/json",
537
- use_container_width=True
538
- )
539
 
540
- with col_b2:
541
- # New analysis button
542
- if st.button("πŸ”„ New Analysis", use_container_width=True):
543
- st.session_state["recommendations"] = None
544
- st.rerun()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
545
 
546
- else:
547
- # Placeholder
548
- st.markdown("""
549
- <div class="placeholder-area">
550
- <h3>🎯 Your Recommendations Will Appear Here</h3>
551
- <p>Fill out your training requirements and click 'Get My Recommendations' to discover the best content formats for your needs.</p>
552
- </div>
553
- """, unsafe_allow_html=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
554
 
555
  # Footer
556
  st.markdown("""
557
  <div class="footnote">
558
- <p><strong>Note:</strong> Recommendations are based on industry best practices and typical use cases. Consider piloting your chosen format with a small group before full deployment. Results may vary based on your specific context and constraints.</p>
 
559
  </div>
560
  """, unsafe_allow_html=True)
 
2
  import json
3
  import time
4
  import random
5
+ from datetime import datetime, timedelta
6
 
7
  # Set page config
8
  st.set_page_config(
9
+ page_title="Training Content Health Check",
10
+ page_icon="πŸ”",
11
  layout="wide",
12
  initial_sidebar_state="collapsed"
13
  )
 
42
  background-color: white;
43
  margin-bottom: 20px;
44
  }
45
+ .status-card {
46
+ border: 2px solid #e0e0e0;
47
+ border-radius: 12px;
48
+ padding: 20px;
49
+ margin-bottom: 20px;
50
+ text-align: center;
51
+ }
52
+ .status-excellent {
53
+ border-color: #28a745;
54
+ background-color: #f8fff9;
55
+ }
56
+ .status-good {
57
+ border-color: #ffc107;
58
+ background-color: #fffdf0;
59
+ }
60
+ .status-needs-attention {
61
+ border-color: #fd7e14;
62
+ background-color: #fff8f0;
63
+ }
64
+ .status-critical {
65
+ border-color: #dc3545;
66
+ background-color: #fff5f5;
67
+ }
68
+ .status-title {
69
+ font-size: 1.8rem;
70
+ font-weight: 700;
71
+ margin-bottom: 10px;
72
+ }
73
+ .status-description {
74
+ font-size: 1.1rem;
75
+ margin-bottom: 15px;
76
+ }
77
+ .status-score {
78
+ font-size: 2.5rem;
79
+ font-weight: 800;
80
+ margin-bottom: 10px;
81
+ }
82
+ .recommendation-card {
83
  border: 1px solid #e0e0e0;
84
  border-radius: 8px;
85
  padding: 15px;
86
  margin-bottom: 15px;
87
  background-color: #fafafa;
88
  }
89
+ .recommendation-title {
90
+ font-size: 1.1rem;
91
  font-weight: 600;
92
  color: #2c3e50;
93
  margin-bottom: 8px;
94
  }
95
+ .priority-high {
96
+ border-left: 4px solid #dc3545;
 
97
  }
98
+ .priority-medium {
99
+ border-left: 4px solid #ffc107;
 
100
  }
101
+ .priority-low {
102
+ border-left: 4px solid #28a745;
103
+ }
104
+ .question-card {
105
+ background-color: white;
106
+ border: 1px solid #e0e0e0;
107
+ border-radius: 8px;
108
+ padding: 20px;
109
+ margin-bottom: 20px;
110
+ }
111
+ .question-number {
112
+ background-color: #007bff;
113
+ color: white;
114
+ border-radius: 50%;
115
+ width: 30px;
116
+ height: 30px;
117
+ display: inline-flex;
118
+ align-items: center;
119
+ justify-content: center;
120
  font-weight: 600;
121
+ margin-right: 10px;
122
+ }
123
+ .progress-bar {
124
+ height: 8px;
125
+ background-color: #e9ecef;
126
+ border-radius: 4px;
127
+ overflow: hidden;
128
+ margin-bottom: 20px;
129
+ }
130
+ .progress-fill {
131
+ height: 100%;
132
+ background-color: #007bff;
133
+ transition: width 0.3s ease;
134
  }
135
  .stButton button {
136
  width: 100%;
 
140
  color: #6c757d;
141
  margin-top: 2rem;
142
  }
 
 
 
 
 
 
 
 
 
 
 
 
143
  .placeholder-area {
144
  border: 2px dashed #ddd;
145
  border-radius: 10px;
 
148
  background-color: #f8f9fa;
149
  color: #666;
150
  }
151
+ .stats-container {
152
+ display: flex;
153
+ justify-content: space-around;
154
+ margin: 20px 0;
155
+ }
156
+ .stat-item {
157
+ text-align: center;
158
+ padding: 15px;
159
+ background-color: #f8f9fa;
160
+ border-radius: 8px;
161
+ margin: 0 5px;
162
+ flex: 1;
163
+ }
164
+ .stat-number {
165
+ font-size: 1.5rem;
166
+ font-weight: 700;
167
+ color: #007bff;
168
+ }
169
+ .stat-label {
170
+ font-size: 0.9rem;
171
+ color: #6c757d;
172
+ }
173
  </style>
174
  """, unsafe_allow_html=True)
175
 
176
  # Title and description
177
  st.markdown("""
178
  <div class="title-area">
179
+ <h1>Training Content Health Check πŸ”</h1>
180
+ <p>Assess whether your training content is still effective and relevant. Get personalized recommendations to keep your content fresh and engaging!</p>
181
  </div>
182
  """, unsafe_allow_html=True)
183
 
184
  # Initialize session state
185
+ if "assessment_complete" not in st.session_state:
186
+ st.session_state["assessment_complete"] = False
187
+ if "current_question" not in st.session_state:
188
+ st.session_state["current_question"] = 0
189
+ if "answers" not in st.session_state:
190
+ st.session_state["answers"] = {}
191
+ if "assessment_results" not in st.session_state:
192
+ st.session_state["assessment_results"] = None
193
 
194
+ # Assessment questions
195
+ ASSESSMENT_QUESTIONS = [
196
+ {
197
+ "id": "content_age",
198
+ "question": "When was your training content last updated?",
199
+ "type": "single_choice",
200
+ "options": [
201
+ ("Within the last 6 months", 5),
202
+ ("6 months to 1 year ago", 4),
203
+ ("1-2 years ago", 3),
204
+ ("2-3 years ago", 2),
205
+ ("More than 3 years ago", 1)
206
+ ],
207
+ "help": "Newer content is generally more relevant and effective"
208
  },
209
+ {
210
+ "id": "industry_changes",
211
+ "question": "Have there been significant changes in your industry since the content was created?",
212
+ "type": "single_choice",
213
+ "options": [
214
+ ("No significant changes", 5),
215
+ ("Minor changes that don't affect the content", 4),
216
+ ("Some changes that might impact relevance", 3),
217
+ ("Significant changes that likely impact content", 2),
218
+ ("Major industry transformation", 1)
219
+ ],
220
+ "help": "Industry evolution can quickly make training content obsolete"
221
  },
222
+ {
223
+ "id": "technology_updates",
224
+ "question": "If your training involves technology or software, how current are the versions covered?",
225
+ "type": "single_choice",
226
+ "options": [
227
+ ("Current/latest versions", 5),
228
+ ("One version behind", 4),
229
+ ("2-3 versions behind", 3),
230
+ ("Significantly outdated versions", 2),
231
+ ("Legacy/deprecated technology", 1),
232
+ ("Not applicable - no technology involved", 5)
233
+ ],
234
+ "help": "Technology training needs frequent updates to remain useful"
235
  },
236
+ {
237
+ "id": "learner_feedback",
238
+ "question": "What kind of feedback do you receive from learners about the content?",
239
+ "type": "single_choice",
240
+ "options": [
241
+ ("Consistently positive and engaged", 5),
242
+ ("Mostly positive with minor suggestions", 4),
243
+ ("Mixed feedback - some find it helpful", 3),
244
+ ("Frequent complaints about relevance", 2),
245
+ ("Learners find it outdated or unhelpful", 1)
246
+ ],
247
+ "help": "Learner feedback is a key indicator of content effectiveness"
248
  },
249
+ {
250
+ "id": "completion_rates",
251
+ "question": "How are your training completion rates?",
252
+ "type": "single_choice",
253
+ "options": [
254
+ ("80%+ completion rate", 5),
255
+ ("60-79% completion rate", 4),
256
+ ("40-59% completion rate", 3),
257
+ ("20-39% completion rate", 2),
258
+ ("Below 20% completion rate", 1),
259
+ ("Don't track completion rates", 2)
260
+ ],
261
+ "help": "Low completion rates often indicate content problems"
262
  },
263
+ {
264
+ "id": "performance_impact",
265
+ "question": "Can you measure improved job performance after training?",
266
+ "type": "single_choice",
267
+ "options": [
268
+ ("Clear performance improvements measured", 5),
269
+ ("Some improvements observed", 4),
270
+ ("Minimal or unclear impact", 3),
271
+ ("No measurable improvement", 2),
272
+ ("Performance may have declined", 1)
273
+ ],
274
+ "help": "Effective training should lead to measurable performance gains"
275
  },
276
+ {
277
+ "id": "content_format",
278
+ "question": "How well does your content format match current learner preferences?",
279
+ "type": "single_choice",
280
+ "options": [
281
+ ("Perfect match - modern, engaging format", 5),
282
+ ("Good match with minor format updates needed", 4),
283
+ ("Adequate but could be more engaging", 3),
284
+ ("Format feels somewhat outdated", 2),
285
+ ("Very outdated format (old videos, static PDFs)", 1)
286
+ ],
287
+ "help": "Learning preferences evolve - mobile, interactive, bite-sized content is preferred"
288
  },
289
+ {
290
+ "id": "compliance_requirements",
291
+ "question": "Are there new compliance or regulatory requirements affecting your training?",
292
+ "type": "single_choice",
293
+ "options": [
294
+ ("No new requirements", 5),
295
+ ("Minor updates needed for compliance", 4),
296
+ ("Some new requirements to incorporate", 3),
297
+ ("Significant compliance changes needed", 2),
298
+ ("Major regulatory overhaul required", 1),
299
+ ("Not applicable - no compliance requirements", 5)
300
+ ],
301
+ "help": "Regulatory changes can make training content non-compliant"
302
  },
303
+ {
304
+ "id": "accessibility",
305
+ "question": "Does your content meet current accessibility standards?",
306
+ "type": "single_choice",
307
+ "options": [
308
+ ("Fully accessible and compliant", 5),
309
+ ("Mostly accessible with minor gaps", 4),
310
+ ("Some accessibility features missing", 3),
311
+ ("Limited accessibility support", 2),
312
+ ("Not designed with accessibility in mind", 1)
313
+ ],
314
+ "help": "Accessibility standards have evolved significantly in recent years"
315
  },
316
+ {
317
+ "id": "competitive_benchmark",
318
+ "question": "How does your training content compare to industry standards or competitors?",
319
+ "type": "single_choice",
320
+ "options": [
321
+ ("Industry-leading quality and innovation", 5),
322
+ ("Above average compared to competitors", 4),
323
+ ("On par with industry standards", 3),
324
+ ("Below average - competitors have better content", 2),
325
+ ("Significantly behind industry standards", 1)
326
+ ],
327
+ "help": "Staying competitive requires keeping up with industry training standards"
328
+ }
329
+ ]
330
 
331
+ def calculate_assessment_score(answers):
332
+ """Calculate the overall assessment score and determine status"""
333
+ total_score = sum(answers.values())
334
+ max_possible = len(answers) * 5
335
+ percentage = (total_score / max_possible) * 100
336
 
337
+ # Determine status based on percentage
338
+ if percentage >= 85:
339
+ status = "Still Sharp"
340
+ status_class = "status-excellent"
341
+ status_emoji = "🌟"
342
+ status_color = "#28a745"
343
+ elif percentage >= 70:
344
+ status = "Minor Tune-Up"
345
+ status_class = "status-good"
346
+ status_emoji = "βœ…"
347
+ status_color = "#ffc107"
348
+ elif percentage >= 50:
349
+ status = "Needs Refresh"
350
+ status_class = "status-needs-attention"
351
+ status_emoji = "⚠️"
352
+ status_color = "#fd7e14"
353
+ else:
354
+ status = "Critical Update"
355
+ status_class = "status-critical"
356
+ status_emoji = "🚨"
357
+ status_color = "#dc3545"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
358
 
359
+ return {
360
+ "score": total_score,
361
+ "percentage": percentage,
362
+ "status": status,
363
+ "status_class": status_class,
364
+ "status_emoji": status_emoji,
365
+ "status_color": status_color,
366
+ "max_possible": max_possible
367
+ }
368
 
369
+ def generate_recommendations(answers, results):
370
+ """Generate personalized recommendations based on assessment results"""
371
+ recommendations = []
372
 
373
+ # Analyze specific areas that need attention
374
+ problem_areas = []
 
 
 
 
 
 
 
 
 
 
 
 
 
375
 
376
+ # Check content age
377
+ if answers.get("content_age", 5) <= 2:
378
+ problem_areas.append("content_age")
379
+ recommendations.append({
380
+ "title": "Update Content Immediately",
381
+ "description": "Your content is significantly outdated. Plan a comprehensive content refresh within the next 2-3 months.",
382
+ "priority": "high",
383
+ "action_items": [
384
+ "Audit all training materials for accuracy",
385
+ "Research current industry best practices",
386
+ "Create a content update timeline",
387
+ "Consider outsourcing content development if needed"
388
+ ]
389
+ })
390
 
391
+ # Check technology relevance
392
+ if answers.get("technology_updates", 5) <= 2:
393
+ problem_areas.append("technology")
394
+ recommendations.append({
395
+ "title": "Technology Update Required",
396
+ "description": "Your technology training is using outdated versions that may confuse learners.",
397
+ "priority": "high",
398
+ "action_items": [
399
+ "Update all software versions in training",
400
+ "Create version-specific training modules",
401
+ "Establish regular technology review schedule"
402
+ ]
403
+ })
404
 
405
+ # Check learner engagement
406
+ if answers.get("learner_feedback", 5) <= 3 or answers.get("completion_rates", 5) <= 3:
407
+ problem_areas.append("engagement")
408
+ recommendations.append({
409
+ "title": "Improve Learner Engagement",
410
+ "description": "Low engagement suggests content format or relevance issues.",
411
+ "priority": "medium",
412
+ "action_items": [
413
+ "Survey learners for specific feedback",
414
+ "Consider interactive content formats",
415
+ "Break content into smaller, digestible modules",
416
+ "Add gamification elements"
417
+ ]
418
+ })
419
 
420
+ # Check format modernization
421
+ if answers.get("content_format", 5) <= 3:
422
+ problem_areas.append("format")
423
+ recommendations.append({
424
+ "title": "Modernize Content Format",
425
+ "description": "Update your content format to match current learner preferences.",
426
+ "priority": "medium",
427
+ "action_items": [
428
+ "Convert static content to interactive formats",
429
+ "Optimize for mobile devices",
430
+ "Add video and multimedia elements",
431
+ "Create bite-sized learning modules"
432
+ ]
433
+ })
434
 
435
+ # Check compliance
436
+ if answers.get("compliance_requirements", 5) <= 3:
437
+ problem_areas.append("compliance")
438
+ recommendations.append({
439
+ "title": "Address Compliance Gaps",
440
+ "description": "New regulatory requirements need to be incorporated into your training.",
441
+ "priority": "high",
442
+ "action_items": [
443
+ "Review current compliance requirements",
444
+ "Update content to meet new standards",
445
+ "Document compliance coverage",
446
+ "Schedule regular compliance reviews"
447
+ ]
448
+ })
449
 
450
+ # Check accessibility
451
+ if answers.get("accessibility", 5) <= 3:
452
+ problem_areas.append("accessibility")
453
+ recommendations.append({
454
+ "title": "Enhance Accessibility",
455
+ "description": "Improve accessibility to ensure all learners can effectively use your content.",
456
+ "priority": "medium",
457
+ "action_items": [
458
+ "Conduct accessibility audit",
459
+ "Add captions to videos",
460
+ "Ensure screen reader compatibility",
461
+ "Provide alternative formats"
462
+ ]
463
+ })
464
 
465
+ # Performance tracking
466
+ if answers.get("performance_impact", 5) <= 3:
467
+ recommendations.append({
468
+ "title": "Implement Performance Tracking",
469
+ "description": "Establish metrics to measure training effectiveness and ROI.",
470
+ "priority": "low",
471
+ "action_items": [
472
+ "Define success metrics",
473
+ "Implement tracking systems",
474
+ "Conduct pre/post assessments",
475
+ "Regular performance reviews"
476
+ ]
477
+ })
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
478
 
479
+ # If no major issues, provide maintenance recommendations
480
+ if results["percentage"] >= 70:
481
+ recommendations.append({
482
+ "title": "Maintain Content Excellence",
483
+ "description": "Your content is in good shape! Focus on continuous improvement.",
484
+ "priority": "low",
485
+ "action_items": [
486
+ "Schedule quarterly content reviews",
487
+ "Stay updated with industry trends",
488
+ "Gather regular learner feedback",
489
+ "Plan incremental improvements"
490
+ ]
491
+ })
492
 
493
+ return recommendations, problem_areas
 
 
 
494
 
495
+ # Main content
496
+ if not st.session_state["assessment_complete"]:
497
+ # Assessment questionnaire
498
+ col1, col2 = st.columns([2, 1])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
499
 
500
+ with col1:
501
+ # Progress bar
502
+ progress = (st.session_state["current_question"]) / len(ASSESSMENT_QUESTIONS)
503
+ st.markdown(f"""
504
+ <div class="progress-bar">
505
+ <div class="progress-fill" style="width: {progress * 100}%"></div>
506
+ </div>
507
+ <p style="text-align: center; margin-bottom: 20px;">Question {st.session_state["current_question"] + 1} of {len(ASSESSMENT_QUESTIONS)}</p>
508
+ """, unsafe_allow_html=True)
509
 
510
+ # Current question
511
+ if st.session_state["current_question"] < len(ASSESSMENT_QUESTIONS):
512
+ current_q = ASSESSMENT_QUESTIONS[st.session_state["current_question"]]
 
 
 
 
 
 
 
 
 
513
 
514
+ st.markdown(f'<div class="question-card">', unsafe_allow_html=True)
515
  st.markdown(f"""
516
+ <div style="display: flex; align-items: center; margin-bottom: 15px;">
517
+ <span class="question-number">{st.session_state["current_question"] + 1}</span>
518
+ <h3 style="margin: 0;">{current_q["question"]}</h3>
 
 
519
  </div>
520
  """, unsafe_allow_html=True)
521
 
522
+ # Question options
523
+ if current_q["type"] == "single_choice":
524
+ answer = st.radio(
525
+ "Select your answer:",
526
+ options=[option[0] for option in current_q["options"]],
527
+ key=f"question_{current_q['id']}",
528
+ help=current_q.get("help", "")
529
+ )
530
+
531
+ # Find the score for the selected answer
532
+ selected_score = None
533
+ for option_text, score in current_q["options"]:
534
+ if option_text == answer:
535
+ selected_score = score
536
+ break
537
+
538
+ if selected_score is not None:
539
+ st.session_state["answers"][current_q["id"]] = selected_score
540
+
541
  st.markdown('</div>', unsafe_allow_html=True)
542
+
543
+ # Navigation buttons
544
+ col_prev, col_next = st.columns([1, 1])
545
+
546
+ with col_prev:
547
+ if st.session_state["current_question"] > 0:
548
+ if st.button("⬅️ Previous", use_container_width=True):
549
+ st.session_state["current_question"] -= 1
550
+ st.rerun()
551
+
552
+ with col_next:
553
+ if st.session_state["current_question"] < len(ASSESSMENT_QUESTIONS) - 1:
554
+ if st.button("Next ➑️", use_container_width=True):
555
+ st.session_state["current_question"] += 1
556
+ st.rerun()
557
+ else:
558
+ if st.button("πŸ“Š Get My Results", use_container_width=True):
559
+ st.session_state["assessment_complete"] = True
560
+ st.session_state["assessment_results"] = calculate_assessment_score(st.session_state["answers"])
561
+ st.rerun()
562
+
563
+ with col2:
564
+ st.markdown('<div class="custom-subheader">Assessment Overview</div>', unsafe_allow_html=True)
565
 
566
+ # Show progress stats
567
+ answered = len(st.session_state["answers"])
568
+ st.markdown(f"""
569
+ <div class="stats-container">
570
+ <div class="stat-item">
571
+ <div class="stat-number">{answered}</div>
572
+ <div class="stat-label">Answered</div>
573
+ </div>
574
+ <div class="stat-item">
575
+ <div class="stat-number">{len(ASSESSMENT_QUESTIONS) - answered}</div>
576
+ <div class="stat-label">Remaining</div>
577
+ </div>
578
+ </div>
579
+ """, unsafe_allow_html=True)
580
 
581
+ # Assessment categories
582
+ st.markdown("**Assessment Categories:**")
583
+ categories = [
584
+ "πŸ“… Content Age & Relevance",
585
+ "🏭 Industry & Technology Changes",
586
+ "πŸ‘₯ Learner Engagement & Feedback",
587
+ "πŸ“ˆ Performance & Compliance",
588
+ "β™Ώ Accessibility & Format"
589
+ ]
590
+
591
+ for category in categories:
592
+ st.markdown(f"β€’ {category}")
593
+
594
+ # Tips
595
+ with st.expander("πŸ’‘ Assessment Tips"):
596
+ st.markdown("""
597
+ **For Best Results:**
598
+ - Answer honestly based on your current situation
599
+ - Consider gathering learner feedback before assessment
600
+ - Think about recent industry or regulatory changes
601
+ - Review your training analytics if available
602
+ - Consider both technical and content aspects
603
+ """)
604
+
605
+ else:
606
+ # Results display
607
+ results = st.session_state["assessment_results"]
608
+ recommendations, problem_areas = generate_recommendations(st.session_state["answers"], results)
609
+
610
+ # Status card
611
+ st.markdown(f"""
612
+ <div class="status-card {results['status_class']}">
613
+ <div class="status-score" style="color: {results['status_color']}">
614
+ {results['status_emoji']} {results['percentage']:.0f}%
615
+ </div>
616
+ <div class="status-title" style="color: {results['status_color']}">
617
+ {results['status']}
618
+ </div>
619
+ <div class="status-description">
620
+ You scored {results['score']} out of {results['max_possible']} points
621
+ </div>
622
+ </div>
623
+ """, unsafe_allow_html=True)
624
+
625
+ # Status-specific messages
626
+ status_messages = {
627
+ "Still Sharp": "Excellent! Your training content is current and effective. Focus on maintenance and continuous improvement.",
628
+ "Minor Tune-Up": "Good foundation! Your content is mostly current but could benefit from some updates to stay competitive.",
629
+ "Needs Refresh": "Time for updates! Your content has some outdated elements that are impacting effectiveness.",
630
+ "Critical Update": "Immediate action needed! Your content requires significant updates to remain valuable and relevant."
631
+ }
632
+
633
+ st.success(status_messages[results['status']])
634
+
635
+ # Detailed recommendations
636
+ col1, col2 = st.columns([1, 1])
637
+
638
+ with col1:
639
+ st.markdown('<div class="custom-subheader">πŸ“‹ Your Action Plan</div>', unsafe_allow_html=True)
640
 
641
+ # Priority recommendations first
642
+ high_priority = [r for r in recommendations if r["priority"] == "high"]
643
+ medium_priority = [r for r in recommendations if r["priority"] == "medium"]
644
+ low_priority = [r for r in recommendations if r["priority"] == "low"]
645
 
646
+ for priority_group, title in [(high_priority, "🚨 High Priority"), (medium_priority, "⚠️ Medium Priority"), (low_priority, "πŸ’‘ Low Priority")]:
647
+ if priority_group:
648
+ st.markdown(f"**{title}**")
649
+ for rec in priority_group:
650
+ st.markdown(f'<div class="recommendation-card priority-{rec["priority"]}">', unsafe_allow_html=True)
651
+ st.markdown(f'<div class="recommendation-title">{rec["title"]}</div>', unsafe_allow_html=True)
652
+ st.markdown(f'<p>{rec["description"]}</p>', unsafe_allow_html=True)
653
+
654
+ if rec["action_items"]:
655
+ st.markdown("**Action Items:**")
656
+ for item in rec["action_items"]:
657
+ st.markdown(f"β€’ {item}")
658
+
659
+ st.markdown('</div>', unsafe_allow_html=True)
660
+
661
+ with col2:
662
+ st.markdown('<div class="custom-subheader">πŸ“Š Detailed Breakdown</div>', unsafe_allow_html=True)
663
+
664
+ # Score breakdown by category
665
+ category_scores = {}
666
+ for q in ASSESSMENT_QUESTIONS:
667
+ score = st.session_state["answers"].get(q["id"], 0)
668
+ category_scores[q["question"]] = (score, 5)
669
+
670
+ # Show problem areas
671
+ if problem_areas:
672
+ st.markdown("**Areas Needing Attention:**")
673
+ area_labels = {
674
+ "content_age": "πŸ“… Content Age",
675
+ "technology": "πŸ’» Technology Currency",
676
+ "engagement": "πŸ‘₯ Learner Engagement",
677
+ "format": "🎨 Content Format",
678
+ "compliance": "πŸ“‹ Compliance",
679
+ "accessibility": "β™Ώ Accessibility"
680
  }
681
 
682
+ for area in problem_areas:
683
+ if area in area_labels:
684
+ st.markdown(f"β€’ {area_labels[area]}")
 
 
 
 
 
 
685
 
686
+ # Timeline estimate
687
+ st.markdown("**Estimated Timeline:**")
688
+ if results['percentage'] >= 85:
689
+ timeline = "1-2 months for maintenance"
690
+ elif results['percentage'] >= 70:
691
+ timeline = "2-4 months for updates"
692
+ elif results['percentage'] >= 50:
693
+ timeline = "3-6 months for refresh"
694
+ else:
695
+ timeline = "6+ months for overhaul"
696
+
697
+ st.info(f"⏱️ {timeline}")
698
+
699
+ # Export options
700
+ st.markdown("**Export Results:**")
701
+
702
+ # Generate report data
703
+ report_data = {
704
+ "assessment_date": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
705
+ "overall_score": results,
706
+ "answers": st.session_state["answers"],
707
+ "recommendations": recommendations,
708
+ "problem_areas": problem_areas
709
+ }
710
+
711
+ report_json = json.dumps(report_data, indent=2)
712
+
713
+ st.download_button(
714
+ label="πŸ“Š Download Full Report",
715
+ data=report_json,
716
+ file_name=f"training_assessment_{int(time.time())}.json",
717
+ mime="application/json",
718
+ use_container_width=True
719
+ )
720
 
721
+ # Action buttons
722
+ st.markdown("---")
723
+ col_b1, col_b2, col_b3 = st.columns([1, 1, 1])
724
+
725
+ with col_b1:
726
+ if st.button("πŸ”„ Take Assessment Again", use_container_width=True):
727
+ # Reset session state
728
+ st.session_state["assessment_complete"] = False
729
+ st.session_state["current_question"] = 0
730
+ st.session_state["answers"] = {}
731
+ st.session_state["assessment_results"] = None
732
+ st.rerun()
733
+
734
+ with col_b2:
735
+ if st.button("πŸ“ View Question Summary", use_container_width=True):
736
+ with st.expander("Question & Answer Summary", expanded=True):
737
+ for i, q in enumerate(ASSESSMENT_QUESTIONS):
738
+ answer_score = st.session_state["answers"].get(q["id"], 0)
739
+ # Find the answer text
740
+ answer_text = "Not answered"
741
+ for option_text, score in q["options"]:
742
+ if score == answer_score:
743
+ answer_text = option_text
744
+ break
745
+
746
+ st.markdown(f"**Q{i+1}: {q['question']}**")
747
+ st.markdown(f"*Answer: {answer_text}* (Score: {answer_score}/5)")
748
+ st.markdown("---")
749
+
750
+ with col_b3:
751
+ # Placeholder for future feature
752
+ st.button("πŸ’¬ Get Expert Consultation", disabled=True, use_container_width=True, help="Coming soon - connect with training experts")
753
 
754
  # Footer
755
  st.markdown("""
756
  <div class="footnote">
757
+ <p><strong>Disclaimer:</strong> This assessment provides general guidance based on common training best practices. Results may vary based on your specific context, industry, and organizational needs. Consider consulting with training professionals for detailed content strategy.</p>
758
+ <p><strong>Pro Tip:</strong> Save your results and retake this assessment quarterly to track your training content health over time!</p>
759
  </div>
760
  """, unsafe_allow_html=True)