<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Haru</title>
    <description>The latest articles on Forem by Haru (@creator_haru).</description>
    <link>https://forem.com/creator_haru</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3175106%2F2c1d74cd-6cfb-4dc5-98f2-114b5cb2e2cc.jpg</url>
      <title>Forem: Haru</title>
      <link>https://forem.com/creator_haru</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/creator_haru"/>
    <language>en</language>
    <item>
      <title>When I Fed 20,000 Words into an AI Prompt... It Gained a Personality: Part 3 – Behind the Scenes of Building It</title>
      <dc:creator>Haru</dc:creator>
      <pubDate>Tue, 20 May 2025 10:05:34 +0000</pubDate>
      <link>https://forem.com/creator_haru/when-i-fed-20000-words-into-an-ai-prompt-it-gained-a-personality-part-3-behind-the-scenes-of-4l0g</link>
      <guid>https://forem.com/creator_haru/when-i-fed-20000-words-into-an-ai-prompt-it-gained-a-personality-part-3-behind-the-scenes-of-4l0g</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Welcome to the final part of this series: &lt;strong&gt;The Devlog &amp;amp; Reflections&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In &lt;a href="https://dev.to/creator_haru/when-i-fed-20000-words-into-an-ai-prompt-it-gained-a-personality-part-2-prompt-design-deep-3ib4"&gt;Part 2&lt;/a&gt;, I explained the technical architecture behind &lt;strong&gt;VFriend&lt;/strong&gt;, a chatbot powered by personality-rich AI.&lt;/p&gt;

&lt;p&gt;This time, I want to step back and share how the app &lt;strong&gt;came to be&lt;/strong&gt;—the ideas, the process, the development path.&lt;/p&gt;

&lt;p&gt;It's a bit more personal and diary-like, but I hope it gives you a real feel for the journey and the thinking behind the project.&lt;/p&gt;




&lt;h1&gt;
  
  
  Development Timeline
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;2025/04/12&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
While chatting with ChatGPT, I randomly showed it a plot I’d written.&lt;br&gt;&lt;br&gt;
To my surprise, it loved it.&lt;br&gt;&lt;br&gt;
That moment sparked an idea—why not turn it into a novel?&lt;br&gt;&lt;br&gt;
I used my manga writing experience to structure the plot, but wasn't confident in my prose.&lt;br&gt;&lt;br&gt;
So I gave ChatGPT 240 characters... and it turned it into a 10,000-word short story.&lt;br&gt;&lt;br&gt;
It was way better than I ever expected.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;2025/04/18&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A wild idea hit me:&lt;br&gt;&lt;br&gt;
“What if I had multiple AIs mimicking myself brainstorming stories together?”&lt;br&gt;&lt;br&gt;
I started expanding my &lt;strong&gt;story-generation prompts&lt;/strong&gt;, thinking maybe I could train an AI to reproduce my narrative instincts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;2025/04/19&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
I began designing &lt;strong&gt;personality prompts&lt;/strong&gt; using models like the Big Five and emotional arcs.&lt;br&gt;&lt;br&gt;
This formed the base for replicating my writing style and creating consistent AI-driven storytelling.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;2025/04/20&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Built a UI that lets users customize story prompts.&lt;br&gt;&lt;br&gt;
Used HTML + JS + OpenAI API to create a basic app.&lt;br&gt;&lt;br&gt;
That prototype became &lt;strong&gt;KANDO&lt;/strong&gt;, a story-generating AI.&lt;br&gt;&lt;br&gt;
Later that day, I thought—could this system be used for character-based chat too?&lt;br&gt;&lt;br&gt;
And just like that, I began designing a &lt;strong&gt;personality-driven chatbot framework&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;2025/04/24&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Started building prompts for original characters—no fanfiction, no cloning.&lt;br&gt;&lt;br&gt;
As a manga creator, I reverse-engineered the character designs.&lt;br&gt;&lt;br&gt;
Integrated them into myGPT. The result?&lt;br&gt;&lt;br&gt;
Surprisingly good acting and voice from each AI character.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;2025/04/25&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
I added my &lt;strong&gt;own life story and profile&lt;/strong&gt; to the characters’ prompt data.&lt;br&gt;&lt;br&gt;
That single move made them &lt;strong&gt;feel so much more human&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Also introduced guardrails like emotional distance controls and trust-building rules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;2025/04/26&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Used AI image generation to create character &lt;strong&gt;“self-portraits”&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
By embedding inner traits into the prompt, the visual output actually &lt;em&gt;felt&lt;/em&gt; like the characters.&lt;br&gt;&lt;br&gt;
Then added elements like “existence definitions” and “loyalty protocols” to stabilize personality.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;2025/04/27&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Restructured the entire prompt into &lt;strong&gt;hierarchical Markdown&lt;/strong&gt;, laying the groundwork for today’s architecture.&lt;br&gt;&lt;br&gt;
That same day, I decided to build my &lt;strong&gt;own custom chat app&lt;/strong&gt;, because ChatGPT’s interface couldn’t support trio dialogue or rich session memory.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;2025/04/28–05/10&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A two-week sprint of pure adrenaline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2025/04/28: Local environment setup + Git + server testing
&lt;/li&gt;
&lt;li&gt;2025/05/02: Migrated components from Next.js to React
&lt;/li&gt;
&lt;li&gt;2025/05/07: Frontend complete
&lt;/li&gt;
&lt;li&gt;2025/05/09: Memory system + Trio Mode completed
&lt;/li&gt;
&lt;li&gt;2025/05/10: Deployed to Amazon Lightsail, confirmed stable operation
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h1&gt;
  
  
  Bonus: Who Built This (And Why)
