<?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: Mayank Roy</title>
    <description>The latest articles on DEV Community by Mayank Roy (@code__mancer).</description>
    <link>https://dev.to/code__mancer</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%2F1838581%2Fcf91829e-82ef-42c7-8858-b792c5fc82f8.jpeg</url>
      <title>DEV Community: Mayank Roy</title>
      <link>https://dev.to/code__mancer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/code__mancer"/>
    <language>en</language>
    <item>
      <title>The Bug Wasn't Where I Thought It Was</title>
      <dc:creator>Mayank Roy</dc:creator>
      <pubDate>Tue, 14 Jul 2026 18:32:56 +0000</pubDate>
      <link>https://dev.to/code__mancer/the-bug-wasnt-where-i-thought-it-was-35cd</link>
      <guid>https://dev.to/code__mancer/the-bug-wasnt-where-i-thought-it-was-35cd</guid>
      <description>&lt;p&gt;Today reminded me why debugging is one of the most valuable skills a developer can have.&lt;/p&gt;

&lt;p&gt;I deployed one of my projects expecting everything to work smoothly. Instead, multiple routes started breaking in production. My first instinct was that the routing itself was the problem, so I began fixing route definitions and checking navigation logic.&lt;/p&gt;

&lt;p&gt;Every time I fixed something, another error appeared.&lt;/p&gt;

&lt;p&gt;For hours, it felt like I was playing whack-a-mole with bugs. I reviewed components, deployment settings, API calls, environment variables, and server configuration. Nothing seemed to explain why the application worked locally but failed after deployment.&lt;/p&gt;

&lt;p&gt;Eventually, I discovered I needed fallback routes for client-side routing, which resolved part of the issue. That felt like the answer... until more requests kept failing.&lt;/p&gt;

&lt;p&gt;The real culprit turned out to be my _Axios _configuration.&lt;/p&gt;

&lt;p&gt;A small mistake in how my API client was configured caused requests to fail in production, which made it appear as if my routes were broken. The routing wasn't the primary issue—it was simply exposing another configuration problem underneath.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This experience reinforced a few lessons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The first visible error isn't always the root cause.&lt;/li&gt;
&lt;li&gt;Production environments expose issues that localhost can hide.&lt;/li&gt;
&lt;li&gt;Debugging is a process of forming hypotheses, testing them, and eliminating possibilities.&lt;/li&gt;
&lt;li&gt;Understanding why something breaks is far more valuable than finding a quick fix.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Writing features is exciting, but debugging teaches you how your application actually works. Every frustrating bug is an opportunity to understand your stack a little more deeply.&lt;/p&gt;

&lt;p&gt;Today didn't add a new feature to my project.&lt;/p&gt;

&lt;p&gt;It made me a **better **developer.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Building a Memory-Driven AI Tutor in 4 Days with Cognee</title>
      <dc:creator>Mayank Roy</dc:creator>
      <pubDate>Mon, 06 Jul 2026 13:01:04 +0000</pubDate>
      <link>https://dev.to/code__mancer/building-a-memory-driven-ai-tutor-in-4-days-with-cognee-2j8b</link>
      <guid>https://dev.to/code__mancer/building-a-memory-driven-ai-tutor-in-4-days-with-cognee-2j8b</guid>
      <description>&lt;p&gt;How we designed Continuum — an AI tutor that remembers students, adapts its teaching strategy, and improves over time&lt;/p&gt;

&lt;p&gt;Most AI tutors are good at answering questions. Very few are good at remembering the student.&lt;/p&gt;

&lt;p&gt;That gap became the core idea behind Continuum, the project we built for a hackathon. We didn’t want another tutor that starts from zero every session and treats every conversation like it has never seen the learner before. We wanted something closer to a real teacher: a system that could remember past mistakes, notice patterns, adapt explanations, and eventually stop treating old misconceptions as active once the student had clearly improved.&lt;/p&gt;

&lt;p&gt;In short, we wanted to build an AI tutor with a memory lifecycle.&lt;/p&gt;

&lt;p&gt;The challenge, of course, was that we had to do it in hackathon conditions limited time, limited scope, and no room for building features that looked cool but didn’t actually strengthen the core idea. So instead of trying to build a massive platform, we focused on the smallest version of the product that could still prove one thing convincingly:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Continuum is not just an AI tutor. It is an AI tutor that remembers, recalls, improves, and forgets.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This post is a breakdown of how we structured that build across four days using Cognee as the memory layer, FastAPI for the backend, and an LLM-driven tutoring loop on top.&lt;br&gt;
The core idea behind Continuum&lt;/p&gt;

&lt;p&gt;Before getting into the build process, it helps to define the product in one sentence.&lt;/p&gt;

&lt;p&gt;Continuum is a memory-driven AI tutor designed to learn how a specific student learns over time.&lt;/p&gt;

&lt;p&gt;Instead of treating every tutoring session as a blank slate, the system is built around four memory operations:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Remember: store student interactions, answers, misconceptions, and strategy outcomes
Recall: retrieve relevant past context before teaching the next concept
Improve: periodically synthesize memory into better teaching preferences and mastery insights
Forget: remove outdated misconceptions once the student has clearly overcome them
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;That lifecycle became the backbone of the entire architecture. Everything else curriculum, tutoring, grading, dashboards was built around making those four operations meaningful and visible.&lt;br&gt;
Why we planned the build day by day&lt;/p&gt;

&lt;p&gt;Hackathons punish vague architecture.&lt;/p&gt;

&lt;p&gt;If you try to build “an AI tutor with memory” as one giant fuzzy idea, you end up with half-working services, no clear demo story, and no time to debug the one thing that actually matters. So we broke Continuum into four days where each day unlocked the next:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Day 1: prove memory works and centralize the lifecycle logic
Day 2: build the curriculum layer and the first tutoring loop
Day 3: let the tutor learn from student answers and adapt its strategy
Day 4: make the system’s learning visible through a dashboard and timeline
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;That order mattered a lot. We didn’t want to build tutoring logic on top of an unverified memory system. We didn’t want to build a dashboard before there was meaningful memory data to show. And we definitely didn’t want to spend hours polishing UI if the tutor itself couldn’t demonstrate continuity.&lt;br&gt;
Day 1 — Build the foundation before building the tutor&lt;/p&gt;

&lt;p&gt;The first day was dedicated to one thing above all else: making sure Cognee actually worked before we built on top of it.&lt;/p&gt;

&lt;p&gt;It sounds obvious, but it’s one of the easiest mistakes to make in a hackathon. You install a tool, assume the integration is fine, start writing business logic, and then discover two days later that your memory pipeline isn’t behaving the way you thought it was. We wanted to avoid that entirely.&lt;/p&gt;

&lt;p&gt;So before writing any real tutoring features, the first task was to run a real local memory test. We created a fake student interaction, stored it through a “remember” call, and then issued a “recall” query against it to confirm that the returned context actually made sense. Not just “it didn’t crash,” but “the memory is being stored and retrieved in a way that would be useful to a tutor.”&lt;/p&gt;

