Senior Living Family Portal: What to Build and Why It Closes Tours
Your resident's daughter lives 300 miles away. She calls the front desk every day at 4pm: "How is Mom doing? Did she eat lunch? Did she go to activities?" Your staff spends 15 minutes per call, per family, per day. Multiply by 80 residents. That is 20 hours per day of staff time answering the same question: "How is my parent doing?" A family portal answers this question 24/7 without a phone call.
I've watched this exact scenario play out at multiple senior living communities. The front desk becomes a bottleneck. Caregivers get pulled off the floor to take calls. And families -- who genuinely just want to know their parent is okay -- feel like they're bothering people. Everyone loses. A well-built family portal fixes all of it, and it does something else nobody expects: it closes tours.
When a prospective family walks through your community and you show them a real-time portal where they can see daily activity logs, photos of Mom painting watercolors, and medication confirmations from Nurse Sarah -- that's the moment they stop shopping around. I've seen it happen. The portal isn't a nice-to-have. It's your best sales tool.
Table of Contents
- Why Family Portals Close Tours
- The 6 Features You Need to Build
- Architecture: Supabase, RLS, and Next.js
- Data Model and Row-Level Security
- Build Cost and ROI
- What Off-the-Shelf Solutions Get Wrong
- Implementation Timeline
- FAQ

