A private, offline-first relationship memory for the people you already know.
Watch the teaser · Read the demo · Project story · Privacy · Security
Context helps you remember where you met someone, what you last discussed, what matters to them, and how to continue the relationship naturally. Every lookup begins with a person the user chose to save. Events can organize people, but they are never required.
Context is not internet identity search and it is not a sales CRM. It is a memory aid designed to help people show up better for relationships they already have.
The idea came from watching my mom meet people. After a conversation, she often opens the Notes app and records the person's name, where they met, and details she wants to remember.
It is a thoughtful habit, but the notes quickly become cluttered. Names are formatted inconsistently, details are spread across different entries, and useful context gets buried among grocery lists and reminders. When she meets someone again, the information may be on her phone, but it is hard to find at the moment she needs it.
Context gives those memories a dedicated home. It keeps the speed of writing a note while organizing every detail around the person it belongs to.
I built Context on my own, with GPT-5.6 through Codex as an AI engineering collaborator. I set the product direction, chose the privacy boundaries, made the final design decisions, and reviewed every change. GPT-5.6 helped me move from the original idea to a tested, cross-platform product by assisting with:
- Exploring product flows and turning the Notes app problem into a focused relationship-memory experience
- Designing the TypeScript monorepo, shared data contracts, native iOS boundaries, and offline-first architecture
- Drafting and refactoring React Native, Swift, Objective-C, AppKit, test, and automation code
- Reasoning through contact permissions, local storage, review-before-save flows, backups, and privacy safeguards
- Generating edge-case tests and investigating timezone, native build, and Linux CI failures
- Polishing the README, project story, release documentation, and GitHub presentation
I treated GPT-5.6 output as a starting point rather than an automatic decision. I inspected the code, tested the complete user flow, built the native targets, and used GitHub Actions to verify the final result on Linux and macOS.
GPT-5.6 was part of the development process, not a runtime dependency. The released mobile app does not send relationship data to GPT-5.6 or require an OpenAI account or API key.
| Private onboarding | Relationship home | Event assistant |
![]() |
![]() |
![]() |
| Person profile | Memory timeline | Privacy controls |
![]() |
![]() |
![]() |
- Keep one private People directory with relationship context, contact fields, social links, profile photos, and confirmed memories.
- Add anyone directly or organize people into work, school, community, travel, and event lists.
- Search an everyday relationship refresher or open an event briefing ordered by who may need context.
- Review a chronological memory timeline and conversation prompts for each person.
- Add a person or memory manually.
- Dictate a person description or memory while the visible Dictate control is active.
- Import selected iPhone Contacts through a review-first flow.
- Import validated CSV or people-list PDF files with duplicate protection.
- Turn rough notes into editable smart drafts before saving anything.
- Share selected public contact fields as a vCard through an offline QR code.
- Use the iOS share sheet, including AirDrop when iOS offers it.
- Scan and review a received contact card before adding or merging it.
- Keep memories, relationship notes, events, photos, and internal identifiers out of shared cards.
- Protect the app with optional Face ID or device authentication.
- Export and restore a validated JSON backup.
- Delete one memory, remove one person and related data, or erase the complete workspace.
- Review public Update Watch suggestions before they become memories.
The iOS and Android app has no hosted backend, paid API, API key, subscription, or usage meter.
- Contacts, events, preferences, and confirmed memories remain in the platform app sandbox.
- iPhone Contacts import copies only fields the user reviews. It never copies Contacts notes, birthdays, postal addresses, or photos, and it never changes the system address book.
- The camera opens only for deliberate QR scanning. Frames are not captured, stored, or uploaded.
- The microphone runs only during visible dictation. Audio is never saved or uploaded by Context.
- Face ID protects access to the app. Context receives only the operating system's success or failure result, never biometric data.
- Update Watch checks only a public HTTPS source the user confirms. Results remain in a review queue.
- Biometric identity matching is disabled. The released experience uses manual search and deliberate contact-card QR scanning.
See PRIVACY.md for the complete data-handling model and SECURITY.md for security boundaries.
On iOS, Context can optionally use Google's Gemma 4 E2B IT model through LiteRT-LM 0.14.0 for:
- Person field filling from one dictated description
- People-list PDF extraction
- Smart memory drafts
- Conversation prompts
Inference stays inside the app process. Every generated or extracted record is editable and requires review before it is saved. If the model is disabled, unavailable, or unable to complete a supported task, deterministic TypeScript assistance keeps the core workflow usable.
The model is an optional 2.59 GB download. Context verifies it with a pinned SHA-256 hash and keeps the model artifact separate from relationship backups.
The optional PC web companion can use qwen3:4b through a loopback-only Ollama runtime. This enhancement is not required by the native app and is never contacted by an iPhone.
| Area | Implementation |
|---|---|
| Mobile and web | Expo 57, React Native 0.86, Expo Router, React 19 |
| Language and state | Strict TypeScript, Zustand, Zod |
| Native iOS | Swift, Objective-C bridges, LiteRT-LM, PDFKit, Speech, LocalAuthentication |
| Local AI | Gemma 4 E2B IT on iPhone, optional Qwen3 through local Ollama on PC |
| Sharing and import | vCard, QR, Contacts, CSV, PDF, JSON backup |
| Desktop | AppKit and WebKit wrapper for the production web bundle |
| Quality | Vitest, Node test runner, TypeScript, Expo Doctor, GitHub Actions |
| Development workflow | GPT-5.6 through Codex for assisted design, implementation, testing, debugging, and documentation |
apps/
mobile/ Expo app for iOS, Android, and web
desktop-macos/ Native macOS wrapper for the production web build
packages/
shared/ Contracts, matching, parsing, backup, and assistance logic
docs/ Architecture, deployment, and release documentation
submission/ Demo, pitch, screenshots, and hackathon materials
tools/ Local model and Update Watch services and tests
- Node.js 22.23.1, also recorded in
.nvmrc - npm 10 or newer
- macOS with Xcode 26.4 or newer for iOS development
- An iOS 16.4 or newer simulator or device
nvm use
npm ci
npm run verify
cd apps/mobile
npx expo-doctor
npx expo install --checknpm run dev:mobileFrom the Expo terminal, choose iOS, Android, or web. For the native iOS project:
cd apps/mobile
npm run ios:nativeQR scanning and dictation permissions require a physical device for final testing. See docs/DEPLOYMENT.md for simulator, signed-device, EAS, TestFlight, and App Store instructions.
npm ci
ollama pull qwen3:4b
npm run dev:watcherIn a second terminal:
npm --workspace @context/mobile run webThe service listens only on 127.0.0.1:8789 and contacts Ollama only on 127.0.0.1:11434. It does not write AI prompts or model output to the watcher data file.
An optional Windows task can perform monthly catch-up checks for user-confirmed public sources:
npm run install:update-taskUpdate Watch does not bypass authentication, CAPTCHAs, robots policies, or platform restrictions. RSS and Atom feeds, personal sites, public blogs, company newsrooms, GitHub feeds, and permitted public pages work best.
npm ci
npm run verify
cd apps/mobile
npx expo-doctor
npx expo install --check
npm run export:ios -- --clear
npm run export:web -- --clear
CI=1 npx expo prebuild --platform ios --clean --no-installGitHub Actions repeats the clean install, type checks, full test suite, Expo diagnostics, production exports, clean iOS prebuild, privacy-manifest validation, and permission-string assertions on Linux and macOS.
- Privacy policy
- Security policy
- Third-party notices
- Deployment guide
- iOS release checklist
- Biometric research gates
- Project story and Built with tags
- Two-minute demo
- Submission checklist
Context is a memory prosthetic for relationships. The goal is not to know more people. It is to show up better for the people you already know.





