From af2769a9ed241af77dcc041e244021721181fb66 Mon Sep 17 00:00:00 2001 From: Roland Chelwing Date: Tue, 12 May 2026 15:40:34 +0200 Subject: [PATCH 1/2] chore(content): refresh About and recent experiences Update About to span the actual industries (telehealth, security, ad tech, e-commerce, fintech, online gaming) and add a GetHarley anchor. Rewrite the GetHarley, Nira, and Stack Overflow details with evidence-backed claims and update their tech tags. EntryCard now splits details on blank lines so longer entries render as multiple paragraphs. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/components/EntryCard.astro | 2 +- src/data/experiences.ts | 12 ++++++------ src/sections/About.astro | 11 +++++++---- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/components/EntryCard.astro b/src/components/EntryCard.astro index fcd8858..ac23d02 100644 --- a/src/components/EntryCard.astro +++ b/src/components/EntryCard.astro @@ -74,7 +74,7 @@ const { period, logo, title, url, rows = [], details, sparkline, tags, links, fe )) } -

{details}

+ {details.split("\n\n").map((para) =>

{para}

)} { sparkline && ( diff --git a/src/data/experiences.ts b/src/data/experiences.ts index 63af6c2..371c306 100644 --- a/src/data/experiences.ts +++ b/src/data/experiences.ts @@ -24,8 +24,8 @@ export const experiences: readonly Experience[] = [ url: "https://getharley.com/", location: "London, UK (Remote)", details: - "Contributing to a telehealth platform that connects patients with expert clinicians, focusing on enhancing user experience, implementing new features and designs.", - tags: ["TypeScript", "React", "Next.js", "AWS"], + "Co-built the AI-driven consultation transcription product now used by ~15 design-partner clinics for around 80% of their consultations.\n\nLed a catalog-variants migration that touched the data model, AI pipeline, and patient-facing UI.\n\nAlso built and maintain the patient recall and follow-up Lambda systems in production.", + tags: ["TypeScript", "React", "Next.js", "AWS Amplify", "AWS Lambda", "DynamoDB", "Bedrock", "PostHog"], }, { period: "2023 — 2024", @@ -36,8 +36,8 @@ export const experiences: readonly Experience[] = [ url: "https://www.nira.com/", location: "California, US (Remote)", details: - "Helped companies take control over their documents, enhancing the transparency of both internal and external access to company records.", - tags: ["TypeScript", "React", "Next.js", "tRPC", "GraphQL", "Elasticsearch", "AWS"], + "Architected and solo-built DSA, a lightweight free-tier acquisition product, bootstrapping the monorepo, auth, CI/CD, storage, and UI surface.\n\nAlso replaced manual customer onboarding with a fully automated self-service flow backed by a cloud-document ingest cron worker.", + tags: ["TypeScript", "React", "Next.js", "tRPC", "GraphQL", "Elasticsearch", "MongoDB", "AWS", "PostgreSQL"], }, { period: "2022 — 2023", @@ -48,8 +48,8 @@ export const experiences: readonly Experience[] = [ url: "https://stackoverflow.com/", location: "New York, US (Remote)", details: - "Part of the Awareness team, primarily involved in optimizing ads and metrics to improve click-through rates, automation, and impressions.", - tags: ["TypeScript", "Webpack", "C#", "SQL", "Redis", "Elasticsearch", "Google Ads"], + "Led the ed-tech course ad-serving product (Udemy and Pluralsight affiliate partnerships) end-to-end, covering catalog ingest, validation, ranking, and CTR-driven experimentation on Stack Overflow question pages.\n\nAlso built a .NET catalog validation pipeline that verified course titles, categories, and pricing against live partner pages before serving them as ads.", + tags: ["TypeScript", "Webpack", "C#", ".NET", "SQL", "Redis", "Elasticsearch", "Google Ads"], }, { period: "2022 — 2022", diff --git a/src/sections/About.astro b/src/sections/About.astro index 3a28dc7..201e0fa 100644 --- a/src/sections/About.astro +++ b/src/sections/About.astro @@ -6,8 +6,10 @@ import { available } from "../data/availability";

- I’m a frontend engineer from Sweden who’s spent the last decade moving between product teams - in fintech, e-commerce, developer tools and now healthcare. I care about type, motion and the small details that turn a screen into a place. + I’m a software engineer from Sweden with a decade across telehealth, security, ad tech, + e-commerce, fintech, and online gaming. Frontend at the core, increasingly fullstack, and + lately shipping AI-driven product features. I care about type, motion and the small details + that turn a screen into a place.

Along the way I’ve worked with a .

- I work mostly in TypeScript, React and Next.js, but I’m happiest when the boundary between - design and engineering gets fuzzy. + These days I’m at GetHarley, working on AI features for clinical consultations like + transcription and treatment-plan generation. I’m happiest when the boundary between design + and engineering gets fuzzy.

{ available ? ( From 034d670595ad28dbc2c77c3b599e73f76e7856fb Mon Sep 17 00:00:00 2001 From: Roland Chelwing Date: Tue, 12 May 2026 15:45:35 +0200 Subject: [PATCH 2/2] chore(card): skip empty paragraphs when splitting details Filter whitespace-only chunks so a stray leading/trailing newline or a `\n\n\n+` separator in any data source doesn't render an empty

. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/components/EntryCard.astro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/EntryCard.astro b/src/components/EntryCard.astro index ac23d02..be81d70 100644 --- a/src/components/EntryCard.astro +++ b/src/components/EntryCard.astro @@ -74,7 +74,7 @@ const { period, logo, title, url, rows = [], details, sparkline, tags, links, fe

)) } - {details.split("\n\n").map((para) =>

{para}

)} + {details.split("\n\n").filter((para) => para.trim()).map((para) =>

{para}

)} { sparkline && (