diff --git a/src/pages/Dashboard.js b/src/pages/Dashboard.js
index eb9429a..ee8ad38 100644
--- a/src/pages/Dashboard.js
+++ b/src/pages/Dashboard.js
@@ -7,7 +7,7 @@ import { Button } from '../components/ui/button';
import { Badge } from '../components/ui/badge';
import Navbar from '../components/Navbar';
import MemberFooter from '../components/MemberFooter';
-import { Calendar, User, CheckCircle, Clock, AlertCircle, Mail, Users, Image, FileText, DollarSign, Scale } from 'lucide-react';
+import { Calendar, User, CheckCircle, Clock, AlertCircle, Mail, Users, Image, FileText, DollarSign, Scale, Receipt, Heart, CreditCard } from 'lucide-react';
import { toast } from 'sonner';
const Dashboard = () => {
@@ -17,6 +17,7 @@ const Dashboard = () => {
const [resendLoading, setResendLoading] = useState(false);
const [eventActivity, setEventActivity] = useState(null);
const [activityLoading, setActivityLoading] = useState(true);
+ const [activeTransactionTab, setActiveTransactionTab] = useState('all');
const joinedDate = user?.member_since || user?.created_at;
useEffect(() => {
@@ -180,7 +181,7 @@ const Dashboard = () => {
{/* Grid Layout */}
-
+
{/* Quick Stats */}
@@ -219,19 +220,41 @@ const Dashboard = () => {
)}
+
+
+ Membership Info
+
+
+
+ {user?.subscription_start_date && user?.subscription_end_date && (
+ <>
+
+
Membership Period
+
+ {new Date(user.subscription_start_date).toLocaleDateString()} - {new Date(user.subscription_end_date).toLocaleDateString()}
+
+
+
+
Days Remaining
+
+ {Math.max(0, Math.ceil((new Date(user.subscription_end_date) - new Date()) / (1000 * 60 * 60 * 24)))} days
+
+
+ >
+ )}
+
+
{/* Upcoming Events */}
-
+
- Upcoming Events
+ My Event Activity
-
@@ -313,155 +336,129 @@ const Dashboard = () => {
)}
- {/* Event Activity Section */}
-
-
-
- My Event Activity
+ {/* Transaction History Section */}
+
+ {/* Header */}
+
+
+
+
+
+ Transaction History
- {activityLoading ? (
- Loading event activity...
- ) : eventActivity ? (
-
- {/* Stats Cards */}
-
-
-
-
-
-
-
-
Total RSVPs
-
- {eventActivity.total_rsvps}
-
-
-
-
-
-
-
-
-
-
-
Events Attended
-
- {eventActivity.total_attended}
-
-
-
-
+ {/* Stats Row */}
+
+
+
+
+
+ Total Subscriptions
+
-
- {/* Upcoming RSVP'd Events */}
- {eventActivity.upcoming_events && eventActivity.upcoming_events.length > 0 && (
-
-
- Upcoming Events (RSVP'd)
-
-
- {eventActivity.upcoming_events.map((event) => (
-
-
-
-
-
{event.title}
-
- {new Date(event.start_at).toLocaleDateString()} at{' '}
- {new Date(event.start_at).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}
-
-
{event.location}
-
-
- {event.rsvp_status === 'yes' ? 'Going' :
- event.rsvp_status === 'maybe' ? 'Maybe' : 'Not Going'}
-
-
-
-
- ))}
-
-
- )}
-
- {/* Past Events & Attendance */}
- {eventActivity.past_events && eventActivity.past_events.length > 0 && (
-
-
- Past Events
-
-
- {eventActivity.past_events.slice(0, 5).map((event) => (
-
-
-
-
{event.title}
-
- {new Date(event.start_at).toLocaleDateString()} at{' '}
- {new Date(event.start_at).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}
-
-
-
-
- {event.attended ? 'Attended' : 'Did not attend'}
-
- {event.attended && event.attended_at && (
-
- Checked in: {new Date(event.attended_at).toLocaleDateString()}
-
- )}
-
-
-
- ))}
-
- {eventActivity.past_events.length > 5 && (
-
- Showing 5 of {eventActivity.past_events.length} past events
-
- )}
-
- )}
-
- {/* No Events Message */}
- {(!eventActivity.upcoming_events || eventActivity.upcoming_events.length === 0) &&
- (!eventActivity.past_events || eventActivity.past_events.length === 0) && (
-
-
-
-
- No Event Activity Yet
-
-
- Browse upcoming events and RSVP to start building your event history!
-
-
-
-
- Browse Events
-
-
-
-
- )}
+
+ $30.00
+
+
+ 1 payment(s)
+
- ) : (
-
-
-
-
- Failed to load event activity. Please try refreshing the page.
+
+
+
+
+ Total Donations
+
+
+
+ $0.00
+
+
+ 0 donation(s)
+
+
+
+
+ {/* Filter Tabs */}
+
+ setActiveTransactionTab('all')}
+ className={`px-6 py-2 rounded-full font-medium transition-all ${
+ activeTransactionTab === 'all'
+ ? 'bg-[var(--purple-lavender)] text-white'
+ : 'border-2 border-[var(--purple-lavender)] text-[var(--purple-lavender)] bg-transparent hover:bg-[var(--lavender-300)]/30'
+ }`}
+ style={{ fontFamily: "'Nunito Sans', sans-serif" }}
+ >
+ All (1)
+
+ setActiveTransactionTab('subscriptions')}
+ className={`px-6 py-2 rounded-full font-medium transition-all ${
+ activeTransactionTab === 'subscriptions'
+ ? 'bg-[var(--purple-lavender)] text-white'
+ : 'border-2 border-[var(--purple-lavender)] text-[var(--purple-lavender)] bg-transparent hover:bg-[var(--lavender-300)]/30'
+ }`}
+ style={{ fontFamily: "'Nunito Sans', sans-serif" }}
+ >
+ Subscriptions (1)
+
+ setActiveTransactionTab('donations')}
+ className={`px-6 py-2 rounded-full font-medium transition-all ${
+ activeTransactionTab === 'donations'
+ ? 'bg-[var(--purple-lavender)] text-white'
+ : 'border-2 border-[var(--purple-lavender)] text-[var(--purple-lavender)] bg-transparent hover:bg-[var(--lavender-300)]/30'
+ }`}
+ style={{ fontFamily: "'Nunito Sans', sans-serif" }}
+ >
+ Donations (0)
+
+
+
+ {/* Transaction List */}
+
+ {(activeTransactionTab === 'all' || activeTransactionTab === 'subscriptions') && (
+
+
+
+
+
+
+ Annual Membership
+
+
+ active
+
+
+
+
+ Dec 16, 2025
+ •
+ Custom
+
+
+ Manual Payment
+
+
+
+
+ $30.00
+
+
+ )}
+ {activeTransactionTab === 'donations' && (
+
-
- )}
-
+ )}
+
+
+
diff --git a/src/pages/members/Financials.js b/src/pages/members/Financials.js
index 5953851..7f8ac96 100644
--- a/src/pages/members/Financials.js
+++ b/src/pages/members/Financials.js
@@ -160,13 +160,9 @@ export default function Financials() {
{/* Year Badge */}
-
-
-
- {report.year}
-
-
Fiscal Year
-
+
+
+
{/* Report Details */}
diff --git a/src/pages/members/NewsletterArchive.js b/src/pages/members/NewsletterArchive.js
index 45576d4..9febb0a 100644
--- a/src/pages/members/NewsletterArchive.js
+++ b/src/pages/members/NewsletterArchive.js
@@ -167,9 +167,9 @@ export default function NewsletterArchive() {
{groupedNewsletters[year].map(newsletter => (
-
-
-
+
+
+
{newsletter.title}