-
-
Ellie’s local story contains one permitted memory, its caption, and its selection reason. The demo family and photograph are fictional.
-
Walt’s approved fictional family story shows Ruth’s garden memory. The demo photograph is AI-generated.
-
Reopening the archive returns to a locked frame until the keeper confirms a visitor and permission.
Inspiration
Family photographs often sit in an archive long after the stories around them have become hard to find. A garden picture might matter because of who planted it, who visited, and what happened that summer. We imagined a living-room frame that helps an invited visitor rediscover those connections while the family decides which photographs that person may see. FAMILIAR MEMORIES puts the family's captions at the center of that encounter.
What it does
The experience begins with a ring and a locked frame. A keeper confirms who is visiting and that this person wants to see memories. The frame selects photographs approved for that visitor and arranges a story around relationships, places, milestones, and chronology. Each photograph keeps its caption, known date, and a reason for appearing. The visitor can follow a thread, choose a chapter, pause for conversation, and request browser narration. If the keeper suppresses a photograph, withdraws sharing, or closes the visit, the local story responds immediately. In the fictional demo, Walt has four approved photographs and Ellie has one.
How we built it
We built the browser experience around a JavaScript engine for visits, permissions, and story selection. The keeper adds original files and records the people, relationships, places, milestones, and date precision actually known. Permission filtering happens before the curator ranks photographs, and the same gate applies through threads and chapters. IndexedDB stores the local archive, which opens locked on return. A portable archive carries original files and metadata. Browser speech synthesis can read caption-based text and stops earlier narration when the story changes. A local MCP server and simulated Alexa+ frame use the core consent rules, though that frame currently keeps its own session and archive state.
Challenges we ran into
The central challenge was making a permission change take effect throughout an active story. A photograph can appear in a chapter, thread, placard, and spoken text, so withdrawing it must update each place. File reads and local saves can finish later than the action that started them, requiring careful ordering. We preserved partial dates and gave people stable IDs so relatives with the same name remain distinct. The archive must reopen intact while the visit starts locked. The separate browser and MCP stores need integration before one continuous cross-client visit can be offered.
Accomplishments
FAMILIAR MEMORIES lets a keeper bring in original photographs, describe their context, approve individual audiences, and open a visit for a confirmed person. The visitor receives an explainable selection with source captions and can explore threads and chapters. The keeper can narrow a story, end the visit, save the archive locally, or transfer it in a package that opens locked. The demo family shows how one collection produces different stories for Walt and Ellie according to the sharing choices recorded for each.
What we learned
We learned that a personal story begins with permission and source context. The curator chooses among approved photographs and explains each choice using the family's recorded facts. Preserving an uncertain date respects that source, just as leaving an unknown visitor at the locked frame respects the family's choice. Narration must follow current permission even when browser callbacks arrive late. Evaluation with consenting families will tell us more about comfort and usefulness than a synthetic curation exercise can.
What's next
Next we want to connect the keeper archive and MCP frame to shared, persistent permission and visit state. A larger, deliberately sourced collection will help us study repeat visits. With consenting families, we plan to learn how people understand selection reasons, experience narration, and use the frame on a connected display. Manual confirmation will remain available when visitor identity is uncertain.
Built With
- blob-api
- css
- file-api
- html
- indexeddb
- javascript
- model-context-protocol
- node.js
- streamable-http
- web-speech-api

Log in or sign up for Devpost to join the conversation.