About you
Tell me about yourself
I'm a software developer from Toronto with 8 years of experience building web products, mostly in React and TypeScript, plus the back end when it needs building. I do my best work when I can own a feature end to end, from the data model and API through to the UI and the deploy pipeline. I care about the details users actually feel, like a booking flow that doesn't lose people or a sign-in that just works, and I keep learning: I use Claude Code day to day as part of how I build.
adrianluk.com github.com/AdrianLuk linkedin.com/in/adrian-luk
I'm a senior frontend engineer in Toronto with 8 years in React and TypeScript. At Life House I was the primary frontend engineer on an embeddable booking widget that hotels dropped onto their own sites with one script tag, and I retrofitted five languages and multi-currency support onto a UI that had already shipped. At Control D I led an accessibility overhaul of 248 React components and built the test suite that keeps it passing. I like work where polish and correctness both matter, and I use Claude Code day to day as part of how I build.
adrianluk.com github.com/AdrianLuk linkedin.com/in/adrian-luk
I'm a full-stack engineer in Toronto with 8 years in React and TypeScript and server-side experience in PHP, Laravel and NestJS. At Control D I was the sole engineer on SSO across four identity providers (Okta, Google, Microsoft Entra ID and Tailscale) behind one entry point, and I owned the Stripe-driven HubSpot integration in production for 18 months. Earlier I designed the schema, REST API and React front end of a PepsiCo Canada contest platform with roughly 2,000 field employees enrolled per contest. I take features end to end, from data model to UI, and use Claude Code day to day.
adrianluk.com github.com/AdrianLuk linkedin.com/in/adrian-luk
I'm a frontend engineer who fixes accessibility at the foundation. At Control D I led the remediation of 248 React components against an external WCAG 2.1 AA audit, on a compliance deadline. Rather than patching page by page, I fixed focus management in the shared primitives, moved colour contrast into the theme palette for light and dark modes, and added keyboard navigation to components that had been mouse-only. I then built a cypress-axe suite that checks 96 routes on desktop and mobile in both themes. At Life House I contributed to a published Radix design system shared by the admin and guest apps.
adrianluk.com github.com/AdrianLuk linkedin.com/in/adrian-luk
Why do you want to work here?
I'm looking for a senior frontend or full-stack role where I can own a piece of the product end to end, and that's what drew me to this role. The work I enjoy most is the kind where details matter to real users. At Life House I was the primary frontend engineer on the booking widget hotels embedded on their own sites, where a confusing step loses a real booking. At Control D I was the sole engineer on SSO across Okta, Google, Microsoft Entra ID and Tailscale, where a mistake locks a paying customer out. I'd bring that same care to your product, and I use Claude Code day to day as part of how I build.
I want a role where I can own a piece of the product end to end, and this team looks like that place. I was the primary frontend engineer on Life House's embeddable booking flow and the sole engineer on Control D's SSO across four identity providers, so I'm used to work where getting the details right matters to users.
What are you looking for in your next role?
I'm looking for a senior frontend or full-stack individual contributor role at a product company. I want to own features end to end and go deep on the problems that need care, like auth, payments, accessible UI and the shared foundations other work is built on. I do my best work on a small team with clear priorities, regular feedback and room to focus. I'm based in Toronto and looking for remote or hybrid work.
Achievements
List some of your achievements
At Control D I was the sole engineer on single sign-on in our PHP REST API for 18 months. It served three audiences (internal admins, customer organizations and personal users) across four identity providers, all behind one entry point: Okta with group-to-role mapping, Google, Microsoft Entra ID with per-tenant OIDC discovery and PKCE, and Tailscale. The SSO support helped the business land new customers.
I owned Control D's HubSpot integration in production for 18 months. A PHP client driven by Stripe webhooks for payment, subscription and payment-method events created contacts, companies, deals, invoices and line items, which kept the sales pipeline in sync with billing.
I built org-level scheduled reporting at Control D end to end: the React and RTK Query interface organizations use to set reports up, the PHP controller and cron behind it, and the branded PDFs it produces.
I led Control D's accessibility overhaul across the customer dashboard, organization portal and marketing site, remediating 248 React components against an external WCAG 2.1 AA audit. I fixed focus management in the shared primitives rather than page by page, and built a cypress-axe suite that checks 96 routes on desktop and mobile in light and dark themes, so new work can't quietly break it.
At Life House I was the primary frontend engineer on the guest-facing booking widget, an embeddable React and TypeScript booking flow hotels added to their own sites with one script tag. Because it ran inside other people's pages, I wrote a custom Emotion stylis plugin that scoped every generated CSS rule to the widget container, without a Shadow DOM or an iframe, plus the exclusions that global and animation rules needed.
I retrofitted five languages and multi-currency support onto Life House's booking UI after it had already shipped, without a rewrite. That meant moving 88 files into 22 i18next namespaces, with content served from Contentful over GraphQL.
For hotel operators, I built bulk rate editing: date-range and weekday filters apply price overrides in one mutation, and the editor keeps per-night and percentage inputs in sync. I was also a top contributor on the revenue and marketing dashboards (occupancy, ADR, RevPAR, competitor rates and booking pace) over an Apollo Federation GraphQL gateway.
I contributed to Life House's published Radix design system, which the admin and guest apps were both built on.
On the back end, I built a NestJS GraphQL subgraph over the Mews and Cloudbeds property management system APIs.
At Studio I took over a stalled prototype of the agency's marketing site and became its sole developer. Over about 170 pull requests I rebuilt the landing page, navigation and case-study system, writing roughly 70% of the shipped source. I built the scroll engine (four coordinated GSAP ScrollTriggers per section, with offsets per breakpoint and full teardown on resize) and route transitions rendered on canvas, where navigation fires when the animation finishes.
I wrote the site's deploy pipeline: three GitHub Actions workflows to Firebase Hosting production and dev, plus a temporary preview channel for every pull request so changes could be reviewed live before merging.
At Brandish I led development on the agency's main client accounts. I was the majority author on six of nine repositories and the sole author on four, and I was the main person merging work on every multi-developer project. I also mentored a junior developer.
I built a college website on a Timber/Twig WordPress theme with 8 custom post types and 67 ACF field groups, with an embedded React single-page program catalogue built on Context, custom hooks and react-query and covered by React Testing Library.
I wrote the CI pipeline for our largest client project: builds only ran when source changed, dependencies were cached in three tiers, React and the theme built in two stages, and deploy webhooks covered four environments.
BT Cup was a contest platform PepsiCo Canada used to run retail display-execution competitions for its field sales force, with 11,750 employees provisioned and roughly 2,000 enrolled per contest. On a 14-contributor codebase (Laravel and React), I designed the domain schema, a six-level national sales hierarchy across nine roles, wrote about 91% of the REST API and about half of the front end, and made the call to move the front end from Vue to React.
In production I tracked down BT Cup's performance problems: a memory leak in a gallery endpoint over about 85,000 records, a missing index on heavily used tables, and a query that ran on every authenticated request.
I built a bilingual WordPress theme that served Canadian and US sites from one codebase, with runtime country detection and taxonomies per market.
Juice Bros is a pickleball podcast I co-host, and I'm the only engineer on its site. I scoped a deliberately tight MVP, chose the stack (Next.js App Router, TypeScript, Tailwind, shadcn/ui and Vercel), modelled content as typed data so the site could grow without a CMS, and integrated the YouTube feed and a Beehiiv newsletter. On top of that I built a set of tools for players, which I use in my own games.
Tell me about a project you're proud of
At Control D I was the sole engineer on single sign-on in our PHP REST API for 18 months. It served three audiences (internal admins, customer organizations and personal users) across four identity providers, all behind one entry point: Okta with group-to-role mapping, Google, Microsoft Entra ID with per-tenant OIDC discovery and PKCE, and Tailscale. The SSO support helped the business land new customers.
At Life House I was the primary frontend engineer on the guest-facing booking widget, an embeddable React and TypeScript booking flow hotels added to their own sites with one script tag. Because it ran inside other people's pages, I wrote a custom Emotion stylis plugin that scoped every generated CSS rule to the widget container, without a Shadow DOM or an iframe, plus the exclusions that global and animation rules needed.
At Studio I took over a stalled prototype of the agency's marketing site and became its sole developer. Over about 170 pull requests I rebuilt the landing page, navigation and case-study system, writing roughly 70% of the shipped source. I built the scroll engine (four coordinated GSAP ScrollTriggers per section, with offsets per breakpoint and full teardown on resize) and route transitions rendered on canvas, where navigation fires when the animation finishes.
BT Cup was a contest platform PepsiCo Canada used to run retail display-execution competitions for its field sales force, with 11,750 employees provisioned and roughly 2,000 enrolled per contest. On a 14-contributor codebase (Laravel and React), I designed the domain schema, a six-level national sales hierarchy across nine roles, wrote about 91% of the REST API and about half of the front end, and made the call to move the front end from Vue to React.
Juice Bros is a pickleball podcast I co-host, and I'm the only engineer on its site. I scoped a deliberately tight MVP, chose the stack (Next.js App Router, TypeScript, Tailwind, shadcn/ui and Vercel), modelled content as typed data so the site could grow without a CMS, and integrated the YouTube feed and a Beehiiv newsletter. On top of that I built a set of tools for players, which I use in my own games.
Behavioral
Tell me about a time you had to make a hard decision
At Control D, the customer dashboard, organization portal and marketing site had to pass an external WCAG 2.1 AA audit on a compliance deadline, and I led the remediation. I could have patched it page by page. I decided instead to fix focus management in the shared primitives: dialogs moved onto react-focus-lock, popups got their focus restoration back, and colour contrast moved into the theme palette for both light and dark modes. That covered 248 components and every page built on them. To keep it fixed, I built a cypress-axe suite that checks 96 routes on desktop and mobile in both themes. We met the deadline and passed the audit.
On BT Cup, PepsiCo Canada's contest platform for its field sales force, the front end had started in Vue. I made the call to move it to React and then built the architecture that followed: eleven contexts, custom hooks, code splitting with dynamic imports, an error boundary and skeleton loading. I had also designed the domain schema and wrote about 91% of the REST API the front end ran on. The platform went on to run contests for roughly 2,000 field employees at a time.
Tell me about a time you disagreed with someone
On BT Cup, PepsiCo Canada's contest platform for its field sales force, I designed the domain schema, and a coworker and I disagreed about how some of the tables should be structured. Rather than dig in, we stepped back and recognized we were on the same team working toward the same goal. We talked it through and agreed on a schema together.
Tell me about a mistake you made
At Elite Digital Agency I sent an email blast to about 40,000 people with the wrong subject line. I had built it by copying a previously sent email and overlooked the subject line. We sent a follow-up email correcting the mistake. It taught me to always check the subject line before I send an email blast, and I haven't made that mistake again.
Tell me about a time you worked to a tight deadline
At Control D, the customer dashboard, organization portal and marketing site had to pass an external WCAG 2.1 AA audit on a compliance deadline, and I led the remediation. I could have patched it page by page. I decided instead to fix focus management in the shared primitives: dialogs moved onto react-focus-lock, popups got their focus restoration back, and colour contrast moved into the theme palette for both light and dark modes. That covered 248 components and every page built on them. To keep it fixed, I built a cypress-axe suite that checks 96 routes on desktop and mobile in both themes. We met the deadline and passed the audit.
Tell me about a time you had to learn something fast
At Control D I had two weeks to learn the Okta API so we could land a customer. As the sole engineer on SSO in our PHP REST API, I learned it, built the integration and shipped it on time. Okta became one of the four identity providers I built SSO for, alongside Google, Microsoft Entra ID and Tailscale.
Logistics
Are you authorized to work in Canada? Do you need sponsorship?
Yes. I'm a Canadian citizen, so I don't need sponsorship to work in Canada. I don't have US work authorization.
Where are you based? Are you open to remote, hybrid or on-site?
I'm based in Toronto and open to remote or hybrid roles. For hybrid, I can commute to offices across the city, including downtown.
When can you start? What is your notice period?
I'm available to start right away, with no notice period.