feat(developers): add timezone dropdown and rework skills section
All checks were successful
Build and Deploy / deploy (push) Successful in 16s
All checks were successful
Build and Deploy / deploy (push) Successful in 16s
Replace free-text timezone input with a dropdown populated from system timezones. Replace "Why SilverLabs?" motivation section with a skills-focused "What You Bring" section that collects what candidates can contribute to the team, with role-specific placeholders. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -119,8 +119,14 @@
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="timezone">Location / Timezone</label>
|
||||
<InputText id="timezone" @bind-Value="_application.Timezone" class="form-input" placeholder="e.g. Europe/London, US/Eastern" />
|
||||
<label for="timezone">Timezone</label>
|
||||
<InputSelect id="timezone" @bind-Value="_application.Timezone" class="form-input">
|
||||
<option value="">Select your timezone...</option>
|
||||
@foreach (var tz in _timezones)
|
||||
{
|
||||
<option value="@tz.Id">@tz.Label</option>
|
||||
}
|
||||
</InputSelect>
|
||||
<ValidationMessage For="() => _application.Timezone" />
|
||||
</div>
|
||||
</div>
|
||||
@@ -164,26 +170,27 @@
|
||||
<ValidationMessage For="() => _application.Platforms" />
|
||||
</div>
|
||||
|
||||
<!-- Developer-only: Skills -->
|
||||
<!-- Skills & What You Bring -->
|
||||
<div class="dev-section">
|
||||
<h2 class="dev-section-title">What You Bring</h2>
|
||||
<p class="dev-section-desc">Tell us about your skills and what you'd bring to the team.</p>
|
||||
|
||||
@if (_application.Role == ApplicationRole.Developer)
|
||||
{
|
||||
<div class="dev-section dev-section-fade-in">
|
||||
<h2 class="dev-section-title">Skills & Experience</h2>
|
||||
<p class="dev-section-desc">Tell us about your technical background — languages, frameworks, and any open-source contributions.</p>
|
||||
<div class="form-group">
|
||||
<div class="form-group" style="margin-bottom: 1.25rem;">
|
||||
<label for="skills">Technical Skills</label>
|
||||
<InputTextArea id="skills" @bind-Value="_application.Skills" class="form-input form-textarea"
|
||||
placeholder="e.g. C#/.NET 5 years, Blazor, PostgreSQL, Docker, contributed to..." rows="5" />
|
||||
</div>
|
||||
placeholder="e.g. C#/.NET 5 years, Blazor, PostgreSQL, Docker, contributed to..." rows="4" />
|
||||
<span class="form-hint">Languages, frameworks, tools, and any open-source contributions</span>
|
||||
</div>
|
||||
}
|
||||
|
||||
<!-- Motivation -->
|
||||
<div class="dev-section">
|
||||
<h2 class="dev-section-title">Why SilverLabs?</h2>
|
||||
<p class="dev-section-desc">What draws you to privacy-first development? What do you hope to contribute?</p>
|
||||
<div class="form-group">
|
||||
<label for="motivation">How will you contribute?</label>
|
||||
<InputTextArea id="motivation" @bind-Value="_application.Motivation" class="form-input form-textarea"
|
||||
placeholder="Tell us what motivates you..." rows="5" />
|
||||
placeholder="@(_application.Role == ApplicationRole.Developer
|
||||
? "What areas interest you? Architecture, frontend, backend, DevOps, security..."
|
||||
: "What devices/platforms can you test on? What kind of testing experience do you have?")" rows="4" />
|
||||
<ValidationMessage For="() => _application.Motivation" />
|
||||
</div>
|
||||
</div>
|
||||
@@ -249,6 +256,11 @@
|
||||
|
||||
private readonly string[] _availablePlatforms = { "Windows", "macOS", "Linux", "Android", "iOS", "Other" };
|
||||
|
||||
private static readonly List<(string Id, string Label)> _timezones = TimeZoneInfo.GetSystemTimeZones()
|
||||
.OrderBy(tz => tz.BaseUtcOffset)
|
||||
.Select(tz => (tz.Id, $"(UTC{(tz.BaseUtcOffset >= TimeSpan.Zero ? "+" : "")}{tz.BaseUtcOffset:hh\\:mm}) {tz.DisplayName}"))
|
||||
.ToList();
|
||||
|
||||
private static readonly System.Text.RegularExpressions.Regex UsernamePattern =
|
||||
new(@"^[a-zA-Z0-9_-]{3,30}$", System.Text.RegularExpressions.RegexOptions.Compiled);
|
||||
|
||||
|
||||
@@ -36,8 +36,8 @@ public class DeveloperApplication
|
||||
[Compare("Password", ErrorMessage = "Passwords do not match")]
|
||||
public string ConfirmPassword { get; set; } = string.Empty;
|
||||
|
||||
[Required(ErrorMessage = "Please tell us why you want to join")]
|
||||
[StringLength(2000, MinimumLength = 20, ErrorMessage = "Motivation must be between 20 and 2000 characters")]
|
||||
[Required(ErrorMessage = "Please tell us how you'll contribute")]
|
||||
[StringLength(2000, MinimumLength = 20, ErrorMessage = "Please write at least 20 characters")]
|
||||
public string Motivation { get; set; } = string.Empty;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user