Tend Workshop

Owner mode has private notes + guest queue. Guest mode is submit-only.

tend
Onboarding
1 / 26

Welcome

Onboarding

tend
Your friends miss you.
You're not a bad friend. You're a busy human.
💬
See who might want to hear from you
🧠
Get a thoughtful conversation starter
🔒
Remember birthdays and important dates
Continue
🛡 Private by default. Your messages never leave your Mac.

Welcome

Brand intro with tagline, value props, and privacy badge. Continue CTA leads to auth.

OnboardingFeature.swift → WelcomeStep
Sign in to set up sync
Optional but recommended for backup, billing, and settings.
Sign in with Apple
🌐 Sign in with Google
Use Email Magic Link

Sign In

Apple Sign-In, Google OAuth, or magic link. Supabase Auth with ASWebAuthenticationSession.

OnboardingFeature.swift → AuthStep → SupabaseClient
🛡
Connect Messages
Tend reads your iMessage history on this Mac to spot who you may be losing touch with.
1 Open System Settings → Privacy & Security
2 Select Full Disk Access
3 Toggle on Tend
Open System Settings
I've granted access

Connect Messages (Full Disk Access)

Reads ~/Library/Messages/chat.db. Data never leaves the Mac.

OnboardingFeature.swift → PermissionsStep
👥
Bring in your contacts
Import contacts so Tend can match names to conversations and make suggestions feel personal.
Grant Access
Skip for Now
🛡 Contact names are matched locally. Nothing is uploaded.

Contacts Permission

Request Contacts.framework access to match names to iMessage handles. Skip available.

OnboardingFeature.swift → ContactsPermissionStep
tend
You're All Set!
Tend will analyze your messaging patterns and help you stay connected.
3 contacts imported
Get Started

Onboarding Complete

Confirmation screen. Tap "Get Started" to enter the main app.

OnboardingFeature.swift → CompleteStep
tend
📊 Overview
👥 Contacts
💡 Insights
⚙️ Settings
B
Blake
Friendship Report
Your relationship health at a glance
Feb 28, 2026
74
Network Health
Recency 82
Balance 70
Frequency 65
Depth 78
Tier Distribution
Thriving 8 Healthy 9 Cooling 6 At Risk 5 Cold 2
30 contacts tracked
AI Insight On-Device
"You've been really consistent with your close circle this month — Katie, James, and Sarah are all thriving. Mike and Lauren could use some love though — it's been a while since you reached out."
❤️
Daily Tend
🎂
Birthdays
🔔
Follow-ups
📊
Full Report
Needs Attention
MR
Mike Rodriguez Last message 2 months ago
28
LC
Lauren Chen Last message 4 months ago
12
Recent Activity
Katie H. replied to your message 2h ago
James K. — you sent a conversation starter 5h ago
Sarah M. started a new conversation Yesterday
Amanda P. — follow-up reminder due Yesterday

Friendship Report

Network health gauge (4-component: Recency, Balance, Frequency, Depth), tier distribution bar, AI narrative insight, quick-action shortcuts, Needs Attention cards, Recent Activity feed.

Health scores computed from real chat.db data. AI narrative generated via MLX → Cloud cascade. Quick actions navigate to Daily Tend, Birthdays, Follow-ups.
FriendshipReportFeature.swift → HealthScoringClient + UnifiedAIClient
tend
📊 Overview
👥 Contacts
💡 Insights
⚙️ Settings
B
Blake
Who needs you today?
Small gestures, big impact
🔥 7
"You two used to talk every week — it's been a while since you caught up."
MR
Mike 2 months ago
💬 Message
"Lauren's birthday is coming up — a quick message would mean a lot."
LC
Lauren 4 months ago
💬 Message
"You mentioned wanting to check in about their new job."
AP
Amanda 3 weeks ago
💬 Message

Daily Tend

Three prioritized contacts to reach out to today. AI-generated reasons from real message analysis. Refreshes daily.

Reason-first card layout. Reasons generated via MLX → Cloud cascade using PromptBuilder templates. Streak tracking with quick iMessage access.
DailyTendFeature.swift → UnifiedAIClient.generateDailyReasons
tend
📊 Overview
👥 Contacts
💡 Insights
⚙️ Settings
B
Blake
Follow-ups
+ New
Mike Rodriguez
📅 Feb 15 · Check in about the hiking trip
🗑
🔔
Sarah Mitchell
📅 Mar 5 · Catch up over coffee
🗑
🔔
James Kim
📅 Mar 12 · Ask about the concert
🗑
🔔
Emily Nguyen
📅 Mar 20 · Birthday dinner plans
🗑

