diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 52320ea..6e652b7 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -37,7 +37,7 @@ const config: Config = { themes: ["@docusaurus/theme-mermaid"], title: "Nicholas Goh", - tagline: "AI Full Stack Engineer", + tagline: "AI Engineer → AI Assurance", favicon: "img/favicon.ico", // Set the production url of your site here diff --git a/src/components/DeepAssureShowcase/index.tsx b/src/components/DeepAssureShowcase/index.tsx new file mode 100644 index 0000000..bfefbff --- /dev/null +++ b/src/components/DeepAssureShowcase/index.tsx @@ -0,0 +1,43 @@ +import type { ReactNode } from "react"; +import { motion } from "framer-motion"; +import Heading from "@theme/Heading"; +import { ExternalLink } from "lucide-react"; +import styles from "./styles.module.css"; + +export default function DeepAssureShowcase(): ReactNode { + return ( +
+
+ +

AI Assurance Practice

+ + DeepAssure + +

+ Built DeepAssure and led AI assurance engagements for HTX, CDL, NTU + LKCMedicine, and EarlyBird. +

+ + deepassure.ai + + +
+
+
+ ); +} diff --git a/src/components/DeepAssureShowcase/styles.module.css b/src/components/DeepAssureShowcase/styles.module.css new file mode 100644 index 0000000..1d3ac63 --- /dev/null +++ b/src/components/DeepAssureShowcase/styles.module.css @@ -0,0 +1,30 @@ +.section { + padding: 4rem 0; + background-color: var(--ifm-color-emphasis-100); +} + +.inner { + max-width: 600px; +} + +.eyebrow { + font-size: 0.75rem; + font-weight: 700; + letter-spacing: 0.1em; + text-transform: uppercase; + color: var(--ifm-color-primary); + margin-bottom: 0.75rem; +} + +.heading { + font-size: 2rem; + font-weight: 800; + margin-bottom: 1rem; +} + +.body { + font-size: 1.05rem; + line-height: 1.7; + color: var(--ifm-color-content-secondary); + margin-bottom: 1.5rem; +} diff --git a/src/components/HomepageFeatures/index.tsx b/src/components/HomepageFeatures/index.tsx index 82da8cd..02941f4 100644 --- a/src/components/HomepageFeatures/index.tsx +++ b/src/components/HomepageFeatures/index.tsx @@ -16,29 +16,31 @@ const FeatureList: FeatureItem[] = [ Svg: require("@site/static/img/undraw_predictive_analytics.svg").default, description: ( <> - A strong foundation in data science and AI, with expertise in machine - learning and data-driven solutions, now informing my evolving focus. + B.Sci in Data Science & AI (NTU). A rigorous foundation in machine + learning, statistics, and AI systems — the lens through which I build + and evaluate production AI. ), }, { - title: "Agentic Orchestration", + title: "Agentic Systems", Svg: require("@site/static/img/undraw_software_engineer.svg").default, description: ( <> - Experienced in designing and implementing agentic workflows, leveraging - LLMs to enable autonomous decision-making and collaborative task - execution. + Designs and ships agentic systems in industry — from LLM microservices + to multi-agent orchestration. Extends this into personal projects + exploring the edges of what agents can do. ), }, { - title: "Cloud Orchestration", - Svg: require("@site/static/img/undraw_cloud_hosting.svg").default, + title: "AI Assurance", + Svg: require("@site/static/img/undraw_all_checked.svg").default, description: ( <> - Skilled in provisioning and managing cloud resources using AWS and - Terraform Infrastructure as Code (IaC) + Evaluates, adversarially probes, and assures clients' agentic systems + across AI-specific risks and security dimensions. Recommends + improvements → clients remediate → I verify and close the loop. ), }, diff --git a/src/components/Recommendation/index.tsx b/src/components/Recommendation/index.tsx index afcf6d8..138d030 100644 --- a/src/components/Recommendation/index.tsx +++ b/src/components/Recommendation/index.tsx @@ -1,21 +1,16 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -import React, { type ReactNode } from "react"; - +import React, { useState, type ReactNode } from "react"; import clsx from "clsx"; - import Link from "@docusaurus/Link"; +import { motion, AnimatePresence } from "framer-motion"; +import { ChevronDown } from "lucide-react"; import styles from "./styles.module.css"; export interface Props { url: string; name: string; + position: string; content: ReactNode; + highlight: string; date: string; githubUsername: string; staticProfileImage: string | null; @@ -24,11 +19,15 @@ export interface Props { export default function Recommendation({ url, name, + position, content, + highlight, date, githubUsername, staticProfileImage, }: Props): ReactNode { + const [expanded, setExpanded] = useState(false); + return (
@@ -51,11 +50,44 @@ export default function Recommendation({ {name} + {position}
-
{content}
+
+
{highlight}
+ + + {expanded && ( + +

{content}

+
+ )} +
+ + +
- I had the pleasure of working with Nicholas, and I’m genuinely impressed - by their growth and contributions. A fast learner with a great attitude, - Nicholas quickly ramped up on complex topics like LLM microservices and - took initiative to implement practical solutions that improved team - efficiency and led to meaningful cost savings. On top of that, Nicholas - is friendly, collaborative, and always a joy to work with — a great - asset to any team. - - ), - showOnHomepage: true, - githubUsername: "", - staticProfileImage: "alvinphang", - }, - { - url: "https://www.linkedin.com/in/hui-ning-joo-9a5141168/", + url: "https://www.linkedin.com/in/hui-ning-joo-9a5141168/details/recommendations/", name: "Hui Ning Joo", + position: "Team Lead, Principal Software Engineer", date: "Apr 16, 2025", + highlight: + "Independently dove into AI agents and delivered a working demo — curiosity and drive stand out.", content: ( <> I had the opportunity to work with Nicholas both as his lead for a few @@ -57,9 +43,34 @@ const TWEETS: RecommendationItem[] = [ githubUsername: "", }, { - url: "https://www.linkedin.com/in/leonseet/", + url: "https://www.linkedin.com/in/alvinphang/details/recommendations/", + name: "Alvin Phang", + position: "Team Lead, Senior Software Engineer", + date: "Apr 22, 2025", + highlight: + "A fast learner who took initiative and improved team efficiency — a great asset to any team.", + content: ( + <> + I had the pleasure of working with Nicholas, and I’m genuinely impressed + by their growth and contributions. A fast learner with a great attitude, + Nicholas quickly ramped up on complex topics like LLM microservices and + took initiative to implement practical solutions that improved team + efficiency and led to meaningful cost savings. On top of that, Nicholas + is friendly, collaborative, and always a joy to work with — a great + asset to any team. + + ), + showOnHomepage: true, + githubUsername: "", + staticProfileImage: "alvinphang", + }, + { + url: "https://www.linkedin.com/in/leonseet/details/recommendations/", name: "Leon Seet", + position: "AI Engineer", date: "Apr 13, 2025", + highlight: + "Built a deployable LLM microservice for on-prem — tangible time and cost savings for the team.", content: ( <> I highly recommend Nicholas based on our time working together. He @@ -80,7 +91,10 @@ const TWEETS: RecommendationItem[] = [ { url: "https://chinholin.com", name: "Chin-Ho Lin", + position: "Software Engineer", date: "Apr 09, 2025", + highlight: + "Quickly identifies issues, researches thoroughly, and finds solutions to keep projects moving.", content: ( <> Nicholas is a fast learner who quickly identifies issues, conducts diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 65c3138..eba3c63 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -9,6 +9,7 @@ import Recommendations, { type RecommendationItem, } from "@site/src/data/recommendations"; import HomepageFeatures from "@site/src/components/HomepageFeatures"; +import DeepAssureShowcase from "@site/src/components/DeepAssureShowcase"; import Heading from "@theme/Heading"; import { motion } from "framer-motion"; import { ExternalLink, Download } from "lucide-react"; @@ -61,7 +62,10 @@ function HomepageHeader() { transition={{ delay: 0.5, duration: 0.6 }} > View Resume - + - + Download Resume
@@ -133,6 +140,7 @@ export default function Home(): ReactNode {
+
diff --git a/static/img/undraw_all_checked.svg b/static/img/undraw_all_checked.svg new file mode 100644 index 0000000..b14d814 --- /dev/null +++ b/static/img/undraw_all_checked.svg @@ -0,0 +1 @@ + \ No newline at end of file