Skip to content

Commit d4b6f25

Browse files
committed
Add props to backstage component on home page
1 parent d71191c commit d4b6f25

4 files changed

Lines changed: 180 additions & 118 deletions

File tree

‎src/components/Home/Backstage/index.astro‎

Lines changed: 71 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -2,80 +2,97 @@
22
/**
33
* Backstage IDP Implementation section of the homepage
44
*/
5+
import { Image } from 'astro:assets'
6+
import backstageBackground from '@assets/images/backstage-background.jpg'
7+
8+
type IconKey = keyof typeof svgPath
9+
export interface Props {
10+
pretitle: string
11+
description: string
12+
benefits: {
13+
title: string
14+
quantifier: string
15+
}[]
16+
features: {
17+
title: string
18+
description: string
19+
icon: IconKey
20+
}[]
21+
}
22+
23+
const { pretitle, title, description, benefits, features } = Astro.props as Props
24+
25+
const svgPath = {
26+
'left-justified': 'M4 6h16M4 12h16M4 18h7',
27+
'clipboard': 'M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2',
28+
'lightning-bolt': 'M13 10V3L4 14h7v7l9-11h-7z',
29+
'graph': 'M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z',
30+
} as const
31+
32+
const visibleBenefits = benefits.slice(0, 3)
33+
const visibleFeatures = features.slice(0, 4)
534
---
635

736
<section class="container mx-auto px-4 sm:px-6 lg:px-8 py-16" aria-labelledby="backstage-title">
8-
<div class="space-y-6">
9-
<p class="text-xs font-bold text-primary uppercase tracking-widest">Backstage IDP Implementation</p>
37+
<div class="mb-8 space-y-2">
38+
<p class="text-md font-bold text-primary uppercase tracking-widest">{pretitle}</p>
39+
<h2 id="backstage-title" class="text-3xl md:text-4xl font-black text-content leading-tight">
40+
Give your developers <span class="text-primary">superpowers</span>
41+
</h2>
1042
</div>
1143
<div class="grid grid-cols-1 lg:grid-cols-5 gap-8">
1244
<!-- Left column: headline + image -->
1345
<div class="lg:col-span-2 space-y-6">
14-
<h2 id="backstage-title" class="text-3xl md:text-4xl font-black text-content leading-tight">
15-
Give your developers <span class="text-primary">superpowers</span>
16-
</h2>
17-
<p class="text-lg text-content-offset leading-relaxed">
18-
Backstage is Spotify's open-source internal developer portal. I customize and deploy it
19-
for your team—starting small, proving value fast, then scaling across your organization.
20-
</p>
46+
<p class="text-lg text-content-offset leading-relaxed">{description}</p>
2147

22-
<!-- Image placeholder -->
23-
<div class="aspect-square bg-page-offset rounded-2xl border-2 border-dashed border-trim flex items-center justify-center">
24-
<span class="text-content-offset text-sm">Image Placeholder</span>
48+
<!-- Image -->
49+
<div class="aspect-square bg-page-offset rounded-2xl border-2 border-dashed border-trim overflow-hidden">
50+
<Image
51+
src={backstageBackground}
52+
alt="Backstage interface preview"
53+
class="h-full w-full object-cover"
54+
/>
2555
</div>
2656
</div>
2757

2858
<!-- Right column: feature cards + stats -->
2959
<div class="lg:col-span-3 space-y-6">
3060
<!-- Stats row -->
3161
<div class="grid grid-cols-3 gap-4">
32-
<div class="bg-content text-page-base rounded-xl p-4 text-center">
33-
<p class="text-3xl font-black">70%</p>
34-
<p class="text-xs text-page-base/70">Less time to first deploy</p>
35-
</div>
36-
<div class="bg-content text-page-base rounded-xl p-4 text-center">
37-
<p class="text-3xl font-black">4 wks</p>
38-
<p class="text-xs text-page-base/70">Pilot app live</p>
39-
</div>
40-
<div class="bg-content text-page-base rounded-xl p-4 text-center">
41-
<p class="text-3xl font-black">0</p>
42-
<p class="text-xs text-page-base/70">Ops tickets for deploys</p>
43-
</div>
62+
{visibleBenefits.map((benefit) => (
63+
<div class="bg-content text-page-base rounded-xl p-4 text-center">
64+
<p class="text-3xl font-black">{benefit.quantifier}</p>
65+
<p class="text-xs text-page-base/70">{benefit.title}</p>
66+
</div>
67+
))}
4468
</div>
4569

