A voice-first reminder app for iPhone that lets users create reminders fast, attach notes or lists, share them with another person, and receive acknowledgment when the other person accepts.
voice_first/
├── backend/ # Python FastAPI backend
│ ├── app/
│ │ ├── models/ # SQLAlchemy data models
│ │ ├── schemas/ # Pydantic request/response schemas
│ │ ├── routers/ # API route handlers
│ │ ├── services/ # Business logic (NLP, notifications, state machine)
│ │ └── main.py # FastAPI application entry point
│ ├── alembic/ # Database migrations
│ ├── Dockerfile
│ └── docker-compose.yml
├── ios/
│ └── VoiceReminders/ # SwiftUI iOS app
│ └── Sources/
│ ├── App/ # App entry point
│ ├── Models/ # Data models
│ ├── Networking/ # API client and services
│ ├── Services/ # Auth, voice input, notifications, local NLP
│ ├── ViewModels/ # ObservableObject view models
│ ├── Views/ # SwiftUI views (Capture, Today, Shared, etc.)
│ ├── Intents/ # Siri App Intents
│ └── Theme/ # Colors, typography, spacing
└── docs/ # Documentation
- Instant Capture: Create reminders in under 5 seconds via text, voice, or Siri
- Attached Context: Notes, checklists, grocery lists, photos, contact cards, voice memos
- Shared Accountability: Send reminders to others with accept/decline/snooze acknowledgment loop
- Voice-First: In-app voice capture + Siri App Intents integration
- Templates: 5 built-in templates + custom template creation
| Layer | Technology |
|---|---|
| iOS Client | SwiftUI (iOS 17+) |
| Voice Integration | Speech framework + App Intents (Siri) |
| Backend | Python FastAPI + SQLAlchemy (async) |
| Database | PostgreSQL |
| Push Notifications | APNs |
| File Storage | S3-compatible |
cd backend
cp .env.example .env
docker-compose up -dThe API will be available at http://localhost:8000. API docs at http://localhost:8000/docs.
Open ios/VoiceReminders/ in Xcode. Update the API base URL in APIClient.swift and run on simulator or device.
Core entities: User, Reminder, Attachment, ChecklistItem, Recipient, AcknowledgmentEvent, ContactCard, Template, Note, NotificationRule.
Every reminder supports multiple attachments and multiple recipients from day one. The acknowledgment state machine tracks: draft → scheduled → sent → viewed → accepted/declined/snoozed → completed/expired.
| State | Description |
|---|---|
| Draft | Created but not yet scheduled |
| Scheduled | Has future trigger time, queued |
| Sent | Delivered to recipient via push |
| Viewed | Recipient opened in app |
| Accepted | Recipient explicitly accepted |
| Snoozed | Recipient deferred to later |
| Completed | Marked as done |
| Expired | Passed trigger time without action |
- Take to Work - Checklist of items to carry
- Grocery Run - Grocery list with common categories
- School Pickup - Contact card + pickup instructions
- Appointment Prep - Note + checklist of items to bring
- Daily Carry Checklist - Reusable checklist (keys, wallet, badge)