Skip to content

Commit 39bd39e

Browse files
committed
Case studies list and tables updates
1 parent 1d1a071 commit 39bd39e

29 files changed

Lines changed: 2093 additions & 578 deletions

File tree

.vscode/settings.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@
186186
"lighthousejs",
187187
"LIMS",
188188
"Linkify",
189+
"LINQ",
189190
"liradb",
190191
"ljust",
191192
"llen",
@@ -206,6 +207,7 @@
206207
"misconfiguring",
207208
"Misrouted",
208209
"mlflow",
210+
"moloco",
209211
"Moodle",
210212
"moyai",
211213
"MPLS",

_TODO.md

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -244,8 +244,6 @@ https://mermaid.js.org/config/directives.html
244244

245245
- Need an article on OpenStack
246246

247-
- Add a Social Share on some compelling text in each article
248-
249247
- Home page reorganization: move the "What I Deliver" box from the Hero into the Backstage image. Move the Backstage image / video to the hero.
250248

251249
- We need to check for short form and deep article articles where the deep-dive index.pdf has a non-featured tag like "argo-cd" only in the pdf.mdx. In those cases, we should make sure the callout for the deep dive includes the name of that non-featured (technology) tag
@@ -324,7 +322,7 @@ https://mermaid.js.org/config/directives.html
324322
<Table
325323
fullWidth={false}
326324
classes={{
327-
figure: "sm:ml-8 sm:mr-12 mb-6",
325+
figure: "sm:ml-6 sm:mr-12 mb-6",
328326
}}
329327
classes={{
330328
tbody: '!text-content',
@@ -345,3 +343,15 @@ https://mermaid.js.org/config/directives.html
345343
tbody:
346344
'[&_td:nth-child(2)]:text-success [&_td:nth-child(3)]:text-warning [&_td:nth-child(4)]:text-danger',
347345
}}
346+
347+
id: ""
348+
displayName: ""
349+
industry: ""
350+
businessType: ""
351+
workModel: ""
352+
location: ""
353+
startDate: ""
354+
endDate: ""
355+
website: ""
356+
linkedinUrl: ""
357+
published:

src/components/Carousel/index.astro

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ const carouselId = `carousel-${type}-${variant}-${currentSlug ?? 'all'}`
107107
data-carousel-slide
108108
data-index={String(index)}
109109
>
110-
<article class="group h-full relative after:pointer-events-none after:absolute after:content-[''] after:inset-0 after:rounded-none after:border-2 after:border-transparent after:opacity-0 after:transition-opacity after:duration-150 after:ease-out focus-within:after:opacity-100 focus-within:after:-inset-1.5 focus-within:after:border-spotlight">
110+
<article class="content-card-frame group h-full relative">
111111
<a
112112
href={'href' in item ? item.href : `/${type}/${item.id}`}
113113
class="block h-full bg-content-inverse rounded-xl shadow-lg transition-all duration-300 overflow-hidden border border-trim transform hover:-translate-y-2 no-underline hover:no-underline focus-visible:no-underline focus-visible:outline-none focus-visible:shadow-none"
@@ -237,6 +237,24 @@ const carouselId = `carousel-${type}-${variant}-${currentSlug ?? 'all'}`
237237
)
238238
}
239239

240+
<style>
241+
.content-card-frame::after {
242+
content: '';
243+
position: absolute;
244+
inset: 0;
245+
border: 2px solid transparent;
246+
opacity: 0;
247+
pointer-events: none;
248+
transition: opacity 150ms ease-out;
249+
}
250+
251+
.content-card-frame:has(:focus-visible)::after {
252+
inset: -0.375rem;
253+
border-color: var(--color-spotlight);
254+
opacity: 1;
255+
}
256+
</style>
257+
240258
<script>
241259
import { registerCarouselWebComponent } from '@components/Carousel/client'
242260
registerCarouselWebComponent()

src/content.config.ts

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,27 @@
11
/**
2-
* Provides build-time validation and type generation for all content by Astro build system.
3-
* This file exports a collections object where each key is a collection name, and the value
4-
* uses defineCollection() to specify the schema for that collection. Astro uses this
5-
* configuration to automatically load and manage content from specified directories like
6-
* src/content/articles or src/content/testimonials.
2+
* Provides build-time validation and type generation for all content by Astro
3+
* build system. This file exports a collections object where each key is a
4+
* collection name, and the value uses defineCollection() to specify the schema
5+
* for that collection. Astro uses this configuration to automatically load and
6+
* manage content from specified directories like src/content/articles or
7+
* src/content/testimonials.
78
*
8-
* The 'email' collection is included in the src/content directory, but is not handled by
9-
* Astro's collections systems. It is used by files in src/pages/api.
9+
* The 'email' collection is included in the src/content directory, but is not
10+
* handled by Astro's collections system. It is used by files in src/pages/api.
1011
*/
1112
import { defineCollection, reference, type SchemaContext } from 'astro:content'
1213
import { glob, file } from 'astro/loaders'
1314
import { z } from 'astro/zod'
1415
/**
15-
* Wraps a collection schema with a refinement that enforces breadcrumb title length limits
16+
* Wraps a collection schema with a refinement that enforces breadcrumb
17+
* title length limits
1618
*/
1719
import { withBreadcrumbTitleWarning } from '@lib/helpers/breadcrumbTitleLengthRefinement'
20+
import { endSession } from '@sentry/browser'
1821

1922
/**
20-
* NOTE: In YAML, dates written without quotes around them are interpreted as Date objects
23+
* NOTE: In YAML, dates written without quotes around them are interpreted
24+
* as Date objects
2125
*/
2226

2327
const pattern = '**/index.mdx'
@@ -213,6 +217,27 @@ const authorsCollection = defineCollection({
213217
}),
214218
})
215219

220+
/**
221+
* Clients
222+
*/
223+
const clientsCollection = defineCollection({
224+
loader: glob({ pattern: flatMarkdownPattern, base: './src/content/clients' }),
225+
schema: () =>
226+
z.object({
227+
id: z.string(),
228+
displayName: z.string(),
229+
industry: z.string().optional(),
230+
businessType: z.string().optional(),
231+
workModel: z.string().optional(),
232+
location: z.string().optional(),
233+
startDate: z.date().optional(),
234+
endDate: z.date().optional(),
235+
website: z.url().optional(),
236+
linkedinUrl: z.url().optional(),
237+
published: z.boolean().default(false),
238+
}),
239+
})
240+
216241
/**
217242
* Contact data
218243
*/
@@ -273,16 +298,18 @@ const testimonialCollection = defineCollection({
273298
})
274299

275300
/**
276-
* This comment is a placeholder to explain the src/content/themes.json used by the
277-
* Theme Switcher component and script to define visual themes. It is not used by the
278-
* content system, but there's also a lack of good logical places to add such a data file.
301+
* This comment is a placeholder to explain the src/content/themes.json
302+
* used by the Theme Switcher component and script to define visual themes.
303+
* It is not used by the content system, but there's also a lack of good
304+
* logical places to add such a data file.
279305
*/
280306

281307
export const collections = {
282308
articles: articlesCollection,
283309
deepDives: deepDiveArticlesCollection,
284310
authors: authorsCollection,
285311
caseStudies: caseStudiesCollection,
312+
clients: clientsCollection,
286313
contactData: contactDataCollection,
287314
downloads: downloadsCollection,
288315
services: servicesCollection,

0 commit comments

Comments
 (0)