diff --git a/src/components/Tiles/RecordTile.tsx b/src/components/Tiles/RecordTile.tsx
new file mode 100644
index 0000000..4591468
--- /dev/null
+++ b/src/components/Tiles/RecordTile.tsx
@@ -0,0 +1,126 @@
+import React from 'react';
+
+import LinkWithArrow from '@/components/ui/LinkWithArrow';
+import { useMediaQuery } from '@/hooks/useMediaQuery';
+// import Image from 'next/image';
+
+export type RecordTileProps = {
+ organizationLogo: string;
+ organizationName: string;
+ organizationLink: string;
+ role: string;
+ duration: string;
+ body?: React.ReactNode;
+ organizationBeforeRole?: boolean;
+};
+
+function jobDescriptorSection(
+ organization: string,
+ link: string,
+ role: string,
+ duration: string,
+ isOrganizationBeforeRole: boolean = false,
+ isWidth768pxOrMore: boolean,
+) {
+ // styling for:
+ // h2 - text-xl font-bold
+ // h3 - text-lg font-semibold
+
+ const organizationNameHeadingTag = isOrganizationBeforeRole ? 'h2' : 'h3';
+ const organizationNameHeading = React.createElement(
+ LinkWithArrow,
+ {
+ href: link,
+ target: '_blank',
+ rel: 'noopener noreferrer',
+ 'aria-label': `Link to ${organization}`,
+ },
+ React.createElement(
+ organizationNameHeadingTag,
+ { className: isOrganizationBeforeRole ? 'text-xl font-bold' : 'text-lg font-semibold' },
+ organization,
+ ),
+ );
+ const roleHeadingTag = !isOrganizationBeforeRole ? 'h2' : 'h3';
+ const roleHeading = React.createElement(
+ roleHeadingTag,
+ { className: !isOrganizationBeforeRole ? 'text-xl font-bold' : 'text-lg font-semibold' },
+ role,
+ );
+
+ return (
+
+
+ <>
+ {isOrganizationBeforeRole && (
+ <>
+ {organizationNameHeading}
+ {roleHeading}
+ >
+ )}
+ {!isOrganizationBeforeRole && (
+ <>
+ {roleHeading}
+ {organizationNameHeading}
+ >
+ )}
+ >
+ {!isWidth768pxOrMore && (
+
{duration}
+ )}
+
+ {isWidth768pxOrMore && (
+
{duration}
+ )}
+
+ );
+}
+
+export function RecordTile({
+ organizationLogo,
+ organizationName,
+ organizationLink,
+ role,
+ duration,
+ body,
+ organizationBeforeRole = false,
+}: RecordTileProps) {
+ const isTablet = useMediaQuery('(min-width: 768px)');
+ const isDesktop = useMediaQuery('(min-width: 1280px)');
+
+ // const topRow = (
+ //
{!organizationBeforeRole ? role : organizationName}
+ // );
+ // const bottomRow = "";
+ return (
+
+
+ {isTablet && (
+
+
+ {/* // center the bullet : `top-1/2 transform -translate-y-1/2` */}
+

+
+
+ )}
+
+ {jobDescriptorSection(
+ organizationName,
+ organizationLink,
+ role,
+ duration,
+ organizationBeforeRole,
+ isTablet,
+ )}
+ {body}
+
+
+
+ );
+}