Add work page
This commit is contained in:
@@ -32,6 +32,7 @@ export default function NavBar() {
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<Popover.Group className="hidden lg:flex lg:gap-x-12">
|
<Popover.Group className="hidden lg:flex lg:gap-x-12">
|
||||||
|
<NavLink to="/work">Work</NavLink>
|
||||||
<NavLink to="/about">This App</NavLink>
|
<NavLink to="/about">This App</NavLink>
|
||||||
</Popover.Group>
|
</Popover.Group>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -60,6 +61,12 @@ export default function NavBar() {
|
|||||||
<div className="mt-6 flow-root">
|
<div className="mt-6 flow-root">
|
||||||
<div className="-my-6 divide-y divide-gray-200/10">
|
<div className="-my-6 divide-y divide-gray-200/10">
|
||||||
<div className="space-y-2 py-6">
|
<div className="space-y-2 py-6">
|
||||||
|
<NavLink
|
||||||
|
to="/work"
|
||||||
|
className="-mx-3 block rounded-lg px-3 py-2 text-base font-semibold leading-7"
|
||||||
|
>
|
||||||
|
Work
|
||||||
|
</NavLink>
|
||||||
<NavLink
|
<NavLink
|
||||||
to="/about"
|
to="/about"
|
||||||
className="-mx-3 block rounded-lg px-3 py-2 text-base font-semibold leading-7"
|
className="-mx-3 block rounded-lg px-3 py-2 text-base font-semibold leading-7"
|
||||||
|
|||||||
76
src/Client/src/components/WorkTimeline.tsx
Normal file
76
src/Client/src/components/WorkTimeline.tsx
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
import AnchorLink from "./AnchorLink";
|
||||||
|
import Text from "./Text";
|
||||||
|
|
||||||
|
interface WorkTimelineItem {
|
||||||
|
startDate: string;
|
||||||
|
endDate?: string | null;
|
||||||
|
title: string;
|
||||||
|
companyName: string;
|
||||||
|
companyUrl: string;
|
||||||
|
content: string[];
|
||||||
|
}
|
||||||
|
|
||||||
|
const workTimelineItems: WorkTimelineItem[] = [
|
||||||
|
{
|
||||||
|
startDate: "September 2021",
|
||||||
|
title: "CTO",
|
||||||
|
companyName: "un:hurd music",
|
||||||
|
companyUrl: "https://unhurdmusic.com",
|
||||||
|
content: [
|
||||||
|
"As one of the founding developers at un:hurd music and now Chief Technology Officer, I built and scaled un:hurd's back-end and cloud infrastructure that serves automated marketing soloutions for tens-of-thousands of artists and musicians.",
|
||||||
|
"I lead a small but incredibly talented multi-diciplinary team building on the Azure cloud using a .NET backend, React web front-end and a Swift native iOS app.",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
startDate: "August 2020",
|
||||||
|
endDate: "September 2021",
|
||||||
|
title: "Software Development Lead",
|
||||||
|
companyName: "Vouch",
|
||||||
|
companyUrl: "https://vouch.co.uk/",
|
||||||
|
content: [
|
||||||
|
"At Vouch I lead the backend build of a new version of their tenant referencing software - an AI enhanced chat-bot based system utlising Azure Cognitive Services and various supporting serverless APIs written in .NET Core and hosted on Microsoft Azure.",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
startDate: "May 2020",
|
||||||
|
endDate: "July 2020",
|
||||||
|
title: "Software Developer",
|
||||||
|
companyName: "Paragon ID",
|
||||||
|
companyUrl: "https://www.paragon-id.com/en",
|
||||||
|
content: [
|
||||||
|
"I joined Paragon ID on a short-term contract where I wrote and deployed two key projects: A complex dashboard for a large construction equipment manufacturer to track assets across various manufacturing stages and a medical assets tracking dashboard deployed and used in multiple hospitals across the UK.",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
startDate: "July 2019",
|
||||||
|
endDate: "May 2020",
|
||||||
|
title: "Software Developer",
|
||||||
|
companyName: "Osborne Technologies",
|
||||||
|
companyUrl: "https://www.osbornetechnologies.co.uk/",
|
||||||
|
content: [
|
||||||
|
"I joined Osborne Technologies as the only cloud cloud-specialist and lead a project creating the first web-based version of their flag ship visitor management software utilising ASP.NET Core MVC and Microsoft SQL Server on the Microsoft Azure cloud.",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export default function WorkTimeline() {
|
||||||
|
return (
|
||||||
|
<ol className="relative border-s border-gray-600">
|
||||||
|
{workTimelineItems.map((item, index) => (
|
||||||
|
<li key={index} className="mb-10 ms-4">
|
||||||
|
<div className="absolute w-3 h-3 rounded-full mt-1.5 -start-1.5 borderborder-gray-900 bg-gray-600"></div>
|
||||||
|
<time className="mb-1 text-sm font-normal leading-none text-gray-400">
|
||||||
|
{item.startDate} - {item.endDate ? item.endDate : "Present"}
|
||||||
|
</time>
|
||||||
|
<h3 className="text-2xl font-semibold text-gray-900 dark:text-white">
|
||||||
|
{item.title} @{" "}
|
||||||
|
<AnchorLink href={item.companyUrl}>{item.companyName}</AnchorLink>
|
||||||
|
</h3>
|
||||||
|
{item.content.map((content, index) => (
|
||||||
|
<Text key={index}>{content}</Text>
|
||||||
|
))}
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ol>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -1,6 +1,4 @@
|
|||||||
import { FaRegPaperPlane } from "react-icons/fa6";
|
|
||||||
import AnchorLink from "../components/AnchorLink";
|
import AnchorLink from "../components/AnchorLink";
|
||||||
import Subtitle from "../components/Subtitle";
|
|
||||||
import TechIcons from "../components/TechIcons";
|
import TechIcons from "../components/TechIcons";
|
||||||
import Text from "../components/Text";
|
import Text from "../components/Text";
|
||||||
import Title from "../components/Title";
|
import Title from "../components/Title";
|
||||||
@@ -8,7 +6,7 @@ import Title from "../components/Title";
|
|||||||
export default function HomePage() {
|
export default function HomePage() {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Title>Hi, I'm Beau.</Title>
|
<Title className="text-center mb-6">Hi, I'm Beau.</Title>
|
||||||
<Text>
|
<Text>
|
||||||
I'm a UK-based software engineer and I love building cool stuff.
|
I'm a UK-based software engineer and I love building cool stuff.
|
||||||
</Text>
|
</Text>
|
||||||
@@ -22,17 +20,7 @@ export default function HomePage() {
|
|||||||
<AnchorLink href="https://unhurdmusic.com">un:hurd music</AnchorLink>.
|
<AnchorLink href="https://unhurdmusic.com">un:hurd music</AnchorLink>.
|
||||||
</Text>
|
</Text>
|
||||||
|
|
||||||
<TechIcons className="mt-20" />
|
<TechIcons className="mt-28" />
|
||||||
|
|
||||||
<div className="mt-24 mb-10 text-center">
|
|
||||||
<Text>If you think I can help with your project...</Text>
|
|
||||||
<a
|
|
||||||
href="mailto:me@beaufindlay.com"
|
|
||||||
className="inline-flex items-center border-0 ring-1 ring-inset ring-gray-300 bg-black px-3.5 py-2.5 mt-2 text-sm font-semibold text-white shadow hover:bg-gray-800 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-600"
|
|
||||||
>
|
|
||||||
Get in touch <FaRegPaperPlane className="ml-2" />
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
25
src/Client/src/pages/WorkPage.tsx
Normal file
25
src/Client/src/pages/WorkPage.tsx
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import { FaRegPaperPlane } from "react-icons/fa6";
|
||||||
|
import Text from "../components/Text";
|
||||||
|
import Title from "../components/Title";
|
||||||
|
import WorkTimeline from "../components/WorkTimeline";
|
||||||
|
|
||||||
|
export default function WorkPage() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Title className="text-center mb-4">Work</Title>
|
||||||
|
<p className="text-center text-2xl font-semibold mb-10">
|
||||||
|
Freelance Software Engineer since 2018
|
||||||
|
</p>
|
||||||
|
<WorkTimeline />
|
||||||
|
<div className="mb-10 mt-12 text-center">
|
||||||
|
<Text>If you think I can help with your project...</Text>
|
||||||
|
<a
|
||||||
|
href="mailto:me@beaufindlay.com"
|
||||||
|
className="inline-flex items-center border-0 ring-1 ring-inset ring-gray-300 bg-black px-3.5 py-2.5 mt-2 text-sm font-semibold text-white shadow hover:bg-gray-800 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-600"
|
||||||
|
>
|
||||||
|
Get in touch <FaRegPaperPlane className="ml-2" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@ import AboutPage from "./pages/AboutPage";
|
|||||||
import ErrorPage from "./pages/ErrorPage";
|
import ErrorPage from "./pages/ErrorPage";
|
||||||
import HomePage from "./pages/HomePage";
|
import HomePage from "./pages/HomePage";
|
||||||
import Layout from "./pages/Layout";
|
import Layout from "./pages/Layout";
|
||||||
|
import WorkPage from "./pages/WorkPage";
|
||||||
|
|
||||||
const router = createBrowserRouter([
|
const router = createBrowserRouter([
|
||||||
{
|
{
|
||||||
@@ -11,6 +12,7 @@ const router = createBrowserRouter([
|
|||||||
errorElement: <ErrorPage />,
|
errorElement: <ErrorPage />,
|
||||||
children: [
|
children: [
|
||||||
{ index: true, element: <HomePage /> },
|
{ index: true, element: <HomePage /> },
|
||||||
|
{ path: "work", element: <WorkPage /> },
|
||||||
{ path: "about", element: <AboutPage /> },
|
{ path: "about", element: <AboutPage /> },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user