4670
<!-- Feature cards -->
4771
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
48-
<div class="bg-page-offset p-6 rounded-xl border border-trim">
49-
<div class="w-10 h-10 bg-primary/10 rounded-lg flex items-center justify-center mb-4">
50-
<svg class="w-5 h-5 text-primary" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h7"></path></svg>
51-
</div>
52-
<p class="font-bold text-content mb-1">Service Catalog</p>
53-
<p class="text-sm text-content-offset">One place to find every service, API, and resource—with owners and docs attached.</p>
54-
</div>
55-
56-
<div class="bg-page-offset p-6 rounded-xl border border-trim">
57-
<div class="w-10 h-10 bg-primary/10 rounded-lg flex items-center justify-center mb-4">
58-
<svg class="w-5 h-5 text-primary" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg>
59-
</div>
60-
<p class="font-bold text-content mb-1">Software Templates</p>
61-
<p class="text-sm text-content-offset">Scaffold new projects with CI/CD, tests, and cloud infra baked in from day one.</p>
62-
</div>
63-
64-
<div class="bg-page-offset p-6 rounded-xl border border-trim">
65-
<div class="w-10 h-10 bg-primary/10 rounded-lg flex items-center justify-center mb-4">
66-
<svg class="w-5 h-5 text-primary" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"></path></svg>
67-
</div>
68-
<p class="font-bold text-content mb-1">CI/CD & Cloud Migration</p>
69-
<p class="text-sm text-content-offset">Lift-and-shift or re-architect—either way, your pipelines will be rock solid.</p>
70-
</div>
71-
72-
<div class="bg-page-offset p-6 rounded-xl border border-trim">
73-
<div class="w-10 h-10 bg-primary/10 rounded-lg flex items-center justify-center mb-4">
74-
<svg class="w-5 h-5 text-primary" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"></path></svg>
72+
{visibleFeatures.map((feature) => (
73+
<div class="bg-page-offset p-6 rounded-xl border border-trim">
74+
<div class="flex items-center gap-3 mb-4">
75+
<div class="w-10 h-10 bg-primary/10 rounded-lg flex items-center justify-center">
76+
<svg
77+
class="w-5 h-5 text-primary"
78+
fill="none"
79+
stroke="currentColor"
80+
viewBox="0 0 24 24"
81+
aria-hidden="true"
82+
>
83+
<path
84+
stroke-linecap="round"
85+
stroke-linejoin="round"
86+
stroke-width="2"
87+
d={svgPath[feature.icon]}
88+
></path>
89+
</svg>
90+
</div>
91+
<span class="font-bold text-content-active">{feature.title}</span>
92+
</div>
93+
<p class="text-sm text-content">{feature.description}</p>
7594
</div>
76-
<p class="font-bold text-content mb-1">Observability Plug-ins</p>
77-
<p class="text-sm text-content-offset">Surface logs, metrics, and traces right inside the portal—no context switching.</p>
78-
</div>
95+
))}
7996
</div>
8097

8198
<!-- CTA -->

‎src/components/Home/Intro/index.astro‎

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,23 @@
33
* The Intro component serves as the welcoming section of the homepage, providing
44
* a concise overview of Webstack Builders' mission and value proposition
55
*/
6+
type IconKey = keyof typeof svgPath
67
export interface Props {
78
pretitle: string
89
benefits: {
910
title: string
1011
description: string
12+
icon: IconKey
1113
}[]
1214
}
1315
1416
const { pretitle, benefits } = Astro.props as Props
1517
16-
const svgPath = [
17-
'M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z',
18-
'M13 10V3L4 14h7v7l9-11h-7z',
19-
'M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4',
20-
]
18+
const svgPath = {
19+
'check-circled': 'M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z',
20+
'lightning-bolt': 'M13 10V3L4 14h7v7l9-11h-7z',
21+
'html': 'M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4',
22+
} as const
2123
2224
const visibleBenefits = benefits.slice(0, 3)
2325
---
@@ -33,7 +35,7 @@ const visibleBenefits = benefits.slice(0, 3)
3335
</div>
3436

