MiYOUchad
Donor Relations
{{ authError }}
Password reset email sent — check your inbox.
Forgot password?
Set a new password
{{ authError }}
MiYOUchad
Donor Relations
Dashboard Donors Contacts Pipeline Campaigns Tasks Calendar Households Insights Import & Export System
{{ userInitial }}
{{ userEmail }}
Sign out
Gmail: {{ gmailEmail }} · auto-checking Gmail not connected
{{ gmailInboxCountLabel }} Disconnect Connect
Gmail lost connection — auto-checking & sending are paused until you reconnect.
MiYOUchad

{{ greeting }}, {{ userFirstName }}

{{ todayLabel }} · here's where things stand
{{ kpi.label }}
{{ kpi.value }}
{{ kpi.sub }}
Loading your data…
No data yet
Head to Donors and import a CSV to populate your dashboard.

Next move alerts

Overdue · {{ dashOverdueCount }}
Due today · {{ dashTodayCount }}
Due this week · {{ dashWeekCount }}
{{ ta.text }} · {{ ta.donorName }}
Nothing due this week.
No next move · {{ dashNoNextCount }}
{{ dn.name }} · {{ dn.stage }}
Every active donor has a next move.

Giving by month

{{ m.amountFmt }}
{{ m.label }}

Pipeline value by stage

{{ p.label }} {{ p.valueFmt }}

Recent gifts

DonorFundDateAmount
{{ g.donorName }} {{ g.fund }} {{ g.dateFmt }} {{ g.amountFmt }}

Priority queue

Who to reach out to this week, ranked by time since last contact and donor heat × capacity.

Needs a thank-you

{{ n.donorName }}
{{ n.fund }} · {{ n.dateFmt }} · {{ n.amountFmt }}

Donors

{{ importMessage }}
Name
Tags
Officer
Stage
Heat
Capacity
Last gift
Lifetime giving
{{ d.initials }}
{{ d.name }}
{{ d.city }}
{{ d.cadenceLabel }} {{ t }}
{{ d.officer }} {{ d.stage }} {{ d.heatFmt }} {{ d.capacityFmt }} {{ d.lastGiftFmt }} {{ d.totalGivingFmt }}
Loading your data…
No donors yet
Import a CSV or add a donor to get started.
{{ selectedDonor.initials }}

{{ selectedDonor.name }}

{{ selectedDonor.stage }} {{ selectedDonor.engagementLabel }} Heat {{ selectedDonor.heat }}/5 Capacity {{ selectedDonor.capacity }}/5 ? Anonymous {{ selectedDonor.cadenceLabel }} {{ t }}
Delete this donor? Moves to Trash (System page) for 30 days.
Contact
{{ selectedDonor.email }}
{{ selectedDonor.phone }}
{{ selectedDonor.city }}
{{ sp.name }}
{{ sp.email }}
{{ sp.phone }}
Assigned officer{{ selectedDonor.officer }}
{{ opt.name }}
First gift{{ selectedDonor.firstGiftFmt }}
Ask amount {{ selectedDonor.askFmt }}
click amount to edit · {{ selectedDonor.askFundLabel }}
Lifetime giving{{ selectedDonor.totalGivingFmt }}
Notes
Recent gifts
{{ rg.dateFmt }} · {{ rg.fund }} {{ rg.amountFmt }}
No notes yet.
{{ nt.dateFmt }} · {{ nt.author }}
{{ nt.text }}
Recent correspondence
{{ ng.dateFmt }}
{{ ng.notes }}
{{ ev.dateFmt }}
{{ ev.kind }}
{{ ev.summary }}
Recurring gift
{{ selectedDonor.recurringAmountFmt }} / {{ selectedDonor.recurringFrequencyLabel }} · {{ selectedDonor.recurringFund }}
No gift logged in the expected window — may have lapsed.
DateFundMethodAmountStatus
{{ gg.dateFmt }} {{ gg.fund }} {{ gg.method }} {{ gg.amountFmt }} {{ gg.statusLabel }}
No itemized gifts logged
Lifetime giving of {{ selectedDonor.totalGivingFmt }} was imported as a total — log gifts here to build a full history.
No pledges on file
Use "Log a pledge" above to schedule a multi-payment commitment.
Pledged
{{ pl.paidFmt }} received {{ pl.remainingFmt }} remaining
DueAmountPaid
{{ n.author }}{{ n.dateFmt }}

{{ n.text }}

Pending follow-ups
{{ pf.followUpDateFmt }} {{ pf.notes }}
{{ ia.type }} {{ ia.dateFmt }}
{{ ia.detailLine }}

{{ ia.notes }}

Follow-up needed · {{ ia.followUpDateFmt }}
Task created for {{ ia.followUpDateFmt }}
Follow-up resolved
Gmail
{{ gmailSearchError }}
{{ gm.subject }}
{{ gm.snippet }}

Contacts

