{"slug": "between-us", "title": "Between US!!!!!!", "summary": "A developer built Between Us, a private, evidence-first memory reconstruction system that helps small friend groups infer shared \"Moments\" from fragmented photos, notes, chats, and recordings. The full-stack Next.js and TypeScript app runs a self-hosted AI pipeline using Gemma 4 E2B via Ollama, MongoDB Atlas, Tiger Data for retrieval, and Backboard for group semantic context, surfacing candidate moments with evidence and uncertainty for human review. A live demo and GitHub repository were published alongside the project.", "body_md": "Between Us is a private, evidence-first memory reconstruction system for small friend groups. It is designed for the problem that most social memory tools ignore: people share the same experience, but each person captures only fragments of it, and those fragments are scattered across photos, notes, chats, voice recordings, screenshots, and timestamps.\n\nInstead of building a public media feed or generic AI recap engine, Between Us focuses on reconstructing likely shared Moments from multiple contributors. The app treats memory as a structured inference problem:\n\nEach user uploads fragments\n\nThe system extracts observations from them\n\nRelated fragments are retrieved based on time, semantics, and context\n\nA model evaluates whether those fragments likely belong to a common real-world moment\n\nThe system surfaces a candidate Moment with evidence and uncertainty\n\nUsers can review, correct, and confirm it\n\nThis is not “an AI album.” It is a memory system that helps groups answer:\n\n“Did this happen?”\n\n“What happened?”\n\n“What evidence supports that?”\n\n“What are we still uncertain about?”\n\nIt is built for:\n\nclassmates\n\ncoworkers with recurring events\n\nroommates\n\ntravel groups\n\nclose friends and tight social circles\n\nThe user problem is simple but painful: shared memories get fragmented, forgotten, or remembered inconsistently. People remember the same event differently, and key details disappear because they weren’t captured in the same way by everyone. Traditional social platforms are optimized for public sharing, not reconstructing private group memory with provenance and human correction.\n\nBetween Us solves that by turning fragmented evidence into structured memory candidates while preserving uncertainty and group boundaries.\n\nLive demo: [https://betweenus-w1h5.onrender.com/](https://betweenus-w1h5.onrender.com/)\n\nGitHub repo: [https://github.com/srikar-naidu/BetweenUS](https://github.com/srikar-naidu/BetweenUS)\n\nI built Between Us as a full-stack Next.js + TypeScript application centered around a self-hosted AI memory pipeline.\n\nThe core architecture is:\n\nFrontend + API layer: Next.js App Router\n\nAuthentication: Better Auth + Google OAuth\n\nCanonical structured state: MongoDB Atlas\n\nMemory retrieval: Tiger Data\n\nBackground job processing: MongoDB-backed worker pipeline\n\nAI reasoning: Gemma 4 E2B via Ollama locally, and a private Render-hosted runtime in production\n\nObservability: Sentry\n\nGroup semantic context: Backboard\n\nOptional voice evidence: ElevenLabs\n\nThe project is designed as a coherent memory system rather than a generic chatbot or dataset dump.\n\nThe app follows a structured event pipeline:\n\nFragment\n\n→ Observation extraction\n\n→ Retrieval of related evidence\n\n→ Candidate moment construction\n\n→ Evidence-backed reasoning\n\n→ Moment / Story proposal\n\n→ Human review + correction\n\nThis flow is intentionally different from a generic “AI summary” product. The model is not asked to invent a story out of thin air. It is given constrained context from relevant, authorized fragments and asked to reason about a possible shared event.\n\nGemma is used as the multimodal reasoning layer for:\n\nimage understanding\n\nscreenshot and caption interpretation\n\nvideo-derived frame analysis\n\ntext fragment summarization\n\nentity extraction\n\ntemporal and event-level inference\n\nevidence-backed moment reconstruction\n\nGemma does not generate a “final memory” as an ungrounded narrative. The app treats it as a reasoning component operating over retrieved evidence, with validation and provenance layering around it.\n\nBetween Us is not a simple vector-search app. It uses Tiger Data to retrieve context based on:\n\ntemporal proximity\n\nsemantic similarity\n\nshared people\n\nshared places\n\nrepeated entities\n\nevent adjacency\n\nexisting memory relationships\n\nThis is important because the app needs to answer questions like:\n\n“What happened around this moment?”\n\n“Which other fragments are likely related?”\n\n“Are these two observations likely from the same event?”\n\n“Do we have enough evidence to reconstruct a shared moment?”\n\nInstead of sending full raw storage to the model, the system assembles a compact evidence packet made from the most relevant fragments. That reduces noise and keeps the reasoning process closer to the actual memory problem.\n\nThe product is built around a memory graph:\n\nUser\n\nGroup\n\nObservation\n\nEvidence\n\nMoment\n\nStory\n\nPerson / Place / Entity\n\nCorrection / rejection / approval\n\nProvenance metadata\n\nThe active objects are:\n\nA single piece of evidence uploaded by a user, such as:\n\nphoto\n\nscreenshot\n\ntext note\n\nshort video\n\nvoice note\n\ntimestamped caption\n\ngeotagged location\n\nmetadata-rich upload\n\nA structured understanding of a fragment:\n\nentities\n\npeople\n\nobjects\n\nplaces\n\ntimestamps\n\ntext content\n\nconfidence\n\nuncertainty\n\nsource provenance\n\nA possible real-world event reconstructed from several related fragments.\n\nA higher-order grouping of repeated or related moments over time.\n\nThis is very different from a standard “gallery app”—the primary unit is not a photo, but a memory candidate.\n\nBetween Us is explicitly privacy-first. The application is designed to avoid the pattern of “publicly exposing everything because the AI thinks it’s related.”\n\nImportant principles:\n\ngroup boundaries are enforced\n\nmedia stays private by default\n\nAI inference must be evidence-backed\n\nunsupported conclusions fail closed\n\nuncertainty stays visible\n\ncorrections become part of the memory system\n\nonly authorized evidence can inform a reconstructed Moment\n\nThis is critical because memory reconstruction is not just an inference task—it is a trust and consent problem.\n\nThe system is built around this flow:\n\nPlain text\n\n```\nUser uploads fragment\n        ↓\nValidate upload + permissions\n        ↓\nStore canonical fragment metadata\n        ↓\nQueue for analysis\n        ↓\nExtract structured observation\n        ↓\nRetrieve relevant nearby/related fragments\n        ↓\nAssemble constrained context packet\n        ↓\nGemma reasons over evidence\n        ↓\nCandidate Moment generated\n        ↓\nEvidence + uncertainty displayed\n        ↓\nHuman review / correction / confirmation\n        ↓\nConfirmed memory enters shared state\n```\n\nThe model is prompted with only relevant authorized fragments, not the entire database. This is important because the goal is not to generate generic stories from broad memory context; it is to reason over bounded evidence.\n\nThe system also enforces:\n\nsource attribution\n\nconfidence limits\n\nextraction validation\n\noutput schema constraints\n\nrejection of unsupported or speculative claims\n\nA memory system without correction is dangerous. Between Us treats corrections as first-class memory input.\n\nExamples:\n\nreject a candidate Moment\n\nmerge two related fragments into a better explanation\n\ncorrect the inferred time or location\n\nreclassify evidence as weak or irrelevant\n\nconfirm a candidate as a real group memory\n\nThis makes the system better over time and keeps the product aligned with how actual human memory works: imperfect, revisionary, uncertain, and social.\n\nDiagram\n\nAnd in plain text:\n\n```\nUser Fragment\n   ↓\nAuth + permissions\n   ↓\nMongoDB storage\n   ↓\nWorker queue\n   ↓\nGemma observation extraction\n   ↓\nTiger Data retrieval\n   ↓\nEvidence packet assembly\n   ↓\nGemma reasoning\n   ↓\nCandidate Moment / Story\n   ↓\nUser review & correction\n   ↓\nConfirmed group memory\n```\n\nOpen innovation matters because this project is fundamentally about privacy, accountability, and experimentation—not just model output quality.\n\nWhat it made possible:\n\nself-hosted Gemma inference instead of vendor lock-in\n\nlocal prototyping without depending on a closed external model API\n\nprivate deployment patterns aligned with sensitive memory data\n\ntransparent evidence-based reasoning rather than black-box summarization\n\narchitecture flexibility to swap retrieval, storage, or inference providers without rewriting the whole product\n\nbuilding a system where uncertainty is not hidden behind “confident” model output\n\nA closed API would not fit as well because Between Us is not just a “prompt and response” app. It requires:\n\npermission-aware memory reconstruction\n\nprivacy-safe group boundaries\n\nprovenance-aware evidence joining\n\ncorrection loops\n\nconstrained reasoning on small evidence packets\n\ntraceable model behavior during debugging and evaluation\n\nOpen-weight models and open tooling allowed this to be built as a real system rather than a brittle demo wrapper around a hosted chatbot.\n\nI’m entering the following partner categories:\n\nUse: Core multimodal AI and memory reconstruction.\n\nGemma 4 analyzes user-submitted media and evidence and extracts structured observations such as:\n\nactivities\n\nlocations\n\ntext\n\ntemporal clues\n\nIt then reasons across multiple fragments to reconstruct Moments and connect them into Stories.\n\nThis is the product’s core intelligence layer.\n\nUse: AI-assisted development.\n\nGitHub Copilot was used throughout the project to help with:\n\nsystem design\n\nimplementation planning\n\nrepetitive engineering tasks\n\ntests\n\ndata model scaffolding\n\nAPI design\n\ndebugging large implementation surfaces\n\nIt accelerated development without being the runtime product itself.\n\nUse: AI observability and debugging.\n\nSentry helps monitor:\n\ninference failures\n\nretrieval failures\n\nlatency\n\npipeline errors\n\nabnormal behavior in moment reconstruction\n\nThis is especially important because memory systems are sensitive to subtle failure modes such as poor retrieval or weak evidence.\n\nUse: Deployment + runtime infrastructure.\n\nRender hosts the deployed application and background processing needed to support the asynchronous memory pipeline.\n\nThe architecture intentionally supports running the model in a private runtime environment rather than depending on developer-only local machines.\n\nUse: Temporal and semantic memory retrieval.\n\nTiger Data helps find relevant fragments by combining:\n\nshared entities\n\nshared locations\n\nevent relationships\n\nThis is essential for memory reconstruction because the key question is not “what is similar in general?” but “what is relevant to this event and this group?”\n\nUse: Canonical structured memory graph and app state.\n\nMongoDB Atlas stores:\n\nusers and groups\n\nfragments\n\nobservations\n\nmoments\n\nstories\n\nevidence\n\nprovenance\n\ncorrections\n\ngroup memory state\n\nThis is the canonical system of record for all the structured memory objects.\n\nUse: Persistent semantic group context.\n\nBackboard stores:\n\nnicknames\n\naliases\n\ninside jokes\n\nrecurring references\n\ngroup-specific meanings\n\nThis helps the system understand the group’s shared language, which is essential because memory is shaped by social context.\n\nUse: Voice evidence and narrated memories.\n\nElevenLabs supports:\n\nspeech-to-text for voice evidence\n\noptional narration of grounded moments\n\nThis makes the memory system more complete by allowing voice notes to contribute to the evidence graph and optionally converting grounded memories into a narrated experience.\n\nBetween Us is designed to do one thing very well:\n\nTurn fragmented evidence from a group into a credible shared memory candidate while keeping uncertainty visible and preserving privacy.\n\nIt is not a generic AI social app.\n\nIt is not a memory dump.\n\nIt is not a public feed.\n\nIt is a system that says:\n\nhere is what may have happened\n\nhere is the evidence\n\nhere is what remains uncertain\n\nhere is what the group can review and correct\n\nThat is the real product value.", "url": "https://wpnews.pro/news/between-us", "canonical_source": "https://dev.to/srikar_naidu/between-us-2ang", "published_at": "2026-10-05 06:01:30+00:00", "updated_at": "2026-10-05 06:12:57.205712+00:00", "lang": "en", "topics": ["artificial-intelligence", "ai-agents", "ai-tools", "large-language-models", "developer-tools"], "entities": ["Between Us", "Next.js", "TypeScript", "MongoDB Atlas", "Tiger Data", "Gemma 4 E2B", "Ollama", "Backboard"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/between-us", "markdown": "https://wpnews.pro/news/between-us.md", "text": "https://wpnews.pro/news/between-us.txt", "jsonld": "https://wpnews.pro/news/between-us.jsonld"}}