&lt;p&gt;That one-hour verification step was probably one of the highest-leverage decisions in the whole project. It meant the rest of the architecture could be built with confidence instead of guesswork.&lt;br&gt;
Creating the Memory Lifecycle Service&lt;/p&gt;

&lt;p&gt;Once Cognee was verified, the next move was to build what became the heart of Continuum: the Memory Lifecycle Service.&lt;/p&gt;

&lt;p&gt;Rather than letting every part of the backend talk to Cognee directly, we created a single centralized Python module that owned all memory interactions. This module exposed a clean set of functions:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;remember()
recall()
improve()
forget()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;We also added a logging utility that recorded every lifecycle event with a timestamp and a trigger reason.&lt;/p&gt;

&lt;p&gt;This ended up being one of the best architectural decisions in the project. It gave us:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A single place to debug memory behavior
If recall returned bad context or forget wasn’t firing correctly, we knew exactly where to inspect.
A single place to instrument for the demo
Since every memory operation passed through one module, it became easy to surface lifecycle events in the UI later.
A clean boundary for the rest of the backend
Other services didn’t need to know anything about Cognee internals. They just imported the lifecycle module.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Even in a hackathon setting, centralizing memory logic paid off immediately. It kept the architecture understandable and gave us a strong “Best Use of Cognee” story right from the start.&lt;br&gt;
Setting up the FastAPI skeleton&lt;/p&gt;

&lt;p&gt;With memory in place, we created the FastAPI project structure so the other services had a home. This wasn’t the day for building lots of endpoints; it was about creating the skeleton — folders, routers, and a simple health-check route — so the backend was ready to grow cleanly over the next three days.&lt;/p&gt;

&lt;p&gt;By the end of Day 1, the flashy parts of Continuum still didn’t exist. But the most important part did: we had a working memory layer and a backend structure built around it.&lt;br&gt;
Day 2 — Teach the tutor what to teach&lt;/p&gt;

&lt;p&gt;With the memory infrastructure ready, Day 2 shifted from “can the system remember?” to “can the system actually tutor?”&lt;/p&gt;

&lt;p&gt;To make that happen, we built two pieces: a Curriculum Service and the first version of the Tutoring Engine.&lt;br&gt;
Keeping the curriculum intentionally small&lt;/p&gt;

&lt;p&gt;For the hackathon, we made a deliberate scope decision: the curriculum would be small, fixed, and carefully chosen.&lt;/p&gt;

&lt;p&gt;Instead of trying to support multiple subjects or ingest a giant knowledge base, we created a compact syllabus — roughly 10 to 15 concepts in a single domain, such as high-school algebra or basic Python programming. Each concept included its prerequisite relationships in natural language.&lt;/p&gt;

&lt;p&gt;That dataset was ingested into Cognee as a shared curriculum graph. Unlike student memory, which evolves constantly, the curriculum itself stays stable. It doesn’t belong to one student; it belongs to the tutoring system as a whole.&lt;/p&gt;

&lt;p&gt;Once ingested, we tested it by asking recall-style questions such as:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Which concepts depend on loops?
What should a student know before solving linear equations?
What comes after variables and expressions?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;As soon as those queries worked, the curriculum side was effectively complete. We didn’t need it to be huge; we just needed it to be structurally meaningful enough to support tutoring decisions.&lt;br&gt;
Building the first tutoring loop&lt;/p&gt;

&lt;p&gt;The more important part of Day 2 was the Tutoring Engine Service, which acted as the orchestrator of the learning loop.&lt;/p&gt;

&lt;p&gt;Its job was simple in concept but powerful in practice:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Accept a student ID and a current concept
Call recall on that student’s memory to surface weak areas, past struggles, or relevant misconceptions
Consult the curriculum graph to understand where the concept sits in the learning path
Use both of those inputs to decide what to focus on
Ask the LLM to generate a tutoring question
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;At this stage, the teaching strategy itself was still hardcoded. That was intentional. We didn’t need adaptive strategy selection yet; we just needed the tutor to generate a reasonable question using student memory and curriculum context.&lt;/p&gt;

&lt;p&gt;The output of the tutoring engine was a payload containing:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;the generated question
the concept being covered
the teaching style used
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Most importantly, we wired it to a real API endpoint by the end of the day. That gave the frontend something concrete to call and turned the tutoring loop into a real, testable part of the system.&lt;/p&gt;

&lt;p&gt;By the end of Day 2, Continuum could do something meaningful: it could look at a student’s past context, look at the concept graph, and generate a targeted tutoring prompt instead of a generic one.&lt;br&gt;
Day 3 — Make the tutor learn from the student&lt;/p&gt;

&lt;p&gt;By Day 3, Continuum could ask questions. What it still couldn’t do was learn from the answers.&lt;/p&gt;

&lt;p&gt;That changed once we built the grading, misconception, and strategy-selection pipeline.&lt;br&gt;
Grading answers and storing real learning signals&lt;/p&gt;

&lt;p&gt;The first service we added was an endpoint that accepted a student answer and sent it to the LLM for evaluation.&lt;/p&gt;

&lt;p&gt;The LLM’s job wasn’t just to mark the answer correct or incorrect. If the student was wrong, it also had to classify the type of misconception in plain language.&lt;/p&gt;

&lt;p&gt;That distinction mattered a lot. “Wrong answer” is not useful memory by itself. But “confused variable assignment with comparison” or “used the right formula with the wrong sign convention” is the kind of information that actually helps a future tutoring session.&lt;/p&gt;

&lt;p&gt;Once the grading result came back, the backend called the Memory Lifecycle Service’s remember function and stored the full interaction:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;concept
student answer
correctness
misconception type, if any
teaching strategy used
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;At that point, memory was no longer storing abstract test data. It was storing real tutoring interactions.&lt;br&gt;
Strategy selection: moving from static tutoring to adaptive tutoring&lt;/p&gt;

&lt;p&gt;Once we had a few interactions in memory, we could build the Strategy Selection Service.&lt;/p&gt;

&lt;p&gt;This service looked at a student and a concept type, queried memory for past strategy performance, and then selected the next teaching style based on what had actually worked.&lt;/p&gt;

&lt;p&gt;For example, if a student consistently responded better to analogy-based explanations than direct conceptual prompts, the tutor could start favoring that style. If step-by-step decomposition worked better for one topic than another, that could influence the next question generation call.&lt;/p&gt;

&lt;p&gt;This is where Continuum started to feel less like “LLM + memory” and more like a real adaptive tutoring system. The tutoring engine was updated so it no longer used a hardcoded teaching strategy; instead, it requested the current best-fit strategy from the strategy service before generating the next question.&lt;br&gt;
Adding improve and forget triggers&lt;/p&gt;