One record per person — edits here update their donor profile automatically.
{{ contactImportMessage }}
No contacts yet
Import a CSV or add a contact to get started.
Email groups
No groups yet — select contacts below and add them to a new group.
{{ g.name }} · {{ g.count }}
{{ selectedContactsLabel }}
Name
Email
Phone
City
Officer
Email group: {{ massEmailGroupName }}
{{ massEmailRecipientCount }} contact(s) · use {{firstName}} or {{name}} to personalize
{{ att.name }} ×
No saved templates yet.
{{ t.label }}
Each email gets its own random send time in that window to look natural to spam filters. Sends happen while someone here has Gmail connected and the app open.
Connect Gmail first (sidebar) to actually send — otherwise these will queue but never go out.

Pipeline

No prospects yet
Import a CSV or add a donor to populate the pipeline.

{{ sg.name }}

{{ sg.countLabel }}
{{ d.name }}
{{ d.officer }}
Possible existing donor
{{ d.askFmt }}
+{{ sg.moreCount }} more — use Donors list to see all
Name
Officer
Stage
Ask
{{ r.name }} {{ r.officer }} {{ r.stage }} {{ r.askFmt }}

Campaigns & funds

Columns
No campaigns yet
Import a CSV of gifts, or add campaigns directly.
{{ c.status }}
{{ c.name }}
{{ c.raisedFmt }} of {{ c.goalFmt }}
Pledged (unpaid) {{ c.pledgedFmt }}
Raised + pledged {{ c.combinedFmt }}
{{ campaignDetailName }}
Raised
{{ campaignDetailRaisedFmt }}
Pledged (unpaid)
{{ campaignDetailPledgedFmt }}
Raised + pledged
{{ campaignDetailCombinedFmt }}

Donations
No donations logged for this campaign yet.
{{ cg.donorName }} {{ cg.dateFmt }} {{ cg.amountFmt }}

Pledges
No pledges logged for this campaign yet.
{{ cp.donorName }} {{ cp.paidFmt }} paid of
Prospects
No prospects assigned to this campaign yet.
{{ cpr.donorName }}
{{ cpr.askFmt }}
Delete this campaign? It moves to Trash (System page) and is fully erased after 30 days.

Tasks & interactions

No tasks yet
Tasks appear here once you have donors with follow-ups.

{{ col.name }}

{{ col.countLabel }}
{{ t.text }}
{{ t.donorName }}
{{ t.type }} {{ t.dateFmt }}

{{ col.name }}

{{ col.countLabel }}
{{ t.text }}
{{ t.donorName }}
{{ t.type }} {{ t.dateFmt }}

Overdue

Today

Upcoming

Calendar

{{ calendarHeaderLabel }}
CRM tasks
Google Calendar
Connect Google Calendar (System page) to also see your Google Calendar events here, alongside CRM tasks.
{{ dl }}
{{ day.dateNum }}
{{ it.label }}
+{{ day.moreCount }} more
{{ day.dowLabel }}
{{ day.dateNum }}
Nothing scheduled
{{ it.label }}
Nothing scheduled this day.
{{ it.label }}

Households

Donors who share a last name — review and confirm likely spouses or family households.
Columns
Nothing to review
No shared last names found, or every match has been reviewed.
Showing the first 100 of {{ householdCandidatesTotal }} matches — use search to narrow down.
{{ grp.lastName }}
Same city
{{ m.name }} {{ m.city }}
+{{ grp.moreMembersCount }} more with this last name

Confirmed households

{{ grp.lastName }} · {{ grp.namesJoined }}
Household

Insights

Patterns worth a closer look, computed from logged gifts and stages.

Engagement distribution

Donor count by engagement score band.
{{ b.count }}
{{ b.label }}

Lapse segments

Active vs. LYBUNT vs. SYBUNT donor counts.
{{ seg.label }} {{ seg.count }}

Team performance

Portfolio size, YTD raised, open asks, and task completion by gift officer.
No donor data yet.
Officer
Donors
Raised YTD
Open asks
Tasks done
Tasks open
{{ o.officer }} {{ o.donorCount }} {{ o.raisedYtdFmt }} {{ o.openAsks }} {{ o.tasksCompleted }} {{ o.tasksOpen }}
Not enough data yet
Import donors and log gifts to surface trends here.
Giving trend
Rising givers
Most recent gift is meaningfully larger than their prior average — good stewardship candidates for an increased ask.
No donors with a rising gift pattern yet — needs 2+ logged gifts per donor.
Capacity vs. activity
Ready to be pushed
Top-tier lifetime giving with no active ask on file — likely under-solicited.
None flagged — top givers already have an active ask.
Retention risk
Lapsed high-value donors
Gave before, nothing logged in the last 12 months — highest lifetime giving first.
No lapsed donors with a known last-gift date.
Lapse segments
LYBUNT & SYBUNT ?
Lapsed-donor segments for re-engagement outreach.
LYBUNT
None — everyone who gave last year has given this year too.
SYBUNT
None flagged.
Recurring gifts at risk
Active recurring commitment with no gift logged inside the expected window — may have lapsed.
None flagged.
Monthly sustainers
Already committed on a monthly cadence — not a growth or lapse signal. Best approached once a year to raise the recurring amount, not with a one-off ask.
No monthly-cadence donors detected yet.
Data quality
Possible duplicate donors
Matched by shared email or a near-identical name — review before merging.
No likely duplicates found.