Follow-ups

Scheduled reminders with Supabase persistence. Past due / upcoming sections. Set from Contact Detail action bar. macOS notification permissions requested before first schedule.

FollowUpFeature.swift → Supabase follow_ups table + NotificationClient
tend
📊 Overview
👥 Contacts
💡 Insights
⚙️ Settings
B
Blake
Contacts
+ Import
All (30)
Thriving (8)
Healthy (9)
Cooling (6)
At Risk (5)
Cold (2)
KH
Katie Holmstrom Home Base · Active today
100
Thriving
JK
James Kim Close Friend · 3 days ago
88
Thriving
SM
Sarah Mitchell Close Friend · 1 week ago
72
Healthy
EN
Emily Nguyen Friend · 2 weeks ago
65
Healthy
AP
Amanda Park Friend · 3 weeks ago
45
Cooling
MR
Mike Rodriguez Old Friend · 2 months ago
28
At Risk
LC
Lauren Chen Acquaintance · 4 months ago
12
Cold
Showing 7 of 30 contacts · Scores update daily from chat.db

Contacts List

Search bar, tier filter pills, 4-component health scores from real chat.db. Contacts enriched with names from macOS Contacts.framework.

Scores: Recency (40), Balance (20), Frequency (20), Depth (20). Tiers: Thriving, Healthy, Cooling, At Risk, Cold. FDA guard before database access.
ContactsListFeature.swift → MessageDatabaseClient + HealthScoringClient
tend
📊 Overview
👥 Contacts
💡 Insights
⚙️ Settings
B
Blake
‹ Contacts
JK
James Kim
Close Friend · College · Bay Area
88
Thriving
💬 Message
📝 Edit
🌙 Snooze
🔔 Follow-up
🎁 Gift
2,847
Total Messages
1,456 / 1,391
Sent / Received
1,247
Days Connected
Best Time
Evenings
6pm – 10pm
Who Starts
51% You
Peak Day
Friday
142 messages avg
AI Insights On-Device
• You two have a very balanced back-and-forth — rare and healthy
• Conversation peaks around shared interests (music, food, hiking)
• Response time has gotten faster over the last month — you're syncing up
💬 Conversation Starter
"Hey James! Did you end up checking out that ramen place on 4th? I've been craving it."
📋 Copy
💬 Send
↻ New
Recent Messages
You: Dude that concert was insane
James: The encore was like 40 minutes lol
You: We should go to one together
James: 100%. There's a show next month downtown
View full history →

Contact Detail

Avatar with health ring, stat cards (Messages, Sent/Recv, Days), pattern cards (Best Time, Who Starts, Peak Day), per-contact AI insights, conversation starter, message history, action bar.

Pattern cards from real iMessage analytics via analyzePatterns. Per-contact insights section. AI starter generated on demand via MLX → Cloud cascade.
ContactDetailFeature.swift → MessageDatabaseClient.analyzePatterns + UnifiedAIClient
tend
📊 Overview
👥 Contacts
💡 Insights
⚙️ Settings
B
Blake
KH
Katie Holmstrom
Home Base · 9,213 messages
100
Thriving
Overview
Mirror
Weather
Memory Bank
Conversation Balance
You
Them
Balanced
Weekly Pattern
MTuWThFSaSu
Response Times
You reply in 12m
They reply in 8m
Relationship Health
Active Today
You're present in this relationship.
Insights
Best time: Evenings
Balanced conversation starts
Similar double text patterns
Recent Activity
Last 7 days42 messages
Last 30 days186 messages
Last 90 days512 messages

Contact Insights (Full Analytics)

4-tab view: Overview, Mirror, Weather, Memory Bank. Conversation balance, weekly patterns, response behavior, relationship trajectory, activity history.

On-Device/Cloud badge shows AI processing mode. Memory Bank populated by UnifiedAIClient.extractMemories from real chat.db messages.
InsightsFeature.swift → MessageDatabaseClient + UnifiedAIClient
tend
📊 Overview
👥 Contacts
💡 Insights
⚙️ Settings
B
Blake
Edit Contact
Cancel
Save
JK
📷
Name
Relationship
Close Friend ▾
Contact Info
How we met
Birthday
Location
Where they work
Met on
Tags
College ×
Bay Area ×
✨ Music lover ×
✨ Hiking ×
Notes
Add notes about this person...