&lt;p&gt;The last major piece of Day 3 was implementing the improve and forget lifecycle triggers.&lt;br&gt;
Improve&lt;/p&gt;

&lt;p&gt;We configured improve to fire automatically after every five student interactions. The idea was that the system should periodically step back and synthesize what it had learned so far:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Which misconceptions keep recurring?
Which teaching strategies are working best?
Which concepts appear stable and which still look shaky?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;We also exposed improve as a manual endpoint for demo purposes. That meant we could trigger it live during the pitch and visibly show the system “updating” its understanding of the student.&lt;br&gt;
Forget&lt;/p&gt;

&lt;p&gt;The forget trigger represented something equally important: recognizing when a student has genuinely moved past a misconception.&lt;/p&gt;

&lt;p&gt;We defined a simple rule for the hackathon version: if a concept that previously had a misconception attached to it was answered correctly three times in a row, the system would mark that misconception as resolved and trigger a forget event.&lt;/p&gt;

&lt;p&gt;This mattered because a good tutor shouldn’t just remember failures forever. It should also know when to stop treating an old weakness as current truth.&lt;/p&gt;

&lt;p&gt;By the end of Day 3, Continuum had crossed a major threshold. It wasn’t just storing student history anymore — it was using that history to adapt teaching behavior and update its internal model of the learner.&lt;br&gt;
Day 4 — Turn the memory system into something visible&lt;/p&gt;

&lt;p&gt;A memory-driven system is only compelling if you can actually show the memory doing something.&lt;/p&gt;

&lt;p&gt;That made Day 4 all about visibility, polish, and demo readiness.&lt;br&gt;
Building the dashboard aggregation endpoint&lt;/p&gt;

&lt;p&gt;The first feature we added was a Dashboard Aggregation endpoint. This endpoint called the memory layer to assemble a student-facing snapshot of learning state, including:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mastery levels per concept
currently active weak areas
preferred teaching strategies by concept
recent tutoring outcomes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The goal wasn’t just to return raw memory entries. It was to convert memory into something interpretable — a structured summary that the frontend could turn into a meaningful dashboard.&lt;br&gt;
Building the session timeline&lt;/p&gt;

&lt;p&gt;Next, we added a Session Timeline endpoint that returned a chronological list of lifecycle events, especially every time remember, improve, or forget was triggered.&lt;/p&gt;

&lt;p&gt;This became one of the most important pieces of the demo.&lt;/p&gt;

&lt;p&gt;Why? Because it made Continuum’s “self-improving tutor” claim visible. Instead of saying “trust us, memory is happening behind the scenes,” we could show a real timeline of events:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;a misconception being remembered
a strategy pattern being improved
an outdated weakness being forgotten after repeated correct answers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;That timeline turned the memory lifecycle from an invisible implementation detail into a product feature the judges could actually see.&lt;br&gt;
Running full end-to-end sessions&lt;/p&gt;

&lt;p&gt;The rest of Day 4 was spent doing something that often gets neglected in hackathons: running the full flow with real interaction data instead of mock payloads.&lt;/p&gt;

&lt;p&gt;We simulated multiple student sessions, intentionally answered some questions incorrectly, corrected them later, triggered improvement cycles, and watched whether the dashboard and timeline changed in the way we expected.&lt;/p&gt;

&lt;p&gt;This is where a lot of hidden issues tend to surface:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;recall not returning enough useful context
misconception labels being inconsistent
strategy selection not changing when it should
frontend views failing to reflect lifecycle events correctly
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;By the time demo prep started, the goal was not “every feature exists.” It was “the core story works end to end.”&lt;/p&gt;

&lt;p&gt;And the story was simple: the tutor remembers what happened, changes how it teaches, and updates its view of the student over time.&lt;br&gt;
What made this approach work&lt;/p&gt;

&lt;p&gt;Looking back, the four-day structure worked because it respected dependency order.&lt;/p&gt;

&lt;p&gt;We didn’t try to make the tutor adaptive before memory was reliable.&lt;br&gt;
We didn’t try to build dashboards before we had lifecycle data worth showing.&lt;br&gt;
We didn’t try to support a giant curriculum when a small concept graph was enough to prove the idea.&lt;/p&gt;

&lt;p&gt;Each day ended with a meaningful checkpoint:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Day 1: memory works and lifecycle operations are centralized
Day 2: the tutor can generate questions using memory + curriculum context
Day 3: student answers change future teaching behavior
Day 4: the learning process becomes visible and demo-ready
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;That progression kept the project grounded. Instead of trying to build everything at once, we kept asking a more useful question:&lt;/p&gt;

&lt;p&gt;What is the smallest next layer that makes the core idea more real?&lt;br&gt;
Lessons learned from building Continuum&lt;/p&gt;

&lt;p&gt;Building Continuum in a hackathon taught us a few things that go beyond this specific project.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Verify your critical dependency on Day 1&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If your entire product depends on memory, don’t “assume the memory layer is probably fine.” Test it immediately with a real workflow.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Centralize the part of the system you’ll need to explain&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Memory Lifecycle Service wasn’t just useful for code organization. It also made the product easier to reason about, easier to debug, and easier to explain to judges.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Small datasets are fine if they prove the concept well&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We didn’t need a giant educational corpus to demonstrate adaptive tutoring. A compact curriculum graph was enough because the real focus was on the memory lifecycle, not on content scale.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A good demo needs visible system behavior&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;“AI with memory” is not compelling if memory stays hidden in logs. The dashboard and timeline mattered because they turned architecture into something a human could understand at a glance.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The best hackathon architecture is the one that supports the story&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In the end, Continuum wasn’t trying to prove that we could build every tutoring feature imaginable. It was trying to prove one thing well:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;an AI tutor becomes far more interesting when it can remember the student, adapt its teaching, and stop treating learning as a series of disconnected sessions.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;That’s the story we optimized for, and that’s what shaped the build.&lt;br&gt;
Closing thoughts&lt;/p&gt;

&lt;p&gt;Continuum started as a simple frustration with the current generation of AI tutors: they are often smart, but they are rarely continuous.&lt;/p&gt;

&lt;p&gt;They can explain a concept. They can generate a quiz. They can answer follow-up questions. But most of them still forget who the student is the moment the session ends.&lt;/p&gt;

&lt;p&gt;We wanted to explore what happens when that changes.&lt;/p&gt;

&lt;p&gt;What happens when a tutor remembers the patterns behind a student’s mistakes?&lt;br&gt;
What happens when it adjusts its teaching strategy based on what has worked before?&lt;br&gt;
What happens when it knows not only what the student got wrong, but also when they’ve finally moved past that weakness?&lt;/p&gt;

&lt;p&gt;That’s the direction Continuum is built around.&lt;/p&gt;

&lt;p&gt;And while the hackathon version is only the first step, it already made one thing clear to us:&lt;/p&gt;