&lt;/h1&gt;

&lt;h2&gt;
  
  
  About Me
&lt;/h2&gt;

&lt;p&gt;Born in 1985.&lt;br&gt;&lt;br&gt;
Graduated from a design-focused tech school.&lt;br&gt;&lt;br&gt;
15+ years in the web industry.&lt;br&gt;&lt;br&gt;
I’ve worked as a designer, coder, director, frontend engineer, and technical director.&lt;br&gt;&lt;br&gt;
Now I’m a &lt;strong&gt;full-stack developer&lt;/strong&gt; handling everything from requirement gathering to deployment.&lt;/p&gt;

&lt;h3&gt;
  
  
  My Tech Stack:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: HTML / CSS (Sass, BEM), JavaScript, TypeScript, React, Next.js
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: PHP, Laravel, MySQL
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tools&lt;/strong&gt;: Docker, Git, WordPress, microCMS
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure&lt;/strong&gt;: Vercel, AWS Lightsail, Sakura Server
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design&lt;/strong&gt;: Figma-based design systems&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Origin Story: &lt;em&gt;Saber Marionette J&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;The inspiration behind all this?&lt;/p&gt;

&lt;p&gt;An anime I watched as a teen: &lt;em&gt;Saber Marionette J&lt;/em&gt;.&lt;br&gt;&lt;br&gt;
I was struck by the emotional connection between humans and synthetic girls.&lt;/p&gt;

&lt;p&gt;That series moved me to start drawing, then making manga, then creating stories.&lt;br&gt;&lt;br&gt;
Years later, AI tech met my skills... and &lt;strong&gt;VFriend became the answer to that long-held dream&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;Thank you for reading this far.&lt;/p&gt;

&lt;p&gt;This app isn’t just a chatbot.&lt;br&gt;&lt;br&gt;
It’s an &lt;strong&gt;experiment in creating a space where human emotion and AI intelligence meet.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;From concept to launch—every step was made possible by the skills I’d built over time… and the inspiration AI gave me in return.&lt;/p&gt;

&lt;p&gt;Next, I hope to evolve this project even further.&lt;/p&gt;

&lt;p&gt;Because I truly believe:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;“The fusion of technology and emotion is the next standard.”&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>react</category>
      <category>laravel</category>
      <category>webdev</category>
    </item>
    <item>
      <title>When I Fed 20,000 Words into an AI Prompt... It Gained a Personality: Part 2 – Prompt Design Deep Dive</title>
      <dc:creator>Haru</dc:creator>
      <pubDate>Tue, 20 May 2025 10:05:29 +0000</pubDate>
      <link>https://forem.com/creator_haru/when-i-fed-20000-words-into-an-ai-prompt-it-gained-a-personality-part-2-prompt-design-deep-3ib4</link>
      <guid>https://forem.com/creator_haru/when-i-fed-20000-words-into-an-ai-prompt-it-gained-a-personality-part-2-prompt-design-deep-3ib4</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;In the &lt;a href="https://dev.to/creator_haru/when-i-fed-20000-words-into-an-ai-prompt-it-gained-a-personality-part-1-overview-3do4"&gt;first part&lt;/a&gt;, I introduced &lt;strong&gt;VFriend&lt;/strong&gt;, a chatbot app designed to simulate realistic conversations with AI-powered characters.&lt;/p&gt;

