Skip to main content

Kudos Wall in the intranet: recognition in one click

How a kudos wall with inline submit form and Data Table backend turns recognition into a daily intranet ritual instead of an annual recognition event.

3 min read
Kudos Wall in the intranet: recognition in one click

Recognition programs fail because of friction. The classic: a separate tool, a separate login, a form with eight fields, manager approval – and in the end, nobody sends kudos anymore, except once per quarter in a forced action.

The Kudos Wall flips the equation: three fields, one click, visible to everyone. Right on the intranet homepage, no login, no approval.

Three fields, one click

The Kudos Wall has two areas: at the top, the last N recognitions as cards with initials avatars, “sender → recipient” and a colored category badge. At the bottom, a compact form: recipient, message, category. The sender is filled automatically from the Staffbase user context – no typing.

Click “Send”, and the new recognition appears at the top of the list a second later.

Architecture: Data Table as backend

The pattern is always the same: end users do not write to settings or variables. End users write to a Data Table. This pattern is the clean architecture for any widget with runtime user data – kudos, submitting an idea, booking.

For the Kudos Wall, this means concretely:

  1. Create a Data Table in the Widget Builder with five columns: from_name, to_name, message, category, submitted_at
  2. Copy the table GUID
  3. Paste it into the editor setting tableGuid

On page load, the widget reads the table (sorted by submitted_at desc, top 50) and shows the first N entries. On submit, it makes a POST to the Data Table endpoint:

 1await fetch('/api/data-table-widget/' + tableGuid + '/rows', {
 2  method: 'POST',
 3  headers: {'Content-Type': 'application/json'},
 4  body: JSON.stringify({data: {
 5    from_name: '{{user.firstName}} {{user.lastName}}',
 6    to_name: recipient,
 7    message: message,
 8    category: category,
 9    submitted_at: new Date().toISOString()
10  }})
11});

Three lines of submit logic – that’s all it takes.

The user context as sender

The Widget Builder injects a user context with user.firstName, user.lastName, user.email etc. into the template by default. In the widget’s JavaScript I read the sender name from it:

1var fromName = ('{{user.firstName}} {{user.lastName}}').trim() || 'Anonymous';

Nobody types their name, nobody can mistype. That’s the main difference between a widget in the intranet and an external recognition tool: the widget knows who you are.

Five categories – no more

Teamwork, Leadership, Innovation, Support, Impact. Five is enough. More categories lead to decision paralysis (“Is this teamwork or support?”) and the analysis gets fuzzy. The five cover 95% of all real recognition occasions.

The category badges take the widget’s accent color at 12.5% opacity – a trick with the +20 at the end of the hex code that works in modern CSS engines. Result: the badges blend seamlessly into the branding without anyone needing a separate palette.

Localized “X hours ago”

A recognition from yesterday reads differently than one from 5 minutes ago. The datetime helper does this automatically:

1{{datetime from_iso=this.submitted_at to_relative=true with_locale=widget.contentLanguage}}

In English: “3 hours ago”. In German: “vor 3 Stunden”. No line of JavaScript, no external library.

When to use this widget

  • Establish a recognition culture – recognition as a daily ritual instead of an annual event
  • Onboarding companion – new colleagues experience a recognition culture from day 1
  • Cross-team recognition – say thanks across department boundaries
  • Manager coaching – managers see directly which of their team members are shining

Setup steps and all settings are in the Kudos Wall gallery entry .