Moment of Truth Feedback

Moment of Truth surveys capture customer emotions exactly when they happen - during or immediately after critical interactions. Unlike retrospective surveys, this form is designed for real-time deployment at key touchpoints such as first product use, support resolution, or purchase completion. The emoji-based interface enables quick responses while follow-up questions gather context without disrupting the experience.

Customer Experience

Try the Form

How was this moment? Your instant reaction matters.
This Moment
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
export function momentOfTruthForm(form: FormTs) {
// Moment of Truth Feedback - Real-time emotional capture at critical touchpoints
// Demonstrates: EmojiRating, Slider, RadioButton, SuggestionChips, dynamic content
 
// ============================================
// HEADER
// ============================================
form.addRow(row => {
row.addTextPanel('header', {
label: 'Quick Feedback',
computedValue: () => 'How was this moment? Your instant reaction matters.',
customStyles: {
backgroundColor: '#ec4899',
color: 'white',
padding: '20px',
borderRadius: '12px',
textAlign: 'center'
}
});
});
 
// ============================================
// SECTION 1: Moment Identification
// ============================================
const momentSection = form.addSubform('momentSection', {
title: 'This Moment'
});
 
momentSection.addRow(row => {
row.addDropdown('momentType', {
label: 'What just happened?',
options: [
{ id: 'first-use', name: 'First time using the product' },
{ id: 'purchase', name: 'Completed a purchase' },
{ id: 'support', name: 'Got help from support' },
{ id: 'delivery', name: 'Received a delivery' },
{ id: 'onboarding', name: 'Completed onboarding' },
{ id: 'feature', name: 'Tried a new feature' },
{ id: 'renewal', name: 'Renewed subscription' },
{ id: 'problem', name: 'Experienced a problem' },
{ id: 'other', name: 'Other moment' }
],
placeholder: 'Select the moment type',
isRequired: true
});
});
 
// ============================================
// SECTION 2: Emotional Capture
// ============================================
const emotionSection = form.addSubform('emotionSection', {
title: 'Your Feeling',
isVisible: () => momentSection.dropdown('momentType')?.value() !== null
});
 
emotionSection.addRow(row => {
row.addEmojiRating('emotionalReaction', {
label: 'How do you feel right now?',
preset: 'custom',
emojis: [
{ id: 'frustrated', emoji: '😤', label: 'Frustrated' },
{ id: 'disappointed', emoji: '😞', label: 'Disappointed' },
{ id: 'neutral', emoji: '😐', label: 'Neutral' },
{ id: 'pleased', emoji: '😊', label: 'Pleased' },
{ id: 'delighted', emoji: '🤩', label: 'Delighted' }
],
size: 'lg',
alignment: 'center',
isRequired: true
});
});
 
emotionSection.addRow(row => {
row.addSlider('emotionIntensity', {
label: 'How strong is this feeling?',
min: 1,
max: 10,
step: 1,
showValue: true,
defaultValue: 5,
isVisible: () => emotionSection.emojiRating('emotionalReaction')?.value() !== null
});
});
 
// ============================================
// SECTION 3: Positive Moment Details
// ============================================
const positiveSection = form.addSubform('positiveSection', {
title: 'What Made It Great?',
isVisible: () => {
const emotion = emotionSection.emojiRating('emotionalReaction')?.value();
return emotion === 'pleased' || emotion === 'delighted';
},
customStyles: {
backgroundColor: '#ecfdf5',
padding: '16px',
borderRadius: '8px'
}
});
 
positiveSection.addRow(row => {
row.addSuggestionChips('positiveFactors', {
label: 'What contributed to this positive experience?',
suggestions: [
{ id: 'easy', name: 'Easy to use' },
{ id: 'fast', name: 'Fast process' },
{ id: 'helpful', name: 'Helpful staff' },
{ id: 'quality', name: 'Great quality' },
{ id: 'exceeded', name: 'Exceeded expectations' },
{ id: 'personal', name: 'Felt personal' },
{ id: 'value', name: 'Good value' },
{ id: 'surprise', name: 'Pleasant surprise' }
],
max: 3,
alignment: 'left'
});
});
 
positiveSection.addRow(row => {
row.addStarRating('momentRating', {
label: 'Rate this moment',
maxStars: 5,
size: 'lg',
alignment: 'center',
showConfettiOnMax: true
});
});
 
// ============================================
// SECTION 4: Negative Moment Details
// ============================================
const negativeSection = form.addSubform('negativeSection', {
title: 'What Went Wrong?',
isVisible: () => {
const emotion = emotionSection.emojiRating('emotionalReaction')?.value();
return emotion === 'frustrated' || emotion === 'disappointed';
},
customStyles: {
backgroundColor: '#fef2f2',
padding: '16px',
borderRadius: '8px',
borderLeft: '4px solid #ef4444'
}
});
 
negativeSection.addRow(row => {
row.addCheckboxList('negativeFactors', {
label: 'What caused this negative experience?',
options: [
{ id: 'confusing', name: 'Confusing or unclear' },
{ id: 'slow', name: 'Too slow or took too long' },
{ id: 'unhelpful', name: 'Unhelpful response' },
{ id: 'broken', name: 'Something didn\'t work' },
{ id: 'unexpected', name: 'Unexpected outcome' },
{ id: 'impersonal', name: 'Felt impersonal' },
{ id: 'expensive', name: 'Too expensive' },
{ id: 'effort', name: 'Required too much effort' }
],
orientation: 'vertical'
});
});
 
negativeSection.addSpacer();
 
negativeSection.addRow(row => {
row.addTextarea('whatWentWrong', {
label: 'What specifically went wrong?',
placeholder: 'Please describe what happened...',
rows: 3,
autoExpand: true
});
});
 
negativeSection.addRow(row => {
row.addRatingScale('resolutionUrgency', {
label: 'How urgently does this need to be fixed?',
preset: 'custom',
min: 1,
max: 5,
lowLabel: 'Can wait',
highLabel: 'Immediate'
});
});
 
// ============================================
// SECTION 5: Expectation Gap
// ============================================
const expectationSection = form.addSubform('expectationSection', {
title: 'Expectations vs Reality',
isVisible: () => emotionSection.emojiRating('emotionalReaction')?.value() !== null
});
 
expectationSection.addRow(row => {
row.addRadioButton('expectationMatch', {
label: 'How did this moment compare to your expectations?',
options: [
{ id: 'far-below', name: 'Far below expectations' },
{ id: 'below', name: 'Below expectations' },
{ id: 'met', name: 'Met expectations' },
{ id: 'above', name: 'Above expectations' },
{ id: 'far-above', name: 'Far exceeded expectations' }
],
orientation: 'vertical'
});
});
 
// ============================================
// SECTION 6: Impact Assessment
// ============================================
const impactSection = form.addSubform('impactSection', {
title: 'Impact on Your View',
isVisible: () => emotionSection.emojiRating('emotionalReaction')?.value() !== null
});
 
impactSection.addRow(row => {
row.addMatrixQuestion('impactMatrix', {
label: 'How does this moment affect your view of us?',
rows: [
{ id: 'trust', label: 'Trust in our brand' },
{ id: 'loyalty', label: 'Likelihood to stay' },
{ id: 'recommend', label: 'Likelihood to recommend' }
],
columns: [
{ id: 'decreased', label: 'Decreased' },
{ id: 'unchanged', label: 'Unchanged' },
{ id: 'increased', label: 'Increased' }
],
striped: true,
fullWidth: true
});
});
 
// ============================================
// SECTION 7: Quick Follow-up
// ============================================
const followupSection = form.addSubform('followupSection', {
title: 'One More Thing',
isVisible: () => emotionSection.emojiRating('emotionalReaction')?.value() !== null
});
 
followupSection.addRow(row => {
row.addThumbRating('wouldRepeat', {
label: 'Would you want to experience this moment again?',
showLabels: true,
upLabel: 'Yes, definitely',
downLabel: 'No, rather not',
size: 'lg',
alignment: 'center'
});
});
 
followupSection.addSpacer();
 
followupSection.addRow(row => {
row.addTextarea('oneWord', {
label: 'Describe this moment in one word or phrase:',
placeholder: 'e.g., "Seamless", "Frustrating", "Surprising"...',
rows: 1,
maxLength: 50
});
});
 
// ============================================
// SECTION 8: Summary
// ============================================
const summarySection = form.addSubform('summarySection', {
title: 'Moment Summary',
isVisible: () => {
const emotion = emotionSection.emojiRating('emotionalReaction')?.value();
return emotion !== null;
}
});
 
summarySection.addRow(row => {
row.addTextPanel('summaryContent', {
computedValue: () => {
const momentType = momentSection.dropdown('momentType')?.value();
const emotion = emotionSection.emojiRating('emotionalReaction')?.value();
const intensity = emotionSection.slider('emotionIntensity')?.value();
const expectation = expectationSection.radioButton('expectationMatch')?.value();
const wouldRepeat = followupSection.thumbRating('wouldRepeat')?.value();
const oneWord = followupSection.textarea('oneWord')?.value();
 
const momentLabels: Record<string, string> = {
'first-use': 'First Use',
'purchase': 'Purchase',
'support': 'Support',
'delivery': 'Delivery',
'onboarding': 'Onboarding',
'feature': 'New Feature',
'renewal': 'Renewal',
'problem': 'Problem',
'other': 'Other'
};
 
const emotionEmojis: Record<string, string> = {
'frustrated': '😤',
'disappointed': '😞',
'neutral': '😐',
'pleased': '😊',
'delighted': '🤩'
};
 
const expectationLabels: Record<string, string> = {
'far-below': 'Far Below',
'below': 'Below',
'met': 'Met',
'above': 'Above',
'far-above': 'Far Exceeded'
};
 
let summary = `⚡ Moment of Truth Captured\n`;
summary += `${'═'.repeat(28)}\n\n`;
if (momentType) summary += `📍 Moment: ${momentLabels[momentType] || momentType}\n`;
if (emotion) summary += `${emotionEmojis[emotion] || ''} Feeling: ${emotion}\n`;
if (intensity) summary += `💪 Intensity: ${intensity}/10\n`;
if (expectation) summary += `📊 Expectations: ${expectationLabels[expectation] || expectation}\n`;
if (wouldRepeat) summary += `🔄 Would Repeat: ${wouldRepeat === 'up' ? 'Yes' : 'No'}\n`;
if (oneWord) summary += `\n💬 "${oneWord}"`;
 
return summary;
},
customStyles: () => {
const emotion = emotionSection.emojiRating('emotionalReaction')?.value();
const baseStyles = {
padding: '16px',
borderRadius: '8px',
whiteSpace: 'pre-wrap',
fontFamily: 'monospace',
fontSize: '14px'
};
 
if (emotion === 'delighted' || emotion === 'pleased') {
return { ...baseStyles, backgroundColor: '#ecfdf5', borderLeft: '4px solid #10b981' };
} else if (emotion === 'frustrated' || emotion === 'disappointed') {
return { ...baseStyles, backgroundColor: '#fef2f2', borderLeft: '4px solid #ef4444' };
}
return { ...baseStyles, backgroundColor: '#f8fafc', borderLeft: '4px solid #94a3b8' };
}
});
});
 
// ============================================
// FORM CONFIGURATION
// ============================================
form.configureSubmitButton({
label: 'Capture This Moment',
isVisible: () => emotionSection.emojiRating('emotionalReaction')?.value() !== null
});
 
form.configureCompletionScreen({
type: 'text',
title: 'Moment Captured!',
message: 'Thank you for sharing this moment with us. Your real-time feedback helps us create better experiences at every touchpoint.'
});
}
 

Frequently Asked Questions

What is a 'Moment of Truth' in customer experience?

A Moment of Truth (MOT) is any interaction where a customer forms or changes their impression of your brand. These critical touchpoints - like first product use, problem resolution, or checkout - disproportionately impact overall satisfaction and loyalty.

When should I trigger this survey?

Trigger immediately or within minutes of the key moment. The goal is to capture raw, unfiltered emotional responses before they fade. For digital touchpoints, trigger in-app; for physical touchpoints, use QR codes or SMS links.

How do I avoid survey fatigue with real-time surveys?

Be selective about which moments to measure. Focus on 3-5 truly critical touchpoints rather than surveying every interaction. Use sampling (e.g., 20% of users) and respect frequency caps per user.

How do I analyze emotional moment data?

Create an emotional journey map by plotting average emotion scores across touchpoints. Identify 'peaks' (positive moments to amplify) and 'valleys' (negative moments requiring intervention). Track trends over time to measure improvement.

Can I customize the moments/touchpoints?

Yes, the dropdown of moment types is fully customizable. Add your specific touchpoints like 'First order delivery', 'Subscription renewal', or 'Feature activation' to match your customer journey.