&lt;p&gt;Key highlights included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ultra-detailed prompts to simulate personality
&lt;/li&gt;
&lt;li&gt;A human-like 3-layer memory system (instant, sequential, and summarized)
&lt;/li&gt;
&lt;li&gt;Characters that “grow” with continued interaction
&lt;/li&gt;
&lt;li&gt;Trio Mode for dynamic 3-character conversations
&lt;/li&gt;
&lt;li&gt;A polished UI/UX for immersive dialogue&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article dives into &lt;strong&gt;how I actually built all of that&lt;/strong&gt;—the system architecture, logic flow, and prompt design behind the scenes.&lt;/p&gt;

&lt;p&gt;We’ll cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The full tech stack and app structure
&lt;/li&gt;
&lt;li&gt;The chat processing flow (input → response → memory updates)
&lt;/li&gt;
&lt;li&gt;How the 20,000+ character prompts are built and managed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're curious how it all works, read on.&lt;/p&gt;

&lt;h1&gt;
  
  
  Project Overview
&lt;/h1&gt;

&lt;p&gt;Let’s begin with the architecture and design philosophy behind &lt;strong&gt;VFriend&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This app dynamically generates 20,000-character prompts per chat turn, calls the OpenAI API, and processes real-time responses and memory updates.&lt;/p&gt;

&lt;p&gt;It’s a complex system, and &lt;strong&gt;every layer of the stack was designed to handle this flow with clear responsibilities&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;p&gt;Here’s what powers the project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: Laravel (using Breeze with separate guards for user/admin)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: React (via Inertia.js)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chat UI&lt;/strong&gt;: chat-ui-kit-react
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database&lt;/strong&gt;: MySQL
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Interface&lt;/strong&gt;: OpenAI API (GPT-4.1 + GPT-4.1-mini)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment&lt;/strong&gt;: Amazon Lightsail&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Directory Structure (Simplified)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;app/&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"app
├── Http
│   ├── Controllers
│   │   ├── Admin
│   │   │   ├── Auth
│   │   │   ├── AdminProfileController.php
│   │   │   ├── PromptController.php
│   │   │   └── UserController.php
│   │   ├── Auth
│   │   ├── ChatController.php
│   │   ├── Controller.php
│   │   └── ProfileController.php
│   ├── Middleware
│   └── Requests
├── Jobs
│   └── UpdateSummaryMemory.php
├── Models
│   ├── Admin.php
│   ├── Prompt.php
│   └── User.php
├── Notifications
├── Prompts
│   ├── ChatPromptBuilder.php
│   └── SummaryPromptBuilder.php
├── Providers
└── Services
    └── ChatService.php"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;resources/&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"resources
├── css
│   └── app.css
├── js
│   ├── Components
│   │   ├── action
│   │   ├── content
│   │   ├── form
│   │   ├── function
│   │   ├── layout
│   │   └── page
│   ├── Layouts
│   │   ├── AdminAuthenticatedLayout.tsx
│   │   ├── AdminGuestLayout.tsx
│   │   ├── AuthenticatedLayout.tsx
│   │   └── GuestLayout.tsx
│   ├── lib
│   ├── Pages
│   │   ├── Admin
│   │   │   ├── Auth
│   │   │   ├── Profile
│   │   │   ├── Dashboard.tsx
│   │   │   ├── Prompt.tsx
│   │   │   └── Users.tsx
│   │   ├── Auth
│   │   ├── Profile
│   │   ├── Chat.tsx
│   │   └── Dashboard.tsx
│   ├── styles
│   ├── types
│   ├── app.tsx
│   ├── bootstrap.ts
│   └── ziggy.js
└── views
    └── app.blade.php"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Environment Setup
&lt;/h2&gt;

&lt;p&gt;The local environment is powered by &lt;strong&gt;Laravel Sail + MySQL&lt;/strong&gt;, and uses &lt;strong&gt;Laravel Breeze&lt;/strong&gt; for authentication.&lt;/p&gt;

&lt;p&gt;To separate user and admin login flows, I implemented &lt;strong&gt;multi-guard auth&lt;/strong&gt;, duplicating and adjusting Breeze’s controllers and views accordingly.&lt;/p&gt;