&lt;p&gt;the future of AI tutoring isn’t just better answers — it’s better memory.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Day 1: The Day I Stopped Treating Memory as an Afterthought</title>
      <dc:creator>Mayank Roy</dc:creator>
      <pubDate>Fri, 03 Jul 2026 09:41:26 +0000</pubDate>
      <link>https://dev.to/code__mancer/day-1-the-day-i-stopped-treating-memory-as-an-afterthought-4kmc</link>
      <guid>https://dev.to/code__mancer/day-1-the-day-i-stopped-treating-memory-as-an-afterthought-4kmc</guid>
      <description>&lt;p&gt;I almost made the same mistake every developer makes when building an AI app.&lt;/p&gt;

&lt;p&gt;I was ready to open my laptop, spin up a FastAPI server, connect an LLM, start streaming responses, and then  somewhere near the end, probably at 2am  bolt on some kind of memory system as an afterthought. A dictionary here. A database table there. Maybe a list of the last five messages shoved into the context window and called "memory." I have done this before. It always feels fine until it very obviously isn't.&lt;/p&gt;

&lt;p&gt;This time I caught myself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How We Got Here&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We are building a project called Continuum for the WeMakeDevs Hangover Part AI hackathon. The premise of the hackathon is almost offensively simple: your AI woke up in Vegas with no memory of last night. Build one that doesn't forget. The tool they want you to use is called Cognee, a hybrid graph-vector memory layer for AI agents, and the judging is literally weighted on how deeply you use it.&lt;/p&gt;

&lt;p&gt;So I sat down on Day 1 with one rule: don't touch the tutor logic, don't touch the LLM prompts, don't touch the frontend. Just get Cognee working and build the layer everything else will sit on top of.&lt;/p&gt;

&lt;p&gt;It sounds boring. It was the best decision I made all week.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Even Is Cognee&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'll be honest, my first reaction to Cognee was &lt;em&gt;skepticism&lt;/em&gt;. Another memory library? Isn't that just a vector store with extra steps?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No&lt;/strong&gt;. And the difference matters more than I expected.&lt;/p&gt;

&lt;p&gt;A vector store gives you semantic search. You embed some text, you store the embedding, you query against it later and get back chunks that are semantically similar to your query. That's useful, but it's flat. Every piece of information has the same relationship to every other piece: none.&lt;/p&gt;

&lt;p&gt;Cognee builds a knowledge graph on top of that. When you call &lt;strong&gt;remember()&lt;/strong&gt; with a piece of text, it doesn't just embed it. It runs an extraction pass that pulls out entities and relationships, and stores those as nodes and edges in a graph. So when you later call &lt;strong&gt;recall()&lt;/strong&gt;, it isn't just doing vector similarity search, it's doing graph traversal too. It can follow chains of relationships. It can answer multi-hop questions. It can connect information across different things you told it at different times.&lt;/p&gt;

&lt;p&gt;For a tutoring app, this is the difference between "the student got question 4 wrong" (a flat fact) and "the student has a sign error misconception on factoring, which is a prerequisite of completing the square, which is what they're stuck on now" (a chain of relationships). The second one is what actually helps you teach better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cognee exposes four operations, and the hackathon is explicitly built around them:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;remember()&lt;/strong&gt; ingests text, files, or URLs and structures them into the knowledge graph. &lt;strong&gt;recall()&lt;/strong&gt; queries that graph with a natural language question and returns relevant results using both semantic similarity and graph traversal. &lt;strong&gt;improve()&lt;/strong&gt; runs a post-ingestion enrichment pass that re-weights nodes and prunes stale or redundant data. &lt;strong&gt;forget()&lt;/strong&gt; surgically removes data from the graph without wiping everything else.&lt;/p&gt;

&lt;p&gt;Four operations. Total recall. That's their tagline and honestly it's accurate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The First Thing I Did Was Prove It Actually Works&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before writing a single line of application code, I wrote a throwaway test file. Not a unit test. Not a pytest fixture. Just a plain Python script called &lt;em&gt;test_cognee.py&lt;/em&gt; that did three things:&lt;/p&gt;

&lt;p&gt;Called &lt;strong&gt;remember()&lt;/strong&gt; with one sentence describing a fake student interaction. Called &lt;strong&gt;recall()&lt;/strong&gt; with a question about that interaction. Printed the result.&lt;/p&gt;

&lt;p&gt;Then I ran it.&lt;/p&gt;

&lt;p&gt;This took about forty minutes including the time I spent reading the Cognee docs to get the config right, specifically figuring out that it needs an LLM API key to do its graph extraction during &lt;strong&gt;remember()&lt;/strong&gt; . That was the one thing that tripped me up  I expected it to work like a pure vector store where you just need an embedding model, but the graph extraction step calls an LLM internally. Once I had that configured in my &lt;em&gt;.env&lt;/em&gt; file, it worked.&lt;/p&gt;

&lt;p&gt;And when &lt;strong&gt;recall()&lt;/strong&gt; returned a response that actually related to what I had just stored, something clicked. This wasn't a toy. The graph traversal was surfacing the right information from a single fact I had stored ten seconds ago. I could already see how this would behave across hundreds of stored interactions.&lt;/p&gt;

&lt;p&gt;I deleted the test file. I was unblocked.&lt;/p&gt;

&lt;p&gt;The reason I'm emphasising this step is that it's very tempting to skip it. You want to build things. Sitting and running a five-line test script feels like procrastination. But discovering that your entire memory layer doesn't work on day three, when everything else is already built on top of it, is genuinely catastrophic for a five-day hackathon. One hour of proof-of-life on day one is worth eight hours of debugging on day three.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why FastAPI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'm a backend developer. I've used Flask, Django, and FastAPI. For this project FastAPI was the obvious choice and I want to explain why beyond just "it's fast."&lt;/p&gt;

&lt;p&gt;The killer feature for this specific project is async support. Cognee's operations : &lt;strong&gt;remember()&lt;/strong&gt;, &lt;strong&gt;recall()&lt;/strong&gt;, &lt;strong&gt;improve()&lt;/strong&gt;, &lt;strong&gt;forget()&lt;/strong&gt;  are all async functions. They do IO: they call LLMs, they write to databases, they traverse graphs. If you build a synchronous server on top of async operations you either block everything or you start wrestling with event loops in ways that will make you cry at 11pm on day four.&lt;/p&gt;

&lt;p&gt;FastAPI is async-native. Every endpoint is an async function. You await your Cognee calls directly inside your route handlers with no ceremony. The mental model is clean and it stays clean.&lt;/p&gt;

&lt;p&gt;Beyond that: automatic OpenAPI docs that your frontend teammate can use to understand the API without you explaining every endpoint, type validation via Pydantic, and a startup lifespan hook where you can validate your environment config before the server starts accepting requests. That last one matters because catching a missing API key at startup with a clear error is infinitely better than catching it mid-request with a cryptic 500 during your demo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Memory Lifecycle Service: The Most Important Thing I Built All Day&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After proving Cognee works, I built one file that became the backbone of the entire backend: &lt;em&gt;memory.py&lt;/em&gt; .&lt;/p&gt;