3537
<ul class="grid grid-cols-1 md:grid-cols-3 gap-8 mt-12 list-none p-0 m-0">
36-
{visibleBenefits.map((benefit, index) => (
38+
{visibleBenefits.map((benefit) => (
3739
<li class="text-center">
3840
<div
3941
class="w-16 h-16 bg-spotlight bg-opacity-10 rounded-full flex items-center justify-center mx-auto mb-4"
@@ -50,7 +52,7 @@ const visibleBenefits = benefits.slice(0, 3)
5052
stroke-linecap="round"
5153
stroke-linejoin="round"
5254
stroke-width="2"
53-
d={svgPath[index]}></path>
55+
d={svgPath[benefit.icon]}></path>
5456
</svg>
5557
</div>
5658
<h3 class="mb-2 text-content-active">{benefit.title}</h3>

‎src/components/Home/Skills/index.astro‎

Lines changed: 47 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -4,60 +4,58 @@
44
*/
55
---
66

7-
<section class="py-16" aria-labelledby="home-technologies-title">
8-
<div class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
9-
<h2 id="home-technologies-title" class="text-2xl md:text-3xl font-bold mb-8">
10-
Technologies & Expertise
11-
</h2>
12-
<div class="grid grid-cols-2 md:grid-cols-4 lg:grid-cols-6 gap-8">
13-
<div class="flex flex-col items-center">
14-
<div
15-
class="w-12 h-12 bg-spotlight bg-opacity-10 rounded-lg flex items-center justify-center mb-2"
16-
>
17-
<span class="text-primary font-bold text-sm">Go</span>
18-
</div>
19-
<span class="text-sm font-medium">Go</span>
7+
<div class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
8+
<h2 id="home-technologies-title" class="text-2xl md:text-3xl font-bold mb-8">
9+
Technologies & Expertise
10+
</h2>
11+
<div class="grid grid-cols-2 md:grid-cols-4 lg:grid-cols-6 gap-8">
12+
<div class="flex flex-col items-center">
13+
<div
14+
class="w-12 h-12 bg-spotlight bg-opacity-10 rounded-lg flex items-center justify-center mb-2"
15+
>
16+
<span class="text-primary font-bold text-sm">Go</span>
2017
</div>
21-
<div class="flex flex-col items-center">
22-
<div
23-
class="w-12 h-12 bg-spotlight bg-opacity-10 rounded-lg flex items-center justify-center mb-2"
24-
>
25-
<span class="text-primary font-bold text-sm">TS</span>
26-
</div>
27-
<span class="text-sm font-medium">TypeScript</span>
18+
<span class="text-sm font-medium">Go</span>
19+
</div>
20+
<div class="flex flex-col items-center">
21+
<div
22+
class="w-12 h-12 bg-spotlight bg-opacity-10 rounded-lg flex items-center justify-center mb-2"
23+
>
24+
<span class="text-primary font-bold text-sm">TS</span>
2825
</div>
29-
<div class="flex flex-col items-center">
30-
<div
31-
class="w-12 h-12 bg-spotlight bg-opacity-10 rounded-lg flex items-center justify-center mb-2"
32-
>
33-
<span class="text-primary font-bold text-sm">TF</span>
34-
</div>
35-
<span class="text-sm font-medium">Terraform</span>
26+
<span class="text-sm font-medium">TypeScript</span>
27+
</div>
28+
<div class="flex flex-col items-center">
29+
<div
30+
class="w-12 h-12 bg-spotlight bg-opacity-10 rounded-lg flex items-center justify-center mb-2"
31+
>
32+
<span class="text-primary font-bold text-sm">TF</span>
3633
</div>
37-
<div class="flex flex-col items-center">
38-
<div
39-
class="w-12 h-12 bg-spotlight bg-opacity-10 rounded-lg flex items-center justify-center mb-2"
40-
>
41-
<span class="text-primary font-bold text-sm">Az</span>
42-
</div>
43-
<span class="text-sm font-medium">Azure</span>
34+
<span class="text-sm font-medium">Terraform</span>
35+
</div>
36+
<div class="flex flex-col items-center">
37+
<div
38+
class="w-12 h-12 bg-spotlight bg-opacity-10 rounded-lg flex items-center justify-center mb-2"
39+
>
40+
<span class="text-primary font-bold text-sm">Az</span>
4441
</div>
45-
<div class="flex flex-col items-center">
46-
<div
47-
class="w-12 h-12 bg-spotlight bg-opacity-10 rounded-lg flex items-center justify-center mb-2"
48-
>
49-
<span class="text-primary font-bold text-sm">K8s</span>
50-
</div>
51-
<span class="text-sm font-medium">Kubernetes</span>
42+
<span class="text-sm font-medium">Azure</span>
43+
</div>
44+
<div class="flex flex-col items-center">
45+
<div
46+
class="w-12 h-12 bg-spotlight bg-opacity-10 rounded-lg flex items-center justify-center mb-2"
47+
>
48+
<span class="text-primary font-bold text-sm">K8s</span>
5249
</div>
53-
<div class="flex flex-col items-center">
54-
<div
55-
class="w-12 h-12 bg-spotlight bg-opacity-10 rounded-lg flex items-center justify-center mb-2"
56-
>
57-
<span class="text-primary font-bold text-sm">Py</span>
58-
</div>
59-
<span class="text-sm font-medium">Python</span>
50+
<span class="text-sm font-medium">Kubernetes</span>
51+
</div>
52+
<div class="flex flex-col items-center">
53+
<div
54+
class="w-12 h-12 bg-spotlight bg-opacity-10 rounded-lg flex items-center justify-center mb-2"
55+
>
56+
<span class="text-primary font-bold text-sm">Py</span>
6057
</div>
58+
<span class="text-sm font-medium">Python</span>
6159
</div>
6260
</div>
63-
</section>
61+
</div>

0 commit comments

Comments
 (0)