Contact Edit

Full contact editor with AI-suggested tags (✨ sparkle prefix). All fields synced to Supabase.

ContactEditFeature.swift → extractSuggestedTags from message content
🌙
Snooze James
Hide from daily suggestions for a while
1 DayTomorrow
3 DaysMar 3
1 Week
Mar 7
2 WeeksMar 14
1 MonthMar 28
Cancel
Snooze

Snooze Sheet

Pause tracking temporarily. Snoozed contacts show moon badge.

SnoozeFeature.swift
tend
📊 Overview
👥 Contacts
💡 Insights
⚙️ Settings
B
Blake
Import Contacts
Cancel
⚠️ Nurture plan: 50 contacts max
30/50
Select AllDeselect All
SM
Sarah Mitchell
+1 (555) 123-4567
Matched
JK
James Kim
+1 (555) 234-5678
Matched
AP
Amanda Park
+1 (555) 345-6789
Matched
MR
Mike Rodriguez
+1 (555) 456-7890
New
LC
Lauren Chen
+1 (555) 567-8901
New
Import 3 Selected Contacts

Contact Import

Full contact import from the Contacts list FAB (+). Device contacts matched to iMessage handles. Plan limit enforcement with slot summary.

ContactImportFeature.swift → ContactsClient + MessageDatabaseClient
tend
📊 Overview
👥 Contacts
💡 Insights
⚙️ Settings
B
Blake
‹ Back to James Kim
💬 Conversation Starter
AI-generated from your chat history On-Device
"Hey James! Did you end up checking out that new ramen place on 4th? I've been meaning to try it — we should go this week if you're free."
📋 Copy
💬 Send via iMessage
↻ Generate another
1 conversation starter used

Conversation Starter

AI-generated from real iMessage history via PromptBuilder. On-Device badge when processed locally. Quality gate decides cloud fallback.

UnifiedAIClient.generateConversationStarter → MLX → ResponseValidator → Cloud cascade
tend
📊 Overview
👥 Contacts
💡 Insights
⚙️ Settings
B
Blake
🎁 Gift Ideas for James
Occasion
Birthday ▾
Budget
Context
Ramen Making Kit
$35 – $50
Food & Drink 🔖
"He mentioned wanting to try making ramen at home after your conversation about the new place on 4th."
Amazon
Etsy
Concert Tickets — Local Venue
$40 – $60
Experiences 🔖
"You two bonded over concerts — the encore conversation was a highlight."
StubHub
Ticketmaster
Trail Running Shoes
$45 – $55
Outdoors 🔖
"Tagged as a hiking enthusiast — gear he'll actually use."
REI
Amazon

Gift Suggestions

AI gift ideas informed by Memory Bank extractions, MessagePatterns (closeness level), birthday awareness, and gift history deduplication. Per-category retailer mapping.

GiftSuggestionFeature.swift → UnifiedAIClient.generateGiftSuggestions + PromptBuilder.giftSuggestions
tend
📊 Overview
👥 Contacts
💡 Insights
⚙️ Settings
B
Blake
JK
🧠 Memory Bank — James
AI-extracted from your conversations
Wants to try making ramen at home
Extracted from Feb 10 conversation
Looking for a new hiking backpack
Extracted from Jan 22 conversation
Started new job at Spotify — September 2025
Mentioned in multiple conversations
Went to a concert together — "The encore was 40 minutes"
Feb 16 conversation
College roommates at UC Berkeley
Referenced frequently
"We should go to one together" — about a concert
Feb 16

Memory Bank

AI-extracted conversation highlights: things they want, important dates, shared experiences, promises made. Fed into gift and conversation prompts.

InsightsFeature.swift → Memory Bank tab → UnifiedAIClient.extractMemories
tend
📊 Overview
👥 Contacts
💡 Insights
⚙️ Settings
B
Blake
✨ AI Settings
💻
On-Device Private. Runs locally via MLX.
☁️
Cloud Better quality. Data sent to Anthropic.
Disabled No AI features.
Llama 3.2 3B (quantized) ✓ Downloaded and ready
1.8 GB
🛡
Your Privacy is Protected On-Device mode processes everything locally. Your messages never leave your Mac.
Revoke Cloud AI Consent

AI Settings

Toggle AI mode (On-Device / Cloud / Disabled). Download/remove Llama 3.2 3B quantized model. Privacy consent management.

