Stuff. Recent work.

I've thrown together a few examples of recent work that might be of interest. A sort of basic portfolio.

Everything here has been built in the last couple of years while working at Released. It's all my design and dev work. In terms of tech, it's using React, TypeScript and Tailwind.

Analytics.

This is currently a work in progress. I'm building a small dashboard feature for users to see basic view analytics for their content. Charts are using Recharts, and the numbers are animated using NumberFlow.

Analytics

Timeline.

Another (kinda) work in progress. This is a timeline view for our roadmap feature. The hard part here was making it performant as there are potentially thousands of items in the timeline. As most frontend developers will know, more DOM elements = more lag. To combat this I'm only rendering the items that are currently in view and scrolling is handled using CSS transforms.

Timeline

Combobox.

This was a small UI component that was really fun to build. This is the sort of thing I love building; a small, simple (visually!) component that has some clean animation and interactions. This is built on top of ⌘K, a command menu library and Floating UI for positioning.

Combobox

Portal.

I recently built a portal application for Released users. It's a Next.js app, hosted on Cloudflare Pages, that allows users publish their changelog and roadmap to a microsite that we host. There are currently two themes but the example here uses the "Sydney" theme which I like the most. Check out a live example.

Below is a snapshot of the cards component where I added a sheet to display recent posts with drag interaction to close.

Cards

Embeds.

I built two embeddable elements for Released; a page and a widget. The page embed displays an in-page version of the users changelog and roadmap. The widget embed displays the same content but in a popover dialog. It's built using the Shadow DOM, rendering a small Preact app inside. The reason we've stuck with Preact (React) here is to allow sharing components and business logic between the embeds, our main app and our Next.js portal sites.