<?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>DEV Community: Ricky</title>
    <description>The latest articles on DEV Community by Ricky (@soulchat_official).</description>
    <link>https://dev.to/soulchat_official</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4102772%2Fe3812607-44cd-4a63-b62a-e0f20554bd81.png</url>
      <title>DEV Community: Ricky</title>
      <link>https://dev.to/soulchat_official</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/soulchat_official"/>
    <language>en</language>
    <item>
      <title>"I Made 6 AI Companion Videos. Here's What I Learned About Loneliness.</title>
      <dc:creator>Ricky</dc:creator>
      <pubDate>Mon, 07 Sep 2026 14:20:53 +0000</pubDate>
      <link>https://dev.to/soulchat_official/i-made-6-ai-companion-videos-heres-what-i-learned-about-loneliness-3na9</link>
      <guid>https://dev.to/soulchat_official/i-made-6-ai-companion-videos-heres-what-i-learned-about-loneliness-3na9</guid>
      <description>&lt;p&gt;I made 6 videos for SOULCHAT — an AI companion I’m building for grief, loneliness, and the days when no one’s there to listen.&lt;/p&gt;

&lt;p&gt;Each video captures a different kind of loneliness:&lt;/p&gt;

&lt;p&gt;The quiet exhaustion after a long day at work&lt;/p&gt;

&lt;p&gt;The longing for someone you’ve lost&lt;/p&gt;

&lt;p&gt;The moment when "I'm so tired" turns into "I can't hold on anymore"&lt;/p&gt;

&lt;p&gt;The feeling of being the only one in the room who doesn't have it figured out&lt;/p&gt;

&lt;p&gt;The restless boredom of wanting connection but not knowing how to ask&lt;/p&gt;

&lt;p&gt;I didn’t expect to learn anything new. I just wanted to show what SOULCHAT does.&lt;/p&gt;

&lt;p&gt;But watching them back, I noticed something I hadn’t planned.&lt;/p&gt;

&lt;p&gt;Every video — every single one — follows the same arc: isolation → hesitation → reaching out → relief.&lt;/p&gt;

&lt;p&gt;Not because I wrote the script that way. Because that’s how loneliness works.&lt;/p&gt;

&lt;p&gt;You sit with it. You try to ignore it. You tell yourself you’re fine. Then, eventually, you reach out — not because you’ve fixed anything, but because holding it alone becomes heavier than the risk of asking.&lt;/p&gt;

&lt;p&gt;That’s what SOULCHAT is for. Not to fix. Just to be there when you’re ready to reach out.&lt;/p&gt;

&lt;p&gt;Here’s one of the videos:&lt;/p&gt;

&lt;p&gt;[嵌入视频：剧本3 Marcus视频]&lt;/p&gt;

&lt;p&gt;If you’ve ever felt like any of these characters — tired, grieving, stuck, alone — you’re not the only one.&lt;/p&gt;

&lt;p&gt;Try SOULCHAT for free: soulchat.hk&lt;/p&gt;

</description>
      <category>mentalhealth</category>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How I Built SOULCHAT's Long-Term Memory with sentence-transformers</title>
      <dc:creator>Ricky</dc:creator>
      <pubDate>Fri, 04 Sep 2026 14:23:51 +0000</pubDate>
      <link>https://dev.to/soulchat_official/how-i-built-soulchats-long-term-memory-with-sentence-transformers-2gea</link>
      <guid>https://dev.to/soulchat_official/how-i-built-soulchats-long-term-memory-with-sentence-transformers-2gea</guid>
      <description>&lt;p&gt;The first time I tested SOULCHAT, I had the same conversation twice.&lt;/p&gt;

&lt;p&gt;I told the AI about a memory I wanted to preserve. It responded with warmth and understanding. I closed the window, opened a new one the next day, and it asked me the same question — as if we had never spoken.&lt;/p&gt;

&lt;p&gt;That was the moment I realized: if an AI companion can't remember you, it's not a companion. It's a search engine.&lt;/p&gt;

&lt;p&gt;So I set out to build a memory layer for SOULCHAT — something that could store, retrieve, and recall what users share across sessions.&lt;/p&gt;

&lt;p&gt;I used Cline with DeepSeek's API to help me prototype it. I designed the system flow and architecture; Cline helped with the implementation. This post is about what I built and why.&lt;/p&gt;

&lt;p&gt;What I built: a semantic memory system&lt;/p&gt;

&lt;p&gt;The core idea is simple: when a user says something important, the system generates a vector embedding of that text and stores it in a vector database. When the user returns with a new message, it embeds that too, finds the most semantically similar stored memories, and injects them into the context window before generating a response.&lt;/p&gt;