AISettingsFeature.swift → MLXClient + MLXModelManager
Unlock More AI Features
You've reached the limit of your current plan.
👥
Track up to 50 contacts
💬
30 conversation starters / month
🎁
20 gift suggestions / month
🖥
Menu bar widget access
Upgrade to Nurture ($11.99/mo)
Maybe Later

Upgrade Prompt

Context-sensitive upsell shown at plan limits. Feature list reflects Nurture tier actuals.

UpgradePromptFeature.swift
❤️
Choose Your Plan
No ads, no data selling. Your messages never leave your Mac.
Monthly
Yearly
Try
$0.99
One-time
1 contact
1 conversation starter
1 gift suggestion
Start
Engage
$5.99/mo
or $59.99/yr
20 contacts
10 starters · 10 gifts/mo
Full analytics
Upgrade
POPULAR
Nurture
$11.99/mo
or $119.99/yr
50 contacts
30 starters · 20 gifts/mo
Menu bar widget
Upgrade
Deepen
$249.99/yr
Annual only
Unlimited contacts
Unlimited AI
Priority support
Upgrade
Secure checkout powered by Stripe 🔒

Paywall

4-tier plan comparison (Try / Engage / Nurture / Deepen). Deepen is annual-only. Separate starters + gifts counts per tier. Stripe-powered checkout via Supabase Edge Function.

PaywallFeature.swift → supabase/functions/stripe-checkout
stripe
Tend — Nurture Plan
$11.99 /month
Email
Card information
4242 4242 4242 4242
03 / 27
123
Subscribe
Powered by Stripe · Terms · Privacy

Stripe Checkout

Secure payment via Stripe hosted checkout session. Webhook confirms payment and updates licenses table in Supabase.

supabase/functions/stripe-checkout + stripe-webhook + stripe-portal
tend
📊 Overview
👥 Contacts
💡 Insights
⚙️ Settings
B
Blake
Settings
blake@example.com Signed in with Apple
Nurture
Sign Out
Version1.2.0 (42)
Privacy Policy
Terms of Service
AI Settings
👥Referral Program
Stay Updated Tips on staying connected
🛡Full Disk Access
Granted

Settings

Account (Supabase Auth session), subscription tier badge, AI settings link, referral program, newsletter toggle, FDA permission status.

SettingsFeature.swift → SupabaseClient + StripeClient
tend
📊 Overview
👥 Contacts
💡 Insights
⚙️ Settings
B
Blake
🎁
Invite Friends, Earn Credits
Share Tend with friends and earn AI credits when they sign up.
Your Referral Code
TEND-BL4KE
📋 Copy Code
🔗 Copy Link
📤 Share Referral Link
3
Friends Referred
30
Credits Earned
You earn 10 AI credits for each friend who signs up. They also get 10 bonus credits!

Referrals

Share code, earn AI credits. 10 credits per referral for both parties. Backed by Supabase referrals + referral_redemptions tables.

ReferralFeature.swift → ReferralClient (shared SupabaseClient dependency)
tend
📊 Overview
👥 Contacts
💡 Insights
⚙️ Settings
B
Blake
🎂 Birthdays
JK
James Kim March 15
In 15 days
💬
SM
Sarah Mitchell April 2
In 33 days
💬
EN
Emily Nguyen April 18
In 49 days
💬
AP
Amanda Park July 8
In 130 days
💬
MR
Mike Rodriguez September 22
In 206 days
💬

Birthdays

Upcoming birthdays with send-message action.

BirthdayFeature.swift
Wi-Fi 🔋 🍃 Sat 2:30 PM
Daily Tend
🔥 7
1 of 3 complete
NEEDS ATTENTION
MR
Mike Rodriguez 2 months ago
28
LC
Lauren Chen 4 months ago
12
AP
Amanda Park 3 weeks ago
45
❤️ Open Daily Tend
Open Tend
Refresh

Menu Bar Widget

Always-visible icon with quick access to Daily Tend contacts.

MenuBarFeature.swift
🍃
Tend 1.3.0 is available
You're running version 1.2.0
What's New:
• Improved Daily Tend with AI-generated reasons
• Gift suggestion AI now uses conversation memories
• Memory Bank feature in Contact Insights
• Bug fixes and performance improvements
Downloading... 65% (12.4 MB of 19.1 MB)
Later
Install & Restart
Verified with EdDSA signature · tendapp.io/appcast.xml

Auto-Update (Sparkle)

Automatic update checks via appcast.xml. EdDSA-signed for security.

SparkleUpdater.swift
Built (25)
Third-party (1)