A personal operating system for thoughts, memory, and action. Dump messy thoughts into one inbox — JarvisOS organizes them into tasks, reminders, events, ideas, reflections, follow-ups, and searchable memory.
Stanford CS 153 Final Project · June 2026
Modern productivity tools force you to decide where something belongs before you capture it. A thought might be a Reminder, a Calendar event, a task in your task manager, a note in Notion, or a follow-up in a CRM. This decision overhead creates friction — so many useful thoughts, obligations, and ideas are simply lost.
JarvisOS reverses this. You capture first. The system organizes afterward.
JarvisOS is a universal capture layer that:
- Captures any unstructured thought via text or voice
- Understands the intent using a deterministic local parser
- Organizes items into structured categories
- Routes them to the right section (Tasks, Reminders, Calendar, Ideas, etc.)
- Lets you Review — approve, act on, archive, or delete
- Lets you Retrieve — search your full memory later
Capture → Understand → Organize → Review → Retrieve
Input: "Remind me to email Rao next Friday, and I had an idea that Skyline should focus more on AI diligence for operational businesses"
Output (2 structured items):
| Type | Title | Date | People | Project |
|---|---|---|---|---|
| Reminder | Email Rao next Friday morning | next Friday | Rao | — |
| Idea | Skyline should focus on AI diligence | — | — | Skyline |
# Clone the repo
git clone <repo-url>
cd jarvisos
# Install dependencies (no external API keys needed)
npm install
# Start the dev server
npm run devOpen http://localhost:5173 in your browser. That's it. No backend. No API keys. No accounts.
jarvisos/
├── index.html
├── package.json
├── vite.config.ts
├── src/
│ ├── main.tsx Entry point
│ ├── App.tsx Root layout + view router
│ ├── index.css Global styles (dark theme, design tokens)
│ ├── types/
│ │ └── index.ts MemoryItem, ItemType, ItemStatus, Urgency
│ ├── lib/
│ │ ├── parser.ts Deterministic parser (regex + keyword heuristics)
│ │ ├── storage.ts localStorage CRUD helpers
│ │ └── sampleData.ts Pre-built demo items (10 items, all 7 types)
│ ├── components/
│ │ ├── Sidebar.tsx Navigation sidebar
│ │ └── ItemCard.tsx Card component for MemoryItems
│ └── pages/
│ ├── Capture.tsx Hero capture screen
│ ├── FilteredView.tsx Reusable filtered list (Inbox, Tasks, etc.)
│ ├── AllMemory.tsx Full memory with search + stats
│ ├── DailyBriefing.tsx Deterministic daily summary
│ └── Evaluation.tsx Built-in evaluation suite
The parser (src/lib/parser.ts) is purely local with no external calls:
- Split — Breaks multi-intent input on
"; ","and also","idea:", mid-sentence"remind me", mid-sentence"follow up" - Classify — Scores each segment against 7 keyword sets (contact_followup > reminder > calendar_event > reflection > idea > task > note)
- Extract — Pulls date/time, people (capitalized nouns after trigger words), project names, and urgency signals
- Generate — Creates title, summary, and suggested next action from templates
interface MemoryItem {
id: string;
type: 'task' | 'reminder' | 'calendar_event' | 'idea' | 'reflection' | 'contact_followup' | 'note';
title: string;
summary: string;
original_text: string;
date_or_time: string | null;
people: string[];
project: string | null;
urgency: 'low' | 'medium' | 'high';
confidence: number; // 0–1
status: 'inbox' | 'approved' | 'done' | 'archived';
suggested_next_action: string;
created_at: string; // ISO timestamp
}All items persist in localStorage under the key jarvisos_items.
| Feature | Description |
|---|---|
| Capture screen | Large input + voice input (Web Speech API) + example chips |
| Multi-intent parsing | Splits compound inputs into multiple structured items |
| 7 item types | task, reminder, calendar_event, idea, reflection, contact_followup, note |
| Field extraction | Dates, people, projects, urgency, confidence scores |
| Inbox | All new items pending review |
| Category views | Dedicated pages for each item type |
| Card actions | Approve, Mark Done, Archive, Delete, Reopen |
| All Memory | Full search across all fields + stats dashboard |
| Daily Briefing | Deterministic daily summary from stored items |
| Evaluation page | 10 built-in test cases with pass/fail + score |
| Sample data | Load 10 realistic demo items instantly |
| localStorage | All data persists locally, zero backend |
- Explain the problem — productivity fragmentation
- Open Capture — show the clean input screen
- Type a multi-intent input — e.g.,
"Remind me to email Rao next Friday; and I had an idea that Skyline should focus on AI diligence" - Click Process — watch it split into 2+ structured items
- Show routing — navigate to Reminders, Ideas to see items there
- Approve an item — click Approve on a card
- Search memory — go to All Memory, type "Rao"
- Show Daily Briefing — summary of open tasks + follow-ups + ideas
- Show Evaluation — 10 test cases, live score, limitations section
- Discuss — limitations and what LLM-powered v2 would look like
The app includes a built-in evaluation suite at /evaluation. It runs 10 handpicked test cases covering all 7 item types and edge cases:
| # | Input | Expected | Notes |
|---|---|---|---|
| 1 | "Remind me to email Rao next Friday morning" | reminder | Explicit trigger + date |
| 2 | "I need to finish my CS 153 video tonight" | task | "need to" + urgency |
| 3 | "Meeting with Mike about Skyline on June 11 at 2pm" | calendar_event | Calendar keyword + date |
| 4 | "Idea: Skyline should focus on AI diligence…" | idea | "Idea:" prefix |
| 5 | "I felt distracted today but realized I need better systems" | reflection | "felt" + "realized" |
| 6 | "Follow up with Ann after her Europe trip in July" | contact_followup | "follow up with" |
| 7 | "Take notes on the project rubric" | task | "take notes" keyword |
| 8 | "Dinner with family tomorrow at 7" | calendar_event | Calendar + date boost |
| 9 | "What if this became a personal CRM for weak ties?" | idea | "what if" |
| 10 | "Remember that I parked in the garage on level 3" | note | No action → fallback |
- No true NLP — keyword/regex matching; unusual phrasing can fail
- Date parsing is lexical — dates stay as strings (no normalization to ISO timestamps)
- People extraction — only finds capitalized proper nouns after trigger words
- Plain "and" doesn't split — requires "and also", semicolons, or typed "idea:"
- No calendar/reminder execution — local only, no real notifications
- No mobile PWA — optimized for desktop browser
- LLM-powered parsing via OpenRouter / Claude API for better accuracy
- Google Calendar integration — write approved events directly
- Real notifications — browser Notification API for reminders
- Vector memory search — semantic search via embedding model
- Mobile app — PWA or React Native
- Proactive daily planning — AI-generated briefing with suggestions
- Team / shared memory — collaborative capture for small teams
This project was built with AI assistance, disclosed fully:
- ChatGPT (GPT-4) was used for: initial project scoping, product framing, architecture planning, README structure, and debugging strategy brainstorming.
- Claude Code (claude-sonnet-4-6) was used to: generate and iterate on the implementation, including the parser, components, pages, and CSS.
- Final decisions, testing, product design, and submission review were performed by the student.
- No external proprietary codebase was copied.
- No external APIs or LLMs are required to run the project. The parser is fully deterministic and local.
This disclosure is provided in the spirit of CS 153's integrity policy and to demonstrate honest AI-assisted development.
| Category | Points | How JarvisOS satisfies it |
|---|---|---|
| Problem & Insight | 3 | Universal capture addresses real cognitive friction; reverses the "organize first" problem; combines capture + parsing + routing + review + memory |
| Execution & Technical Work | 5 | Working local web app; clean capture UI; voice input; deterministic multi-type parser; localStorage persistence; 11 pages/views; search + stats; daily briefing; evaluation; demo data |
| Evaluation & Evidence | 3 | Built-in evaluation page with 10 test cases, live pass/fail, overall score, and honest limitations section |
| Communication & Presentation | 2 | Clear README; demo flow; plain-English architecture; runnable with 2 commands |
| Process, Integrity & Disclosure | 2 | Full AI usage disclosure; student-reviewed and tested; honest about what is and isn't working |
| Total | 15 |
JarvisOS — Stanford CS 153 · June 2026