MEMORIA — Devpost submission

Tagline: They talk on the phone. Their experience finds the people who need it.

Inspiration

MEMORIA began with the stories our grandparents told us. As we entered our professional lives, we realized those stories weren't just memories: they were lessons, perspective and advice.

Older adults have spent decades building deep expertise in their fields, yet they're mostly absent from the places where people now ask for advice. Meanwhile, early-career professionals ask real questions online every day and get answers from strangers with no track record. Proudly inspired by our Mexican identity, where age means wisdom, we built MEMORIA so that no one's knowledge is left behind, and so an older person can reach readers without learning a single app.

What it does

MEMORIA is an AI phone host that turns the working life of an older professional into social media posts on their own accounts, through ordinary phone calls. No app, no screen, no passwords to remember.

  • Sign-up (once, with a family member if they like): name, language, a host (Daniel, Oscar or Victoria in English, Diana in Spanish), a weekly call time, and their own Bluesky, Threads or X account. The first call starts right away.
  • The first call gets to know them: their field, what they specialised in, how their career went.
  • Weekly calls each start from one good question. Often it's a real question someone asked online that their experience can answer, found beforehand on Reddit, Stack Exchange or Bluesky. They can also call the MEMORIA number themselves at any time, and the host picks up where they left off.
  • After each call, the story is written up in their own words, fact-checked against the call, and posted as a thread on their account, with a note that it was written with AI. In demo mode the post is live about 15–30 seconds after they hang up.
  • Readers steer the next call. Likes and replies are picked up within about a minute. On the next call the host opens with "A reader asked…", asks the reader's question, and that answer becomes the next post.
  • They stay in control. "Please take my last post down" on any call removes it everywhere after the call. Family can remove any post, and can sign in from any device with the phone number and a 6-digit family code.

How we built it

  • Voice (Cartesia Managed Agents): four hosts, each a Cartesia agent with its own voice and persona, in English and Spanish. Outbound calls on a schedule, plus an inbound line where a webhook tool looks the caller up by number and loads their plan, memories and reader feedback before the host says their name.
  • Backend (Convex): one TypeScript backend for everything: the database, a vector index for long-term memory, the hourly/daily/30-second crons, the scheduler that chains the post-call pipeline, HTTP actions for the Cartesia tool and the OAuth callbacks, and internal functions for every job. It deploys from GitHub on every merge.
  • AI (OpenAI): memory extraction with embeddings, a question planner, the post writer (three drafts, a judge, a rewrite round), the fact-check against the transcript, and a feedback summariser that turns reader replies into questions and one warm opening line.
  • Question discovery (Apify + Bluesky): Apify actors search Reddit, Quora and Stack Exchange for real questions in their field; Bluesky's search API adds more. Each question is scored and queued; the best one starts the next call. Apify also fills in their background from a public profile.
  • Publishing: Bluesky (AT Protocol: thread records with root/parent refs), Threads (Meta Graph API, container → publish → reply chaining) and X (OAuth 2.0 with PKCE, v2 posts). Reddit is built and waits on API approval. Every platform row is claimed before posting so nothing posts twice; a half-posted thread resumes.
  • Website: React + Vite + Tailwind on Vercel, designed large and calm for older eyes; English and Spanish.
  • Safety and privacy: per-person credentials encrypted with AES-GCM; a sign-up token and family code so a phone number alone opens nothing; posts that fail the fact-check are held, never posted; strangers' replies are treated as data, never instructions, and anything with links, phone numbers or money asks is filtered out before the host reads it aloud. 681 unit tests run on every push.

Challenges we ran into

  • Accessibility means no screen. Everything the person does happens by voice, so the state lives in the backend: the plan for each call, what they already told us, what readers said, and what they asked us to take down.
  • Trust. A post goes out under their name. We write only from what they said, judge each draft, and fact-check the final text against the transcript; a doubtful post is held for a person to review.
  • Platforms moved under us. LinkedIn automation would have violated its terms, X stopped allowing automated replies in February 2026, and Reddit now gates its API, so we pivoted to posting on the person's own Bluesky, Threads and X, and never reply to or tag strangers on X.
  • Undo without false positives. "Take down the post on the fence" is a story, not a request. We made the host's own fixed line the trigger and tested detection on ~120 real-sounding transcripts in both languages.
  • Speed for a live demo. From a 3–6 minute post-call pipeline to under 30 seconds: 3-second hang-up detection, memories and writing in parallel, one tight draft plus the fact-check.
  • A new team under pressure. We split into voice, data, brain and integrations, agreed contracts up front, and reviewed every branch before merging.

