Adam RasheedFrontend Software Engineer

Case Study

L.A. Design & Dev

The L.A. Design & Dev homepage in a desktop browser alongside the mobile layout

L.A. Design & Dev had five thousand members and no address. The community ran inside Slack, so the only way in was knowing someone already there. The founder wanted a front door: somewhere to send a recruiter, a sponsor, or a designer who moved to the city last month.

The site is the community's public face. Jobs, events, the podcast, the newsletter, and paid membership on one domain. The founder is a designer and gave me the comps. I built it solo, ten weeks from the first commit to launch.

Four services, one page

The homepage reads as one page. It pulls from four services the community does not own. Contentful holds the editorial content. The Spotify Web API supplies podcast episodes. Beehiiv takes newsletter signups. Stripe handles paid membership.

The layout and the page each fetch in parallel, so the slowest service sets the pace instead of the sum of all four. Spotify was the one that could hurt. Its API needs a token exchange before every read and it rate limits, so the episode feed sits behind Upstash Redis on a fifteen-minute TTL. A cold cache costs one request, not one per visitor.

The podcast section, with episodes pulled from the Spotify Web API

The founder is never the bottleneck

The founder is a designer, not an engineer. If he needed me to publish an event, I would have built the wrong thing. So I asked how he actually runs the community week to week, and modeled the CMS around that instead of around the page layout.

Events, FAQs, member quotes, partners, the about page: each is a content type he fills in, and the site arranges. The header menu and the footer are entries too, so he can add a nav link without opening the repo. A catch-all route renders any new page he creates, which means a code of conduct or a sponsor page ships without a deploy. Ten content types, and none of them need me.

The events section on the homepage, built from Contentful entries the founder writes

No casts in the CMS layer

Contentful's SDK hands back entries typed loosely enough that TypeScript stops helping. The usual fix is a cast. I banned casts in this repo, so I generated types from the live content model and hand-wrote a narrowing converter for each one.

They are not glamorous. What they buy is a legible failure. When an entry comes back malformed, the page stops at the boundary and says which one, instead of throwing from inside a component three sections down. Ten converters is more code than ten casts. It is also the difference between a bug the founder can read and a bug he has to call me about.

Making it feel like the room

The brand is loud. Bitmap display type, serif italics, a hard two-pixel black grid, and marquee walls of the logos where members work. Loud is easy in a 1440px comp and harder everywhere else, so most of the mobile work was deciding what to drop. The three-column stat grid becomes one column, and the decorative color blocks and the palm tree come out.

One detail I like: in the App Router a server layout does not know the current path, so it cannot vary the page chrome on its own. I inject the pathname as a request header in proxy.ts and read it in the layout. That is how the signup page drops the footer's photo carousel while every other page keeps it.

The stats grid and the marquee of company logos where members work

Where it landed

The site launched in February 2026 and is live. I do not have post-launch numbers yet. The result I would point at is quieter anyway: a community that lived behind a Slack invite now has a public address, and the person who runs it can change it without me.