&lt;p&gt;The concept is simple. Instead of calling &lt;strong&gt;cognee.remember()&lt;/strong&gt; directly from five different places in the codebase, every Cognee operation goes through this single module. Every other service imports from here and only from here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt; Three reasons.&lt;/p&gt;

&lt;p&gt;Debugging. When something breaks with memory  and something will break  there is exactly one place to look. Not scattered across the tutoring engine, the grading service, the strategy selector, and two routers. One file.&lt;/p&gt;

&lt;p&gt;The demo. Every call to &lt;strong&gt;remember()&lt;/strong&gt;, &lt;strong&gt;recall()&lt;/strong&gt;, &lt;strong&gt;improve()&lt;/strong&gt;, and &lt;strong&gt;forget()&lt;/strong&gt; gets logged to a JSON file with a timestamp, the student ID, the dataset, and a plain-English description of what triggered it. During the demo you can show judges a literal timestamped receipt of every memory operation the system performed. That's not just a nice UI detail, that's your answer to the "best use of Cognee" judging criterion made tangible.&lt;/p&gt;

&lt;p&gt;Discipline. Building this first sets a team norm. Nobody reaches around the service and calls Cognee directly, because the central module exists and is obviously the right place. It prevents the kind of architectural drift that happens in hackathons where everyone is moving fast and shortcuts accumulate.&lt;/p&gt;

&lt;p&gt;The module has five functions that map directly onto the four Cognee operations, plus a sixth utility that reads back the log. &lt;strong&gt;remember_interaction()&lt;/strong&gt; takes a structured description of a student's attempt and stores it. &lt;strong&gt;recall_student_context()&lt;/strong&gt; takes a student ID and a query string and returns relevant history. &lt;strong&gt;improve_student_memory()&lt;/strong&gt; triggers the enrichment pass on a student's dataset. &lt;strong&gt;forget_resolved_misconception()&lt;/strong&gt; prunes resolved misconceptions and re-runs improve to keep the graph clean. And &lt;strong&gt;get_lifecycle_log()&lt;/strong&gt; returns the event history, filterable by student ID.&lt;/p&gt;

&lt;p&gt;Writing these five functions took maybe two hours. Using them for the rest of the week saved us from an entire category of problems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the End of Day 1 Looked Like&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By the time I pushed to the repo at the end of the day, here's what existed:&lt;/p&gt;

&lt;p&gt;A virtual environment with four dependencies. A &lt;em&gt;.env.example&lt;/em&gt; file so teammates don't have to ask how to configure things. A &lt;em&gt;config.py&lt;/em&gt; that centralises every environment variable and validates them at startup. The &lt;em&gt;memory.py&lt;/em&gt; service with all four operations and logging. A &lt;em&gt;tests/test_memory_service.py&lt;/em&gt; that runs the full lifecycle — remember, recall, improve, forget — and verifies the log contains all four events. A FastAPI app in &lt;em&gt;main.py&lt;/em&gt; with a working health check endpoint. And a _README _ section explaining exactly how to get the server running.&lt;/p&gt;

&lt;p&gt;Nothing about the actual tutoring logic existed yet. No question generation. No grading. No strategy selection. And that was correct.&lt;/p&gt;

&lt;p&gt;The foundation was solid. Everything built on top of it over the next four days had a place to stand.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Thing I Keep Coming Back To&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There's a version of this project where I spent Day 1 writing prompt templates, arguing about whether to use GPT-4o or Claude, and building a chat endpoint that kind of works but has no real memory. I've seen that project. It's the one that, during the demo, has to answer "how does it remember the user?" with "well, we pass the last few messages as context."&lt;/p&gt;

&lt;p&gt;The answer I have instead is: it builds a per-student knowledge graph. It stores every interaction as a structured memory. It recalls relevant history using graph traversal, not just keyword matching. It improves its graph after every session. It forgets resolved misconceptions instead of letting stale wrong data pollute future teaching.&lt;/p&gt;

&lt;p&gt;That answer exists because of what we built on Day 1.&lt;/p&gt;

&lt;p&gt;Memory isn't a feature you add at the end. For an AI agent, memory is the architecture. Get that right first and everything else is just building rooms in a house that already has a solid foundation.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is Day 1 of our build log for &lt;strong&gt;Continuum&lt;/strong&gt;, built during the WeMakeDevs Hangover Part AI hackathon (June 29 – July 5, 2026).&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>🛠️ LinkedIn Post: Major Updates in DevConnect</title>
      <dc:creator>Mayank Roy</dc:creator>
      <pubDate>Fri, 18 Jul 2025 14:01:49 +0000</pubDate>
      <link>https://dev.to/code__mancer/linkedin-post-major-updates-in-devconnect-6ce</link>
      <guid>https://dev.to/code__mancer/linkedin-post-major-updates-in-devconnect-6ce</guid>
      <description>&lt;h2&gt;
  
  
  🔍 What’s New?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1️⃣ Enhanced Repo Cards&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;• 🚀 Refined layout in both Dashboard and MainFeed for a clean, polished look&lt;br&gt;
 • 📋 Added Copy Clone Link buttons for one-click access&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2️⃣ Richer Media Layout&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;• 🎨 Refined image/video grid styling—crisp, responsive, and visually appealing&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3️⃣ 🔐 Stronger Sign-up Protection&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;• 🔄 Password normalized before hashing&lt;br&gt;
 • ✅ Enforced full validation: length, character types &amp;amp; edge cases&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💡 Why It Matters&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better UX = happier users&lt;/li&gt;
&lt;li&gt;Enhanced security = peace of mind&lt;/li&gt;
&lt;li&gt;Faster workflows = dev momentum&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;📌 What’s Next&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lightbox/modal previews&lt;/li&gt;
&lt;li&gt;Inline error alerts&lt;/li&gt;
&lt;li&gt;Accessibility improvements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thrilled to see how these changes improve DevConnect—stay tuned for more upgrades! 🌟&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>learning</category>
    </item>
    <item>
      <title>I’m excited to share some 🔥 updates in DevConnect</title>
      <dc:creator>Mayank Roy</dc:creator>
      <pubDate>Thu, 17 Jul 2025 13:13:04 +0000</pubDate>
      <link>https://dev.to/code__mancer/im-excited-to-share-some-updates-in-devconnect-5h6o</link>
      <guid>https://dev.to/code__mancer/im-excited-to-share-some-updates-in-devconnect-5h6o</guid>
      <description>&lt;p&gt;&lt;strong&gt;✨ feat:&lt;/strong&gt; Added CommentBox &amp;amp; CommentList components to enable seamless user comments!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ feat:&lt;/strong&gt; Refactored MainFeed and LikeButton to include commenting and improve repo display.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔧 feat:&lt;/strong&gt; Cleaned up media upload logic, integrated comments and likes—everything now works together beautifully in the feed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it matters:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Users can now comment directly on posts and see updates instantly—better engagement!&lt;/li&gt;
