1. Admin Roles
SuperAdmin
Full access to everything. Can create, edit, delete, and activate shows. Can manage all users including other SuperAdmins and ShowAdmins. Can toggle shows open/closed. Can configure site-wide settings like contact email.
ShowAdmin
Scoped to assigned shows. Can edit their assigned shows, manage users and cars within those shows, view vote tallies, and print cards. Cannot create or delete shows. Cannot see SuperAdmin accounts. Can only see shows that are open (not closed).
Judge
Scores cars using judging criteria. When judging is enabled, Judges see a scoring interface where they rate each car on defined criteria (Exterior, Interior, Engine, etc.). Judges don't vote — they provide professional scores. Can be assigned to specific shows. Supports Traditional, Freestyle, and Concours scoring formats.
| Feature | SuperAdmin | ShowAdmin |
| Create / Delete shows | ✅ | ❌ |
| Activate shows | ✅ | ❌ |
| Close / Open shows | ✅ | ❌ |
| Edit show details | ✅ | ✅ (assigned only) |
| Manage users | ✅ (all) | ✅ (Attendees & Judges) |
| Reset user passwords | ✅ (all) | ✅ (Attendees & Judges) |
| Add users | ✅ (all roles) | ✅ (Attendees & Judges) |
| See SuperAdmin accounts | ✅ | ❌ |
| Manage cars | ✅ | ✅ (show cars only) |
| Manage classes | ✅ | ✅ (show classes only) |
| View vote tally | ✅ | ✅ |
| View judging results | ✅ | ✅ |
| Manage judging criteria | ✅ | ✅ |
| Print cards | ✅ | ✅ |
| Show configuration | ✅ | ✅ |
| Switch between shows | ✅ (all shows) | ✅ (assigned shows) |
| Site settings (contact email) | ✅ | ❌ |
| Manage waivers | ✅ | ✅ |
| Moderate messages | ✅ | ✅ |
2. Logging In
1
Open the Admin Panel
Navigate to your server URL followed by /admin (e.g. https://autovotespro.org/admin)
2
Enter your credentials
Use your admin email and password. Default SuperAdmin: admin@autovotespro.com / Admin123!
Important: Admin accounts can only log in to the admin panel (/admin). They are blocked from the attendee app. Attendee accounts are blocked from the admin panel.
3. Managing Shows
The Shows tab displays all car shows. SuperAdmins see all shows; ShowAdmins see only their assigned open shows.
Creating a Show (SuperAdmin only)
1
Click "+ New Show"
Fill in the show name, description, show date, timezone, and vote start/end times.
2
Select Show Type
Choose Classic, Top, or Unique. This cannot be changed after creation.
3
For Top shows, set the vote limit
Enter how many total votes each attendee gets (e.g. 10 for a "Top 10" show).
Activating a Show
Click Activate on a show card to make it the active show. Only one show can be active at a time. The active show is what admins see by default.
Closing / Opening a Show
SuperAdmins can toggle a show between open and closed in the Config tab. Closed shows are hidden from ShowAdmins and attendees.
Editing a Show
Click Edit Show on the show bar or show card. You can change the name, description, dates, timezone, vote window, and open/close dates. The show type cannot be changed.
Open & Close Dates
Set when attendees can access the show. Before the open date, attendees see "Opens on [date]". After the close date, they see "Closed on [date]". Admins can always access the show regardless of these dates.
Deleting a Show (SuperAdmin only)
Warning: Deleting a show removes all associated cars, votes, classes, and show-user links. Users who are only in this show will also be deleted. Users in multiple shows will be unlinked but kept. This cannot be undone.
4. Show Types
Classic
Traditional car show format. Each car is assigned to one class. Attendees vote once per class, picking their favorite car in each. Tally shows winners per class.
Setup: Create classes, assign cars to classes, set vote window.
Top
People's choice format. No class restrictions. Each attendee gets a limited number of total votes (configurable). Tally shows overall ranking by total votes.
Setup: Set the vote limit in Config tab. Classes are optional (not used for voting). Cars don't need a class.
Unique
Every car appears in every class. Attendees vote once per class for any car. Useful for awards like "Best Paint", "Best Engine", "Best Interior" where any car can win any category.
Setup: Create classes (award categories). Cars don't need class assignments — they automatically appear in all classes.
People's Choice
No login required. Spectators scan a QR code on each car's dash card and their vote is cast instantly — one vote per person, per show. No app account needed. Great for public events where spectators walk through and pick their favorite car.
How it works: Each car's dash card QR code links to a mobile-friendly voting page. The spectator sees the car info, taps "Vote for this Car", and they're done. An anonymous token prevents double voting.
Setup: Add cars, print dash cards. No classes needed. Tally shows overall ranking by total votes.
Remember: Show type is set at creation and locked forever. Plan your show type before creating it.
5. Managing Users
The Users tab shows all users for the active show. The user table includes columns for Cars (total car count) and Car #s (the specific car numbers assigned to each user) so you can quickly see which cars belong to which attendee.
Adding a User
Click "+ Add User". Fill in name, email, and role. For Attendees, set the number of cars (placeholder cars are created automatically). Default password is changeme123.
Re-adding users: If a user's email already exists (e.g. from a deleted show), they will be re-linked to the current show automatically with new placeholder cars. No duplicate accounts are created.
Editing a User
Click the edit button on a user row. You can change their name, email, and role.
Pending Pre-Registration Approvals
When pre-registration is enabled, attendees who self-register appear in an amber banner at the top of the Users tab:
- Shows name, email, number of cars, and registration date
- Whether the attendee opted into confirmation emails (if they did, an approval email with car numbers and login link is sent automatically when you approve)
- Approve — lets the attendee enter the show, update cars, and vote
- Reject — removes them from the show and deletes their placeholder cars
- Approve All — approves everyone pending in one click
Tip: Pre-registered attendees are forced to complete their profile on first login, so their name and contact info will be up to date.
Resetting a User's Password
Click the purple "Reset PW" button on any user row. You'll be prompted to enter a new password (or leave blank for the default "changeme123"). The user will be forced to change their password on next login.
Tip: ShowAdmins can only reset passwords for Attendees. SuperAdmins can reset any user's password.
Password Reset via Email
Attendees can also reset their own password from the app:
- Tap "Forgot password?" on the login screen
- Enter their email to receive a reset code via email
- Paste the code and set a new password
The reset email is sent from noreply@autovotespro.org. If attendees report not receiving the email, remind them to check their spam/junk folder.
Toggling Active/Inactive
Click the toggle button to enable/disable a user. Inactive users cannot log in.
Assigning ShowAdmins to Shows
When creating a ShowAdmin, they are automatically linked to the current active show. To give them access to additional shows, add them as a show user via the Users tab while that show is active.
6. Managing Cars
The Cars tab shows all cars for the active show.
Cars are Auto-Created
When you add an attendee with a car count, placeholder cars (make: TBD, model: TBD) are created. Attendees fill in the details themselves via the app.
Editing Cars
Click edit on any car to change make, model, year, color, class, or upload a photo.
Class Assignment
- Classic: Each car must be assigned to one class
- Top: No class needed
- Unique: No class needed (cars appear in all classes automatically)
Bulk Photo Upload
Upload a ZIP file containing car photos named by car number (e.g. 1.jpg, 2.png, 3.jpeg). Photos are matched to cars automatically.
Default Class Images
Cars without photos display a default image based on their class. 70 SVG class images are included covering common car types.
7. Managing Classes
The Classes tab shows all classes for the active show.
Adding Classes
Click "+ Add Class" and enter a class number, name, and optional description. Class numbers determine the display order.
Importing Classes
Import classes from a CSV file. The CSV must have a name column. Optional columns: description, class_number. If class_number is not provided, they are numbered automatically.
When Classes Are Needed
- Classic: Required — cars are assigned to classes, voting is per class
- Top: Optional — not used for voting, but can be used for organization
- Unique: Required — these are the award categories (e.g. Best Paint, Best Engine)
8. Vote Management & Tally
The Tally tab shows vote results for the active show.
Vote Window
Set vote start and end times in the show edit dialog. Voting is only allowed between these times. If no times are set, voting is always open.
Allow Self-Vote
Toggle in the Config tab. When disabled (default), attendees cannot vote for their own cars.
Tally Display by Show Type
| Type | Tally Format |
| Classic | Grouped by class. Cars ranked by votes within each class. Top car per class wins. |
| Top | Overall ranking. All cars ranked by total votes. Selectable Top N (5, 10, 20, 50). |
| Unique | Grouped by class (award category). All cars ranked in each class. |
Top Vote Limit
For Top shows, the vote limit can be changed in the Config tab at any time. This controls how many cars each attendee can vote for.
9. Show Configuration
The Config tab provides show-specific settings.
📍 Venue / Location
Set the show's venue — displayed on the public show details page with an embedded Google Maps widget.
- Venue Name: e.g. "Calgary Stampede Grounds"
- Street Address, City, Province/State, Country
- Latitude & Longitude: Required for the map pin. Right-click on Google Maps to copy coordinates.
Images
- Header Image: Displayed at the top of every attendee screen
- Card/Logo Image: Used on cards and the attendee dashboard
- Flyer Image: Viewable by attendees via the "View Flyer" button
Colors
Set primary, secondary, and accent colors for branding. Used on cards and show materials.
Settings
- Allow Self-Vote: Toggle whether attendees can vote for their own cars
- Show Closed: Toggle to close/open the show (SuperAdmin only)
- Top Vote Limit: For Top shows — set how many votes each attendee gets
Pre-Registration
Enable the "Enable Pre-Registration" checkbox to allow attendees to register themselves via a QR code or link.
- When enabled, a QR code and registration link appear in the Config tab
- Print QR Page — prints a full-page QR code poster to display at the show venue
- Attendees scan the QR code, fill in their name, email, password, and number of cars
- Attendees can opt into confirmation emails via a checkbox on the registration form (checked by default). When opted in, they receive a confirmation email on registration and an approval email with car numbers when approved
- If a waiver is enabled, it appears on the registration form and must be accepted before submitting
- For free shows: attendees are added with pending status — you must approve them
- For paid shows: attendees pay via Stripe or PayPal and are auto-approved
- Pending approvals appear as an amber banner at the top of the Users tab
Payment Configuration
In the Config tab under 💳 Payment Configuration, choose one of three payment types per show:
🆓 Free (Manual Approval)
- No payment required — attendees register and wait for admin approval
- You approve/reject from the Users tab
💳 Stripe
- Attendees pay with credit/debit card via Stripe Checkout
- Requires a Stripe account — get your API keys from dashboard.stripe.com/apikeys
- Enter your Publishable Key (pk_live_...) and Secret Key (sk_live_...)
- Set the amount and whether it's per car or per person
- Payments are in CAD
- After payment, attendees are automatically approved — no manual review needed. A confirmation email is always sent for paid registrations
- Use test keys (pk_test_..., sk_test_...) to test without real charges
🅿️ PayPal
- Attendees pay through PayPal using a secure redirect — they are sent to PayPal's website to complete payment, then redirected back automatically
- Requires a PayPal Developer account — get your credentials from developer.paypal.com
- Enter your Client ID and Secret Key (both required — found in your PayPal app credentials)
- Toggle Live Mode for real payments (uncheck for sandbox testing)
- Set the amount and whether it's per car or per person
- Payments are in CAD
- After payment, attendees are automatically approved and a confirmation email is always sent
🎪 Allow Pay at Show (optional toggle)
- Available when Stripe or PayPal is selected as the payment type
- Check the "Allow Pay at Show" checkbox to enable dual pricing
- Set two separate prices: Prepay Price (online payment, cheaper) and At-Show Price (pay when they arrive, higher price)
- Example: Prepay $20 online, or pay $25 at the show
- Attendees who prepay online via the selected payment processor are automatically approved instantly
- Attendees who choose Pay at Show require your manual approval — they appear in Pending Approvals with a "💵 Pay at Show" badge
- Set whether the price is per car or per person
- All payments are in CAD
Tip: The "Allow Pay at Show" option encourages attendees to prepay online, reducing cash handling at the show and guaranteeing revenue upfront. The price difference (e.g., $20 vs $25) acts as an incentive to pay early.
Tip: You can change the payment type at any time. Existing registrations are not affected — only new registrations will use the new payment method. The registration page automatically shows the correct payment option based on your configuration.
Important: Keep your Stripe Secret Key and PayPal Secret Key secure. Never share them publicly. If compromised, rotate your keys immediately from the provider's dashboard.
Marquee / Announcements
The marquee shows scrolling messages on the attendee's dashboard. Each type can be toggled independently:
- ⏰ Voting Expiry Countdown: Shows a countdown when voting is about to close. Set the minimum hours remaining for the message to appear (default: 1 hour). Requires Vote End time to be set on the show.
- 🚗 Incomplete Cars Warning: Warns attendees who have cars with "TBD" or missing make/model info.
- 🗳️ Missing Votes Warning: Warns attendees who haven't voted in all classes (Classic/Unique) or haven't used all their votes (Top).
- 💬 Unread Messages: Shows a purple notification when the attendee has unread messages (e.g. "You have 3 unread message(s)"). This appears automatically when messaging is enabled and requires no configuration.
- 📢 Custom Announcement: Enter any text to broadcast to all attendees. Great for announcements like "Awards ceremony at 3pm!" or "Please move your cars by 4pm."
Messages cycle one at a time with dot indicators. They auto-refresh every 60 seconds on the attendee's screen.
10. Printing Cards
The Plaques tab generates printable plaques for each car.
What's on a Plaque
- Show logo image
- Car number
- Car make, model, year
- Owner name
- Class name (for Classic and Unique shows)
- QR code for voting
Printing
Click "Preview Plaques" to see them, then "Print All" or print individual plaques. Use your browser's print dialog to print on card stock.
Print Winners
After voting ends, use the Tally tab to see winners, then print winner cards or certificates.
Blank Dash Cards
In the Config tab, you can print blank cards for walk-up registrations at the show:
- Enter the number of blank cards you need (1-500)
- Click "Print Blank Plaques"
- Each card includes a car number, QR code, and blank lines for owner name, year, make, model, color, and class
- If a card/logo image is set, it appears on the blank cards too
- Hand these out at the show for attendees to fill in manually
11. CSV & XLSX Imports
Importing Users (CSV/XLSX)
Required columns: name, email
Optional columns: role (default: Attendee), car_count (default: 1), password
A preview shows how many users will be imported before you confirm.
Tip: Users whose email already exists will be re-linked to the current show with new placeholder cars. They won't be duplicated.
Importing Classes (CSV/XLSX)
Required columns: name
Optional columns: description, class_number
File Format Tips
- CSV files should use commas as delimiters
- UTF-8 encoding recommended (BOM is stripped automatically)
- XLSX files: only the first sheet is read
- Header row is required
12. Site Admin (SuperAdmin Only)
The ⚙️ Site Admin tab is only visible to SuperAdmins and contains platform-wide settings.
🎨 App Theme
Choose a color theme that applies to both the admin panel and the attendee app.
- 10 preset themes: Default, 🌙 Dark, 🌌 Midnight, 🌊 Ocean, 🌲 Forest, 🍂 Fall, 🌸 Spring, 🌅 Sunset, ❄️ Arctic, 👑 Royal
- Custom: Pick your own colors for Primary, Secondary, Accent, Background, Card, Text, and Muted Text using color pickers
- Changes apply instantly to the admin panel and on next load for the attendee app
What's Themed
Admin Panel: Top bar, active tabs, buttons all respond to theme colors.
Attendee App — all screens themed:
- Page backgrounds on every screen (Login, Dashboard, My Shows, All Vehicles, My Cars, Vote, Tally, Profile, Sponsors, Winners)
- Show header bar and image container background
- My Shows header
- Floating back button — matches primary color
- Help buttons — border and text match secondary color
- Vote and Tally buttons on Dashboard
Tip: The attendee app reloads the theme each time the dashboard loads. After changing the theme, attendees will see the new colors next time they navigate to their dashboard.
📧 Contact Email
Set a site-wide support email displayed to attendees.
🔒 Show Status
Open or close the current show. Closed shows are only visible to SuperAdmins.
🏪 Show Purchase
Configure show purchase on the landing page — enable/disable, pricing (single show and multi-pack), payment method (Stripe or PayPal), and API keys.
🎠 Landing Page Marquee
The landing page (autovotespro.org) displays a scrolling marquee of all non-closed shows. Each poster is clickable and opens a Show Details page.
- Speed slider: Control scroll speed from 0.5x (slow) to 6x (fast). Default is 2x.
- Shows display their flyer/header image, name, date, venue, and show type badge
- Marquee pauses on hover/touch
- After all shows scroll off screen, it resets and repeats
📄 Show Details Page
When a visitor clicks a show poster on the landing page, they see a full details page with:
- Hero image (flyer or header)
- Show name, type badge, and description
- Date, car count, class count, sponsor count
- 📍 Venue section with embedded Google Maps widget (when lat/lng are set)
- "Open in Google Maps" link for directions
- Social media links
- Sponsors grid with logos
- Pre-registration button (if enabled)
Tip: Fill in the venue lat/lng in Config → 📍 Venue / Location to enable the map. All other fields are optional — only populated fields display.
At the top of the Config tab, SuperAdmins see a "Site Settings" section.
Contact Email
Set the support email displayed at the bottom of every attendee's dashboard. Attendees can tap it to send an email directly. Update this to the show organizer's email.
14. Social Media & Website
In the Config tab, the 🌐 Social Media & Website section lets you add your show's social links:
- 🌐 Website, 📘 Facebook, 📸 Instagram, 🐦 Twitter/X, ▶️ YouTube, 🎵 TikTok
- Only fill in the ones you use — empty fields are hidden from attendees
- Links appear at the bottom of the attendee dashboard and the Sponsors page
- Click the ✕ button to remove a link
15. Paper Voting Ballots
For attendees who can't vote on their phone, print paper ballots from the Cards tab.
- Each ballot is one full 8.5×11 page (portrait), no browser headers/footers
- Enter the number of ballots needed and click "Print Paper Ballots"
- Ballots auto-format based on show type (Classic, Top, Unique)
- Vote boxes: Each row has a thick navy blue bordered box for writing the car number — clear and easy to fill in
- Two-column layout: When there are more than 12 classes or ranks, the ballot automatically splits into two side-by-side columns to fit on one page
- Includes show name, date, voter name line, and "return to registration table" footer
Classic/Unique: Lists all class names with a blank space to write a car number vote per class.
Top: Shows numbered lines (e.g. 1-10) for the attendee to write their top car picks.
Each ballot includes the show name/logo, voter name field, car number field, voting instructions, and a ballot number. Designed to fit on one page.
16. Dash Cards
Dash cards print in landscape orientation on 8.5×11 pages with no browser headers/footers. Each card fills one full page.
Regular Dash Cards
- Show header image at top with show name in bold navy uppercase
- Car number (64px bold blue), year/make/model, color, owner, class badge
- "VOTE FOR ME!" in bold red above the QR code
- Voting instructions below QR code
- Modifications in italic below class
Blank Dash Cards
Blank cards have fill-in lines for manual entry. Two toggles control the layout:
- ☐ Remove car number: Shows just "#" instead of a specific number. Hides the QR code.
- ☐ Include QR code: Only appears when "Remove car number" is checked. Adds a placeholder QR code back.
- Fill-in lines: Owner, Year/Make, Model, Class, and two rows for Modifications
- Lines extend to maximum width (up to the QR code area if present)
- Car number, make/model, year, color, owner name, class, and QR code
- Show logo/card image at the top (if configured)
17. Judging
AutoVotesPro supports professional judging with scored criteria, separate from the attendee voting system.
Enabling Judging
In the Config tab, find the 🏛️ Judging Configuration section:
- Check Enable Judging to activate the judging system
- Choose a Judging Format (see below)
- Judging works alongside regular attendee voting — both can run simultaneously
Judging Formats
📋 Traditional Judging — The most common format.
- Each judge scores ALL criteria for each car
- If multiple judges score the same car, their scores are averaged
- Best for shows with 1-3 judges who each evaluate the whole car
🤝 Freestyle Judging — Great for team judging.
- Judges can skip criteria they're not responsible for
- One judge scores Exterior, another scores Interior, another scores Engine
- Scores are aggregated (summed) across judges
- Best for shows with specialized judge teams
🏆 Concours Judging — Point deduction method.
- Each car starts with a perfect score (default 100, configurable)
- Judges enter deductions for defects found in each criteria area
- Final score = Perfect Score minus total deductions
- If multiple judges score the same car, deductions are averaged
- Best for concours d'elegance and high-end shows
Managing Criteria
Go to the Judging tab to manage judging criteria:
- Click "+ Add Criteria" to create criteria (e.g. Exterior, Interior, Engine, Paint/Body, Wheels/Tires, Undercarriage)
- Set Max Points per criteria (default 10)
- Set Sort Order to control the display sequence
- Edit or delete criteria at any time (deleting removes all scores for that criteria)
Adding Judges
In the Users tab, add users with the Judge role:
- Click "Add User" and select "Judge" as the role
- Judges log in to the app and see a judging interface instead of voting
- Judges can score cars from their phone or tablet
- You can have as many judges as needed
Viewing Results
The Judging tab shows live results:
- Cars ranked by total score (highest first)
- Each criteria score shown per car
- Number of judges who scored each car
- Click "Print Results" for a printable results sheet
Tip: Judging and attendee voting are independent systems. You can use one or both. The Vote Tally shows attendee votes; the Judging tab shows judge scores.
18. Show Statistics
The Stats tab shows detailed analytics for the current show.
- SVG gauges: Voting Rate, Avg Votes/Car, Avg Votes/Voter, Cars with Votes
- Key metrics: Attendees, Cars, Classes, Total Votes, Voters, Zero-vote Cars, Judges, Sponsors
- Most/Least voted car with vote count
- User breakdown by role
- Votes by class — horizontal bar chart
- Voting activity — timeline bar chart by hour
- Print Stats button for a printable version
19. Publish Winners
In the Config tab, the 🏆 Publish Winners toggle controls whether attendees can see results.
- Off (default): Winners are hidden — the "View Winners" button doesn't appear in the app
- On: A gold "🏆 View Winners" button appears on the attendee dashboard
- Winners show medals (🥇🥈🥉), car details, owner name, vote count, and car photo
- Classic/Unique: Best in Class format. Top/People's Choice: overall ranking
Tip: Enable this at the awards ceremony for a live reveal!
20. Email Reports
On both the Tally and Stats tabs, click 📧 Email Report to send a formatted HTML email to your own email address containing:
- SVG gauge arcs for key metrics
- Summary stats row
- Full vote tally table with medals, class groupings, and vote counts
- Styled with show branding
21. Global Dashboard (SuperAdmin Only)
The 📊 Dashboard tab shows platform-wide statistics across ALL shows.
- Total shows (active/closed), users, cars, votes, sponsors
- Users by role breakdown
- Per-show comparison table with all key metrics
- Recent votes and signups across all shows
- Printable version
22. Cleanse Show (SuperAdmin Only)
Found in the Config tab, the 🧹 Cleanse section provides irreversible maintenance operations.
- 🔢 Realign Car Numbers: Renumbers all cars sequentially (1, 2, 3...) ordered by current number
- 🗳️ Remove All Votes: Deletes all votes — voting starts fresh
- 👥 Remove All Attendees & Cars: Deletes all attendees, their cars, and votes. Admins and judges are kept.
- 💣 Full Reset: Removes ALL users, cars, classes, votes, sponsors, and judging data. Only the show config remains. Requires double confirmation.
Warning: All cleanse actions are irreversible. There is no undo.
23. Revenue Balance Sheet
The 💰 Revenue tab tracks income for the current show.
- Quick stats: Cars registered, Attendees count, Total Revenue
- Add items: Category (Car Entry, Spectator, Sponsorship, Merchandise, Food/Drink, Other), description, unit price, quantity
- 🔄 Auto-calculate Car Entries: Enter fee per car — auto-populates with current car count
- Table: All items with subtotals and grand total
- Delete individual items
24. Custom Awards
The 🎖️ Awards tab lets you create special awards beyond voting results.
- Create awards with icon (🏆🥇⭐👑🔥💎 etc.), name, and description
- Examples: "Organizer's Pick", "Longest Distance Driven", "Best Engine"
- Assign to a car via dropdown — shows car number, make, model
- Awards appear on the car's Car Detail Page in the attendee app as gold badges
- Delete or reassign awards at any time
25. Photo Gallery & Car Details
Attendees can tap any car in "All Vehicles" to see a full Car Detail Page with:
- Hero image, car number badge, year/make/model, color
- Owner name and city
- Class badge and modifications
- 🏆 Awards — any custom awards assigned to this car
- Reactions — 6 emoji buttons (🔥 ❤️ 💪 👏 🏆 😍) that toggle on/off with counts
- 📸 Photo Gallery — upload photos via camera or gallery, compressed automatically
- 💬 Comments — add/delete comments (SuperAdmin can delete any)
- 💬 Message Owner — send a private message to the car's owner (when messaging is enabled)
The 📸 Photo Gallery button on the Dashboard shows all photos from all cars in the show, with a full-screen lightbox and "View Car Details" link.
26. Bulk SMS (SuperAdmin Only)
In ⚙️ Site Admin, configure Twilio to send text messages to all attendees.
- Enter Twilio Account SID, Auth Token, and Phone Number
- Compose a message (160 chars max)
- Click "Send SMS to All Attendees" — sends to all attendees with phone numbers in the current show
- Requires a Twilio account
27. Automated Backups
A nightly cron job backs up the database automatically.
- Runs at 3am daily via
backup.sh
- Creates compressed
.sql.gz files in /opt/autovotespro/backups/
- Keeps 14 days of backups, auto-deletes older ones
- Optional: uncomment email line in script to receive backups by email
28. Admin as Attendee
SuperAdmins and ShowAdmins can join a show as an attendee to vote and register cars.
- In the Config tab, a yellow banner appears if you're not registered as an attendee
- Click "Join as Attendee" — auto-approved, car slot assigned
- Admin sees both admin buttons AND attendee features (My Cars, Vote, Tally, etc.) on the app Dashboard
- Admins can also pre-register via the registration page — same approval flow as regular attendees
29. Multi-Language Support
The attendee app supports 5 languages, selectable by each user from the Dashboard.
Supported Languages
- 🇬🇧 English (default)
- 🇫🇷 Français (French)
- 🇪🇸 Español (Spanish)
- 🇩🇪 Deutsch (German)
- 🇨🇳 中文 (Chinese Simplified)
How It Works
- Attendees tap a flag button at the bottom of the Dashboard to switch language
- All buttons, labels, headers, and navigation text change instantly
- The selection persists during the session
What's Translated
- Dashboard: All buttons (My Cars, Vote, Tally, Sponsors, Gallery, Winners, Messages, Help, Sign Out, etc.)
- Navigation: ← Back button, My Shows, Edit Profile
- Car Detail Page: Owner, Class, Modifications, Reactions, Photos, Comments, Message Owner, upload buttons
- Photo Gallery: Title, Add Photo, Select Car, empty states
- Marquee Banner: Voting expiry, incomplete cars, missing votes, unread messages
- Messaging: Messages screen title, conversation labels, send button
- Waiver: Waiver screen title, agreement checkbox, accept button
- Common: Loading, Error, Success, Cancel, Delete, Language
Not Translated
- Custom announcements: Marquee announcement text is admin-written and displays as entered
- Show names, car data, comments, messages: User-generated content stays in its original language
- Waiver text: The waiver content is admin-written and displays as entered
- Admin panel: The admin interface remains in English
30. Door Prizes
The 🎁 Door Prizes tab lets you create prizes, draw random winners, and track prize collection.
Creating Prizes
- Enter Prize Name (e.g. "Clock", "$50 Gift Card"), optional Description and Sponsor
- Click ✏️ to edit a prize name, description, or sponsor at any time
Drawing Winners
- Click 🎰 Draw Winner — randomly selects a registered car
- A car can only win once across all door prizes — previous winners are excluded
- Winner shows: Car #, Year/Make/Model, Owner name, draw time
- Click 🔄 Redraw to clear a winner and pick again
Tracking Collection
- 📋 Mark Retrieved — changes card from yellow to green when attendee collects their prize
- Mark Unretrieved — toggle back if needed
- Summary bar shows: Total Prizes, Drawn, Retrieved, Pending
Attendee Notification
- Winners see a red marquee banner: "🎉 Your car #X won Door Prize #3: Clock!"
- Banner has highest priority (shows first) and disappears once marked as retrieved
- All attendees can tap 🎁 Door Prizes on the Dashboard to see all drawn winners
- Winner list auto-refreshes every 15 seconds during the event
31. Photo & Comment Management
In the Cars tab, click 📸 Photos & Comments to manage all user-uploaded content.
Photos
- Grid of all uploaded photos with thumbnail preview
- Each card shows: photo preview, car #, make/model, caption, uploader name, date
- Delete button to remove any photo
Comments
- Table of all comments across all cars
- Shows: Car, Comment text, Author, Date
- ✕ button to delete any comment
Tip: Photos and comments can also be deleted from the app — tap any car in "All Vehicles" to see its detail page. Admins see delete buttons on all content.
32. Merchandise Store
The 🛍️ Merch tab lets you sell show merchandise through the attendee app.
Managing Items
- Add items: Name, Description, Price, and Sizes (comma-separated, e.g. S,M,L,XL,2XL)
- ✏️ Edit — change name, description, price, or sizes at any time
- Mark Sold Out / Restock — sold out items are hidden from attendees
- ✕ Delete — remove an item entirely
Managing Orders
Click 📋 View Orders to see all attendee orders.
- Summary cards: Total Orders, Total Revenue, Paid count, Pending count
- Order table: Order #, Item, Size, Qty, Total, Buyer name/email, Status, Paid
- Change status: Pending → Completed → Cancelled via dropdown
- 💰 Paid toggle: Mark an order as paid when attendee pays at the table
Tip: Attendees order from the app and pay at the registration table when they pick up. No online payment required for merch.
33. Photo Likes & Best Photo
Attendees can like photos in the gallery by tapping the ❤️ button. Each user gets one like per photo (tap again to unlike).
- Photos can be sorted by 🕐 Recent or ❤️ Popular
- The photo with the most likes appears in a 🏆 Best Photo gold banner at the top of the gallery
- Like counts are visible on both the gallery grid and the full-screen photo viewer
- Best Photo updates live as likes come in
34. Scan Car QR (App)
Attendees can scan a car's QR code from the Dashboard to view its detail page.
- Tap 📷 Scan Car on the Dashboard → opens camera → scan QR → opens Car Detail page
- Same QR code scanned from the 🗳️ Vote screen will cast a vote instead
- This gives QR codes dual purpose: view details OR vote, depending on context
35. Judge Scoring (App)
Judges can now score cars directly from the app — no admin panel needed.
- Judges see ⚖️ Judge Scoring button on their Dashboard (only visible to Judge role)
- Car list with progress dots: 🟢 scored, 🟡 partial, ⚪ not started
- Scoring view: −/+ buttons, direct number input, Max/Half quick buttons
- Color-coded score bars (green ≥80%, yellow ≥50%, red <50%)
- Running total with percentage at top
- Notes field for Freestyle/Concours formats
- Pre-fills existing scores when revisiting a car
- Supports all 3 formats: Traditional, Freestyle, Concours
36. Attendee & Car Count Marquee
A live count of attendees and cars can be displayed in the marquee banner.
- Toggle in Config tab → 🚗 Attendee & Car Count
- Shows: "🚗 47 attendees / 82 cars at the show!"
- Only counts approved Attendee-role users (excludes admins and judges)
- Updates live as new attendees register and are approved
- Translated to all 5 languages
- Lowest priority (shows after other messages)
37. Pre-Registration Flow
Pre-registration now assigns car numbers on approval, not on registration.
- Attendee pre-registers → no car created yet, car count stored in show_users
- Admin sees requested car count in ⏳ Pending Approvals to verify against payment
- On Approve → cars created with next available numbers → alert shows assigned car numbers
- If attendee opted into confirmation emails → approval email sent automatically with car number(s) and login link
- Admin knows which dash cards to hand out: "Assigned car #5, #6"
- On Reject → simply removed from show, no cars to clean up
- Approve All creates cars for all pending users in one click
38. Spectator Mode
Spectator mode provides no-login public access to your car show. Share the link with anyone — no account needed.
Access
- URL:
autovotespro.org/spectator?showId=X
- Also accessible via the 👁️ Live Spectator View button on the show details page
- Auto-refreshes every 30 seconds
Tabs (Bottom Navigation)
- 🚗 Cars — All vehicles with car number, make/model, owner, class, modifications, and thumbnail photo. Tap any car for full detail view
- 📸 Photos — Photo gallery sorted by likes, Best Photo banner, full-screen viewer
- 📊 Results — Live vote tally (handles all 4 show types). Medals on top 3
- 🛍️ Shop — Browse merchandise with prices and sizes (read-only, must log in to order)
- 🏅 Sponsors — Sponsors grouped by tier (Platinum/Gold/Silver/Bronze) with logos
- 📷 Scan — Scan a car's QR code to view its detail page with photos, reactions, comments, and awards
What Spectators See
- Show flyer displayed at full width at the top
- Live stats bar: Attendees, Cars, Votes, Photos
- All content is read-only — no voting, no commenting, no photo uploads, no ordering
Tip: Print the spectator QR code and display it at the venue entrance so walk-up visitors can follow along on their phones.
39. Paper Ballot Entry
Access from Tally tab → 📝 Paper Ballot (red button). Allows admins to enter votes from paper ballots on behalf of attendees.
How It Works
- Step 1: Select an attendee from the dropdown
- Step 2: Depends on show type (see below)
- Step 3: Tap a car to cast the vote
Show Type Behavior
- Classic: Select a class → shows only cars assigned to that class → one vote per class
- Unique: Select a class → shows ALL cars → one vote per class, same car can win in multiple classes
- Top (e.g. Top 10): No class selection → shows all cars → tap to vote up to the limit
- People's Choice: Paper ballot not needed (anonymous QR voting)
Features
- Classes show ✅ green when voted, ⬜ yellow when not yet voted
- ✕ button to remove a vote
- Progress bar shows votes cast vs total
- All voting rules enforced (no self-vote, no duplicates, class limits)
- Fast loading — single API call, class switching is instant
40. Door Prize TV Display
A standalone page designed for projecting on a TV or monitor at the venue.
Access
https://autovotespro.org/app/door-prize-display.html?showId=X
Features
- Auto-scrolling prize cards (seamless vertical loop)
- Color-coded: 🟡 unclaimed (pulsing red border), 🟢 retrieved (green), ⬜ not yet drawn (dim)
- Stats bar: total prizes, drawn, retrieved, unclaimed
- Show logo and name in header
- Auto-refreshes every 60 seconds — new winners appear automatically
- Hover pauses scrolling
- No login required
41. User Management Features
Color-Coded User Rows
- Red background: SuperAdmin
- Orange background: ShowAdmin
- Purple background: Judge
- Blue background: Attendee (approved)
- Yellow background: Pre-Registered (pending)
Search Bar
Type in the search bar at the top of the Users tab to filter both pending approvals and the user table by name or email. Instant filtering, no page reload.
Car Count Dropdown
Each pending approval shows a Cars dropdown (1-10). If the attendee entered the wrong number, change it before approving. Increasing the count triggers a payment verification warning.
Revoke Approval
Click ↩ Revoke on any approved attendee to move them back to Pre-Registered status. This deletes their cars, votes, photos, and comments for the show. Confirmation dialog required.
Approve from Users Tab
Click ✅ Approve on any pre-registered user to approve them directly from the Users tab, without going to the Pending Approvals section.
42. Confirmation & Approval Emails
AutoVotesPro sends automated emails to attendees who opt in during pre-registration.
How Email Opt-In Works
During pre-registration, attendees see a checkbox: "Send me a confirmation email with my registration details." This checkbox is checked by default. The attendee's preference is stored per-registration and controls whether they receive automated emails.
Registration Confirmation Email
Sent immediately when an attendee submits the pre-registration form (if they opted in). The email includes:
- Their name and email
- Number of cars registered
- The show name
- A note that approval is pending (for free shows)
If the attendee unchecked the box, no email is sent and the success message simply says "Pre-registration submitted!" without mentioning email notifications.
Approval Email
Sent when you approve a registration, but only if the attendee checked the confirmation email box. The approval email includes:
- Their assigned car number(s)
- The show name
- A "Log In Now" button linking to the app
Email Delivery
- Emails are sent from noreply@autovotespro.org with DKIM signing for deliverability
- Email failures are logged but never block the registration or approval action
- If attendees report not receiving emails, remind them to check spam/junk folders
Tip: The email preference is visible in the Pending Approvals section. You can see whether each attendee opted into emails before approving them.
43. Waiver Management
Waivers are optional per-show liability agreements that attendees must accept before participating.
Setting Up a Waiver
1
Go to the Waivers section in the Config tab
Look for the waiver toggle and text fields.
2
Enable the waiver
Toggle "Waiver Required" to on.
3
Set the title and text
Enter a waiver title (e.g. "Participant Waiver & Release") and the full waiver text. Use plain text — paragraph breaks are rendered automatically.
4
Save
The waiver takes effect immediately for both the registration page and the in-app waiver screen.
Where Waivers Appear
The waiver appears in two places:
- Registration page: Embedded between the form fields and the submit button. Registrants must scroll through and check "I agree" before they can submit.
- In the app: If a logged-in attendee hasn't accepted the waiver yet, they're automatically redirected to the Waiver screen before they can access the Dashboard. They must scroll to the bottom, check the agreement, and tap "Accept Waiver."
Viewing Waiver Acceptances
The waiver acceptance data is stored in the database with the attendee's name, acceptance date, IP address, and browser user agent. This provides an audit trail for legal compliance.
Important: Changing the waiver text after attendees have accepted does not require them to re-accept. If you make material changes to the waiver, you may want to reset acceptances (contact the developer) or create a new show.
Tip: Write the waiver in plain text. The registration page and app will handle paragraph formatting automatically. HTML tags in the waiver text should be avoided.
44. Messaging & Moderation
Messaging lets attendees communicate directly with each other through private one-on-one conversations in the app.
Enabling/Disabling Messaging
In the Config tab, toggle "Enable Messaging" on or off for the current show.
- When enabled: a "💬 Message Owner" button appears on car detail pages, and a "Messages" button appears on the attendee Dashboard
- When disabled: the Message Owner button is hidden and the Messages section is not visible on the Dashboard
How Messaging Works for Attendees
- Attendees start conversations by tapping "💬 Message Owner" on any car detail page
- This creates a one-on-one conversation between the viewer and the car's owner
- Messages are scoped to the show — an attendee registered in multiple shows has separate conversation histories
- The conversation screen auto-refreshes every 5 seconds for near-real-time messaging
- The messages list auto-refreshes every 15 seconds to check for new conversations
Unread Message Notifications
Attendees are notified of unread messages in two ways:
- A count badge on the Messages button on the Dashboard
- A purple notification in the marquee banner: "You have X unread message(s)"
The unread message marquee notification requires no admin configuration — it appears automatically when messaging is enabled and the attendee has unread messages.
Moderating Conversations
Admins can view all conversations for the current show through the admin panel's Messages tab. You can browse any conversation and see the full message history. Use this for handling disputes or reviewing inappropriate content.
Note: Admins cannot currently send messages on behalf of users or delete individual messages from the admin panel. Moderation is view-only for now.
Tip: If you need to disable messaging during an event (e.g. to reduce distractions during voting), simply toggle it off in the Config tab. Existing conversations are preserved but hidden from attendees until you re-enable it.
45. Purge Show Script (SSH)
For complete show removal via SSH, a bash script is available at /opt/autovotespro/server/Documents/purge-show.sh.
What It Does
- Removes all data for a show: cars, votes, photos, comments, reactions, judge scores, conversations, messages, waivers, merchandise, orders, classes, sponsors, awards, door prizes, revenue items, and judging criteria
- Removes the show itself from the database
- Keeps SuperAdmin and ShowAdmin accounts
- Keeps Attendees/Judges who are registered in other shows (just removes them from this show)
- Deletes Attendees/Judges who are only in this show (orphans)
- Runs an orphan check at the end to verify cleanup
How to Use
1
SSH into the server
ssh root@129.121.102.38
2
Edit the show ID
Open the script: nano /opt/autovotespro/server/Documents/purge-show.sh
Change SID=13 at the top to the show ID you want to purge.
3
Run the script
bash /opt/autovotespro/server/Documents/purge-show.sh
4
Review and confirm
The script shows a full breakdown of what will be removed and what will be kept before asking for confirmation. Type yes to proceed.
Warning: This is irreversible. Always back up the database before running: mysqldump -u root autovotespro > /opt/autovotespro/backups/manual-backup.sql
46. Troubleshooting
Communication Error on Login
The API URL in admin.html may be incorrect. Ensure it points to the correct server address.
ShowAdmin Sees "No Active Shows"
All shows assigned to this ShowAdmin are closed. A SuperAdmin needs to open a show for them.
"Email already in use" when adding users
This should now re-link the existing user. If it still fails, the user may already be in this show. Check the Users tab.
Password reset emails not arriving
Reset emails are sent from noreply@autovotespro.org using the server's mail system with SPF and DKIM authentication. If emails aren't arriving:
- Tell the attendee to check their spam/junk folder
- Check the server logs:
grep "gmail\|yahoo\|hotmail" /var/log/exim_mainlog | tail -5
- As a fallback, use the "Reset PW" button on the Users tab to reset their password manually
Confirmation/approval emails not arriving
These emails use the same mail system as password reset emails. Check:
- Did the attendee check the "Send me a confirmation email" box during registration? If not, no email is sent by design
- Check the PM2 logs for email errors:
pm2 logs autovotespro --lines 20
- Tell the attendee to check their spam/junk folder — emails come from noreply@autovotespro.org
- Email failures never block registration or approval — the action still succeeds even if the email fails
Show switching not working
Click the purple "Switch Show" button in the show bar to switch between shows. Both SuperAdmins and ShowAdmins can switch. On the Shows tab, SuperAdmins can also click "Manage" to switch to any show, or "Activate" to make a show the system default.
Stripe payments not working
- Verify your Publishable Key starts with
pk_live_ (or pk_test_ for testing)
- Verify your Secret Key starts with
sk_live_ (or sk_test_ for testing)
- Make sure both keys are from the same Stripe account and mode (live or test)
- Check the server logs:
pm2 logs autovotespro --lines 20
- Test with Stripe test card:
4242 4242 4242 4242, any future expiry, any CVC
PayPal payments not working
- Verify both your Client ID and Secret Key are correct from the PayPal Developer dashboard
- Both fields are required — PayPal uses a server-side redirect flow that needs both credentials
- Make sure Live Mode is checked for real payments (uncheck for sandbox)
- If the "Pay with PayPal" button doesn't redirect, check the server logs:
pm2 logs autovotespro --lines 20
- Ensure your PayPal app has the correct return URL configured
Attendee paid but not approved
If an attendee reports paying but their show still says "Pending Approval":
- Check your Stripe dashboard or PayPal account to verify the payment
- You can manually approve them from the Users tab → Pending Approvals
- Check server logs for errors during the payment completion step
Class import shows duplicates
The same CSV was imported multiple times. Delete duplicate classes in the Classes tab, or delete all classes and re-import.
Votes not showing in tally
Ensure the correct show is active. The tally shows votes for the active show only.
Car photos not loading
Ensure the class-images folder is present on the server. Check that image uploads completed successfully.
Attendees can't vote
Check: Is the vote window set and currently open? Is the show active? Is the attendee assigned to the show?
Camera scanner not working for attendees
The QR camera scanner requires HTTPS. Ensure SSL is configured on the server. Attendees can use "Vote by Number" as an alternative.
Attendee stuck on waiver screen
The attendee must scroll all the way to the bottom of the waiver text before the checkbox becomes available. If the waiver text is very long, they may need to scroll slowly. If they've already accepted the waiver but keep being redirected, check the database — the waiver_accepted field in the show_users table should be 1.
Messaging not showing for attendees
Check that messaging is enabled in the Config tab. If it's enabled but the "Message Owner" button isn't appearing, ensure the attendee is viewing a car owned by someone else (you can't message yourself). The Messages button on the Dashboard only appears when messaging is enabled for the show.
Server logs
Check the logs folder in the server directory for daily error and access logs. On the server: pm2 logs autovotespro
14. Social Media & Website
In the Config tab, the 🌐 Social Media & Website section lets you add your show's social links: