import React from 'react' import { CERTIFICATIONS, EDUCATION, IDENTITY, LANGUAGES, ROLES, ROUTE, SKILLS, SUMMARY, TIERS, } from '../data/profile.mjs' const Groups = ({ groups }) => (
{groups.map((group) => (

{group.label}

{group.items.map((item, i) => ( {i > 0 && ' · '} {item} ))}

))}
) const SKILL_GROUPS = TIERS.map((tier) => ({ label: tier.label, items: SKILLS.filter((s) => s.tier === tier.id && s.listed !== false).map( (s) => s.name ), })).filter((g) => g.items.length) const CREDENTIAL_GROUPS = [ { label: 'Education', items: EDUCATION.map((e) => e.title) }, { label: 'Certifications', items: CERTIFICATIONS.map((c) => `${c.name} (${c.year})`), }, { label: 'Languages', items: LANGUAGES.map(([name, level]) => `${name}, ${level}`), }, ] // The same facts as the terminal, laid out as a page. It is also what search engines and // visitors without JavaScript get. const Classic = () => (

{IDENTITY.name}

Data pipelines, data products and the automation that keeps them running.

{IDENTITY.title} at {IDENTITY.employer} , based in {IDENTITY.location}, with {IDENTITY.experience} across data engineering, ML infrastructure and DevOps.

Profile

{SUMMARY.map((text) => (

{text}

))}

Experience

{ROUTE.map((stop) => stop.place).join(' → ')}

    {ROLES.map((role) => (
  1. {role.period}

    {role.company}

    {role.place}

    {role.title}

    {role.summary}

  2. ))}

Stack

Credentials

Contact

Always happy to talk about data, ML and platform engineering. Email is the fastest way to reach me.

{IDENTITY.email}
LinkedIn
) export default Classic