Why Family Portals Close Tours
Let's talk about the sales psychology for a minute. When a family is touring senior living communities -- and they're typically touring 3-5 before making a decision -- they're terrified. They're about to trust strangers with their parent's daily life. Every community has nice lobbies, friendly staff, and a good sales pitch. The differentiator isn't the building. It's trust.
A family portal is tangible proof that your community operates transparently. During a tour, when the sales director pulls up the portal on a tablet and says, "Here's what your experience will look like as a family member," something shifts. The family can see:
- Real daily logs from actual residents (anonymized, of course)
- Photos from that morning's activities
- The messaging system where they can reach the care team
- Billing dashboards with payment history
This isn't a brochure. It's evidence. And in a market where average monthly costs for assisted living in the US hit $5,350/month in 2025 (according to Genworth's Cost of Care Survey), families are spending $64,000+ per year. They want to know what they're getting.
Communities I've worked with report that showing the family portal during tours increases close rates by 15-25%. One operator told me flat out: "The portal is the single feature that closes the most tours." Not the dining room. Not the fitness center. The portal.
The 6 Features You Need to Build
I'm going to walk through each feature in detail -- what it does, why it matters, and how to implement it. Not every feature carries equal weight, but together they create an experience that eliminates the daily anxiety loop families live in.
1. Daily Activity Log
This is the foundation. Staff records activities attended, meals eaten, social interactions, and mood observations throughout the day. Family members log in and see a timeline view of their parent's day.
A typical entry might look like:
10:30 AM -- Dorothy attended morning exercise class. She was engaged and chatted with tablemate Helen afterward.
12:15 PM -- Lunch: chicken soup, garden salad, iced tea. Ate approximately 75% of meal.
2:00 PM -- Rested in room.
3:30 PM -- Attended watercolor painting in the activity room. Seemed to enjoy it -- asked to keep her painting.
The key detail here: family members see ALL family members linked to that resident. So if Dorothy's daughter is in Denver and her son is in Dallas, both see the same log. No more calling each other to relay information.
For staff input, you build a simple form -- not a novel. Dropdowns for meals and activities, a short text field for observations. If it takes more than 90 seconds per resident, staff won't use it. I've seen portals fail because the data entry was too burdensome. Keep it fast.
// Example: Activity log entry type
interface ActivityLogEntry {
id: string;
resident_id: string;
staff_id: string;
entry_type: 'meal' | 'activity' | 'social' | 'observation' | 'rest';
description: string;
mood?: 'happy' | 'neutral' | 'quiet' | 'agitated';
timestamp: string;
created_at: string;
}
2. Medication Tracking
This is the peace-of-mind feature. Family members can see:
- Medication name
- Dosage
- Time administered
- Administering nurse
So instead of calling to ask, "Did Mom get her blood pressure medication?" the daughter sees: "Dorothy received Lisinopril 10mg at 8:15 AM -- administered by Nurse Sarah."
That single line of text replaces a 15-minute phone call. Multiply that across 80 residents and you start to see why this matters operationally.
A critical note on compliance: medication data is PHI (Protected Health Information) under HIPAA. Your portal needs proper access controls, audit logging, and encryption at rest and in transit. This isn't optional. More on the architecture in a bit.
3. Photo and Video Updates
This is the feature families love most. Period. I've seen engagement analytics on family portals, and photo/video sections get 3-4x the views of any other feature.
Staff posts photos of activities, outings, celebrations. "Mom painted a watercolor today! Here's her painting." One photo per day equals one less anxious phone call.
Implementation tips from experience:
- Make uploads dead simple for staff. A mobile-friendly upload button, optional caption, auto-tagged to the resident. That's it.
- Use Supabase Storage for media files with signed URLs so nothing is publicly accessible.
- Compress images on upload. Family members are often on mobile data. A 6MB photo from a staff iPhone is unnecessary.
- Allow family members to download and share. Grandkids want to see Grandma's painting too.
// Supabase Storage: Upload with resident association
const { data, error } = await supabase.storage
.from('resident-photos')
.upload(`${residentId}/${Date.now()}.jpg`, file, {
contentType: 'image/jpeg',
upsertFalse: true,
});
// Create photo record linked to resident
await supabase.from('photos').insert({
resident_id: residentId,
staff_id: currentStaff.id,
storage_path: data.path,
caption: 'Dorothy loved today\'s watercolor session!',
});
4. Billing Transparency
Monthly invoices viewable online. Payment history. Auto-pay setup via Stripe. No more mailing paper invoices.
This seems mundane, but billing disputes and confusion are a top source of family complaints in senior living. When families can see exactly what they're being charged, when payments were made, and set up auto-pay, the accounts receivable team gets their time back.
Stripe integration is straightforward here. You create a customer in Stripe linked to the resident record, set up invoicing through Stripe Billing, and surface the payment portal via Stripe's Customer Portal or build a custom UI.
// Create Stripe customer linked to resident
const customer = await stripe.customers.create({
email: familyMember.email,
metadata: {
resident_id: resident.id,
community_id: community.id,
},
});
// Set up autopay with a payment method
const subscription = await stripe.subscriptions.create({
customer: customer.id,
items: [{ price: monthlyCarePriceId }],
payment_behavior: 'default_incomplete',
});
5. Secure Messaging
Family sends a message to the care team. Care team responds within an SLA. History is archived. No more lost voicemails or miscommunications.
This replaces the black hole of phone tag. A family member types, "Can you make sure Mom wears her blue sweater for the family photo on Sunday?" The care team acknowledges it, and there's a permanent record.
Key decisions to make:
- Threading: Messages should be threaded by conversation, not a flat timeline.
- SLA indicators: Show families when they can expect a response (e.g., "Messages are typically answered within 4 hours during business hours").
- Notifications: Push notifications or email when a response comes in. Supabase Realtime can handle the real-time delivery; pair it with an edge function for email notifications.
- Archive everything. This protects both the family and the community if disputes arise.
6. Care Plan Access
Family can view (read-only) the current care plan, recent assessments, and upcoming physician visits. This is the most sensitive feature from a compliance standpoint, but it's incredibly valuable.
Families who can see the care plan feel included in their parent's care. They're not blindsided when something changes. They can prepare questions for physician visits instead of scrambling after the fact.
The read-only part is critical. Families view; they don't edit. The care team manages the plan through the staff-facing side of the portal.
Architecture: Supabase, RLS, and Next.js
Here's the stack I'd recommend -- and have built -- for this type of portal:
| Layer | Technology | Why |
|---|---|---|
| Frontend | Next.js (App Router) | SSR for fast initial loads, React for interactive components |
| Auth | Supabase Auth | Email/password with magic links, MFA support |
| Database | Supabase (PostgreSQL) | Row-Level Security is the killer feature here |
| Storage | Supabase Storage | Signed URLs for photos/videos, HIPAA-eligible |
| Realtime | Supabase Realtime | Live messaging updates |
| Payments | Stripe | Billing, invoicing, auto-pay |
| Hosting | Vercel | Paired with Next.js, zero-config deploys |
| Resend or SendGrid | Notification delivery |
The Next.js frontend gives you server-side rendering where you need it (SEO for the marketing pages, fast loads for the portal) and client-side interactivity for the dashboard. We build portals like this regularly as part of our Next.js development capabilities.
Supabase is the backbone. Its Row-Level Security (RLS) means the database itself enforces access control. Even if your application code has a bug, a family member physically cannot see another resident's data. This is the single most important architectural decision for a HIPAA-adjacent application.

Data Model and Row-Level Security
Let me show you the core data model and how RLS works in practice.
-- Core tables
CREATE TABLE residents (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
community_id UUID REFERENCES communities(id),
first_name TEXT NOT NULL,
last_name TEXT NOT NULL,
room_number TEXT,
created_at TIMESTAMPTZ DEFAULT now()
);
CREATE TABLE family_members (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES auth.users(id), -- Supabase Auth user
resident_id UUID REFERENCES residents(id),
relationship TEXT NOT NULL, -- 'daughter', 'son', 'spouse', etc.
created_at TIMESTAMPTZ DEFAULT now()
);
CREATE TABLE activity_logs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
resident_id UUID REFERENCES residents(id),
staff_id UUID REFERENCES staff(id),
entry_type TEXT NOT NULL,
description TEXT NOT NULL,
mood TEXT,
timestamp TIMESTAMPTZ NOT NULL,
created_at TIMESTAMPTZ DEFAULT now()
);
-- Row-Level Security: Family sees ONLY their resident's data
ALTER TABLE activity_logs ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Family can view their resident's activity logs"
ON activity_logs FOR SELECT
USING (
resident_id IN (
SELECT resident_id FROM family_members
WHERE user_id = auth.uid()
)
);
That policy is beautifully simple. When a family member queries activity_logs, PostgreSQL automatically filters to only show rows where the resident_id matches their linked resident. No application-level filtering needed. No chance of data leakage.
You'd apply similar policies to medications, photos, messages, invoices, and care_plans. Every table that contains resident data gets locked down at the database level.
For the staff side, you'd have separate policies that allow staff to see residents within their community:
CREATE POLICY "Staff can view their community's activity logs"
ON activity_logs FOR SELECT
USING (
resident_id IN (
SELECT r.id FROM residents r
JOIN staff s ON s.community_id = r.community_id
WHERE s.user_id = auth.uid()
)
);
CREATE POLICY "Staff can insert activity logs for their community"
ON activity_logs FOR INSERT
WITH CHECK (
resident_id IN (
SELECT r.id FROM residents r
JOIN staff s ON s.community_id = r.community_id
WHERE s.user_id = auth.uid()
)
);
Build Cost and ROI
Let's talk real numbers. In 2025, here's what you're looking at:
| Scope | Cost Range | Timeline | Notes |
|---|---|---|---|
| Family portal as add-on to existing community website | $15,000 - $25,000 | 6-8 weeks | Assumes existing site on Next.js or similar |
| Standalone family portal | $20,000 - $35,000 | 8-12 weeks | Includes staff-facing admin dashboard |
| Multi-community portal with admin | $35,000 - $60,000 | 12-16 weeks | Central management across locations |
These costs assume you're working with a development team that knows the stack. If you're curious about what this looks like as an engagement, our pricing page breaks down how we structure builds.
Now the ROI. This is where operators pay attention:
Staff time savings: If your community has 80 residents and averages 40 family calls per day at 15 minutes each, that's 10 hours of staff time daily. A portal reduces those calls by 60-80%. Let's be conservative and say 60%. That's 6 hours per day recovered. At $18/hour average for front desk and care staff, that's $108/day or $39,420/year in recovered productivity.
Family satisfaction scores: Communities with family portals consistently report 15-25% higher family satisfaction scores on annual surveys. This matters because most state regulatory bodies track satisfaction, and higher scores mean smoother surveys.
Referral generation: Here's the number that really matters. Satisfied families refer friends. In senior living, a single move-in is worth $60,000-$120,000+ in annual revenue. If your portal generates even one additional referral per quarter, the ROI is staggering. The portal pays for itself with a single referral.
Reduced complaints and disputes: Documented communication through the messaging system and transparent billing reduce formal complaints. This protects the community legally and operationally.
What Off-the-Shelf Solutions Get Wrong
You might be wondering: "Why build custom? Can't I just buy something?" Fair question.
There are existing platforms -- Caremerge (now part of Aline), LifeLoop, Sagely -- that offer family engagement features. They're not bad. But here's what I've seen go wrong:
They don't match your brand. The portal looks like their product, not your community. Families see a generic tool, not an extension of your community's identity.
Per-resident pricing bleeds you. Most charge $3-8 per resident per month. For 80 residents, that's $240-$640/month, or $2,880-$7,680/year. Forever. A custom build has a one-time cost and minimal ongoing hosting (Supabase and Vercel hosting for a portal this size runs $50-200/month).
Integration headaches. Off-the-shelf tools often don't play well with your existing EHR, billing system, or website. A custom portal built on Supabase can integrate with your existing systems through APIs.
Limited customization. Your community has specific workflows. Maybe your memory care unit logs things differently than assisted living. Custom means you build exactly what your staff needs.
You don't own your data. With a SaaS platform, your resident data lives on someone else's servers under someone else's terms. With Supabase, you own the database.
That said, if you're a 30-bed community with no budget for custom development, an off-the-shelf tool is better than nothing. Something is always better than nothing when it comes to family communication.
Implementation Timeline
Here's a realistic build schedule for a standalone family portal:
Weeks 1-2: Discovery and Design
- Interview staff and family members about current pain points
- Design the data model
- Create UI wireframes for both family and staff views
- Set up Supabase project with auth and RLS policies
Weeks 3-5: Core Build
- Activity log (staff input + family view)
- Medication tracking
- Photo/video uploads and gallery
- Supabase Realtime for live updates
Weeks 6-7: Communication and Billing
- Secure messaging with threading and notifications
- Stripe integration for billing and auto-pay
- Care plan view (read-only)
Weeks 8-9: Polish and Testing
- Mobile responsiveness (families are primarily on phones)
- HIPAA compliance review
- Staff training documentation
- User acceptance testing with actual families
Week 10: Launch
- Phased rollout starting with 10-15 families
- Feedback collection and iteration
- Full rollout
If you're adding this to an existing Next.js community website we've built, we can trim 2-3 weeks off since the foundation is already in place. We handle builds like this through our headless CMS development practice, where the content management for the marketing site and the portal data layer work together.
For communities looking at this kind of project, reach out to us to talk through your specific setup. Every community is a little different, and the discovery phase is where we figure out what your staff and families actually need.
FAQ
How does the family portal handle HIPAA compliance?
The portal itself doesn't need to be HIPAA-certified (that's not a thing), but it needs to follow HIPAA's Security Rule. Supabase supports HIPAA-eligible configurations when you sign a BAA (Business Associate Agreement) on their Pro plan ($25/month) or higher. Row-Level Security enforces data isolation at the database level. All data is encrypted in transit (TLS) and at rest. Audit logs track who accessed what. The biggest compliance risk isn't technical -- it's staff training on what's appropriate to document.
What if family members share login credentials with non-authorized people?
This is a real concern. You mitigate it with a Terms of Use that family members agree to on first login, making them responsible for their credentials. Multi-factor authentication (MFA) adds a layer of protection. Supabase Auth supports TOTP-based MFA out of the box. You can also implement session management that limits concurrent logins and flags unusual access patterns.
How do you get staff to actually use the portal consistently?
This is the make-or-break question. The input interface must be fast -- 60-90 seconds per resident per entry. Use dropdowns, quick-select buttons, and pre-filled templates. Build it mobile-first so staff can log entries from their phone or a tablet on the floor. Some communities designate an "activity logger" role on each shift rather than asking every caregiver to enter data. Start with photo uploads because staff enjoy taking them, and the positive family feedback creates motivation to use the other features.
Can the portal integrate with existing EHR systems like PointClickCare or MatrixCare?
Yes, but it requires API integration work. PointClickCare has an API marketplace, and MatrixCare offers API access for certain data types. The portal can pull medication administration records and care plan data from the EHR rather than requiring double-entry. This integration typically adds $5,000-$10,000 to the build cost depending on the EHR's API complexity. Some communities choose to start without EHR integration and add it later.
What's the ongoing maintenance cost after the portal is built?
Infrastructure costs are modest: Supabase Pro ($25/month), Vercel Pro ($20/month), Stripe fees (2.9% + 30¢ per payment), and email delivery ($20-50/month for Resend or SendGrid). Total: roughly $100-200/month in hosting. You should budget for 5-10 hours/month of developer time for bug fixes, minor feature additions, and security updates -- around $1,000-2,000/month if you have a retainer with your development team.
How long does it take families to adopt the portal?
In my experience, you'll see 40-50% adoption in the first month if you do proper onboarding. By month three, it typically reaches 70-80%. The key is sending a personalized email invitation with a dead-simple signup flow (magic links, not password creation), followed by the first photo of their parent on day one. That first photo notification is what hooks them. Communities that don't actively onboard families see adoption stall at 20-30%.
Does the portal work for memory care residents whose families make medical decisions?
Absolutely -- and memory care families are often the most engaged users. They can't call their parent directly for an update, so the portal becomes their primary window into daily life. For memory care, you'd emphasize photo/video updates and mood observations over activity descriptions. Care plan access is especially valuable because memory care families are frequently making decisions about care level changes. Power of Attorney documentation should be verified during the family member onboarding process.
What makes a custom-built portal better than using a platform like LifeLoop or Caremerge?
Custom portals match your community's brand, don't carry per-resident monthly fees, and can be tailored to your specific workflows. Over 3 years, the total cost of ownership for a custom portal is typically 30-50% less than a SaaS platform for communities with 60+ residents. You also own your data completely. That said, SaaS platforms are faster to deploy (days vs. weeks) and require no development team. The right choice depends on your budget, timeline, and how much you value brand consistency and data ownership.