diff --git a/README.md b/README.md index b6cc8cf..5b4c2ba 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Lu's interactive personal portfolio, built around the living pixel pond version of Signal Desk. -The homepage focuses on Lu's current work at [Orchid.ai](https://orchid.ai), selected public projects, and an interactive procedural pond rather than a catalogue of product pages. +The homepage focuses on Lu's selected public projects and an interactive procedural pond rather than a catalogue of product pages. The site has three public routes: `/`, the interactive portfolio; `/pip`, a static product page for Pip, Lu's warm, easygoing Telegram agent; and `/privacy`, a short personal-use privacy policy. The Pip page is a deliberate standalone exception to the portfolio's homepage-first structure. Retired concept and product URLs resolve to the pond-themed 404 instead of preserving stale copies of older portfolios. diff --git a/app/routes.tsx b/app/routes.tsx index 4f88ad5..a226175 100644 --- a/app/routes.tsx +++ b/app/routes.tsx @@ -26,7 +26,7 @@ export type SiteRoute = { const homeMetadata: RouteMetadata = { title: "Lu | Software Engineer", socialTitle: "Lu | Software Engineer", - description: "Lu makes stubborn software behave: Orchid.ai's native Android app, agent systems, Linux tools, and practical software.", + description: "Lu makes stubborn software behave: native Android apps, agent systems, Linux tools, and practical software.", socialDescription: "I make stubborn software behave. Native Android, agent systems, Linux tools, and practical software.", canonical: siteConfig.siteUrl, image: `${siteConfig.siteUrl}/share-cards/luinbytes-dev-pond.png`, @@ -88,7 +88,7 @@ export function RouteHead({ route }: { route: SiteRoute }) { <> {metadata.title} - + {metadata.noindex && } diff --git a/components/concepts/signal-desk/profile-card.tsx b/components/concepts/signal-desk/profile-card.tsx index 3a7bfa9..5dac919 100644 --- a/components/concepts/signal-desk/profile-card.tsx +++ b/components/concepts/signal-desk/profile-card.tsx @@ -463,7 +463,7 @@ export function ProfileCard({ reducedMotion, compact = false }: { reducedMotion: - Android at Orchid.ai + Software engineer diff --git a/components/concepts/signal-desk/project-explorer.module.css b/components/concepts/signal-desk/project-explorer.module.css index 77e9a7a..46f6855 100644 --- a/components/concepts/signal-desk/project-explorer.module.css +++ b/components/concepts/signal-desk/project-explorer.module.css @@ -123,10 +123,6 @@ object-fit: cover; } -.mediaorchidandroid > img { - object-position: center; -} - .mediarakazoandroid { background: radial-gradient(ellipse at 50% 45%, color-mix(in srgb, var(--site-surface-soft) 72%, var(--site-accent) 12%), transparent 58%), diff --git a/components/concepts/signal-desk/signal-desk.tsx b/components/concepts/signal-desk/signal-desk.tsx index e247f7c..3adb827 100644 --- a/components/concepts/signal-desk/signal-desk.tsx +++ b/components/concepts/signal-desk/signal-desk.tsx @@ -62,7 +62,6 @@ function SiteFooter({ reduced, entrance, ready }: { reduced: boolean; entrance:
GitHub @x6c75 - Orchid.ai
); @@ -88,8 +87,8 @@ function ProjectArtwork({ project }: { project: PortfolioProject }) { alt={project.imageAlt ?? `${project.name} project artwork`} style={{ position: "absolute", inset: 0, width: "100%", height: "100%" }} sizes="(max-width: 820px) 92vw, 48vw" - loading={project.id === "orchid-android" ? "eager" : "lazy"} - fetchPriority={project.id === "orchid-android" ? "high" : "auto"} + loading={project.id === portfolioProjects[0]?.id ? "eager" : "lazy"} + fetchPriority={project.id === portfolioProjects[0]?.id ? "high" : "auto"} /> ); @@ -191,7 +190,7 @@ function ProjectPanel({ project, reduced }: { project: PortfolioProject; reduced } function ProjectExplorer({ reduced, entrance, ready }: { reduced: boolean; entrance: boolean; ready: boolean }) { - const [activeId, setActiveId] = useState(portfolioProjects[0]?.id ?? "orchid-android"); + const [activeId, setActiveId] = useState(portfolioProjects[0]?.id); const activeIndex = Math.max(0, portfolioProjects.findIndex((project) => project.id === activeId)); const activeProject = portfolioProjects[activeIndex] ?? portfolioProjects[0]; @@ -264,7 +263,7 @@ export function SignalDesk() {
Software engineer

I make stubborn software behave.

-

I build Orchid.ai’s native Android app, agent systems, and Linux tools that do the useful part without making a fuss.

+

I build native Android apps, agent systems, and Linux tools that do the useful part without making a fuss.

See the work Start a conversation diff --git a/lib/portfolio-content.ts b/lib/portfolio-content.ts index c9be879..e029234 100644 --- a/lib/portfolio-content.ts +++ b/lib/portfolio-content.ts @@ -1,5 +1,4 @@ export type PortfolioProjectId = - | "orchid-android" | "rakazo-android" | "linux-sonar" | "homebot" @@ -21,21 +20,6 @@ export type PortfolioProject = { }; export const portfolioProjects: PortfolioProject[] = [ - { - id: "orchid-android", - name: "Orchid.ai", - category: "Native Android", - eyebrow: "Current work / channel 01", - summary: "Building the native Android home for an assistant that gets things done.", - detail: - "I am building Orchid's native Android app, bringing its message-first assistant into a platform-native experience that feels at home on the device.", - href: "https://orchid.ai", - image: "/images/portfolio/orchid-desk.jpg", - imageAlt: "Orchid's public campaign artwork showing a softly lit working desk", - secondaryHref: "https://orchid.ai/blog/introducing-keiki", - secondaryLabel: "Meet Orchid", - proof: ["Native Android", "Message-first UX", "In active development"], - }, { id: "rakazo-android", name: "Rakazo", @@ -94,5 +78,4 @@ export const portfolioIdentity = { calendar: "https://cal.com/luinbytes", github: "https://github.com/luinbytes", x: "https://x.com/x6c75", - orchid: "https://orchid.ai", } as const; diff --git a/public/images/portfolio/orchid-desk.jpg b/public/images/portfolio/orchid-desk.jpg deleted file mode 100644 index 50bff7c..0000000 Binary files a/public/images/portfolio/orchid-desk.jpg and /dev/null differ diff --git a/review-previews/README.md b/review-previews/README.md index 66d8e1f..b2e104c 100644 --- a/review-previews/README.md +++ b/review-previews/README.md @@ -16,10 +16,6 @@ Each image shows one page area at its captured viewport. Open an image to inspec ![Home — Pip feature — Desktop · light](./homepage-desktop1440x900-light-pip-feature.jpg) -**Work - Orchid.ai** - -![Home — Work - Orchid.ai — Desktop · light](./homepage-desktop1440x900-light-work-orchid-ai.jpg) - **Work - Rakazo** ![Home — Work - Rakazo — Desktop · light](./homepage-desktop1440x900-light-work-rakazo.jpg) @@ -50,10 +46,6 @@ Each image shows one page area at its captured viewport. Open an image to inspec ![Home — Pip feature — Mobile · dark](./homepage-mobile390x844-dark-pip-feature.jpg) -**Work - Orchid.ai** - -![Home — Work - Orchid.ai — Mobile · dark](./homepage-mobile390x844-dark-work-orchid-ai.jpg) - **Work - Rakazo** ![Home — Work - Rakazo — Mobile · dark](./homepage-mobile390x844-dark-work-rakazo.jpg) diff --git a/review-previews/homepage-desktop1440x900-light-work-orchid-ai.jpg b/review-previews/homepage-desktop1440x900-light-work-orchid-ai.jpg deleted file mode 100644 index 3f27cbb..0000000 Binary files a/review-previews/homepage-desktop1440x900-light-work-orchid-ai.jpg and /dev/null differ diff --git a/review-previews/homepage-mobile390x844-dark-work-orchid-ai.jpg b/review-previews/homepage-mobile390x844-dark-work-orchid-ai.jpg deleted file mode 100644 index 1ce09ee..0000000 Binary files a/review-previews/homepage-mobile390x844-dark-work-orchid-ai.jpg and /dev/null differ diff --git a/review-previews/manifest.json b/review-previews/manifest.json index 6e69351..64b04f4 100644 --- a/review-previews/manifest.json +++ b/review-previews/manifest.json @@ -15,14 +15,6 @@ "colorScheme": "light", "path": "review-previews/homepage-desktop1440x900-light-pip-feature.jpg" }, - { - "page": "homepage", - "area": "Work - Orchid.ai", - "device": "desktop1440x900-light", - "viewport": "1440x900", - "colorScheme": "light", - "path": "review-previews/homepage-desktop1440x900-light-work-orchid-ai.jpg" - }, { "page": "homepage", "area": "Work - Rakazo", @@ -79,14 +71,6 @@ "colorScheme": "dark", "path": "review-previews/homepage-mobile390x844-dark-pip-feature.jpg" }, - { - "page": "homepage", - "area": "Work - Orchid.ai", - "device": "mobile390x844-dark", - "viewport": "390x844", - "colorScheme": "dark", - "path": "review-previews/homepage-mobile390x844-dark-work-orchid-ai.jpg" - }, { "page": "homepage", "area": "Work - Rakazo", diff --git a/tests/browser/browser_test.py b/tests/browser/browser_test.py index 9b79bb2..bd2e454 100644 --- a/tests/browser/browser_test.py +++ b/tests/browser/browser_test.py @@ -1144,7 +1144,7 @@ def test_homepage_is_responsive_and_routes_featured_work(self) -> None: ).is_visible() ) expect(page.locator("#hero-title")).to_have_css("clip-path", "none") - for project in ("Orchid.ai", "Rakazo", "linux-sonar", "HomeBot", "ConnectorMap"): + for project in ("Rakazo", "linux-sonar", "HomeBot", "ConnectorMap"): self.assertTrue( page.get_by_role("button", name=re.compile(project, re.I)).is_visible() ) @@ -1497,7 +1497,7 @@ def test_homepage_preserves_layout_and_world_state_across_viewport_matrix(self) headingInside: heading.left >= -1 && heading.right <= width + 1 && heading.width > 120, headerInside: header.left >= -1 && header.right <= width + 1, pondFits: Math.abs(pond.width - width) < 1 && Math.abs(pond.height - height) < 1, - projectTargets: buttons.length === 5 && buttons.every(button => button.width >= 44 && button.height >= 44), + projectTargets: buttons.length === 4 && buttons.every(button => button.width >= 44 && button.height >= 44), projectNamesFit: width > 430 || projectNames.every(element => { const range = document.createRange(); range.selectNodeContents(element); @@ -1654,7 +1654,7 @@ def test_navigation_and_bordered_controls_keep_their_visual_hierarchy(self) -> N ) ) category_labels = page.locator("[aria-label='Featured projects'] button small") - self.assertEqual(category_labels.count(), 5) + self.assertEqual(category_labels.count(), 4) self.assertTrue( category_labels.evaluate_all( "elements => elements.every(element => parseFloat(getComputedStyle(element).fontSize) >= 10)" @@ -2267,7 +2267,7 @@ def double_tap(x, y): impacts_before_food, ) dropped_count = int(pond.get_attribute("data-food-dropped-count")) - project_button = page.get_by_role("button", name=re.compile("Orchid.ai", re.I)) + project_button = page.get_by_role("button", name=re.compile("Rakazo", re.I)) project_button.scroll_into_view_if_needed() box = project_button.bounding_box() double_tap(box["x"] + box["width"] / 2, box["y"] + box["height"] / 2)