Documentation

Learn how to use every feature of SportingDogs

Getting Started

Welcome to SportingDogs.app — built for SBHA and partner field trial association handlers.

> New in 2.12.0: most of the site is now publicly browsable — share a link to a dog's brag sheet, an event, a club page, or a handler's résumé without making the recipient log in first. You only need an account to register for events, post to the feed, edit your dogs, or see contact info.

What you can do here

  • Browse the field trial calendar — Sort and filter by date, state, region, association, participant type, and event type. Free-text search across event names, clubs, grounds.
  • Save events to an itinerary — Plan your year of competitions in one place. Get reminder emails 7 days, 24 hours, and 2 hours before entries close.
  • Register dogs and pay entry fees — Online registration with Stripe checkout for participating clubs. Eligibility checks built in.
  • View brace assignments — See the running order once the club secretary has drawn braces. Multi-day scheduling supported.
  • See post-event results — Per-event placements page with earned SRS Crown, Purina Retriever, and Purina Pointing-Dog points.
  • Browse the season standings — Sortable leaderboards across every event for SRS Crown and all Purina award categories.
  • Track your dogs' careers — Titles, health clearances, full results history table with year/sport filters.
  • Browse host clubs — Public clubs directory at /clubs with upcoming events, contact info, and admin rosters.

Quick Start

  • Sign in — SportingDogs.app is currently invite-only. Go to Sign In.
  • Add your dogs — Click Add Dog to register breed, DOB, pedigree, registration org/number.
  • Browse events — Click Events in the top nav to see upcoming SBHA-recognized field trials.
  • Save & register — Tap the bookmark on any event to save it, or open the event and click "Register Dog" to enter stakes.
  • Watch the standings — After each trial runs, /standings updates automatically with the new placements.

Field Trial Calendar

Browse Upcoming Events

The Events page lists every SBHA-recognized and partner-association field trial we have on file.

Search

Above the filter drawer there's an always-visible search bar. Type any combination of words — it matches across event names, club names, grounds, city, and state in one query. The search persists in the URL (?q=...) so results are shareable.

Filtering

Tap Filters at the top of the events page. You can combine any of:
  • Date range — From/To dates
  • State — Filter by US state where the event is held
  • Region — Northeast / Southeast / Midwest / Plains / West / Pacific (covers multiple states at once). Region overrides state — pick one or the other.
  • Geo-radius — ZIP code or "Use my location" + radius (50–1000 mi). Distance shown on each result.
  • Association — SBHA, NBHA, AFTCA, ABHA, USCSDA, NGSPA, NRSFTC, NVA
  • Participant Type — Open / Amateur / Pro
  • Event Type — Puppy, Derby, Shooting Dog (Walking, Horseback), Shooting Dog Derby, All Age, Cover Dog, Gun Dog, Youth
  • Saved only — Show only events on your itinerary
Filters auto-apply as you change them.

Calendar vs List view

At the top of the page there's a List ↔ Calendar toggle. The calendar view shows a month grid with events as colored chips (yellow = on your itinerary). Click any tile to open the event detail.

What each event card shows

  • Association badges (SBHA, AFTCA, etc.)
  • Purina Points / Eukanuba sponsor flags
  • Date range and start time
  • Host club, grounds location
  • Number of stakes and entry-fee range
  • Quick-save bookmark button

Where event data comes from

Club secretaries submit their events. Until your club is onboarded for direct submissions, events are populated from the American Field calendar and the SBHA upcoming events page.

Saving Events / My Itinerary

Save events you're considering

On any event card or the event detail page, click the bookmark icon to save the event to your itinerary.

My Itinerary

Open the user menu (top-right avatar) and click My Itinerary, or visit /events/saved. This page shows every event you've saved, sorted by date.

Why save events?

  • Plan your year of competitions in one view
  • Get reminders as the entry-close date approaches (coming soon)
  • Quick-access registration when you're ready to enter

Registering for an Event

How to register

  • Open the event detail page from the calendar.
  • Click Register Dog in the top-right of the Stakes section.
  • For each stake you want to enter, pick which of your dogs should run. The picker only shows eligible dogs (correct age window for the stake).
  • Review the entry fees at the bottom and click Pay & Register.
  • You'll be taken to Stripe Checkout to complete payment by card.
  • After payment, you're redirected back to the My Registrations page with confirmation.

Eligibility checks

The app validates each entry before payment:
  • Age window — Puppy stakes are 6–15 months at event start; Derby stakes are 6–24 months. Dogs outside the window are filtered from the picker.
  • Ownership — You can only register dogs you own.
  • Duplicates — A dog can't be entered in the same stake twice.

Free entries

Stakes with $0 entry fees (e.g. Youth Stakes) are confirmed instantly without going through Stripe.

