Stuntbusters Hero

Stuntbusters

Cheer stunt troubleshooting — guided form → insights, emails, and storage

Case Study

Stuntbusters

A Web App designed for cheerleading athletes and coaches to quickly diagnose stunt issues via a simple form. Built with Python, Django, and JavaScript. On submission, the app sends automated email notifications and persists entries to the database. Backend-first, clean UX on top.

Overview

Stuntbusters streamlines how cheer athletes and coaches identify issues in group stunts. A guided form captures roles (flyer, base, backspot), reported symptoms, and context. Submissions are stored for trend analysis and automatically emailed to coaches to prompt timely action.

Challenge

In practices, diagnosing stunt failures is noisy and ad-hoc. Teams need a consistent intake to capture context and speed up coaching feedback.

Outcome

A lean, resilient Django app: structured inputs, clear statuses, one-click submission, automated notifications, and durable storage — so coaches can focus on coaching.

Minutes → Seconds
Faster stunt issue reporting
Zero-touch emails
Auto notify coaches on submit
Structured data
Trends by role/symptom/context

Role & Timeline

Role:
Product Designer & Backend Engineer (UX flows, form logic, Django models/views, email service, persistence)
Timeline:
~4–6 weeks (scope, build, iterate with real athletes/coaches)
Tools:
Figma, FigJam, Django, Python, SQLite/Postgres-ready, JavaScript

Personas

Ava — Flyer, 15

Bio: Competitive cheer athlete balancing school and practice.

Goals: Land stable libs and scales; get fast feedback on technique.

Pain: Feedback gets lost in group chats; unsure what to fix first.

Fit: Uses the form after reps to log wobble points and receive coach tips.

Coach Miguel — Head Coach

Bio: Oversees multiple stunt groups; limited time during practice blocks.

Goals: Spot patterns, prioritize drills by role and failure type.

Pain: Ad-hoc notes; hard to compare issues across groups/sessions.

Fit: Gets auto-emails with structured entries and can filter logged issues later.

Style Guide

Brand & UI Tokens

Clean, energetic palette and bold headings for quick scanning; high contrast for field labels and statuses.

Type: Inter for body and UI; heavy weights for section titles.

Process

1. Discovery

  • Quick interviews with flyers, bases, and coaches to map failure modes.
  • Audit of how feedback currently travels (verbal, notes, chats).

2. Define

  • Single form that captures: role, stunt type, symptom, context (time, group), optional media.
  • Immediate email to coaches; entry saved for later analysis.

3. Prototype

  • Low-fi form → med-fi field ordering and labels → hi-fi with validation hints.
  • CTA clarity and streamlined confirmation state.

4. Test & Iterate

  • Reduced required fields; added role-specific hints.
  • Improved mobile ergonomics (thumb-friendly selects, bigger tap targets).

Final Design

  • Guided Form: Role → Stunt → Symptom → Context.
  • Instant Feedback: Clear confirmation and next steps.
  • Responsive: Works smoothly on phones, tablets, desktops.
  • Accessible: Labels, contrast, and clear error states.

Engineering

Django backend with form handling, model persistence, and email delivery. JS progressive enhancement for small UX details (field conditioning, success state).

# models.py (simplified)
class Submission(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    role = models.CharField(max_length=20, choices=[("flyer","Flyer"),("base","Base"),("backspot","Backspot")])
    stunt = models.CharField(max_length=120)
    symptom = models.CharField(max_length=120)
    context = models.TextField(blank=True, default="")
    email = models.EmailField(blank=True, null=True)  # optional contact

# views.py (simplified)
def submit_issue(request):
    if request.method == "POST":
        form = SubmissionForm(request.POST, request.FILES)
        if form.is_valid():
            sub = form.save()
            send_mail(
                subject=f"[Stuntbusters] {sub.role} - {sub.stunt}",
                message=f"Symptom: {sub.symptom}\nContext: {sub.context}",
                from_email=settings.DEFAULT_FROM_EMAIL,
                recipient_list=[settings.COACH_EMAIL],
            )
            return redirect("thanks")
    else:
        form = SubmissionForm()
    return render(request, "submit.html", {"form": form})

Email uses Django's email backend (swappable for SMTP provider). DB is SQLite locally, Postgres-ready in production. Forms include server-side validation mirrored by lightweight client hints.

Key Learnings

  • Form friction drops when labels match athlete language.
  • Automated email creates accountability; entries don’t disappear.
  • Small mobile affordances (bigger inputs, fewer required fields) boost completion.

Impact

Consistent intake reduced time to coach feedback and improved practice focus. Saved entries enable week-over-week pattern spotting by stunt type and role.

What’s Next

  • Coach dashboard with filters and simple charts.
  • Optional media uploads for slow-mo review.
  • Role-specific suggestions (rule-based to start, ML later).
© Stuntbusters Case Study — UX + Backend. Built with Django, Python, JavaScript, and a few extra late nights.