Home About Contact Client Login Apply Now
Coaching Application

Apply for Grant's Coaching

This application takes 5–8 minutes. Be honest — the more detail you give, the better your program will be. Applications are reviewed personally by Jesse.

Application Received

Jesse will personally review your application and reach out within 24–48 hours. If you're a good fit, you'll be contacted to confirm your start date and package.

Questions? Text (403) 542-0825

← Back to Homepage
01 Personal Information
02 Your Goals
Lose Body Fat
Build Muscle
Body Recomposition
Athletic Performance
Competition Prep
General Health
03 Body Stats
Yes
No
Coach Only
04 Training Background
2
3
4
5
6
Commercial Gym
Home Gym
Both
05 Nutrition
Poor
Average
Good
Very Good
Yes, Completely
Mostly
Need Some Flexibility
06 Lifestyle & Commitment
Yes, 100%
Need to Discuss
Not Sure Yet
Immediately
Within 2 Weeks
Within a Month
Just Exploring
Standard
Foundation
  • ✓ Custom Training Program
  • ✓ Personalized Meal Plan
  • ✓ Supplement Protocol
  • ✓ Grocery List
  • ✓ Weekly Check-Ins
  • ✓ Progress Tracking Portal
  • ✓ 3 Month Commitment
Premium
Advanced
  • ✓ Everything in Standard
  • ✓ Priority Response
  • ✓ Advanced Progress Analytics
  • ✓ Full Measurement Tracking
  • ✓ Activity & Cardio Targets
  • ✓ Sleep & Weight Logging
  • ✓ Direct Coach Access
Not Sure Yet
Jesse will advise
  • Discuss with Jesse after reviewing your application

By submitting, you agree to be contacted by Jesse Grant regarding your coaching application. Your information is kept completely private.

formValues[fieldId] = el.dataset.value; } function selectScale(btn, groupId, fieldId) { document.querySelectorAll('#' + groupId + ' .scale-btn').forEach(b => b.classList.remove('selected')); btn.classList.add('selected'); document.getElementById(fieldId).value = btn.dataset.val; formValues[fieldId] = btn.dataset.val; } async function submitApplication(e) { e.preventDefault(); const errBox = document.getElementById('formError'); errBox.style.display = 'none'; const name = document.getElementById('full_name').value.trim(); const email = document.getElementById('email').value.trim(); const phone = document.getElementById('phone').value.trim(); const goal = document.getElementById('goal_description').value.trim(); if (!name || !email || !phone || !goal) { errBox.textContent = 'Please fill in all required fields (marked with *).'; errBox.style.display = 'block'; errBox.scrollIntoView({ behavior: 'smooth', block: 'center' }); return; } const btn = document.getElementById('submitBtn'); btn.textContent = 'Submitting...'; btn.disabled = true; const payload = { full_name: name, age: document.getElementById('age').value, email: email, phone: phone, instagram: document.getElementById('instagram').value, location: document.getElementById('location').value, main_goal: document.getElementById('main_goal').value, goal_description: goal, success_vision: document.getElementById('success_vision').value, holding_back: document.getElementById('holding_back').value, height: document.getElementById('height').value, current_weight: document.getElementById('current_weight').value, goal_weight: document.getElementById('goal_weight').value, progress_photos: document.getElementById('progress_photos').value, training_duration: document.getElementById('training_duration').value, days_per_week: document.getElementById('days_per_week').value, training_location: document.getElementById('training_location').value, injury_details: document.getElementById('injury_details').value, nutrition_quality: document.getElementById('nutrition_quality').value, meal_plan_willing: document.getElementById('meal_plan_willing').value, dietary_restrictions: document.getElementById('dietary_restrictions').value, sleep_hours: document.getElementById('sleep_hours').value, stress_level: document.getElementById('stress_level').value, seriousness_level: document.getElementById('seriousness_level').value, three_month_commitment: document.getElementById('three_month_commitment').value, start_date: document.getElementById('start_date').value, package_interest: document.getElementById('package_interest').value, why_coaching: document.getElementById('why_coaching').value, questions: document.getElementById('questions').value, submitted_date: new Date().toISOString(), status: 'new' }; let saved = false; let lastError = ''; // ── Attempt 1: REST table API (always available, no auth needed) ── try { const res = await fetch('tables/intake_submissions', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }); if (res.ok) { saved = true; console.log('[Apply] Saved via REST API'); } else { lastError = 'REST: HTTP ' + res.status; } } catch (restErr) { lastError = 'REST: ' + restErr.message; console.warn('[Apply] REST failed:', restErr.message); } // ── Attempt 2: Firestore (also save here for admin dashboard) ── try { if (typeof firebase !== 'undefined' && firebase.apps && firebase.apps.length) { await firebase.firestore().collection('intake_submissions').add({ ...payload, created_at: firebase.firestore.FieldValue.serverTimestamp() }); saved = true; console.log('[Apply] Saved via Firestore'); } } catch (fbErr) { console.warn('[Apply] Firestore save failed:', fbErr.code, fbErr.message); if (!saved) lastError = 'Firestore: ' + fbErr.code; } if (saved) { document.getElementById('applyForm').style.display = 'none'; document.getElementById('formSuccess').style.display = 'block'; window.scrollTo({ top: 0, behavior: 'smooth' }); } else { errBox.textContent = 'Submission failed. Please try again or text Jesse directly at (403) 542-0825.'; errBox.style.display = 'block'; errBox.scrollIntoView({ behavior: 'smooth', block: 'center' }); console.error('[Apply] Both save methods failed. Last error:', lastError); btn.textContent = 'Submit Application →'; btn.disabled = false; } }