Shameless Productions
Visit the live site
Overview
Shameless Productions is a Seattle underground dance music collective running since 2003 — Deck'd Out, Reverie Society, Club Yes, and more. Tek has handled their design and digital presence since 2017, and DJs under their banner as a resident.
Framework
- Next.js 14
- React 18
- TypeScript
Data
- Neon (serverless Postgres)
- Cloudflare R2
Commerce
- Stripe
Messaging
- Twilio
Interface
- Radix UI
- Tailwind CSS
- Embla Carousel
- Lucide
Testing
- Jest
- Testing Library
- Playwright
Hosting
- Vercel
The Problem
The old site was a stock WordPress build that didn't match the brand, and the original plan for the rebuild would have made things worse before they got better.
Key challenges included:
- WordPress/WPBakery didn't fit an underground event brand's identity
- The first rebuild plan was a full ticketing system — Stripe checkout, box office POS, QR scanning — which meant taking on refund and chargeback liability the brand didn't need
- That plan also competed directly with Eventbrite, which Shameless already uses for real ticket sales
The Solution
Cut the ticketing system entirely partway through and rebuilt around a simpler, Partiful-style scope instead.
Event Pages
Shareable event pages with RSVP and a "Pay Cover" link out to Venmo, Cash App, or Eventbrite — no payment processing or liability taken on directly.
DJ Profiles
523 individual DJ profile pages built for SEO, sourced and deduplicated from a roster spreadsheet, the Resident Advisor API, SoundCloud, and Instagram.
Gallery & Merch
An R2-backed photo gallery across 4 events and 500+ photos (shot by Manny Dan), plus a Stripe-backed merch store — the only real payment processing on the whole site.
Under the Hood
Deciding not to build a ticketing system
The original scope was full ticketing: box office, QR scanning, ticket inventory, the lot. It got cut. What the events actually needed was an RSVP with a suggested cover amount, and building a ticketing platform to compete with Eventbrite would have meant owning payment disputes and door scanning for a promoter who already had both solved. Scope moved to RSVP plus payment links plus merch, which removed an entire class of failure and shipped months sooner. The Pay Cover button pointing at Eventbrite or a payment link is the design, not a placeholder.
Uploads bypass the app entirely
Event photography arrives in bulk and at full resolution. The browser requests a short-lived presigned URL and pushes files directly to Cloudflare R2 over the S3 API, so a gallery import never occupies a serverless function or counts against its execution limits. The app stores references, not bytes.
Primitives instead of a component kit
The interface is built on Radix primitives with Tailwind on top, with no prebuilt component library underneath. Radix supplies the behavior nobody should be reimplementing, focus trapping, keyboard handling, and correct ARIA on dialogs and toasts, while leaving the appearance completely open. For an events brand with a strong visual identity, a component kit would have meant fighting its defaults on every screen.
It has tests, which is the unusual part
Jest and Testing Library cover the unit and component layer, Playwright drives the real browser flows. Most freelance builds this size have no tests at all, and the reason to have them here is that events have hard dates. A regression discovered on the night of a show is a different category of problem than one found on a Tuesday.
Timeline
- Apr 2026: Scope cut from full ticketing to Partiful-style RSVP
- Jul 2026: Live at simplyshameless.com
The Outcome
Live and running, with one honest number worth naming: as of early July 2026, only 18 of 806 pages are indexed in Google Search Console — a crawl-budget problem still being worked, not a finished win. The scope-discipline call (cutting ticketing before it became a liability) is the actual result worth pointing at here.



