Case study · internal tool, research and development

WCSAssist, our test bench for putting AI into an application without it making things up.

An assistant for West Coast Swing DJs, a partner dance where music is chosen down to the exact tempo. The DJ describes the evening in French, the language model sets the parameters, and an algorithm builds the set from the real library. This is not a commission: it is the tool on which we test what we offer in AI integration.

01/BackgroundWhere we started

Asking a language model for a playlist gives you made-up tracks

WCSAssist grew out of a DJ's need, but the question it settles goes beyond dance: how to integrate a language model without it making things up or us losing control of it. Against each naive reflex, what the tool does.

  1. 01Asked directly, the model invents titles, tracks missing from the library, fanciful durations.The model never touches a track identifier: it returns parameters (tempo range, intensity curve, genres, filters) and an algorithm builds the set.
  2. 02A West Coast Swing set is built down to the exact tempo, by hand, over hours.Reusable generation profiles, intensity curves, transition and end-of-evening rules, and a quality score for each set.
  3. 03Correcting the metadata of an entire library by hand (genre, year, country) is not sustainable.A batch analysis in which every suggestion must cite a source from a trusted domain, or the server rejects it; the user ticks what they accept.
  4. 04An AI feature in production costs money, and drifts if nobody keeps an eye on it.Every call is recorded (request, response, model, duration, cost); a daily quota guards against drift.
02/What we builtIn service today

The model sets the dials, the algorithm builds the set

Four steps, only one of which is handed to the language model: translating the request into parameters.

  • 01
    Conversational generation. The evening is described in French; the model returns parameters, and the algorithm selects and orders the tracks.
  • 02
    Review and adjustment loop. A summary of the set is sent back to the model for a verdict; if it is negative, the parameters are corrected and the set is regenerated once.
  • 03
    Sourced curation. Genres, year, country, relevance for dancing: each suggestion carries its sources, and the decision stays with the user.
  • 04
    Audio analysis. Tempo, energy, key and danceability for each track, tempo anomalies detected, the library's breakdown shown in charts.
  • 05
    Generation profiles. Intensity curves, transition and wind-down rules to frame each type of evening.
  • 06
    Spotify import and export. Account connection, import of the library and playlists, export of generated sets.
  • 07
    Administration console. Language engines, prompts fixed at deployment and open to inspection, full traces of calls, quotas per user.
  • 08
    Background enrichment. Metadata reconciled between Spotify, MusicBrainz, Discogs and Last.fm despite variations in titles and artist names.
03/Four screensA founder's account, personal data blurred

Four screens, actual size

Screenshots of the tool in service, on the account of one of the two founders. His first name, the avatars, the album covers and the chosen engine are blurred; the menu, the top bar and a player error message at the bottom of the screen are cropped out. Track titles and artists remain readable.

WCSAssist playlist generation window: set name, description of the evening in French, choice of tracks, today's quota
Screen 01The generation window. Covers, avatars and chosen engine blurred; menu and bottom of the screen cropped out.

The DJ describes the evening, not the playlist

The DJ writes what they want: audience, atmosphere, build-up. The model translates it into parameters, the algorithm draws from the real library, and the set receives a score.

Detail of a set in WCSAssist: tempo curve track by track, score, list of tracks with tempo, energy and style
Screen 02The detail of a set: the tempo curve and the list of tracks. First name and covers blurred; menu and bottom of the screen cropped out.

A tempo curve the DJ reads at a glance

The curve shows whether the evening builds, comes back down and stays danceable. Each track keeps its tempo, its energy and its relevance score for dancing.

WCSAssist AI analyses: a suggestion on a track with an explanation, sources consulted, tempo, genre and tag corrections to approve
Screen 03A curation suggestion, with its sources. Cover blurred; menu and bottom of the screen cropped out.

No source, no suggestion

The model explains its proposal and cites the pages it consulted. Without a source from a trusted domain, the server rejects it; with one, the user ticks what they accept, and nothing is applied automatically.

WCSAssist library: number of tracks, search, filters by tempo, genre, tag and country, list with tempo, energy and score
Screen 04The filterable library. Covers blurred; menu and bottom of the screen cropped out.

The library, analysed track by track

Tempo, energy, key, popularity, relevance score: the filters combine to find an end-of-evening track or a title to correct.

04/TechnologiesWhat we chose, and why

Reliable AI is a matter of architecture

We give the model what it does well, understanding a request, and keep the rest in code that is tested, traced and verifiable.

  • InterfaceNext.js and React, MUI components, charts for the tempo and energy curves.
  • Server.NET 10 API in separate layers, commands and queries kept apart, migrations applied at start-up.
  • DatabasePostgreSQL.
  • AI layerOne prompt for several engines: a model on our own server, reached through an OpenAI-compatible endpoint, or Anthropic's models; the engine changes without touching the business logic.
  • IntegrationsSpotify for the library; MusicBrainz, Discogs, Last.fm and ReccoBeats for enrichment, as background tasks.
  • Delivery and hostingDocker containers, automated pipeline, deployed on our servers in France.

What next

An AI feature to add to your application, without it making things up?

WCSAssist is the method we apply for our clients, tested on our own tool. Tell us about your case, and we will tell you what is feasible, with a timeline and a rough price.

Discuss your project

Reply within 24 working hours, from one of the two founders. Or by phone: +33 7 59 96 14 99.