&lt;li&gt;Cleaned component structure and Redux logic help maintainability and scalability.&lt;/li&gt;
&lt;li&gt;UI is more intuitive and interactive, blending likes, comments, and media seamlessly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💬 I’d love your feedback: How do you approach comments in social features? Any libraries or patterns you swear by?&lt;/p&gt;

</description>
      <category>react</category>
      <category>redux</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>🚀I’m excited to share the latest improvements in DevConnect!</title>
      <dc:creator>Mayank Roy</dc:creator>
      <pubDate>Wed, 16 Jul 2025 10:26:32 +0000</pubDate>
      <link>https://dev.to/code__mancer/im-excited-to-share-the-latest-improvements-in-devconnect-358d</link>
      <guid>https://dev.to/code__mancer/im-excited-to-share-the-latest-improvements-in-devconnect-358d</guid>
      <description>&lt;h2&gt;
  
  
  ✨ What’s new:
&lt;/h2&gt;

&lt;p&gt;Improved repo display in MainFeed — simplified logic, removed &lt;strong&gt;useFetchRepos&lt;/strong&gt; hook, and built cleaner component structure.&lt;br&gt;
CommentBox feature — users can now add comments directly on posts. The functionality is powered by a new &lt;strong&gt;createAsyncThunk&lt;/strong&gt; in the &lt;strong&gt;Redux slice&lt;/strong&gt; and handled cleanly via &lt;strong&gt;extraReducers&lt;/strong&gt;.&lt;br&gt;
UI clarity boost — enhanced layouts with refined styling, making media, likes, and comments easy to read and interact with.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️ The why behind the changes:
&lt;/h2&gt;

&lt;p&gt;Removed unnecessary abstraction (&lt;strong&gt;useFetchRepos&lt;/strong&gt;) to reduce complexity and improve render performance.&lt;br&gt;
Leveraged Redux Toolkit’s &lt;strong&gt;createAsyncThunk&lt;/strong&gt; for robust async handling—just like industry standards .&lt;br&gt;
Ensured a seamless user experience: comment submissions instantly update the feed via optimized state handling.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔍 What this means for users:
&lt;/h2&gt;

&lt;p&gt;Quick, responsive commenting experience.&lt;br&gt;
Streamlined UI with intuitive layout and feedback.&lt;br&gt;
Clearer codebase = faster iteration for future enhancements.&lt;/p&gt;

&lt;h2&gt;
  
  
  🙌 Next steps:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt; Add delete &amp;amp; edit options for comments&lt;/li&gt;
&lt;li&gt; Style feedback/loading states&lt;/li&gt;
&lt;li&gt; Optimize media previews&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Curious to hear your input—what’s your approach to handling real-time comments in web apps?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>redux</category>
      <category>react</category>
    </item>
    <item>
      <title>🚀 What’s New in DevConnect</title>
      <dc:creator>Mayank Roy</dc:creator>
      <pubDate>Mon, 14 Jul 2025 12:05:00 +0000</pubDate>
      <link>https://dev.to/code__mancer/whats-new-in-devconnect-4d0o</link>
      <guid>https://dev.to/code__mancer/whats-new-in-devconnect-4d0o</guid>
      <description>&lt;p&gt;&lt;strong&gt;📥 Media upload revamped –&lt;/strong&gt; improved file handling and refreshed UI for smoother post creation via the Dashboard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔁 Refactored backend logic –&lt;/strong&gt; streamlined both create &amp;amp; update flows, now using githubRepoName for clarity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧩 New hook added –&lt;/strong&gt; useFetchRepos neatly fetches GitHub repository data, keeping concerns separated and components clean.&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 Why It Matters
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;⚡️ Upload fast, post faster –&lt;/strong&gt; better performance and UX when adding images/videos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧹 Cleaner code&lt;/strong&gt; = &lt;strong&gt;fewer bugs&lt;/strong&gt;, easier maintenance, and less confusion around repo fields.&lt;/p&gt;

&lt;p&gt;✨ Modular patterns with hooks make fetching GitHub repos reusable and efficient.&lt;/p&gt;

&lt;h2&gt;
  
  
  👀 What’s Next?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Adding cross-check badges (stars/forks) next to GitHub links.&lt;/li&gt;
&lt;li&gt;Implementing error/loading feedback in the UI.&lt;/li&gt;
&lt;li&gt;Building out comments &amp;amp; notifications features.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  💬 I'd Love Your Feedback
&lt;/h2&gt;

&lt;p&gt;How do you handle media file uploads and GitHub data in your web apps? Any best practices or libraries you'd recommend?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>backend</category>
      <category>beginners</category>
    </item>
    <item>
      <title>🚀 DevConnect Progress</title>
      <dc:creator>Mayank Roy</dc:creator>
      <pubDate>Fri, 11 Jul 2025 14:15:05 +0000</pubDate>
      <link>https://dev.to/code__mancer/devconnect-progress-294d</link>
      <guid>https://dev.to/code__mancer/devconnect-progress-294d</guid>
      <description>&lt;p&gt;&lt;strong&gt;✅ Added Like toggling&lt;/strong&gt; — users can now like/unlike posts, stored in Redux&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔄 Refactored how Dashboard fetches posts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💡 Introduced new LikeButton component for consistent UI across app&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🤯 My biggest headache?
&lt;/h2&gt;

&lt;p&gt;Turns out the root cause was a damn route &lt;strong&gt;spelling mistake&lt;/strong&gt; (/post instead of /posts) — yeah, wasted &lt;strong&gt;HOURS&lt;/strong&gt; on that one. 😫 And if that wasn’t enough, the like state wasn’t updating instantly in the UI due to a mix‑up between React component state and Redux state. Figuring that out taught me so much about state flow and debugging in React + Redux .&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Why it matters
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Centralized state with Redux ensures like counts are always accurate and consistent.&lt;/li&gt;
&lt;li&gt;A reusable LikeButton simplifies future maintenance and styling.&lt;/li&gt;
&lt;li&gt;Cleaner fetch logic = fewer bugs and better performance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎯 What’s next?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Improve real-time UI updates (optimistic rendering when liking/unliking)&lt;/li&gt;
&lt;li&gt;Add feedback/loading indicators around like actions&lt;/li&gt;
&lt;li&gt;Build out comments feature next 🚧&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  💬 I'd love your insights:
&lt;/h2&gt;