Manual / offline payment

For clubs not yet using Stripe, the registration is recorded with status "Pending" and the club secretary will contact you with payment instructions.

My Registrations

Visit /registrations to see every entry you've submitted, grouped by event, with status badges:
  • Pending — Submitted but not yet paid
  • Confirmed — Payment received, you're in
  • Withdrawn — You or the club withdrew the entry
  • Scratched — Entry scratched at the event
  • Completed — Event ran, results recorded

Refunds & withdrawals

If you need to scratch or withdraw, contact the club secretary listed on the event detail page. Refunds are processed via Stripe per the club's policy.

Printable Running Order

What it is

A print-friendly version of any event's brace draw at /events/[id]/braces/print. Public, server-rendered, optimized for letter paper.

How to print

  • Visit any event's running order at /events/[id]/braces
  • Click Print in the top-right of the page header
  • The print page strips the site nav and chrome, then click Print / Save as PDF (or Ctrl/Cmd+P)

What's on the print

  • Event name, date range, grounds, city/state in the banner
  • Summary: stake count, brace count, total entries
  • One section per stake (sorted by stake run order)
  • Per brace: brace #, day, scheduled time, course label (when set), Dog 1 / Handler 1, Dog 2 / Handler 2, BYE label when applicable
  • Page-break-inside: avoid on each stake so the same stake doesn't split mid-table

Notes

  • If the draw hasn't been run yet, the print page shows the same "check back after the official drawing" message as the regular running-order page
  • The URL is bookmarkable and shareable — anyone can view, print, or save without signing in

Brace Draws & Running Order

What's a brace?

In bird dog field trials, dogs run in pairs — two dogs at a time on a course. The pairing is called a brace, and the order of braces is determined by a draw, typically performed by the club secretary after entries close.

When the draw happens

Each event lists its draw time in the Drawing & Entry Info card. After that time, return to the event page and click View Running Order / Brace Draw to see the schedule.

What the running order shows

