Welcome back
Sign in to access your saved data
or
Don't have an account? Create one

What you get for free

No credit card required. Start tracking in seconds.

Save Your Data

Your bets and stats are saved to your account. Access from any device.

Track Performance

See your win rate, profit/loss, and ROI over time.

Bet History

Log every bet with details. Search and filter your history.

All Tools

Access all 8 calculators and 2 tools. No restrictions.

Upgrade for more

Optional. Unlock advanced features when you're ready.

Custom Layout

Rearrange your calculator grid. Put your most-used tools first.

Export Data

Download your bet history as CSV, PDF, or JSON.

Advanced Analytics

ROI by sport, time period, and bet type. Detailed charts.

Email Alerts

Weekly summary, limit warnings, and bet reminders.

// Form Toggle function showRegister() { document.getElementById('loginForm').style.display = 'none'; document.getElementById('registerForm').style.display = 'block'; } function showLogin() { document.getElementById('loginForm').style.display = 'block'; document.getElementById('registerForm').style.display = 'none'; } // Auth0 Configuration const AUTH0_DOMAIN = 'dev-i2angibxzcmgj4bo.ca.auth0.com'; const AUTH0_CLIENT_ID = 'AIBMXW8fYlO9QvdeFRUtpnmE3UVhphsK'; let auth0Client = null; let auth0Ready = false; async function initAuth0() { auth0Client = await createAuth0Client({ domain: AUTH0_DOMAIN, clientId: AUTH0_CLIENT_ID, authorizationParams: { redirect_uri: window.location.origin + '/login.html' } }); // Handle redirect callback const query = window.location.search; if (query.includes('code=') && query.includes('state=')) { try { await auth0Client.handleRedirectCallback(); window.history.replaceState({}, document.title, '/login.html'); } catch (e) { console.error('Callback error:', e); showError('Authentication failed. Please try again.'); } } await updateUI(); } async function updateUI() { const isAuthenticated = await auth0Client.isAuthenticated(); const loginForm = document.getElementById('loginForm'); const registerForm = document.getElementById('registerForm'); const loggedInView = document.getElementById('loggedInView'); const authLoading = document.getElementById('authLoading'); if (isAuthenticated) { const user = await auth0Client.getUser(); loginForm.style.display = 'none'; registerForm.style.display = 'none'; authLoading.style.display = 'none'; loggedInView.style.display = 'block'; document.getElementById('userName').textContent = user.name || user.email || 'User'; document.getElementById('userEmail').textContent = user.email || ''; const initial = (user.name || user.email || '?')[0].toUpperCase(); document.getElementById('userAvatar').textContent = initial; } else { loginForm.style.display = 'block'; loggedInView.style.display = 'none'; authLoading.style.display = 'none'; } } function showError(msg) { const el = document.getElementById('loginError'); if (el) { el.textContent = msg; el.style.display = 'block'; setTimeout(() => { el.style.display = 'none'; }, 5000); } } async function loginWithGoogle() { if (!auth0Client) { showError('Authenticating... please wait.'); return; } try { await auth0Client.loginWithRedirect({ connection: 'google-oauth2' }); } catch (e) { console.error('Google login error:', e); showError('Google login failed. Please try again.'); } } async function loginWithApple() { if (!auth0Client) { showError('Authenticating... please wait.'); return; } try { await auth0Client.loginWithRedirect({ connection: 'apple' }); } catch (e) { console.error('Apple login error:', e); showError('Apple login failed. Please try again.'); } } async function loginWithEmail() { const email = document.getElementById('loginEmail').value; const password = document.getElementById('loginPassword').value; if (!email || !password) { showError('Please enter your email and password.'); return; } try { await auth0Client.loginWithCredentials({ username: email, password: password }); await updateUI(); } catch (e) { console.error('Login error:', e); showError('Invalid email or password. Please try again.'); } } async function handleLogout() { auth0Client.logout({ logoutParams: { returnTo: window.location.origin + '/login.html' } }); } // Initialize Auth0 on page load initAuth0().then(() => { auth0Ready = true; }).catch(e => console.error('Auth0 init failed:', e));