&lt;p&gt;This way, the AI doesn't need to remember everything in its weights — it retrieves relevant memories on demand.&lt;/p&gt;

&lt;p&gt;Under the hood, I use:&lt;/p&gt;

&lt;p&gt;sentence-transformers with the all-MiniLM-L6-v2 model for generating embeddings. It's lightweight (~80MB), runs locally on CPU, and produces 384-dimensional vectors that capture semantic meaning well.&lt;/p&gt;

&lt;p&gt;ChromaDB as the vector store, with cosine similarity for retrieval.&lt;/p&gt;

&lt;p&gt;This combination gives me fast, offline, cost-effective memory retrieval. No API keys needed for the embedding layer, no per-query cost — just CPU compute.&lt;/p&gt;

&lt;p&gt;How the code works&lt;/p&gt;

&lt;p&gt;I gave Cline a clear goal: build a system that ingests conversations, generates embeddings, and retrieves them when relevant. The core functions it helped me generate:&lt;/p&gt;

&lt;p&gt;Ingestion flow:&lt;/p&gt;

&lt;p&gt;python&lt;br&gt;
from sentence_transformers import SentenceTransformer&lt;/p&gt;

&lt;p&gt;model = SentenceTransformer('all-MiniLM-L6-v2')&lt;/p&gt;

&lt;p&gt;def store_memory(text, user_id, metadata=None):&lt;br&gt;
    embedding = model.encode(text)&lt;br&gt;
    # store in ChromaDB with metadata&lt;br&gt;
Retrieval flow:&lt;/p&gt;

&lt;p&gt;python&lt;br&gt;
def recall_memory(query, user_id, top_k=5):&lt;br&gt;
    query_embedding = model.encode(query)&lt;br&gt;
    results = collection.query(query_embeddings=[query_embedding], n_results=top_k)&lt;br&gt;
    return results&lt;br&gt;
Then I wired it into the conversation loop: every user message passes through recall_memory, the top results are injected into the system prompt as "relevant context from past conversations," and the LLM responds with that context available.&lt;/p&gt;

&lt;p&gt;What I learned from building this&lt;/p&gt;

&lt;p&gt;Cline writes good first drafts but needs guidance on architecture. I had to tell it "store embeddings with metadata" and "use cosine similarity" — it wrote the implementation, but I designed the flow.&lt;/p&gt;

&lt;p&gt;The DeepSeek API helped with refactoring. I hit some bugs (ChromaDB index issues, model loading on first run). I passed the error logs to Cline, and it suggested fixes.&lt;/p&gt;

&lt;p&gt;The hardest part wasn't the code — it was defining what "memory" actually means for a companion product.&lt;/p&gt;

&lt;p&gt;Is it factual memory? "She told me her grandmother passed away in 2018."&lt;/p&gt;

&lt;p&gt;Is it emotional memory? "She sounded sad when she mentioned her grandmother."&lt;/p&gt;

&lt;p&gt;Both? Something else entirely?&lt;/p&gt;

&lt;p&gt;I kept asking myself: What information is actually useful to remember? How do I structure it so the system knows when to retrieve it? And most importantly — in a live conversation, how does the AI know which memories to pull, and when, so the dialogue feels natural and not like a database lookup?&lt;/p&gt;

&lt;p&gt;I don't have perfect answers yet. But I've learned that memory isn't just about "storing text." It's about relevance, timing, and emotional resonance. A good companion doesn't just recall facts — it recalls the feeling behind them.&lt;/p&gt;

&lt;p&gt;I'm still iterating on this. The current version works, but "feels like a real friend" is a much higher bar than "retrieves the right vector." I'll get there.&lt;/p&gt;

&lt;p&gt;What's next&lt;/p&gt;

&lt;p&gt;Adding time-based decay to memory retrieval (recent memories should weigh more)&lt;/p&gt;

&lt;p&gt;User-controlled memory deletion (privacy is non-negotiable for SOULCHAT)&lt;/p&gt;

&lt;p&gt;Exploring chunk-based embedding for longer conversations&lt;/p&gt;

&lt;p&gt;The current system is live at soulchat.hk — and it already remembers what you told it yesterday.&lt;/p&gt;

&lt;p&gt;The code is still rough, and I'm learning as I go. If you've built something similar — or if you have thoughts on long-term memory for AI companions — I'd genuinely love to hear from you in the comments. 🧡&lt;/p&gt;

