Soulprint
Consumer AI product that turns playlist exports into psychological profiles and shareable story cards without building a tracking business.
Soulprint is a consumer web app that analyses a user's music taste and turns it into an emotionally legible profile. The output is designed to be shared, but the product is deliberately built without surveillance mechanics.
The Product Logic
Most music products stop at taste classification: genre, artist overlap, listening stats. Soulprint goes after a more interesting question. What does a playlist reveal about the emotional structure underneath it, and how do you package that insight into something people actually want to share?
The business model was engineered around organic distribution rather than paid acquisition. The result is a shareable story card designed for Instagram and TikTok, paired with a privacy model strong enough to make the product feel safe to use.
The System
The application uses a serverless Next.js App Router stack with React 19 and TypeScript. Authentication runs through NextAuth v5 with Resend handling passwordless email delivery. Persistence lives in Vercel KV, with custom key mappings and TTL rules so verification tokens and sessions expire without manual cleanup.
Email sign-in uses one-time magic links, which keeps onboarding fast and removes the operational burden of passwords while fitting the product's privacy stance.
Claude Sonnet 4, accessed through OpenRouter, receives up to 500 song and artist pairs and returns the structured psychological analysis behind the final experience.
Users, sessions, and verification tokens are stored directly in Redis-style keys with built-in expiry windows, including one hour for email tokens and seven days for active sessions.
Handling Messy Inputs Reliably
Consumer input data is never clean. Soulprint accepts playlist exports from multiple sources, including Spotify and YouTube Music, so the parser was built to inspect headers dynamically rather than rely on one rigid CSV template.
The system prompt forces the model to return a predefined JSON structure that the React UI can trust, including colours, icon markers, cluster labels, and emotional framing.
Shareable story cards are rendered from a hidden DOM node with
html2canvas-pro, producing a downloadable PNG on the user's device and
enabling native share flows where supported.
The UI is not trying to infer design data from prose. The model is required to generate the exact presentation fields the frontend needs, which keeps the experience deterministic.