Files
TimeTrack/templates/register.html

276 lines
10 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Register - {{ g.branding.app_name if g.branding else 'TimeTrack' }}</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/fonts.css') }}">
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
<link rel="stylesheet" href="{{ url_for('static', filename='css/auth.css') }}">
<style>
.registration-type {
display: flex;
gap: 1rem;
margin-bottom: 2rem;
}
.type-card {
flex: 1;
padding: 1.5rem;
border: 2px solid #e5e7eb;
border-radius: 12px;
cursor: pointer;
transition: all 0.3s ease;
text-align: center;
}
.type-card:hover {
border-color: #667eea;
background: #f8f9fa;
}
.type-card.active {
border-color: #667eea;
background: linear-gradient(135deg, #667eea10 0%, #764ba210 100%);
}
.type-card .icon {
font-size: 2.5rem;
margin-bottom: 0.5rem;
display: block;
}
.type-card h3 {
margin: 0 0 0.5rem 0;
color: #1f2937;
}
.type-card p {
margin: 0;
font-size: 0.875rem;
color: #6b7280;
}
.form-section {
display: none;
}
.form-section.active {
display: block;
}
.company-code-group {
background: #f8f9fa;
padding: 1rem;
border-radius: 8px;
margin-bottom: 1rem;
}
.optional-badge {
background: #667eea;
color: white;
padding: 0.25rem 0.5rem;
border-radius: 4px;
font-size: 0.75rem;
font-weight: 600;
text-transform: uppercase;
margin-left: 0.5rem;
}
.benefits-list {
background: #f8f9fa;
padding: 1.5rem;
border-radius: 8px;
margin-top: 1.5rem;
}
.benefits-list h4 {
margin: 0 0 1rem 0;
color: #1f2937;
}
.benefits-list ul {
list-style: none;
padding: 0;
margin: 0;
}
.benefits-list li {
padding: 0.5rem 0;
padding-left: 1.5rem;
position: relative;
}
.benefits-list li:before {
content: "✓";
position: absolute;
left: 0;
color: #10b981;
font-weight: bold;
}
</style>
</head>
<body class="auth-page">
<div class="auth-container">
<div class="auth-brand">
<h1>Welcome to {{ g.branding.app_name if g.branding else 'TimeTrack' }}</h1>
<p>Create your account to start tracking time</p>
</div>
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
{% for category, message in messages %}
<div class="alert alert-{{ category }}">{{ message }}</div>
{% endfor %}
{% endif %}
{% endwith %}
<form method="POST" action="{{ url_for('register') }}" class="auth-form" id="registrationForm">
<!-- Registration Type Selection -->
<div class="registration-type">
<div class="type-card active" data-type="company" onclick="selectRegistrationType('company')">
<span class="icon">🏢</span>
<h3>Company Employee</h3>
<p>Join an existing company</p>
</div>
<div class="type-card" data-type="freelancer" onclick="selectRegistrationType('freelancer')">
<span class="icon">💼</span>
<h3>Freelancer</h3>
<p>Create personal workspace</p>
</div>
</div>
<input type="hidden" name="registration_type" id="registration_type" value="company">
<!-- Company Registration Fields -->
<div class="form-section active" id="company-section">
<div class="company-code-group">
<label for="company_code">
Company Code
<span class="optional-badge">Optional</span>
</label>
<input type="text" id="company_code" name="company_code" class="form-control"
placeholder="Enter code or leave blank to create new company">
<small class="form-text text-muted">
Have a company code? Enter it here. No code? Leave blank to create your own company.
<br><strong>Tip:</strong> Ask your admin for an email invitation instead.
</small>
</div>
</div>
<!-- Freelancer Registration Fields -->
<div class="form-section" id="freelancer-section">
<div class="form-group input-icon">
<i>🏢</i>
<input type="text" id="business_name" name="business_name" class="form-control"
placeholder="Your Business Name (optional)">
<label for="business_name">Business Name</label>
<small class="form-text text-muted">Leave blank to use your username as workspace name</small>
</div>
</div>
<!-- Common Fields -->
<div class="form-group input-icon">
<i>👤</i>
<input type="text" id="username" name="username" class="form-control" placeholder="Choose a username" required>
<label for="username">Username</label>
</div>
<div class="form-group input-icon">
<i>📧</i>
<input type="email" id="email" name="email" class="form-control" placeholder="your@email.com (optional)">
<label for="email">Email Address (Optional)</label>
<small class="form-text text-muted">Recommended for account recovery and notifications</small>
</div>
<div class="form-group input-icon">
<i>🔒</i>
<input type="password" id="password" name="password" class="form-control" placeholder="Create a strong password" required>
<label for="password">Password</label>
</div>
<div class="form-group input-icon">
<i>🔒</i>
<input type="password" id="confirm_password" name="confirm_password" class="form-control" placeholder="Confirm your password" required>
<label for="confirm_password">Confirm Password</label>
</div>
<div class="form-check">
<input type="checkbox" class="form-check-input" id="terms" required>
<label class="form-check-label" for="terms">
I agree to the Terms of Service and Privacy Policy
</label>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">Create Account</button>
</div>
<div class="auth-links">
<p>Already have an account? <a href="{{ url_for('login') }}">Login here</a></p>
</div>
<!-- Dynamic Benefits Section -->
<div class="benefits-list" id="company-benefits">
<h4>What you get:</h4>
<ul>
<li>Join an existing company team or create your own</li>
<li>Collaborate with team members</li>
<li>Track time on company projects</li>
<li>Team management tools (if admin)</li>
<li>Shared reports and analytics</li>
</ul>
</div>
<div class="benefits-list" id="freelancer-benefits" style="display: none;">
<h4>What you get as a freelancer:</h4>
<ul>
<li>Your own personal workspace</li>
<li>Time tracking for your projects</li>
<li>Project management tools</li>
<li>Export capabilities for invoicing</li>
<li>Complete control over your data</li>
</ul>
</div>
<div class="verification-notice">
<p><i class="ti ti-bulb"></i> You can register without an email, but we recommend adding one for account recovery.</p>
</div>
</form>
</div>
<script src="{{ url_for('static', filename='js/password-strength.js') }}"></script>
<script src="{{ url_for('static', filename='js/auth-animations.js') }}"></script>
<script>
function selectRegistrationType(type) {
// Update active card
document.querySelectorAll('.type-card').forEach(card => {
card.classList.remove('active');
});
document.querySelector(`[data-type="${type}"]`).classList.add('active');
// Update hidden field
document.getElementById('registration_type').value = type;
// Show/hide sections
if (type === 'company') {
document.getElementById('company-section').classList.add('active');
document.getElementById('freelancer-section').classList.remove('active');
document.getElementById('company-benefits').style.display = 'block';
document.getElementById('freelancer-benefits').style.display = 'none';
// Update form action
document.getElementById('registrationForm').action = "{{ url_for('register') }}";
} else {
document.getElementById('company-section').classList.remove('active');
document.getElementById('freelancer-section').classList.add('active');
document.getElementById('company-benefits').style.display = 'none';
document.getElementById('freelancer-benefits').style.display = 'block';
// Update form action
document.getElementById('registrationForm').action = "{{ url_for('register_freelancer') }}";
}
}
</script>
</body>
</html>