diff --git a/.env.development b/.env.development
index 6ec835a..3886372 100644
--- a/.env.development
+++ b/.env.development
@@ -1,3 +1,3 @@
REACT_APP_BACKEND_URL=http://localhost:8000
-REACT_APP_BASENAME=/membership
-PUBLIC_URL=/membership
+REACT_APP_BASENAME=/
+PUBLIC_URL=/
diff --git a/src/App.js b/src/App.js
index 98278c8..3b51ce0 100644
--- a/src/App.js
+++ b/src/App.js
@@ -48,6 +48,7 @@ import AdminNewsletters from './pages/admin/AdminNewsletters';
import AdminFinancials from './pages/admin/AdminFinancials';
import AdminBylaws from './pages/admin/AdminBylaws';
import AdminRegistrationBuilder from './pages/admin/AdminRegistrationBuilder';
+import AdminDirectorySettings from './pages/admin/AdminDirectorySettings';
import History from './pages/History';
import MissionValues from './pages/MissionValues';
import BoardOfDirectors from './pages/BoardOfDirectors';
@@ -319,6 +320,8 @@ function App() {
+ Upload your WordPress export CSV files. The Users file is required, + while Members and Payments files are optional but recommended for + complete data migration. +
++ User profiles, contact info, directory settings, newsletter + preferences +
+ setUsersFile(e.target.files[0])} + className="block w-full text-sm text-brand-purple file:mr-4 file:py-2 file:px-4 file:rounded-full file:border-0 file:text-sm file:font-semibold file:bg-brand-purple file:text-white hover:file:bg-[var(--purple-ink)] cursor-pointer" + /> + {usersFile && ( +
+
+ Subscription plans, start/end dates, membership status +
+ setMembersFile(e.target.files[0])} + className="block w-full text-sm text-brand-purple file:mr-4 file:py-2 file:px-4 file:rounded-full file:border-0 file:text-sm file:font-semibold file:bg-[var(--lavender-500)] file:text-brand-purple hover:file:bg-[var(--lavender-300)] cursor-pointer" + /> + {membersFile && ( +
+
+ Payment history, transaction records, amounts paid +
+ setPaymentsFile(e.target.files[0])} + className="block w-full text-sm text-brand-purple file:mr-4 file:py-2 file:px-4 file:rounded-full file:border-0 file:text-sm file:font-semibold file:bg-[var(--lavender-500)] file:text-brand-purple hover:file:bg-[var(--lavender-300)] cursor-pointer" + /> + {paymentsFile && ( +
+
+ {uploadSummary.users?.warnings || 0} warnings,{' '} + {uploadSummary.users?.errors || 0} errors +
++ {uploadSummary.members?.unmatched || 0} unmatched +
++ $ + {( + (uploadSummary.payments?.total_amount_cents || 0) / 100 + ).toLocaleString()}{' '} + total +
++ Page {previewPage} of {previewTotalPages} +
++ No emails will be sent to imported users. You can send a bulk + password reset later from the admin panel. +
++ Create subscription records from Members CSV data +
++ Include payment history from Payments CSV in subscription notes +
++ Skip rows with errors and continue importing valid rows +
+Import Summary
+
+ Ready to import {uploadSummary?.users?.valid || 0} users
+ {options.import_subscriptions &&
+ uploadSummary?.members?.matched > 0 &&
+ ` with ${uploadSummary.members.matched} subscriptions`}
+ . All imported users will have{' '}
+
+ force_password_change
+ {' '}
+ enabled.
+
+ {importResults.successful_rows} +
+Users Imported
++ {importResults.failed_rows} +
+Failed
++ {importResults.created_subscriptions} +
+Subscriptions
++ {importResults.emails_sent} +
+Emails Sent
++ ...and {importResults.errors.length - 20} more errors +
+ )} +{member.directory_bio}
@@ -79,7 +81,7 @@ const MemberCard = ({ member, onViewProfile, tiers }) => { {/* Contact Information */}
+ 1. Download the CSV templates below
+ 2. Fill in your data following the template format
+ 3. Upload your completed files in the next step
+ 4. Review and import your data
+
{template.description}
++ {template.field_count} fields | Required: {template.required_fields.join(', ')} +
++ The Users CSV is required. Other files are optional and will be linked by email address. +
+{file.name}
+ ) : ( +No file selected
+ )} ++ Don't send welcome or password emails during import +
++ If email already exists, update the user instead of skipping +
++ Continue importing even if some rows have errors +
++ Create subscription records from subscriptions.csv +
++ Create donation records from donations.csv +
++ Create payment records from payments.csv +
++ Save custom registration data from registration_data.csv +
+
+ All imported users will have force_password_change enabled.
+ You can use the Bulk Password Reset feature to send login instructions after import.
+
- Control your visibility and information in the member directory. -
+ {isFieldEnabled('show_in_directory') && ( ++ Control your visibility and information in the member directory. +
-- Select areas where you'd like to volunteer and help our community. -
-+ Select areas where you'd like to volunteer and help our community. +
++ Configure which fields are available in member profiles and the directory +
++ {fieldDescriptions[fieldId] || fieldData.description} +
++ Download templates, fill your data, upload +
++ For WordPress/PMS exports +
++ Simple WordPress users CSV +
++ You are about to send password reset emails to{' '} + {selectedUsers.size} user{selectedUsers.size !== 1 ? 's' : ''}. +
++ What happens: +
+force_password_change flag will be set+ This action cannot be undone. Continue? +
+