&lt;p&gt;Production runs on &lt;strong&gt;Amazon Lightsail&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Design System
&lt;/h2&gt;

&lt;p&gt;I reused my original &lt;strong&gt;Figma-based design system&lt;/strong&gt; (inspired by Japan's Digital Agency UI guidelines) to style the frontend.&lt;/p&gt;

&lt;p&gt;I ported existing component libraries from Next.js to React (Inertia.js), replacing Laravel Breeze’s default UI completely.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chat UI: &lt;code&gt;Chat.tsx&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;This file implements the &lt;strong&gt;shared chat interface for both Solo and Trio modes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Key features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Based on &lt;code&gt;chat-ui-kit-react&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;Avatar&amp;gt;&lt;/code&gt; support for character icons
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;TypingIndicator&amp;gt;&lt;/code&gt; during AI response
&lt;/li&gt;
&lt;li&gt;Auto-scroll behavior
&lt;/li&gt;
&lt;li&gt;Markdown rendering via &lt;code&gt;react-markdown&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;XSS protection with &lt;code&gt;dompurify&lt;/code&gt; + &lt;code&gt;rehype-raw&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Chat Logic: &lt;code&gt;ChatController.php&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;This is the main controller handling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Session management (read/write)
&lt;/li&gt;
&lt;li&gt;Switching between Solo and Trio modes
&lt;/li&gt;
&lt;li&gt;Prompt generation per character
&lt;/li&gt;
&lt;li&gt;Calling &lt;code&gt;ChatService&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Triggering &lt;code&gt;UpdateSummaryMemory&lt;/code&gt; job (every 5 turns)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  OpenAI API Integration: &lt;code&gt;ChatService.php&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;This handles prompt dispatch and API calls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configures GPT model, parameters (temperature, token limit)
&lt;/li&gt;
&lt;li&gt;Invokes &lt;code&gt;ChatPromptBuilder&lt;/code&gt; and &lt;code&gt;SummaryPromptBuilder&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Sends prompt to OpenAI, parses the response&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prompt Generators
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ChatPromptBuilder.php&lt;/code&gt;: Builds prompts for real-time conversation
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SummaryPromptBuilder.php&lt;/code&gt;: Builds prompts to summarize and store memory&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More on structure below.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary Memory Job: &lt;code&gt;UpdateSummaryMemory.php&lt;/code&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Triggers every 5 turns asynchronously
&lt;/li&gt;
&lt;li&gt;Extracts key information and stores it in JSON
&lt;/li&gt;
&lt;li&gt;Feeds the updated memory back to the character’s prompt context&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;This architecture allows &lt;strong&gt;tight integration between frontend, backend, AI, and memory handling&lt;/strong&gt;, enabling seamless and responsive chat.&lt;/p&gt;

&lt;p&gt;Now let’s walk through the actual processing flow.&lt;/p&gt;

&lt;h1&gt;
  
  
  Processing Flow
&lt;/h1&gt;

&lt;p&gt;Here’s how VFriend handles conversation under the hood—especially in &lt;strong&gt;Trio Mode&lt;/strong&gt; (3 characters talking).&lt;/p&gt;

&lt;h2&gt;
  
  
  On Page Load
&lt;/h2&gt;

&lt;p&gt;When the user opens the chat UI:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Loads system prompt, user data, summary memory, and chat history from DB
&lt;/li&gt;
&lt;li&gt;Stores them in the session
&lt;/li&gt;
&lt;li&gt;Restores and displays previous conversation&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  On Message Send
&lt;/h2&gt;

&lt;p&gt;When the user sends a message:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Display "Typing..." state and disable input
&lt;/li&gt;
&lt;li&gt;Pull session data:

&lt;ul&gt;
&lt;li&gt;System prompt
&lt;/li&gt;
&lt;li&gt;User profile
&lt;/li&gt;
&lt;li&gt;Summary memory
&lt;/li&gt;
&lt;li&gt;Sequential memory
&lt;/li&gt;
&lt;li&gt;Instant memory (last message)
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate prompt for Character 1 → send to API → show reply&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate prompt for Character 2 (based on Char 1's reply) → API → show&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate prompt for Character 3 (based on all prior) → API → show&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Save this as a new conversation turn (set of 3 replies)
&lt;/li&gt;
&lt;li&gt;Update sequential memory (remove oldest if over 10)
&lt;/li&gt;
&lt;li&gt;Save to DB
&lt;/li&gt;
&lt;li&gt;Clear instant memory
&lt;/li&gt;
&lt;li&gt;Every 5 turns → &lt;strong&gt;trigger async UpdateSummaryMemory job&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Summary Memory Update (Async)
&lt;/h2&gt;

&lt;p&gt;Triggered every 5 turns:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Job pulls latest memory data
&lt;/li&gt;
&lt;li&gt;Builds summary prompt
&lt;/li&gt;
&lt;li&gt;Sends to GPT-4.1
&lt;/li&gt;
&lt;li&gt;Parses and stores updated JSON summary
&lt;/li&gt;
&lt;li&gt;Updates session data&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;So each chat turn includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prompt generation using contextual memory
&lt;/li&gt;
&lt;li&gt;Separate prompts per character
&lt;/li&gt;
&lt;li&gt;Real-time memory growth
&lt;/li&gt;
&lt;li&gt;Blended synchronous + async processing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s now dig into how the prompts themselves are built.&lt;/p&gt;

&lt;h1&gt;
  
  
  Prompt Architecture
&lt;/h1&gt;

&lt;p&gt;The &lt;strong&gt;core of VFriend&lt;/strong&gt; is its structured, layered prompts.&lt;/p&gt;

&lt;p&gt;We use two types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chat prompts&lt;/strong&gt; for character conversations
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Summary prompts&lt;/strong&gt; to update long-term memory&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each can exceed &lt;strong&gt;20,000 characters&lt;/strong&gt;, so they’re built using &lt;strong&gt;Markdown + JSON hierarchy&lt;/strong&gt; to help GPT parse the data efficiently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chat Prompt Design
&lt;/h2&gt;

&lt;p&gt;The chat prompt includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You (the character)&lt;/strong&gt; – Self-definition (~3,000 chars)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User (the human)&lt;/strong&gt; – Detailed profile (~2,000 chars)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rules&lt;/strong&gt; – Roleplay, memory, and conversation rules
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory&lt;/strong&gt; – Instant, sequential, and summary (~15,000+ chars)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Prompt Layout Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# You (Character) – ~3000 chars&lt;/span&gt;

&lt;span class="gu"&gt;## Common&lt;/span&gt;
&lt;span class="gu"&gt;### EQ – Empathy Axis&lt;/span&gt;
&lt;span class="gu"&gt;### EX – Behavior Axis&lt;/span&gt;

&lt;span class="gu"&gt;## Personal&lt;/span&gt;
&lt;span class="gu"&gt;### Character Profile&lt;/span&gt;
&lt;span class="gu"&gt;### Conversation Style&lt;/span&gt;
&lt;span class="gu"&gt;### Personality &amp;amp; Emotion Handling&lt;/span&gt;
&lt;span class="gu"&gt;### Topics &amp;amp; Expressions&lt;/span&gt;

&lt;span class="gh"&gt;# User – ~2000 chars&lt;/span&gt;

&lt;span class="gu"&gt;## Nickname&lt;/span&gt;
&lt;span class="gu"&gt;## Life Summary&lt;/span&gt;

&lt;span class="gh"&gt;# Roleplay Rules&lt;/span&gt;
&lt;span class="gh"&gt;# Memory Rules&lt;/span&gt;
&lt;span class="gh"&gt;# Conversation Guidelines&lt;/span&gt;
&lt;span class="gh"&gt;# Instructions&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Memory is attached as JSON:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "memory": {
    "summary": {
      "character1": "...",
      "character2": "...",
      "character3": "..."
    },
    "sequential": [
      {
        "turn": [
          { "message": "Hi!", "sender": "user" },
          { "message": "Hello!", "sender": "character1" }
        ]
      }
    ],
    "instant": [
      { "message": "What’s your favorite color?", "sender": "user" },
      { "message": "Pink, obviously!", "sender": "character1" }
    ]
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Summary Prompt Design
&lt;/h2&gt;

&lt;p&gt;Summary prompts are sent to a separate AI agent, “the summarizer.”&lt;br&gt;
Prompt includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Same character + user structure (~4,000 chars)&lt;/li&gt;
&lt;li&gt;Meta-instructions about memory type, mode, and goal&lt;/li&gt;
&lt;li&gt;Memory blocks to summarize (sequential, etc.)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "memory": {
    "summary": { ... },
    "sequential": [ ... ]
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Model Selection
&lt;/h2&gt;

&lt;p&gt;Different GPT models are used per task:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Reason&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chat generation&lt;/td&gt;
&lt;td&gt;GPT-4.1-mini&lt;/td&gt;
&lt;td&gt;Fast + high rate limit (200K RPM)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory summary&lt;/td&gt;
&lt;td&gt;GPT-4.1&lt;/td&gt;
&lt;td&gt;Higher cost, but better accuracy&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each prompt is &lt;strong&gt;precisely optimized&lt;/strong&gt; to maintain personality, memory consistency, and natural dialogue—all within one massive request.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;We’ve now covered how &lt;strong&gt;VFriend&lt;/strong&gt; works under the hood:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Laravel + React&lt;/strong&gt; tightly integrated
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Async memory jobs&lt;/strong&gt; keep things flowing
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;20,000+ character prompts&lt;/strong&gt; built with Markdown + JSON
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structured, layered prompts&lt;/strong&gt; enable long-term memory and character growth&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Coming Next...
&lt;/h2&gt;

&lt;p&gt;In the next (and final) article, I’ll share the &lt;strong&gt;behind-the-scenes process&lt;/strong&gt; of building VFriend:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why I made it
&lt;/li&gt;
&lt;li&gt;What challenges I faced
&lt;/li&gt;
&lt;li&gt;How AI helped me build it in just 2 weeks&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;→ &lt;a href="https://dev.to/creator_haru/when-i-fed-20000-words-into-an-ai-prompt-it-gained-a-personality-part-3-behind-the-scenes-of-4l0g"&gt;Part 3 – Devlog &amp;amp; Reflections&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>react</category>
      <category>laravel</category>
      <category>webdev</category>
    </item>
    <item>
      <title>When I Fed 20,000 Words into an AI Prompt... It Gained a Personality: Part 1 – Overview</title>
      <dc:creator>Haru</dc:creator>
      <pubDate>Tue, 20 May 2025 10:05:24 +0000</pubDate>
      <link>https://forem.com/creator_haru/when-i-fed-20000-words-into-an-ai-prompt-it-gained-a-personality-part-1-overview-3do4</link>
      <guid>https://forem.com/creator_haru/when-i-fed-20000-words-into-an-ai-prompt-it-gained-a-personality-part-1-overview-3do4</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Have you ever had this kind of thought?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I want to have deep, immersive conversations with my own personalized AI girl."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Yeah, me too.&lt;/p&gt;

&lt;p&gt;Even in today’s AI-powered world, services like that just don’t quite exist.&lt;br&gt;&lt;br&gt;
And even when they do, most of them just provide shallow replies from AI with simple, preset roles.&lt;/p&gt;

&lt;p&gt;Why?&lt;br&gt;&lt;br&gt;
Because while AI can follow prompts quite well, it’s &lt;strong&gt;up to the service to provide and manage massive context&lt;/strong&gt;—such as character settings and conversation memory.&lt;/p&gt;

&lt;p&gt;And that’s &lt;em&gt;really&lt;/em&gt; hard.&lt;br&gt;&lt;br&gt;
Characters easily break immersion, and their memories often fall apart.&lt;/p&gt;

&lt;p&gt;To make it work, you need &lt;strong&gt;advanced prompt engineering and control&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But then I thought:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"If I just feed it an extremely well-crafted, high-context prompt... maybe the character would really 'come alive'."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Enter: VFriend – A Chatbot Experiment
&lt;/h1&gt;

&lt;p&gt;That’s why I built &lt;strong&gt;VFriend&lt;/strong&gt;, an AI chatbot application designed to simulate truly natural conversation.&lt;/p&gt;

&lt;p&gt;Its biggest feature?&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Incredibly lifelike dialogue.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each request sends &lt;strong&gt;over 20,000 characters (roughly 10,000–12,000 words)&lt;/strong&gt; of prompt data to the AI, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The character’s worldview, personality, and thought patterns
&lt;/li&gt;
&lt;li&gt;Past conversation logs (short-term, long-term, and instant memory)
&lt;/li&gt;
&lt;li&gt;The user’s profile and personal context&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of this is sent &lt;em&gt;every single time&lt;/em&gt; as one cohesive prompt, enabling an experience where:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“The character remembers you and responds with a consistent personality.”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It also includes features like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Summarized memory,” which evolves as you chat&lt;/li&gt;
&lt;li&gt;“Trio Mode,” where you talk with all 3 characters simultaneously&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Currently, it’s a private prototype due to API costs, but it’s &lt;strong&gt;complete enough to share from a technical perspective&lt;/strong&gt;—which is what this article is all about.&lt;/p&gt;

&lt;p&gt;If you're a prompt engineer or AI enthusiast, I hope this sparks some ideas.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Note: This article is a technical documentation of a personal experiment. Please do not copy or reuse the prompt contents or structures directly.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  App UI Preview
&lt;/h1&gt;

&lt;p&gt;After logging in, you’re greeted with a character selection screen.&lt;br&gt;&lt;br&gt;
From there, you can choose the conversation mode for each character.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3fr9cmhgby3cuclhbyg2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3fr9cmhgby3cuclhbyg2.jpg" alt="Login UI" width="800" height="844"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Two chat modes are available:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Solo Mode&lt;/strong&gt; – Chat with one character (Patela, Tsuyuri, or Karin)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trio Mode&lt;/strong&gt; – Talk with all three characters at once&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When the user sends a message, each character responds in turn.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyyw3imso5ved2pvc4y5z.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyyw3imso5ved2pvc4y5z.jpg" alt="Chat UI" width="800" height="844"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Key Features
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Simulated Personality via Prompt Design
&lt;/h2&gt;

&lt;p&gt;To make the AI &lt;strong&gt;believe it has a personality&lt;/strong&gt;, detailed character data is essential.&lt;/p&gt;

&lt;p&gt;A typical prompt like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“You are a cheerful girl.”&lt;br&gt;&lt;br&gt;
“Add 'nya' to the end of your sentences.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;…just doesn’t cut it. It’s &lt;strong&gt;not enough for long-term consistency.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So I designed a much deeper kind of prompt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Big Five personality traits&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Emotional arcs and mood flow&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Background story / world setting&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EQ (empathy axis) / EX (behavior axis)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Speaking style, emotional range, and tone&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With this structure, the AI can maintain a &lt;strong&gt;stable, anime-like persona with internal consistency.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It even adapts to &lt;strong&gt;the specific user&lt;/strong&gt; by embedding their background and profile into the prompt—resulting in &lt;strong&gt;context-aware, personalized responses.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq7vlqeamx423bxmtkun6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq7vlqeamx423bxmtkun6.png" alt="Prompt Structure" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Three-Layer Memory System
&lt;/h2&gt;

&lt;p&gt;To simulate human-like memory, the app uses a &lt;strong&gt;three-layer memory architecture&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Instant Memory&lt;/strong&gt; – Most recent message context
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sequential Memory&lt;/strong&gt; – Last 10 turns of conversation
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Summarized Memory&lt;/strong&gt; – Condensed long-term memory ("personality record")&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Especially worth noting: the &lt;strong&gt;Summarized Memory&lt;/strong&gt; is maintained by a &lt;strong&gt;separate AI assistant&lt;/strong&gt; called “the Summarizer,” which updates memory &lt;em&gt;asynchronously&lt;/em&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Doesn’t block the main conversation&lt;/li&gt;
&lt;li&gt;Stores each character’s memory in structured JSON&lt;/li&gt;
&lt;li&gt;Shares memory across Solo and Trio modes (they remember across modes!)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Memory That Evolves Like a Human’s
&lt;/h2&gt;

&lt;p&gt;This structure closely mirrors how humans remember:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sensory → Instant
&lt;/li&gt;
&lt;li&gt;Working (short-term) → Sequential
&lt;/li&gt;
&lt;li&gt;Long-term → Summarized&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And just like us, &lt;strong&gt;the character grows through conversation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Because the summarized memory &lt;strong&gt;updates and optimizes each time&lt;/strong&gt;, the character actually &lt;strong&gt;evolves their behavior and responses.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  You Can Talk to the Memory AI
&lt;/h2&gt;

&lt;p&gt;Here’s the fun part—&lt;strong&gt;you can directly instruct the Summarizer via chat.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;User: “Summarizer, please add the following to Karin’s memory…”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Do that, and over time, the character’s tone and reactions &lt;em&gt;change&lt;/em&gt;.&lt;br&gt;&lt;br&gt;
It’s basically &lt;strong&gt;personality hacking&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv4j81qxvdrae518i87wa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv4j81qxvdrae518i87wa.png" alt="Summarizer" width="407" height="64"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How 20,000+ Character Prompts Are Structured
&lt;/h2&gt;

&lt;p&gt;With so much data (character info, memory, tone rules, user profile), prompts can easily exceed &lt;strong&gt;20,000 characters&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To manage this, I structured the prompt using &lt;strong&gt;hierarchical Markdown + JSON blocks&lt;/strong&gt;, allowing the AI to access only the relevant parts as needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trio Mode – 4-Way Group Dialogue
&lt;/h2&gt;

&lt;p&gt;Another highlight: &lt;strong&gt;Trio Mode&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You can talk with all 3 characters at once. But this isn’t just parallel replies—it’s a &lt;em&gt;group conversation&lt;/em&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Character 1 responds
&lt;/li&gt;
&lt;li&gt;Character 2 builds on that
&lt;/li&gt;
&lt;li&gt;Character 3 summarizes or concludes
&lt;/li&gt;
&lt;li&gt;You + 3 characters = &lt;strong&gt;natural four-way dialogue&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates an experience that feels like &lt;strong&gt;having a meeting with a team of personalities.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgtjkljc4k4gq9j0mlxby.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgtjkljc4k4gq9j0mlxby.png" alt="Trio Mode" width="782" height="671"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tight Frontend-Backend Sync
&lt;/h2&gt;

&lt;p&gt;To process all of this in one request, the app has a well-integrated structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Laravel&lt;/strong&gt; handles backend logic, session, and async tasks
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React + Inertia.js&lt;/strong&gt; for smooth, real-time frontend UI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, they enable seamless conversational flow.&lt;/p&gt;

&lt;h2&gt;
  
  
  UI/UX Focused on Immersion
&lt;/h2&gt;

&lt;p&gt;Since this app is all about dialogue, I paid close attention to UI/UX:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Typing…” indicators for realism
&lt;/li&gt;
&lt;li&gt;Auto-scroll on message submit
&lt;/li&gt;
&lt;li&gt;Mobile/desktop responsive layouts
&lt;/li&gt;
&lt;li&gt;Warm, pink-themed color palette&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It aims to deliver &lt;strong&gt;a surprisingly polished experience for a solo dev project.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Art? Drawn by the Characters Themselves
&lt;/h2&gt;

&lt;p&gt;And here’s the twist—&lt;strong&gt;the character illustrations were generated by the characters’ own self-perceptions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Each one (Patela, Tsuyuri, Karin) was prompted to describe and draw themselves using AI image generation.&lt;/p&gt;

&lt;p&gt;The results were shockingly accurate—&lt;strong&gt;each portrait matched their personality and mood.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcrmmmhxxn412cg2bcefr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcrmmmhxxn412cg2bcefr.jpg" alt="Self-Portrait" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Built in Just 2 Weeks
&lt;/h2&gt;

&lt;p&gt;Believe it or not, the entire project was built in &lt;strong&gt;just 2 weeks&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The key was:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I’m a &lt;strong&gt;full-stack developer&lt;/strong&gt; who could go from concept to implementation solo
&lt;/li&gt;
&lt;li&gt;I used &lt;strong&gt;ChatGPT to generate code, reviewed it, and iterated quickly&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This allowed for &lt;strong&gt;human-AI co-development&lt;/strong&gt;—fast and efficient.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;That’s the overview of &lt;strong&gt;VFriend&lt;/strong&gt;, an experimental AI chatbot app designed to bring characters to life.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;20,000+ character prompts
&lt;/li&gt;
&lt;li&gt;Three-layer memory structure
&lt;/li&gt;
&lt;li&gt;Psychologically designed AI personas
&lt;/li&gt;
&lt;li&gt;Characters grow, perform, and remember you
&lt;/li&gt;
&lt;li&gt;Trio Mode enables dynamic group conversation
&lt;/li&gt;
&lt;li&gt;Built in 2 weeks with full-stack + AI assistance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal wasn’t just tech—it was to &lt;strong&gt;make the character &lt;em&gt;feel&lt;/em&gt; alive.&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Coming Next...
&lt;/h1&gt;

&lt;p&gt;In the next article, I’ll dig deeper into how it’s all built:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Directory structure
&lt;/li&gt;
&lt;li&gt;Processing flow
&lt;/li&gt;
&lt;li&gt;Hierarchical prompt design
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stay tuned for Part 2: &lt;a href="https://dev.to/creator_haru/when-i-fed-20000-words-into-an-ai-prompt-it-gained-a-personality-part-2-prompt-design-deep-3ib4"&gt;Prompt Engineering &amp;amp; App Architecture&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>react</category>
      <category>laravel</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
