--- /** * professional/index.astro — Professional (Resume / Portfolio) * --------------------------------------------------------------------------- * The "polished wing". A single long-scroll page whose sections read as a * narrative (Summary -> Experience -> Skills -> Projects -> Education -> * Contact), per the spec. Uses surface="professional" for the dark slate tone. * * Experience comes from the `experience` collection; projects from the * `projects` collection. Both are sorted by `order`. Education is a placeholder * block (spec leaves it to Greg). */ import BaseLayout from "@layouts/BaseLayout.astro"; import Reveal from "@components/motion/Reveal.astro"; import Icon from "@components/Icon.astro"; import SectionHeader from "@components/layout/SectionHeader.astro"; import SectionNav from "@components/professional/SectionNav.astro"; import Timeline from "@components/professional/Timeline.astro"; import SkillGrid from "@components/professional/SkillGrid.astro"; import ProjectCard from "@components/professional/ProjectCard.astro"; import EducationHistory from "@components/professional/EducationHistory.astro"; import Certifications from "@components/professional/Certifications.astro"; import AlchemicalDivider from "@components/mystic/AlchemicalDivider.astro"; import Astrolabe from "@components/mystic/Astrolabe.astro"; import CircuitField from "@components/mystic/CircuitField.tsx"; import CelestialFrame from "@components/mystic/CelestialFrame.astro"; import { getCollection } from "astro:content"; const experience = (await getCollection("experience")).sort( (a, b) => a.data.order - b.data.order, ); const projects = (await getCollection("projects")).sort( (a, b) => a.data.order - b.data.order, ); --- {/* Page header + overlapping headshot. The headshot is anchored to the HERO SECTION (not container-prose) so its straddle point is the true hero/next-section boundary. It's positioned on the right, aligned with the content column's right edge via the same container-prose centering math (a centered max-width column). translate-y-1/2 puts its center on the boundary: half in the hero, half over the next section, in front of both (z-50). */}
{/* Background layer — clipped to the hero so the circuit canvas/astrolabe don't bleed into the content below. */}
{/* Headshot — anchored to the hero section's bottom edge (the true boundary with the next section), aligned right with the content column. Wrapped in a centered max-width box that mirrors container-prose so the headshot's right edge lines up with the content's right edge. */}
Greg Kilmer headshot
{ /* Fixed left section rail. It is position:fixed so it renders once here and stays pinned to the viewport's left edge while the page scrolls. The main content column below is given lg:pl-* to clear the 14rem rail. */ } { /* Content column. On lg+ the fixed left rail (w-56 = 14rem) takes the left edge, so this column is offset by that width via margin (NOT padding on a centered max-width box — that caused asymmetric overflow / broken grids). It keeps container-prose's max-width but lets it sit beside the rail. */ }
{/* ===== 1. Summary ===== */}
Software developer and team lead with deep experience in cloud and mobile application development, currently focused on SAP-adjacent solutions at Implico Inc. Expanding into SAP Business Technology Platform (BTP) while maintaining a broad technical foundation across AI/ML, full-stack development, and automation. Known for bridging complex technical requirements with practical, maintainable solutions. Strong communicator who thrives at the intersection of engineering and business needs.
Cloud development workspace
Where the day-job work happens
{/* ===== 2. Experience ===== */}
{/* ===== 3. Skills ===== */}
{/* ===== 4. Projects ===== */}
{ projects.map((project, i) => ( )) }
{/* ===== 5. Education ===== */}

Education history

Certifications

{/* ===== 6. Contact ===== */}