diff --git a/frontend/src/App.css b/frontend/src/App.css
index 9e6fc0d..c5baccf 100644
--- a/frontend/src/App.css
+++ b/frontend/src/App.css
@@ -79,7 +79,7 @@ body {
padding: 10px;
border: 1px solid #ddd;
border-radius: 4px;
- font-size: 14px;
+ font-size: 16px;
}
.form-group input:focus,
@@ -185,6 +185,70 @@ body {
margin-top: 20px;
}
+/* Mobile responsive adjustments */
+@media (max-width: 768px) {
+ .dashboard-grid {
+ grid-template-columns: 1fr;
+ }
+
+ .container {
+ padding: 10px;
+ }
+
+ .card {
+ padding: 16px;
+ }
+
+ .navbar {
+ padding: 12px 16px;
+ }
+
+ .navbar h1 {
+ font-size: 18px;
+ }
+
+ /* Make tables responsive */
+ table {
+ width: 100%;
+ min-width: 600px; /* Ensure minimum width for readability */
+ }
+
+ .table-container {
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch;
+ }
+
+ /* Auth pages mobile adjustments */
+ .auth-container {
+ flex-direction: column;
+ padding: 20px;
+ gap: 20px;
+ }
+
+ .auth-card {
+ max-width: 100%;
+ padding: 24px;
+ }
+
+ /* Welcome section mobile adjustments */
+ .welcome-section {
+ max-width: 100% !important;
+ padding: 20px !important;
+ }
+
+ .welcome-section h1 {
+ font-size: 1.8rem !important;
+ }
+
+ /* Form grid mobile adjustments */
+ @media (max-width: 768px) {
+ form[style*="grid-template-columns"] {
+ grid-template-columns: 1fr !important;
+ gap: 16px !important;
+ }
+ }
+}
+
.status-badge {
display: inline-block;
padding: 4px 12px;
@@ -255,7 +319,7 @@ body {
padding: 8px;
border: 1px solid #ddd;
border-radius: 4px;
- font-size: 14px;
+ font-size: 16px;
color: #333;
background-color: #fff;
}
diff --git a/frontend/src/pages/Dashboard.tsx b/frontend/src/pages/Dashboard.tsx
index 6d88639..faddda8 100644
--- a/frontend/src/pages/Dashboard.tsx
+++ b/frontend/src/pages/Dashboard.tsx
@@ -301,30 +301,32 @@ const Dashboard: React.FC = () => {
Payment History
{payments.length > 0 ? (
-
-
-
- | Date |
- Amount |
- Method |
- Status |
-
-
-
- {payments.map(payment => (
-
- | {payment.payment_date ? formatDate(payment.payment_date) : 'Pending'} |
- £{payment.amount.toFixed(2)} |
- {payment.payment_method} |
-
-
- {payment.status.toUpperCase()}
-
- |
+
+
+
+
+ | Date |
+ Amount |
+ Method |
+ Status |
- ))}
-
-
+
+
+ {payments.map(payment => (
+
+ | {payment.payment_date ? formatDate(payment.payment_date) : 'Pending'} |
+ £{payment.amount.toFixed(2)} |
+ {payment.payment_method} |
+
+
+ {payment.status.toUpperCase()}
+
+ |
+
+ ))}
+
+
+
) : (
No payment history available.
)}
@@ -339,41 +341,43 @@ const Dashboard: React.FC = () => {
{allPayments.filter(p => p.status === 'pending').length > 0 && (
Pending Payments
-
-
-
- | User |
- Amount |
- Method |
- Membership |
- Actions |
-
-
-
- {allPayments.filter(p => p.status === 'pending').map(payment => {
- const membership = allMemberships.find(m => m.id === payment.membership_id);
- return (
-
- | {getUserName(payment.user_id)} |
- £{payment.amount.toFixed(2)} |
- {payment.payment_method} |
-
- {membership ? `${membership.tier.name} (${membership.status})` : 'N/A'}
- |
-
-
- |
-
- );
- })}
-
-
+
+
+
+
+ | User |
+ Amount |
+ Method |
+ Membership |
+ Actions |
+
+
+
+ {allPayments.filter(p => p.status === 'pending').map(payment => {
+ const membership = allMemberships.find(m => m.id === payment.membership_id);
+ return (
+
+ | {getUserName(payment.user_id)} |
+ £{payment.amount.toFixed(2)} |
+ {payment.payment_method} |
+
+ {membership ? `${membership.tier.name} (${membership.status})` : 'N/A'}
+ |
+
+
+ |
+
+ );
+ })}
+
+
+
)}
@@ -381,30 +385,32 @@ const Dashboard: React.FC = () => {
{allMemberships.filter(m => m.status === 'pending').length > 0 && (
Pending Memberships
-
-
-
- | User |
- Tier |
- Start Date |
- Status |
-
-
-
- {allMemberships.filter(m => m.status === 'pending').map(membership => (
-
- | {getUserName(membership.user_id)} |
- {membership.tier.name} |
- {formatDate(membership.start_date)} |
-
-
- {membership.status.toUpperCase()}
-
- |
+
+
+
+
+ | User |
+ Tier |
+ Start Date |
+ Status |
- ))}
-
-
+
+
+ {allMemberships.filter(m => m.status === 'pending').map(membership => (
+
+ | {getUserName(membership.user_id)} |
+ {membership.tier.name} |
+ {formatDate(membership.start_date)} |
+
+
+ {membership.status.toUpperCase()}
+
+ |
+
+ ))}
+
+
+
)}
@@ -437,78 +443,80 @@ const Dashboard: React.FC = () => {
/>
-
-
-
- | Name |
- Email |
- Role |
- Status |
- Joined |
- Actions |
-
-
-
- {filteredUsers.map(u => (
- handleUserClick(u)}
- >
- | {u.first_name} {u.last_name} |
- {u.email} |
-
-
- {u.role.toUpperCase()}
-
- |
-
-
- {u.is_active ? 'ACTIVE' : 'INACTIVE'}
-
- |
- {formatDate(u.created_at)} |
-
- {u.role === 'member' && (
-
- )}
- {u.role === 'admin' && u.id !== user?.id && (
-
- )}
- {u.role === 'super_admin' && (
- Super Admin
- )}
- |
+
+
+
+
+ | Name |
+ Email |
+ Role |
+ Status |
+ Joined |
+ Actions |
- ))}
-
-
+
+
+ {filteredUsers.map(u => (
+ handleUserClick(u)}
+ >
+ | {u.first_name} {u.last_name} |
+ {u.email} |
+
+
+ {u.role.toUpperCase()}
+
+ |
+
+
+ {u.is_active ? 'ACTIVE' : 'INACTIVE'}
+
+ |
+ {formatDate(u.created_at)} |
+
+ {u.role === 'member' && (
+
+ )}
+ {u.role === 'admin' && u.id !== user?.id && (
+
+ )}
+ {u.role === 'super_admin' && (
+ Super Admin
+ )}
+ |
+
+ ))}
+
+
+
)}
diff --git a/frontend/src/pages/Login.tsx b/frontend/src/pages/Login.tsx
index 6a0f89b..c13ff59 100644
--- a/frontend/src/pages/Login.tsx
+++ b/frontend/src/pages/Login.tsx
@@ -43,7 +43,7 @@ const Login: React.FC = () => {
};
return (
-