&lt;p&gt;Ever spent hours debugging a typo route issue? How did you stop that cycle?&lt;br&gt;
How do you handle global vs component state for UI vs data?&lt;br&gt;
Your tips or stories would be amazing to hear!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>redux</category>
      <category>beginners</category>
    </item>
    <item>
      <title>🚀 New endpoint: Fetch user profile data reliably on demand</title>
      <dc:creator>Mayank Roy</dc:creator>
      <pubDate>Thu, 10 Jul 2025 04:26:47 +0000</pubDate>
      <link>https://dev.to/code__mancer/new-endpoint-fetch-user-profile-data-reliably-on-demand-50nh</link>
      <guid>https://dev.to/code__mancer/new-endpoint-fetch-user-profile-data-reliably-on-demand-50nh</guid>
      <description>&lt;p&gt;🛡️ Global error handler: Centralized Express middleware to catch and format API errors consistently&lt;/p&gt;

&lt;p&gt;📦 Clean imports: Refactored Axios imports to streamline HTTP calls across components&lt;/p&gt;

&lt;h2&gt;
  
  
  🐛 My debugging nightmare
&lt;/h2&gt;

&lt;p&gt;I spent hours chasing down an elusive error—requests were sporadically failing, but the message didn’t point to any file or component. Tracking it felt like chasing ghosts through async routes. Debugging this taught me the difference between scattered try/catch and a centralized error .&lt;br&gt;
That moment was brutal…but so rewarding when I finally found and fixed the root cause. Seriously, nothing sharpens your skills quite like those moments.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Why this matters
&lt;/h2&gt;

&lt;p&gt;🧩 Cleaner code – one place for all error handling makes services easier to maintain&lt;/p&gt;

&lt;p&gt;📈 Better UX – users see consistent error messages, not ugly stack traces&lt;/p&gt;

&lt;p&gt;⚡ Developer sanity – less time lost debugging and more time building&lt;/p&gt;

&lt;p&gt;💭 What’s next?&lt;/p&gt;

&lt;p&gt;Improving frontend UX around loading/error states&lt;br&gt;
More API endpoints: updating profiles, fetching followers, etc.&lt;br&gt;
Deepening test coverage for error paths&lt;/p&gt;

&lt;p&gt;🎙️ I’d love your input&lt;br&gt;
Any tips for debugging Express errors faster?&lt;br&gt;
How do you handle Axios imports and error handling in large React apps?&lt;br&gt;
Always grateful for insights from the community 🙏 &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>devbugsmash</category>
      <category>react</category>
    </item>
    <item>
      <title>🚀 DevConnect Progress Update!</title>
      <dc:creator>Mayank Roy</dc:creator>
      <pubDate>Wed, 09 Jul 2025 07:12:46 +0000</pubDate>
      <link>https://dev.to/code__mancer/devconnect-progress-update-3k58</link>
      <guid>https://dev.to/code__mancer/devconnect-progress-update-3k58</guid>
      <description>&lt;h2&gt;
  
  
  Just pushed two major improvements:
&lt;/h2&gt;

&lt;p&gt;🔀 Enhanced routing &amp;amp; UI components — improved how posts are created, edited, and displayed.&lt;/p&gt;

&lt;p&gt;🗂️ Dashboard tabs added — now users can easily switch between Posts, Media, and GitHub repos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fun fact:
&lt;/h2&gt;

&lt;p&gt;while building the profile post feed, I accidentally overwrote the Main feed—so everything showed up in the wrong place! 😅 Good catch during testing, and now it’s fixed.&lt;/p&gt;

&lt;p&gt;Also, I admit: I didn’t document these changes from the start, but I’m committing to better documentation going forward 📚✅.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Why it matters:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Cleaner navigation and UI make DevConnect more intuitive.&lt;/li&gt;
&lt;li&gt;Tabs give focused access to different content types.&lt;/li&gt;
&lt;li&gt;And hey—errors like these remind me testing matters more than perfection.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  💭 Over to you:
&lt;/h2&gt;

&lt;p&gt;Have feedback on the new tab setup?&lt;br&gt;
What's your go-to pattern for documenting UI changes?&lt;br&gt;
Let me know—I’m all ears!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>🚧 Pre-Launch DevConnect Update:</title>
      <dc:creator>Mayank Roy</dc:creator>
      <pubDate>Tue, 08 Jul 2025 08:36:51 +0000</pubDate>
      <link>https://dev.to/code__mancer/pre-launch-devconnect-update-4p43</link>
      <guid>https://dev.to/code__mancer/pre-launch-devconnect-update-4p43</guid>
      <description>&lt;p&gt;Still no live demo yet… but hit a major milestone today: DevConnect can now fetch GitHub repos and support image/video uploads—despite a hell of a learning curve!&lt;/p&gt;

&lt;p&gt;🧑‍💻 What’s Working (So Far):&lt;/p&gt;

&lt;p&gt;✅ GitHub Integration: DevConnect now fetches public repos from GitHub—it feels amazing to see real code showing up in the profile!&lt;/p&gt;

&lt;p&gt;✅ Media Uploads: Image and video uploads work (thanks, Cloudinary), even though I accidentally uploaded test videos 30 times before fixing my file-path logic.&lt;/p&gt;

&lt;p&gt;⚠️ Challenges Along the Way:&lt;/p&gt;

&lt;p&gt;🐞 That ONE async bug: a missing await caused duplicate uploads—my Cloudinary account saw a surge in nonsense. Debugging that definitely earned me ☕.&lt;/p&gt;

&lt;p&gt;🧩 State management chaos: toggling between Context &amp;amp; Redux Toolkit had me rethinking my approach—but it's in a solid place now.&lt;/p&gt;

&lt;p&gt;🧭 UI polish: making responsive post cards look nice on mobile took way more effort than I expected.&lt;/p&gt;