Import & Export

Bring donor data in, get it back out, or build a custom report.
Import
Upload a CSV of donors to create or update records.
{{ importMessage }}
Full backup
A nightly snapshot also runs automatically — see System for status and history.
Per-entity CSV exports
Report builder
Pick a data source and columns, preview the result, then download as CSV.
{{ rs.label }}
{{ reportRowCount }} rows total · preview shows first 8
{{ pc.label }}
{{ cell.value }}

System

Health checks and backups, run automatically while the app is open.
Health check
Gmail connection {{ systemCheckGmailLabel }} Session {{ systemCheckSessionLabel }} Last backup {{ systemCheckBackupLabel }} Credential rotation review {{ systemCheckRotationLabel }}
Last checked {{ systemCheckRanAtLabel }} · re-checks automatically every hour while the app is open
Trash
Deleted donors, gifts, and campaigns wait here for 30 days before being permanently erased.
Trash is empty.
{{ ct.typeLabel }}
{{ ct.label }}
{{ ct.daysLeftLabel }}
Backups
A nightly snapshot runs inside the database (apply supabase-setup-5.sql once to enable it). Download a full copy any time.
Recent automated snapshots
{{ b.dateLabel }} · {{ b.donorCount }} donors
No automated snapshots yet — apply supabase-setup-5.sql to enable nightly backups.
Google Calendar
Two-way: pushes every open task's due date to your primary Google Calendar as an event (auto-syncs on sign-in and every 15 minutes; re-syncing updates the same events instead of duplicating them), and pulls your Google Calendar's events into the CRM's Calendar tab alongside CRM tasks.
Google Calendar access expired — reconnect to keep syncing.
{{ gcalError }}
Last synced {{ gcalLastSyncLabel }} · auto-syncs every 15 min
Connecting Gmail, Calendar, and Drive backups all happen in one click, sharing one Google sign-in popup and one access token.
Google Drive backups
Uploads a full data backup (JSON, for restoring) plus an easily-readable copy (CSV, opens in Sheets/Excel) to a "Donor CRM Backups" folder in your Google Drive. Runs automatically once a day while the app is open, and on demand.
One-time setup: in the same Google Cloud project as your Gmail Client ID, open APIs & Services → Library, search for and enable the Google Drive API. Nothing else to configure — click Connect below and approve access; it only ever touches files it creates itself, never the rest of your Drive.
Google Drive access expired — reconnect to keep backing up.
{{ driveError }}
Last backed up {{ driveLastBackupLabel }} · auto-backs up daily
Uses the same Google OAuth Client ID as Gmail — you’ll see another Google permissions popup the first time.
Email templates
Reusable rich-text templates (formatting, images, merge fields) shared by the Compose and Email group dialogs. Separate from the Thank-you templates above.
Install as an app
Installs like a native app and opens full-screen — still connects live to your data, nothing works offline.
Chrome/Edge/Android: use the Install button above, or the browser's install icon in the address bar. iPhone/iPad (Safari): Share → Add to Home Screen.
Help
What every feature in this CRM does.
{{ h.title }}
{{ h.body }}
Personalize thank-you
{{ t.label }}
Sending to: {{ thankYouDonorEmail }}
Add campaign
Emails received from donors
Nothing to clear — all caught up.
{{ gi.donorName }}
{{ gi.dateFmt }}
{{ gi.notes }}
New message
{{ att.name }} ×
No saved templates yet.
{{ t.label }}
Sending from {{ gmailEmail }} via Gmail · logged to this donor automatically.
Gmail isn't connected — this opens a Gmail compose window instead.
Connect Gmail
Each teammate connects their own Google account once to enable Gmail sending, Google Calendar sync, and Google Drive backups together — no separate steps. One-time setup: in Google Cloud Console, create an OAuth 2.0 Web application client, enable the Gmail, Calendar, and Drive APIs, add this site as an authorized JavaScript origin, then paste the Client ID below. Every teammate then just clicks Connect.
{{ gmailError }}
{{ dayDetailDateLabel }}
Nothing scheduled this day.
{{ it.label }}
Email templates
No templates yet — build one below, or start typing a message in Compose/Email group and click "Templates" to save it.
{{ t.label }}
{{ etmIsEditing }}
Thank-you templates
No custom templates yet. Warm, Formal, and Short note are always available as defaults.
{{ t.label }}
{{ tmIsEditing }}
Log a gift{{ giftDialogFor }}
Edit gift
{{ m.value }}
Log a pledge
Add a task{{ addTaskFor }}
When this fund's pledge is fully paid or a gift lands, this task auto-closes.
Add a donor
Export to Excel
Last gift date

Lifetime giving

Stage
Result {{ exportPreviewLabel }}
Review import
{{ importReviewTotal }} row(s) in this file, and {{ importReviewDupCount }} of them look like donations already recorded (same donor, date, and amount).
Choose whether to skip those likely duplicates or import everything anyway.
Quick log
{{ r.name }}