Accomplishments that we're proud of

  • A full loop that runs with no terminal and no screen for the elder: sign-up → call → post on their own account → a reader replies → the host brings it up on the next call → a new post.
  • Four bilingual hosts and an inbound line that recognises the caller and continues the conversation.
  • Multi-platform publishing with claims, fact-checks, disclosures and a working undo.
  • Per-person encrypted accounts and a sign-in that needs no passwords.

What we learned

Designing for older adults made the product better for everyone: fewer screens, one clear next step, and respect for the person's words. We also learned that trust is a feature: the fact-check, the disclosure line and the undo are what make a family comfortable letting the system post under a grandparent's name.

What's next for MEMORIA

Pilot in Mexico with local communities and senior organisations; phone verification by SMS; Reddit once its API approval lands and Threads keyword search after Meta app review, so the host can answer strangers' questions directly; a family dashboard; and partnerships with schools and professional associations to connect students with mentors who have lived the work.

Built with

Cartesia Managed Agents · Convex · OpenAI · Apify · AT Protocol (Bluesky) · Threads API · X API · React · Vite · Tailwind · Vercel · GitHub Actions · TypeScript


How we used each sponsor track

Cal Hacks: Best People-First Social Impact Hack

MEMORIA gives older professionals a way to keep contributing, on their own terms, using the one device they already trust: a phone. No app to learn, no typing, no passwords; a family member can help with sign-up in a few minutes, and from then on the person just answers a call. Their knowledge reaches younger people asking real questions online, and the readers' replies come back to them as recognition and new questions, which is what keeps people talking. We built it bilingual (English and Spanish) from day one, with large-text design and a family code so relatives can help without taking over. The safeguards (posts only from their words, fact-checks, disclosures, undo by voice) are there because the people this serves have reputations to protect.

Cartesia: Best Use of Cartesia

Cartesia is the voice of MEMORIA. We run four Managed Agents (Daniel, Oscar, Victoria in English; Diana in Spanish), each with its own voice and persona, driven by one shared prompt filled through dynamic variables per call (the goal, the person's memories, the reader feedback, today's question). Calls go both ways: scheduled outbound calls through the calls API, and an inbound line where a webhook tool receives system__caller_id, looks the caller up in our backend, verifies the live call, and returns their name, plan and context so the host greets them by name and continues. The agents end calls politely, handle voicemail, and carry a fixed take-down line that our pipeline recognises in the transcript to remove a post. Prompts, agents and the tool are synced from code.

Convex: Best use of Convex

Convex is the entire backend, in one TypeScript codebase: 20+ tables with a vector index for the person's long-term memory; crons (hourly call scheduling, a 30-second reader-reply check for fresh posts, 5-minute and daily sweeps, a weekly question search); the scheduler chaining the post-call pipeline (memories → write → fact-check → publish → reply → plan) with per-step isolation and idempotent claims; HTTP actions for the Cartesia lookup tool and the Threads/X OAuth callbacks; "use node"-free actions calling OpenAI, Bluesky, Threads, X and Apify; and internal-only functions with just two public modules, token-checked. The schema evolved additively through ~15 merges with no migration downtime, and npx convex deploy runs from GitHub Actions on every push after 681 tests.

Apify: Best Use of Apify

Apify is how MEMORIA finds the question that starts each call. Before a call, actors search Reddit (trudax/reddit-scraper), Quora (blackfalcondata/quora-scraper) and Stack Exchange for recent questions matching the person's industry and specialty; we de-duplicate by title fingerprint, score by recency, votes and answer count, and queue the best into their question bank, where a reader's fresh question or an open thread from a previous call can outrank them. Apify also pre-fills a person's professional background from a public profile (harvestapi/linkedin-profile-scraper) so the first call already knows their field, and powered our original LinkedIn engagement scrape (now behind a switch). The result: the elder's story answers a question a real person asked this week.

Meta: Bringing People Closer Together with AI

The whole product is a bridge between generations: an AI host that listens to a grandparent and brings their experience to the people who ask for it, then carries those people's questions back. On Meta's side, MEMORIA connects the person's own Threads account through Meta's OAuth consent (no password typed with us), publishes each story as a Threads thread via the Threads API (container → publish → reply chaining), reads likes and reader replies back through the insights and replies endpoints, and deletes on request. Reader replies are the fuel for the next conversation. We also built, behind a switch, keyword-search answers (quote-posting a stranger's question with their answer) for when Meta's app review grants threads_keyword_search.

Built With

Share this project:

Updates

Submission history