&lt;p&gt;🎯 Why Keep Building&lt;br&gt;
I'm working on DevConnect pre-launch to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blend social + code sharing—so devs don’t have to juggle GitHub and Twitter separately.&lt;/li&gt;
&lt;li&gt;Create an early beta community, whose feedback will help shape features like comments on repos and like buttons.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; While there’s no live button yet, every bug fix and user test brings it closer. I’m also researching how to tease development publicly—informed by advice to build excitement early on 🧠.&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 Can You Help?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What feature matters most to you? Issues tracker? Project boards? Commenting on repos?&lt;/li&gt;
&lt;li&gt;Want to swing by the early demo? DM me—I’d appreciate any feedback.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;DevConnect is still in progress:&lt;/strong&gt; no &lt;em&gt;&lt;strong&gt;live demo&lt;/strong&gt;&lt;/em&gt; yet.&lt;br&gt;
But it's already pulling real GitHub repos + uploading media.&lt;br&gt;
Lots of cleanup &amp;amp; polish still ahead—just sharing wins and lessons early 👊.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Day 8: Exploring Functions in C++ - The Building Blocks of Reusability</title>
      <dc:creator>Mayank Roy</dc:creator>
      <pubDate>Sun, 19 Jan 2025 08:41:49 +0000</pubDate>
      <link>https://dev.to/code__mancer/day-8-exploring-functions-in-c-the-building-blocks-of-reusability-3oib</link>
      <guid>https://dev.to/code__mancer/day-8-exploring-functions-in-c-the-building-blocks-of-reusability-3oib</guid>
      <description>&lt;p&gt;&lt;strong&gt;1. Functions in C++ (Syntax, Return Type, etc.)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A function is a block of code designed to perform a specific task.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Functions in C++ follow this basic syntax:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  returnType functionName(parameters) {
    // function body
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Return Type:&lt;/strong&gt; Specifies the data type of the value returned by the function. Use &lt;code&gt;void&lt;/code&gt; if no value is returned.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Function Name:&lt;/strong&gt; Describes what the function does.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt; Input values for the function (optional).&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;

// Function to check tea temperature
int checkTeaTemperature(int temperature) {
    return temperature;
}

int main() {
    int temp = checkTeaTemperature(85);  // Function call
    cout &amp;lt;&amp;lt; "The tea temperature is " &amp;lt;&amp;lt; temp &amp;lt;&amp;lt; "°C" &amp;lt;&amp;lt; endl;
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Declaring a Function&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Function declaration tells the compiler about the function’s name, return type, and parameters. It’s also called a &lt;strong&gt;function prototype&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The function body is defined elsewhere.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;

// Declaring the function (prototype)
void serveChai(int cups);

int main() {
    serveChai(3);  // Function call
    return 0;
}

// Function definition is done later
void serveChai(int cups) {
    cout &amp;lt;&amp;lt; "Serving " &amp;lt;&amp;lt; cups &amp;lt;&amp;lt; " cups of chai!" &amp;lt;&amp;lt; endl;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Defining a Function&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A function definition includes the full function with the body.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You must define the function after declaring it if it’s not inline.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;

// Function definition with body
void makeChai() {
    cout &amp;lt;&amp;lt; "Boiling water, adding tea leaves, and serving chai!" &amp;lt;&amp;lt; endl;
}

int main() {
    makeChai();  // Calling the function
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;4. Calling a Function&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;To execute a function, you call it by its name followed by parentheses.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If the function takes arguments, pass them inside the parentheses.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;

// Function to brew tea
void brewChai() {
    cout &amp;lt;&amp;lt; "Chai is being brewed!" &amp;lt;&amp;lt; endl;
}

int main() {
    brewChai();  // Function call
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5. Function Parameters (Formal, Actual, Default Parameters)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Formal parameters:&lt;/strong&gt; Defined in the function signature.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Actual parameters:&lt;/strong&gt; Values passed during the function call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Default parameters:&lt;/strong&gt; Parameters with default values if none are passed.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;

// Function with default parameter
void serveChai(string teaType = "Masala Chai") {
    cout &amp;lt;&amp;lt; "Serving " &amp;lt;&amp;lt; teaType &amp;lt;&amp;lt; endl;
}

int main() {
    serveChai();               // Uses default parameter
    serveChai("Green Chai");    // Uses actual parameter
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;6. Pass by Value&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pass by value&lt;/strong&gt; means the function receives a copy of the argument. Changes made inside the function do not affect the original variable.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;

void pourChai(int cups) {
    cups = cups + 1;  // Modifies local copy
    cout &amp;lt;&amp;lt; "Poured " &amp;lt;&amp;lt; cups &amp;lt;&amp;lt; " cups of chai!" &amp;lt;&amp;lt; endl;
}

int main() {
    int chaiCups = 2;
    pourChai(chaiCups);  // Passing by value
    cout &amp;lt;&amp;lt; "Total chai cups outside function: " &amp;lt;&amp;lt; chaiCups &amp;lt;&amp;lt; endl;
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;7. Pass by Reference&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pass by reference&lt;/strong&gt; passes the actual variable, so changes in the function affect the original variable.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;

void refillChai(int &amp;amp;cups) {  // Pass by reference
    cups += 2;
    cout &amp;lt;&amp;lt; "Refilled to " &amp;lt;&amp;lt; cups &amp;lt;&amp;lt; " cups of chai!" &amp;lt;&amp;lt; endl;
}

int main() {
    int chaiCups = 3;
    refillChai(chaiCups);  // Passing by reference
    cout &amp;lt;&amp;lt; "Total chai cups now: " &amp;lt;&amp;lt; chaiCups &amp;lt;&amp;lt; endl;
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;8. Scope of Variables&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Variables declared inside a function have &lt;strong&gt;local scope&lt;/strong&gt; (accessible only within the function).&lt;/li&gt;
&lt;li&gt;Variables declared outside all functions have &lt;strong&gt;global scope&lt;/strong&gt; (accessible from any function).
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;

int globalChaiStock = 100;  // Global variable

void serveChai() {
    int localCups = 5;  // Local variable
    cout &amp;lt;&amp;lt; "Serving " &amp;lt;&amp;lt; localCups &amp;lt;&amp;lt; " cups from " &amp;lt;&amp;lt; globalChaiStock &amp;lt;&amp;lt; " total stock." &amp;lt;&amp;lt; endl;
}

int main() {
    serveChai();
    cout &amp;lt;&amp;lt; "Global chai stock after serving: " &amp;lt;&amp;lt; globalChaiStock &amp;lt;&amp;lt; endl;
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;9. Function Overloading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Function overloading allows multiple functions with the same name but different parameter types or numbers.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;

// Function overloading
void brewChai(int cups) {
    cout &amp;lt;&amp;lt; "Brewing " &amp;lt;&amp;lt; cups &amp;lt;&amp;lt; " cups of chai." &amp;lt;&amp;lt; endl;
}

void brewChai(string teaType) {
    cout &amp;lt;&amp;lt; "Brewing " &amp;lt;&amp;lt; teaType &amp;lt;&amp;lt; "." &amp;lt;&amp;lt; endl;
}

int main() {
    brewChai(3);             // Calls int version
    brewChai("Masala Chai");  // Calls string version
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;10. Lambda Functions&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A  &lt;strong&gt;lambda function&lt;/strong&gt; is an anonymous function that can be defined inline using the&lt;code&gt;[]&lt;/code&gt; syntax.&lt;/li&gt;
&lt;li&gt;They’re useful for short, simple functions.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

using namespace std;



int main(){

   //lambda
   [](int cups){
        cout &amp;lt;&amp;lt; "Preparing " &amp;lt;&amp;lt; cups &amp;lt;&amp;lt; " cups of tea" &amp;lt;&amp;lt; endl;
   }(5);

    return 0;

}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Summary:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Function Declaration &amp;amp; Definition:&lt;/strong&gt; Tell the compiler about a function and define what it does.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Calling Functions:&lt;/strong&gt; Execute the function by passing arguments if required.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pass by Value/Reference:&lt;/strong&gt; Controls whether changes affect the original value or a copy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Function Overloading:&lt;/strong&gt; Allows multiple functions with the same name but different parameter lists.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lambda Functions:&lt;/strong&gt; Short, inline functions used for simple tasks.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>cpp</category>
    </item>
  </channel>
</rss>
