CASE STUDY 16 / Personal project · Full-stack AI storytelling
Love Story Theater
I made this for a friend going through a breakup: a conversational app that turned shared memories and relationship details into hopeful fictional stories. I built a Next.js frontend and a separate Kotlin / Ktor backend connected to DeepSeek. The service is now offline and the project is no longer maintained.
Offline · No longer maintained
CONTEXT
Personal project
MY ROLE
Independent full-stack developer
TOOLS & FOCUS
Next.js / React · TypeScript / MUI · Kotlin / Ktor · DeepSeek API · i18n
01 / THE PROBLEM
What needed to work.
The idea began with a friend’s breakup. I wanted to make something personal and comforting: a conversation that gathered details gradually, then used them to write an imaginative, hopeful story. The engineering task was to connect that guided chat experience to an AI service through a separate backend.
CONCEPT / 16↗
01Guided Next.js conversation
↓
02Kotlin / Ktor JSON API
↓
03DeepSeek-generated story
Illustrative workflow · Not a product screenshot
A summary of my responsibilities and technical approach. This workflow illustration does not reproduce the product UI.
02 / MY CONTRIBUTION
Where I took ownership.
Built the Next.js, React and TypeScript chat interface with Material UI, message history, typing feedback and a story-generation loading state.
Implemented a separate Kotlin / Ktor backend with JSON endpoints for contextual follow-up questions and final story generation.
Connected the backend to DeepSeek and wrote prompts for the conversational tone, supplied context and requested story language.
Organized English, Chinese and German interface copy and question pools separately from the chat rendering.
03 / TECHNICAL APPROACH
Decisions in context.
Separate the interface from model calls
The Next.js client handled the conversation and called a configurable backend URL through Axios. The Kotlin / Ktor service accepted JSON requests, built prompts and called DeepSeek. This kept the browser interface and model integration in separate applications.
Guide a conversation in stages
The frontend tracked the conversation phase, accumulated answers and remaining questions. It combined randomized question pools with a contextual AI follow-up before asking about the current relationship problem and requesting a final story.
Two API paths, two different tasks
A dynamic-interaction endpoint generated a follow-up question from the previous answer and a chosen topic. A separate story endpoint used the collected relationship details to generate a longer narrative. Backend request models and a shared response shape connected these tasks to the chat interface.
Carry language through the full flow
English, Chinese and German copy lived in a separate content module, including question pools and interface messages. Requests included the selected language so backend prompts could ask for a question or story in that language too.
04 / DELIVERY & REFLECTION
What I can share.
Delivery.
A personal full-stack experiment, originally made for a friend after a breakup. The service has stopped running and the project is no longer maintained. The source repository remains available to show the separate frontend and backend implementation.