For each stake:
  • Brace number (#1, #2, #3…)
  • Day assignment
  • Scheduled run time (when set)
  • Both dogs in the brace, with handler names
  • "Bye" badge for single-dog braces (when entry count is odd)

Bye-brace policy

Per AKC / American Field convention, a single unpaired dog runs as a "bye brace." The deck mentions a 3-bye limit per stake, which the system enforces.

For club secretaries

The brace draw is run via the API. A pretty admin UI is coming in a future release. For now, secretaries can call `POST /api/events/[id]/draw` to trigger a randomized draw across all stakes in an event. Pass an optional `seed` for a reproducible draw.

Registering a Dog

How to Register a Dog

Navigate to Dogs → Register Dog (or click the "Add Dog" button in the top navigation).

Required Fields

  • Call Name — The name you use day-to-day (e.g., "Thunder")
  • Breed — Select from all 32+ AKC Sporting Group breeds
  • Sex — Male or Female
  • Date of Birth — Used to calculate age

Optional Fields

  • Registered Name — Full registered name with titles (e.g., "Riverbend's Rolling Thunder MH")
  • Height & Weight — Physical measurements in inches and pounds
  • Color — Coat color description
  • Photo — Upload a profile photo (JPG or PNG, up to 5MB)
  • Sire & Dam — Parent names for pedigree tracking
  • Registration — Organization (AKC, UKC, CKC, NAVHDA, FDSB) and registration number

Breed Groups

Dogs are automatically categorized into groups based on breed:
  • Retrievers — Lab, Golden, Chesapeake, Flat-Coat, Curly-Coat, Toller
  • Pointers/Versatile — GSP, GWP, Vizsla, Weimaraner, Brittany, Griffon, etc.
  • Setters — English, Gordon, Irish, Irish Red & White
  • Spaniels — Springer, Cocker, Boykin, Clumber, Field, etc.

Competition Results

Supported Competition Types

AKC Hunt Tests (Pass/Fail)

  • Levels: Junior, Senior, Master
  • Scoring: 0-10 per category, 7.0 average to qualify
  • Categories: Marking, Style, Perseverance, Trainability, Blind Retrieve, Honoring
AKC Field Trials (Competitive placement)
  • Stakes: Open, Amateur, Derby, Qualifying, Gun Dog
  • Points: 5 (1st), 3 (2nd), 1 (3rd), 0.5 (4th)
NAVHDA Tests (Prize-based)
  • Tests: Natural Ability (NA), Utility Preparatory (UPT), Utility (UT)
  • Prizes: Prize I (highest), Prize II, Prize III
  • Scoring: 0-4 per category with weighted multipliers
Dock Diving (NADD/DockDogs)
  • Disciplines: Distance Jump, Air Retrieve, Speed Retrieve
  • Divisions: Novice, Junior, Senior, Master, Elite
  • Metrics: Distance (ft), Height (ft), Time (sec)
Agility (AKC)
  • Classes: Standard, JWW, FAST, Premier, T2B
  • Scoring: Start at 100, deductions for faults, must retain 85+
  • Championship points: 1 point per second under SCT in Master
Rally Obedience — Score out of 100, 70+ to qualify Flyball — Team relay times and NAFA points Barn Hunt — Pass/fail with time limits per level

How to Log a Result

From your dog's profile page, you can add competition results with:
  • Sport type, organization, event name and date
  • Level/stake, placement/result, qualifying status
  • Score, time, distance, points as applicable
  • Per-category breakdowns for detailed scoring

Titles & Achievements

Title System

Titles are awards earned by meeting specific criteria in competition. They appear on your dog's profile.

Title Types by Organization

AKC Hunt Tests (suffix): JH, SH, MH, JHA, SHA, MHA AKC Field Trials (prefix): FC, AFC, NFC, NAFC AKC Agility (suffix): NA, NAJ, OA, OAJ, AX, AXJ, MX, MXJ, MACH, PACH AKC Rally (suffix): RN, RI, RA, RE, RAE, RM, RACH NAVHDA: NA Prize I/II/III, UPT Prize I/II/III, UT Prize I/II/III, VC NADD Dock Diving (suffix): DN, DJ, DS, DM, DE NAFA Flyball (suffix): FD, FDX, FDCh, FM, ONYX, FGDCh Barn Hunt (suffix): RATN, RATO, RATS, RATM, RATCH

Prefix vs Suffix

  • Prefix titles appear before the name (e.g., FC AFC Thunder)
  • Suffix titles appear after the name (e.g., Thunder MH)
  • The app tracks both and displays them correctly on dog profiles

Adding & Removing Titles

  • Visit your dog's profile (you must be signed in as the owner)
  • In the Titles Earned section, click Add Title
  • Pick a quick-preset chip (JH, SH, MH, NA Prize I, FC, AFC, MACH, etc.) or fill in a custom code
  • Confirm the date earned and save
  • To remove a title, click the small trash icon next to the title code (you'll be asked to confirm)

Health Clearances

Tracking Health Clearances

Health clearances are critical for breeding decisions and demonstrate responsible ownership.

Supported Health Tests

OFA Hip Evaluation

  • Grades: Excellent, Good, Fair, Borderline, Mild/Moderate/Severe Dysplastic
  • Minimum age: 24 months for final certification
PennHIP
  1. Distraction Index: 0.0 (tightest) to 1.0 (loosest)
  2. Can be performed as early as 16 weeks
OFA Elbow Evaluation
  • Grades: Normal, or Grade I/II/III Dysplasia
Eye Certification (CAER)
  • Annual exam by board-certified veterinary ophthalmologist
  • Valid for 12 months — app tracks expiration dates
Cardiac Evaluation
  • Auscultation or echocardiogram results
DNA/Genetic Tests
  • EIC (Exercise-Induced Collapse)
  • CNM (Centronuclear Myopathy)
  • PRA-prcd (Progressive Retinal Atrophy)
  • DM (Degenerative Myelopathy)
  • Results: Clear/Normal, Carrier, Affected

OFA Certification Numbers

Each clearance can store the official OFA certification number for verification.

Adding & Removing Health Clearances

  • Open your dog's profile while signed in as the owner
  • In the Health Clearances section, click Add Clearance
  • Pick a clearance type (Hip, PennHIP, Elbow, Eye, Cardiac, Patella, Thyroid, or DNA panels)
  • The result dropdown adapts to the chosen type (e.g. Hip → Excellent / Good / Fair, DNA → Clear / Carrier / Affected)
  • Optionally add a certificate number and an expiration date (Eye CAER results expire annually)
  • To remove a clearance, click the trash icon at the end of its row

Training Journal (Private)

What it is

A private log of training sessions per dog. Only you (the dog's owner) can see these entries — they don't appear on the public dog profile, on handler profiles, or anywhere else on the site.

Why it's useful

Field trial training is a long game. The journal lets you:
  • Track what you've actually worked on across weeks and months
  • Spot patterns ("we always struggle with the long blind on windy days")
  • Remember conditions ("first time he ran at Roxboro Grounds — 38° and sleet")
  • Be honest about a tough session without it being part of your dog's public record

Logging a session

  • From your dog's profile, find the Training Journal section
  • Click Log Session
  • Pick the date (defaults to today; can't be in the future) and a session type (Yard, Marks, Blinds, Field Work, Conditioning, Bird Work, Obedience, Vet Visit, Other)
  • Optionally fill in duration in minutes, weather, and a location
  • Use the notes field for as much detail as you want — up to 4000 characters
  • Save

Removing an entry

Click the trash icon at the top-right of any entry. You'll be asked to confirm.

Privacy

The privacy pill next to the section title is a reminder: training journal entries are owner-only at the API + page level. Even other handlers visiting your dog's profile won't see this section at all.

Following Dogs

Why follow a dog?

Maybe it's your puppy's sire, the standout performer at every event you attend, or the dog you keep seeing on the leaderboards. Follow a dog and you'll get a notification (in the bell-icon inbox) the moment they:

  • Earn a new title (e.g. "Scout earned a new title: MH")
  • Place at a field trial (e.g. "Scout placed 1st at Spring Classic")
  • Are named sire or dam on a new litter announcement (e.g. "Scout sired a new litter")
The owner is excluded from these — they obviously already know.

How

  • Visit any dog profile
  • Click Follow in the header (next to Brag Sheet)
  • The button flips to Following with a filled gold star — you're done

Where to find your follows

  • Click your avatar (top-right) → Dogs I Follow
  • Or jump directly to /me/follows
  • The page shows a grid of every dog you follow with photo, breed, owner, and quick title/results counts

Unfollowing

Click Following on the same button — it toggles off. Idempotent: clicking twice is safe.

Privacy

Followers and follower counts are not shared with the followed dog's owner — there's no leaderboard or list of "who follows me." It's a personal bookmark with notifications attached.

Litter Announcements

What it is

A public directory of litter announcements at /litters. Breeders post their upcoming, expected, born, available, and sold-out litters; everyone else gets a discoverable feed of who's breeding what.

Announcing a litter

  • Sign in and click Announce a Litter at the top of /litters (or navigate directly to /litters/new)
  • Pick the sire and dam — autocomplete suggests dogs registered on the platform (sex-filtered: Male for sire, Female for dam). If a parent isn't on the platform, just type the name as plain text.
  • Pick a status: Planned, Bred, Born, Available, or Sold Out
  • Optionally fill in expected date, born date, male/female puppy counts, a description, a photo, and a contact note
  • Save — you land on the detail page and the litter appears on /litters

What viewers see

  • The /litters grid with photo, status pill, sire × dam, expected/born date, and breeder name
  • A detail page with full description and breeder contact (email is hidden from guests — they see a 'Sign in to contact' link)
  • A Litters section automatically appears on each parent dog's profile listing every announcement that references them

Editing

  • Click Edit in the detail page header (breeder only) to update any field — status, dates, counts, description, photo, contact note, or even swap the linked parents
  • Delete is also breeder-only (trash icon next to Edit)
  • Status flow over the litter's life: Planned → Bred → Born → Available → Sold Out

Pedigree Linking

Linking parents to other dogs

When you fill in the Sire or Dam field on the dog form, the platform searches for matching dogs registered on the site as you type. If you pick a suggestion, that parent becomes a link — the dog profile will show it as a clickable name pointing to the parent's profile.

If the parent isn't registered on the platform, just type their name as plain text — it still saves correctly, just without the link.

How filtering works

  • The Sire field only suggests Male dogs
  • The Dam field only suggests Female dogs
  • The dog you're editing is excluded from its own suggestions (no self-parenting)

Unlinking

After picking a suggestion, the field shows a "linked" pill. Click the X icon to unlink and edit the field as plain text again.

Offspring on the parent's profile

When you link a dog as a parent, the parent's profile automatically shows your dog under an Offspring section — sorted alphabetically, sex marker (♂/♀) included. This makes it easy to navigate up and down family trees.

Multi-generation tree

On any dog profile, click View 4-Gen Tree in the Pedigree section to see a classic horse-style pedigree grid:
  • Column 1 — the dog (subject)
  • Column 2 — parents
  • Column 3 — grandparents
  • Column 4 — great-grandparents
Each cell links to the corresponding dog's profile when the ancestor is registered on the platform. Sire-side cells have a blue accent border; dam-side cells have a pink one. Empty slots are labeled so you can see what's missing — fill them in by editing the appropriate dog's profile.

You can keep walking back: click any great-grandparent, then View 4-Gen Tree on their profile, and you've effectively scrolled the pedigree window 3 more generations into the past.

Achievement Badges

What they are

Color-coded chips that appear on dog profiles and brag sheets, awarded automatically based on the data you've already entered. There's nothing to claim or unlock manually — add a title, log a placement, or register an offspring and the relevant badges show up.

Categories

  • Title badges (amber) — Junior/Senior/Master Hunter, FC, AFC, NFC, VC, UT Prize I, Dual Champion (FC+AFC), 10× Titled
  • Performance badges (slate / amber / red) — 100 Runs Club, 25+ Competitions, qualifying-run counter, Consistent Performer (80%+ qualify rate over 10+ runs), 50+ SRS Points, 25+/100+ Purina Points
  • Health badges (emerald) — OFA Hip Excellent, 4+ Health Clearances
  • Pedigree badges (violet for sires, blue for dams) — Champion Sire / Champion Dam (3+ titled offspring on the platform), Prolific Parent (5+ offspring registered)

Tips

  • Hover any chip to see the criterion that earned it
  • Badges appear automatically — no profile editing required
  • The brag sheet has a dedicated Achievements section so they print cleanly
  • Highest title in a ladder shows (e.g., MH hides JH)

Notifications Inbox

Bell icon

The bell in the top nav (left of your avatar) shows your unread count. Click it to jump to /me/notifications, your in-app inbox. The badge polls every 60 seconds while you're signed in.

What lands in the inbox

  • Registration confirmations — when you register for an event, a row is added immediately. If you paid via Stripe, a second 'Payment received' row appears once Stripe confirms.
  • Saved-search hits — alongside the email digest, the bell icon lights up with a row listing the first three matching events and a '+N more' tally. Click through to rerun the search.
  • Comment replies — when someone comments on your post in the feed, the bell icon shows a 'commented on your post' notification with a 120-char preview and a deep link.
  • Followed-dog milestones — when a dog you follow earns a new title, places at an event, or is named sire/dam on a new litter, the bell icon shows a row with the details and a deep link.
  • System notices — admin announcements and important platform updates.

Managing the inbox

  • Click a row's link to jump to the relevant page (e.g., /registrations)
  • Click the trash icon to dismiss a single row
  • Click Mark all read at the top to clear the unread badge in one shot
  • Up to 100 most recent notifications are shown

Comparing Dogs Side-by-Side

Stacking dogs for comparison

Visit /dogs/compare (or click the Compare button on the dogs index or any dog profile) to put up to four dogs next to each other.

What you can compare

  • Photos and registered names
  • Sex, breed, age, height, weight
  • Owner (links to handler profile)
  • Titles count + the three most recent titles as chips
  • Health clearances count
  • Total competition results
  • Qualify rate
  • SRS Crown total
  • Purina High Point Retriever total
  • Purina Pointing Dog total

Tips

  • The comparison URL is bookmarkable and shareable — every selection is encoded as `?ids=a,b,c,d`
  • Use the X in the corner of any dog card to drop it from the comparison
  • Use the picker below the table to add more dogs (up to 4)
  • The Compare button on a dog's profile starts the URL with that dog already loaded — handy for "stack my dog vs theirs"

Handler Career Résumé

What it is

A printable handler résumé at /handlers/[id]/brag, public and shareable. Click Career Résumé in the top-right of any handler profile.

What's on it

  • Avatar (or initials), name, location, contact info (or 'Sign in to contact' for guests), bio
  • Career snapshot aggregating every dog the handler owns: dogs count, titles, competitions, qualify rate, combined SRS Crown points, combined Purina High Point, Purina Pointing
  • Per-dog mini cards showing each dog's titles count, results count, SRS, and Purina totals
  • Recent results table — the 15 most recent placements across all owned dogs, with dog name, event, stake, and computed point chip

Print

Same Print / Save as PDF buttons as the dog brag sheet — letter paper, 0.4-inch margins, no nav chrome.

Printable Brag Sheet

What it is

A one-page résumé for any dog at /dogs/[id]/brag, optimized for printing on letter paper or saving as a PDF. Click Brag Sheet in any dog profile header to open it.

What's included

  • Banner photo and full titled name (prefix titles + registered name + suffix titles)
  • Vitals (sex, age, breed, color, height, weight) and registration info
  • Owner name + location
  • Career snapshot — Titles, Competitions, Qualify Rate, SRS Crown, Purina High Point, Purina Pointing
  • Full titles table
  • Full health clearances table
  • Pedigree (sire, dam, offspring names)
  • Most recent 8 competition results

How to print

  • Open the brag sheet for your dog
  • Click Print / Save as PDF in the upper-right (or use Ctrl/Cmd+P)
  • In the browser print dialog, choose your printer or "Save as PDF"
  • The site nav, header, and Print buttons are hidden automatically — only the paper prints

Tips

  • Sections are marked `page-break-inside: avoid` so tables don't split awkwardly across pages
  • The brag sheet URL is shareable and bookmarkable — anyone with a link (and a login) can view, print, or save it
  • The footer includes the generation date and SportingDogs.app branding so judges and breeders know it's authoritative

Social Feed

Community Feed

The social feed lets you share photos, videos, and updates with the sporting dog community. The feed is publicly readable — share a link to a great photo without forcing the recipient to sign in. You only need an account to post, like, or comment.

Posting

The composer is at the top of the /feed page. It's collapsed by default — click 'Share an update…' to expand:
  • Caption — up to 4,000 characters
  • Photo upload — drag-and-drop or pick a file
  • Tag a dog — only your own dogs appear in the dropdown (no tagging other handlers' dogs)
  • Sport label — Hunt Test, Field Trial, NAVHDA, Dock Diving, Agility, Rally, Obedience, Barn Hunt, Flyball
  • Either a caption OR a photo is required — both is fine
  • Click the pencil icon on your own posts to edit caption, dog tag, or sport in a small popover; the photo isn't editable here (re-upload would be a new post)
  • Click the trash icon on your own posts to delete (with confirm)

Interacting

  • Like posts — heart fills red when liked, optimistic UI bumps the counter immediately, reverts if the request fails
  • Comment — composer below each post (Send button); your comments link back to your handler profile
  • Reply notifications — when someone comments on your post, the bell icon shows a 'commented on your post' row with a 120-char preview
  • Filter the feed by sport type using the chips above the posts

Tips for Great Posts

  • Share your competition results with context (what test, what level, any challenges)
  • Training progress photos are always popular
  • Tag the sport type so others interested in that discipline can find your post

Stats & Leaderboards

Statistics Dashboard

The Stats page provides community-wide analytics and leaderboards.

Available Stats

  • Breed Distribution — Visual breakdown of registered breeds
  • Results by Sport — Competition results with qualifying rates per sport
  • Most Titled Dogs — Leaderboard ranked by total titles earned
  • Dock Diving Leaderboard — Longest jumps across all events
  • Agility Leaderboard — Top dogs by championship points
  • Titles by Breed — Which breeds are earning the most titles

How Stats Are Calculated

  • All stats are computed from real competition data logged by users
  • Qualifying rates = (qualifying results / total results) per sport
  • Leaderboards update automatically as new results are added

Calendar View

Month-grid calendar

Visit /events/calendar for a traditional month-at-a-glance view of every field trial on the platform.

Navigation

  • Use the prev / next buttons in the header to move between months
  • The current month loads by default
  • Each day cell shows the events scheduled to start that day

What the yellow highlight means

Events you've saved to your itinerary are highlighted in yellow so your planned year stands out at a glance against the rest of the calendar. Unsaved events show in the default style.

Quick navigation

Click any event tile in the grid to open that event's detail page — register, view stakes, or see the running order.

When to use it

  • Compare overlapping weekends across multiple events
  • Spot travel conflicts before you save or register
  • Get a wall-calendar view of your saved itinerary

For Club Secretaries (Admin)

Accessing the admin area

Club secretaries access the admin dashboard at /admin. Two roles can sign in:
  • Super-admins see and manage all clubs on the platform
  • Per-club secretaries (rows in the `club_admins` table) see and manage only their own club
If you should have admin access but don't, contact a super-admin to be added to the `club_admins` table for your club.

The dashboard

The /admin landing page lists:
  • Each club you manage, linking to its per-club page
  • Recent events across your clubs with registration counts at a glance

Per-club page

Click a club to open `/admin/clubs/[id]`. From here you'll see all of that club's events, summary stats, and the list of admins assigned to the club.

Creating an event

  • From the dashboard or club page, click New Event (route: `/admin/events/new`).
  • Fill in event metadata — name, host club, grounds, date range, draw time, entry close, association badges, sponsor flags.
  • Add stakes inline — each stake gets a name, type (Puppy / Derby / Shooting Dog / etc.), participant type, age window (min/max months), and entry fee.
  • Upload an event ad PDF — drag a PDF (or JPG/PNG up to 10 MB) into the file uploader. The file is stored under `/uploads/...` and linked from the public event page.
  • Save. The event is immediately visible in the public calendar.

Editing an event

Open `/admin/events/[id]` to edit any event — metadata, stakes, or the event ad. Changes take effect immediately.

Viewing & exporting registrations

From the event editor, click Registrations (route: `/admin/events/[id]/registrations`).
  • Handlers are grouped per stake
  • Status badges: Pending / Confirmed / Withdrawn / Scratched / Completed
  • The page shows total revenue across confirmed entries
  • Click Export CSV to download the full registration list for offline workflows or upload to other tools

Running brace draws

Two flavors are supported:
  • Event-wide draw — `POST /api/events/[id]/draw` randomizes braces for every stake in the event in one shot. Best when entries close at the same time across all stakes.
  • Stake-level draw — `POST /api/stakes/[id]/draw` randomizes a single stake. Best when stakes close on different dates, or when you need to re-run a draw for one stake without disturbing the others.
Both endpoints accept an optional `seed` for reproducible draws and handle bye-braces for odd-count stakes. Re-running a draw replaces the prior running order for that scope only.

Entry Reminder Emails

Never miss an entry deadline

The platform sends automated email reminders before an event's entry-close timestamp so the events you're planning on don't slip by.

The three-tier system

Reminders fire at three points before entry-close:
  • 7 days out — early heads-up so you can finalize travel and finishing touches
  • 24 hours out — the day-before nudge
  • 2 hours out — final-call reminder

Who gets reminders?

Reminders only fire for events that meet both conditions:
  • You've saved the event to your itinerary, and
  • You have not yet registered any dogs for it
Once you register, the reminders stop — no nags once you're entered. If you remove an event from your itinerary, you'll no longer receive reminders for it.

How it works under the hood

  • An hourly systemd timer hits `POST /api/cron/reminders` (authenticated via the `x-cron-token` header)
  • Each tier is tracked in the `sent_reminders` table, so retries and overlapping cron runs are idempotent — you'll never get the same tier twice
  • Emails are delivered via AWS SES, the same channel as registration confirmations

Turning them off

If you no longer want reminders for a given event, simply unsave it from your itinerary.

Installing the App

Progressive Web App (PWA)

SportingDogs is a Progressive Web App — you can install it on your phone or computer for a native app experience.

Install on iPhone/iPad

  • Open the app in Safari
  • Tap the Share button (square with arrow)
  • Scroll down and tap "Add to Home Screen"
  • Tap "Add"

Install on Android

  • Open the app in Chrome
  • Tap the menu (three dots)
  • Tap "Add to Home Screen" or "Install App"
  • Tap "Install"

Install on Desktop (Chrome)

  • Look for the install icon in the address bar
  • Click "Install"

Benefits of Installing

  • Full-screen app experience (no browser chrome)
  • Quick access from home screen
  • Works offline for basic browsing
  • Faster load times

Post-event Results & Points

Per-event results page

Once an event runs and the secretary records placements, the Results link on the event detail page goes live. Each stake shows its placement table:

  • 1st through 4th, plus JAM (Judge's Award of Merit) and RJ (Reserve JAM)
  • Each row: dog (linked to profile), handler name, breed
  • Earned points displayed as colored badges:
- 👑 Amber Crown — SRS Crown Championship points (100/60/40/20/10) - ⭐ Red star — Purina High Point Retriever Award points - 🎯 Green target — Purina Pointing Dog points (multiplier × dogs drawn)

Unplaced entries show "—" but stay listed so handlers can confirm their dog was entered.

How point engines feed standings

The same competition_results row that drives the per-event results page also feeds the season-long Standings leaderboards and each dog's career totals. Add a placement once, it shows everywhere.

For club secretaries — recording placements

On the results page, you'll see a Record button next to each registration. Click it, pick the placement, optionally enter "dogs drawn" (drives Purina pointing-dog math) and notes, save. The system auto-creates the competition_results row and flips the registration status to Completed.

You can also record placements via the API at `POST /api/registrations/[id]/result` — useful for batch imports.

Season Standings

What's at /standings

A season-long aggregation of every placement entered across every event. Three sections, all sortable, all linked to dog profiles:

  • SRS Crown Championship — top 25 dogs by total Crown points across all retriever field trial placements. Full-width feature card.
  • Purina High Point Retriever Awards — three leaderboards in a row: Top Open / Top Amateur / Top Derby. Top 10 each.
  • Purina Pointing Dog Awards — six leaderboards: All-Age, Amateur All-Age, Shooting Dog, Amateur Shooting Dog, Derby, Amateur Derby.

Year navigator

Use the prev/next arrows next to the year header to view past or future seasons. Default is the current calendar year.

Empty states

A category that has no qualifying placements yet shows "No qualifying placements yet this season" — leaderboards populate automatically as secretaries record placements after each trial.

Browsing Clubs

Public clubs index at /clubs

Every host club currently on SportingDogs.app is listed here. Each card shows:
  • Club name + city/state
  • Association badges (SBHA, NBHA, AFTCA, etc.)
  • Number of upcoming events
  • Next upcoming event date and name
  • Link to the club's external website if set
Clubs with upcoming events sort to the top.

Search & filter

  • Search by club name, city, or state
  • Filter by association — useful for finding all SBHA-recognized clubs

Club detail page

Click any club card to see its full page:
  • Bio + contact (email, phone, website)
  • Association badges
  • Upcoming Events — full event list with stake counts and entry-fee ranges
  • Past Events — last 10, each linking directly to its results page
  • Club Administrators — public roster (names + roles) so handlers know who to contact
Club admins (super-admins or anyone with a row in `club_admins`) see an extra Edit in admin button that jumps to /admin/clubs/[id].

Dog Results History

Full history table at /dogs/[id]/results

Each dog's profile page shows recent results inline. For the full history, click the Full History button next to the Competition Results heading.

The history page shows:

  • Career totals — total results, titles, total SRS Crown points, combined Purina total
  • Filter chips for year (every year that has results), sport, and a "qualifying only" toggle
  • Chronological table — date / event / sport-stake / placement / earned points (SRS Crown, Purina Retriever, Purina Pointing-Dog as colored badges)

Why this matters

This is the page handlers reference when asked "what's your dog's record?" — every result with full context. It also helps when a dog crosses a Purina or SRS threshold and you want to see exactly which placements got them there.

Multi-day Brace Scheduling (admins)

Editing brace times after the draw

On the running-order page (/events/[id]/braces), club admins see an Edit widget next to each brace row. Click it to inline-edit:
  • Day number (1–14) — useful when a stake spans multiple days
  • Scheduled time — free text like "8:00 AM" or "10:30 AM"
  • Course label — for events with multiple courses (e.g. "North", "South")
The public running-order page renders all of those as soon as they're set, so handlers and gallery know exactly when and where each brace runs.

API access

For batch updates, secretaries can use `PUT /api/braces/[id]` with `{ dayNumber, scheduledTime, courseLabel, notes, braceNumber }`. Validation enforces 1–14 day range and reasonable string lengths.

Inviting Club Admins (admins)

Why invite co-admins

A field trial club typically has more than one person handling secretary duties. Phase 6 adds a self-serve invite flow so super-admins (and existing club admins) can grant access to additional users without needing SQL access.

How to invite

On the /admin/clubs/[id] page, scroll to the Club Administrators section. Underneath the existing roster you'll see a small form:

  • Type the email address of an existing SportingDogs.app user
  • Pick a role: Secretary, Chairman, or Trustee
  • Click Add
The user gets immediate access to manage that club's events, registrations, and brace draws.

Required: target user must already have an account

You can only invite people who've already signed in at least once. If they don't have an account, ask them to sign up first (currently invite-only — contact a super-admin), then add them.

Removing an admin

Each admin row has a small trash icon. Click it, confirm, and that user loses access. The system blocks removing the last admin (unless you're a super-admin) so a club can't accidentally lock itself out.

Uploading Files (event ads, dog photos)

Event ad PDFs

On the /admin/events/[id] page, the Event Ad / Flier section accepts:
  • PDF, JPG, or PNG up to 10 MB
  • Drag-and-drop or click-to-choose
Once uploaded, the public event page renders a "Download official event ad" button that opens or downloads the file.

Dog photos

Use the Add Dog form to upload a profile photo (JPG / PNG / WebP up to 5 MB). Photos display on the dog profile, in event lists, on the standings dashboard, and anywhere else the dog appears.

Where files live

Uploads are stored on the SportingDogs.app server at `/var/lib/sportingdogs/uploads/` and served behind nginx at `/uploads/...`. Each file gets a 16-byte random UUID name so the URL isn't guessable. They're cached by browsers for 30 days.

Saved Searches

Why save a search

The events page has lots of filters — state, region, association, participant type, stake category, geo-radius, free-text search. If you keep coming back to the same combo (say "Southeast region, Open Shooting Dog stakes") save it once and never re-build it.

How to save

  • On /events, apply whatever filters you want.
  • Click the Save Search button (next to the List/Calendar toggle).
  • Give it a name — the system suggests one based on your filters — pick how often you want emails, click Save.

Notification frequency

  • As they're posted (within an hour) — instant alert when a new matching event is published
  • Daily digest — once a day if there's anything new
  • Weekly digest — Monday-morning summary
  • Don't email — save the filters without emails (you can still re-run any time)

Manage subscriptions

Open the avatar menu → Saved Searches (or /me/saved-searches). Each card shows the name, filter summary, last-notified date, frequency selector, a Run button, and Delete with confirmation. You can have up to 25 saved searches per account.

Entry-Closing Reminder Emails

How they work

If you save an event to your itinerary but don't register before entries close, the system emails you a reminder.

You'll get up to three nudges per event:

  • 7 days before entries close
  • 24 hours before
  • 2 hours before
If you've already registered (any status: pending / paid / completed), you don't get reminders for that event.

How to opt out

Remove the event from your itinerary at /events/saved. No more reminders for that event. (We don't have global notification preferences yet — coming in a future release.)

Behind the scenes

A systemd timer on the server hits `POST /api/cron/reminders` once an hour. The endpoint is signed with a CRON_TOKEN (no public access). Each (event, user, tier) triple is logged in `sent_reminders` to prevent duplicate sends.