71 lines
2.6 KiB
HTML
71 lines
2.6 KiB
HTML
<div class="page-wrap">
|
|
<header class="hero section" id="top">
|
|
<h1>{{ hero.name }}</h1>
|
|
<p class="hero-role">{{ hero.role }}</p>
|
|
<p class="hero-intro">{{ hero.intro }}</p>
|
|
<p class="hero-focus">{{ hero.focus }}</p>
|
|
<div class="hero-cta">
|
|
<a class="btn btn-primary" routerLink="/about">About Me</a>
|
|
<a class="btn btn-ghost" routerLink="/contact">Contact</a>
|
|
</div>
|
|
</header>
|
|
|
|
<section class="section" id="projects">
|
|
<div class="section-title-row">
|
|
<h2>Featured Projects</h2>
|
|
<p>Recent work across web platforms, APIs, and mobile apps.</p>
|
|
</div>
|
|
<div class="card-grid projects-grid">
|
|
@for (project of projects; track project.slug) {
|
|
<a class="project-link" [routerLink]="['/projects', project.slug]">
|
|
<app-card cardClass="project-card">
|
|
<h3>{{ project.title }}</h3>
|
|
<p>{{ project.description }}</p>
|
|
<p class="meta">{{ project.stack.join(' - ') }}</p>
|
|
<p class="impact">{{ project.impact }}</p>
|
|
</app-card>
|
|
</a>
|
|
}
|
|
</div>
|
|
</section>
|
|
|
|
<section class="section" id="stack">
|
|
<div class="section-title-row">
|
|
<h2>Tech Stack</h2>
|
|
<p>Primary technologies I use to deliver production-ready software.</p>
|
|
</div>
|
|
<div class="stack-carousel-shell">
|
|
<button class="carousel-btn" type="button" aria-label="Previous technologies" (click)="scrollStack(-1)">
|
|
<span aria-hidden="true">←</span>
|
|
</button>
|
|
|
|
<div class="stack-carousel" #stackCarousel role="region" aria-label="Tech stack carousel">
|
|
@for (skill of skills; track skill.name) {
|
|
<app-card cardClass="skill-card stack-slide">
|
|
<div class="skill-heading">
|
|
<span class="skill-icon" role="img" [attr.aria-label]="skill.name + ' logo'">
|
|
<img
|
|
class="skill-logo"
|
|
[src]="skill.logoUrl"
|
|
[alt]="skill.name + ' logo'"
|
|
loading="lazy"
|
|
decoding="async"
|
|
(error)="onLogoError($event)"
|
|
/>
|
|
<span class="skill-fallback" aria-hidden="true">{{ skill.fallbackLabel }}</span>
|
|
</span>
|
|
<h3>{{ skill.name }}</h3>
|
|
</div>
|
|
<p class="meta">{{ skill.category }} - {{ skill.level }}</p>
|
|
</app-card>
|
|
}
|
|
</div>
|
|
|
|
<button class="carousel-btn" type="button" aria-label="Next technologies" (click)="scrollStack(1)">
|
|
<span aria-hidden="true">→</span>
|
|
</button>
|
|
</div>
|
|
</section>
|
|
|
|
</div>
|