Skip to content

Commit e7df04e

Browse files
benbalterCopilot
andcommitted
Mark CISSP and SSCP certifications as expired
Adds an optional 'expired' flag to the certification schema and renders a subtle pill-shaped 'Expired' badge next to the credential name. The credential link is preserved (Credly badges still verify), but readers can tell at a glance it's no longer actively maintained. Styled in neutral gray (not red) so it reads as factual status rather than a warning, with a tooltip and aria-label that expand to 'no longer actively maintained' for assistive tech. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent b05b4c1 commit e7df04e

3 files changed

Lines changed: 44 additions & 1 deletion

File tree

src/content.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ const pagesCollection = defineCollection({
119119
name: z.string(),
120120
url: z.string().optional(),
121121
category: z.enum(['professional', 'personal']).default('professional'),
122+
expired: z.boolean().default(false),
122123
})).optional(),
123124
skills: z.array(z.object({
124125
group: z.string(),

src/content/pages/resume.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,12 @@ certifications:
4848
name: Certified Information Systems Security Professional (CISSP)
4949
url: https://www.credly.com/badges/1a8b31f1-3727-4acf-a6a8-8d67af9ecb23
5050
category: professional
51+
expired: true
5152
- authority: International Information System Security Certification Consortium (ISC)²
5253
name: Systems Security Certified Practitioner (SSCP)
5354
url: https://www.credly.com/badges/7eb85996-c7fc-4c68-95df-fcd33ec445ba/
5455
category: professional
56+
expired: true
5557
- authority: Federal Communications Commission
5658
name: Amateur Radio Technician Class License, callsign KO6EYB
5759
category: personal

src/pages/resume.astro

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ const resumeSchema = generateResumeSchema({
137137
{certifications && certifications.length > 0 && (() => {
138138
const professional = certifications.filter((c: { category?: string }) => (c.category ?? 'professional') === 'professional');
139139
const personal = certifications.filter((c: { category?: string }) => c.category === 'personal');
140-
const renderCert = (cert: { authority: string; name: string; url?: string }) => (
140+
const renderCert = (cert: { authority: string; name: string; url?: string; expired?: boolean }) => (
141141
<div class="certification-item">
142142
<div class="certification-header">
143143
<span class="certification-authority">{cert.authority}</span>
@@ -147,6 +147,9 @@ const resumeSchema = generateResumeSchema({
147147
) : (
148148
cert.name
149149
)}
150+
{cert.expired && (
151+
<span class="cert-expired" title="No longer actively maintained" aria-label="Expired — no longer actively maintained">Expired</span>
152+
)}
150153
</span>
151154
</div>
152155
</div>
@@ -393,6 +396,43 @@ const resumeSchema = generateResumeSchema({
393396
letter-spacing: 0.03em;
394397
}
395398

399+
.cert-expired {
400+
display: inline-block;
401+
margin-left: 0.5rem;
402+
padding: 0.05rem 0.5rem;
403+
font-size: 0.7rem;
404+
font-weight: 600;
405+
text-transform: uppercase;
406+
letter-spacing: 0.04em;
407+
color: var(--color-gray-600, #6c757d);
408+
background-color: color-mix(in srgb, var(--color-gray-600, #6c757d) 10%, transparent);
409+
border: 1px solid color-mix(in srgb, var(--color-gray-600, #6c757d) 25%, transparent);
410+
border-radius: 9999px;
411+
vertical-align: middle;
412+
white-space: nowrap;
413+
}
414+
415+
.certification-name a[href] + .cert-expired,
416+
.certification-name > .cert-expired {
417+
text-decoration: none;
418+
}
419+
420+
@media (prefers-color-scheme: dark) {
421+
.cert-expired {
422+
color: var(--color-gray-400, #adb5bd);
423+
background-color: color-mix(in srgb, var(--color-gray-400, #adb5bd) 12%, transparent);
424+
border-color: color-mix(in srgb, var(--color-gray-400, #adb5bd) 30%, transparent);
425+
}
426+
}
427+
428+
@media print {
429+
.cert-expired {
430+
background-color: transparent;
431+
border-color: #999;
432+
color: #555;
433+
}
434+
}
435+
396436
/* ============================================================
397437
* Dark Mode
398438
* ============================================================ */

0 commit comments

Comments
 (0)