&lt;p&gt;Try SOULCHAT: soulchat.hk&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>machinelearning</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>I Built an AI Companion for Grief, Loneliness, and the Days No One Listens</title>
      <dc:creator>Ricky</dc:creator>
      <pubDate>Mon, 31 Aug 2026 13:46:04 +0000</pubDate>
      <link>https://dev.to/soulchat_official/i-built-an-ai-companion-for-grief-loneliness-and-the-days-no-one-listens-197a</link>
      <guid>https://dev.to/soulchat_official/i-built-an-ai-companion-for-grief-loneliness-and-the-days-no-one-listens-197a</guid>
      <description>&lt;p&gt;Two years ago, I watched someone I love struggle through grief alone. Not because they didn't have people around them — they did. But because grief doesn't always know how to ask for help. And sometimes, the people closest to us don't know how to listen in the way we need.&lt;br&gt;
That stayed with me.&lt;br&gt;
I started thinking: what if there was something — not a replacement for human connection, but a bridge to it — that could be there at 3 AM when memories hit hardest? Something that could listen without judgment, remember without forgetting, and check in when you don't have the energy to reach out?&lt;br&gt;
That's why I built SOULCHAT.&lt;/p&gt;

&lt;p&gt;Loneliness is a public health crisis. In the U.S., 1 in 5 adults report feeling lonely. For those grieving the loss of a loved one, 10% to 30% experience what's called "prolonged grief disorder" — a condition that makes it nearly impossible to function normally.&lt;br&gt;
And yet, mental health resources are stretched thin. Many people don't have someone to talk to at 2 AM. Others simply can't afford therapy. Some carry wounds they've never spoken aloud to anyone.&lt;br&gt;
I realized there's a gap between "crisis" and "daily life" — a gap that technology, if built with empathy, could help fill.&lt;/p&gt;

&lt;p&gt;SOULCHAT is a free-to-start AI companion web app. It's built for:&lt;br&gt;
Anyone grieving a loved one — offering a space to continue the connection, not replace it&lt;br&gt;
Anyone feeling lonely in a crowded city — providing a gentle, non-judgmental presence&lt;br&gt;
Anyone who just needs to be heard when no one else is around&lt;br&gt;
It's not a chatbot. It's a companion that remembers. That checks in. That stays in character as the person you need it to be.&lt;/p&gt;

&lt;p&gt;Here's what I built beyond a "generic AI chat":&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Long-term Memory
Most AI forgets everything after a conversation ends. SOULCHAT doesn't. It remembers what you've shared, stories you've told, emotions you've expressed. Over time, it becomes more personal — not less.&lt;/li&gt;
&lt;li&gt;Identity-Locked Dialogue
Once you define a character — a parent, a friend, a partner — SOULCHAT stays consistent. No personality drift. No generic AI responses. It speaks the way that person would speak.&lt;/li&gt;
&lt;li&gt;Proactive Emotional Care
SOULCHAT doesn't wait for you to type first. It checks in. It asks how you're doing. It reminds you of meaningful dates — birthdays, anniversaries, moments worth remembering. And it does this with restraint — never overwhelming, always thoughtful.&lt;/li&gt;
&lt;li&gt;Encrypted Digital Identity
Your memories, your conversations, your emotional data — they stay yours. Full encryption. Full data ownership. No one else has access. Period.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Under the hood, SOULCHAT is built on a stack I've carefully chosen:&lt;br&gt;
DeepSeek as the foundational language model&lt;br&gt;
sentence-transformers for efficient memory retrieval&lt;br&gt;
PBKDF2 + Fernet for end-to-end encryption of all memory data&lt;br&gt;
But the real work isn't just the stack — it's the layers I built on top: the identity-locking mechanism, the proactive scheduling engine, the memory consolidation algorithms that deduplicate and prioritize what matters most.&lt;br&gt;
(I'll be writing deep dives on each of these in future posts. Follow along if that's your thing.)&lt;/p&gt;

&lt;p&gt;SOULCHAT is live at soulchat.hk. It's free to try with a 3-day free trial, and even after that, you get 10 free messages every single day — enough to stay connected.&lt;br&gt;
If you need more, you can upgrade to support ongoing conversations.&lt;br&gt;
Why am I telling you this?&lt;br&gt;
Because I'm building in public. I want to share the wins, the struggles, the technical debt, and the lessons learned. And I genuinely want to hear from you — developers, designers, thinkers, users.&lt;/p&gt;

&lt;p&gt;If any of this resonated with you:&lt;br&gt;
Try it: soulchat.hk&lt;br&gt;
Reply here: I'd love to hear your thoughts, questions, or critiques&lt;br&gt;
Follow me: I'll be posting more technical deep dives on memory, identity, and encryption&lt;br&gt;
Let's figure out together how to make AI truly helpful — not just efficient, but human.&lt;br&gt;
Thanks for reading. 🧡&lt;/p&gt;

</description>
      <category>mentalhealth</category>
      <category>ai</category>
      <category>webdev</category>
      <category>buildinpublic</category>
    </item>
  </channel>
</rss>
