matt-taylor.tech
← Back to projects

Founder · Matt's Volleyball League

Matt's Volleyball League

mattsvolleyball.com ↗

Teamlinkt API Astro Cloudflare Pages Functions GitHub Actions GroupMe API NWS forecast API Playwright Affinity Designer / Photo

A recreational volleyball league I founded and operate as a side business, with recurring seasons and a contractor team handling officiating, administration, and operations. I built every public-facing and operational piece. The tournament, scheduling, and payout software is a project of its own; see Volleyball Engine.

The public site (mattsvolleyball.com)

An Astro marketing and information site, the player-facing front door to the league: live schedules, standings, and registration, all driven from live data with no manual content entry. Serverless endpoints on Cloudflare Pages Functions read that data with 5-minute edge caching, so registration CTAs, season labels, and open dates update client-side without a rebuild; season transitions need zero manual content changes.

Teamlinkt API integration (the backbone)

That live data all comes from one place. Teamlinkt runs registration and rosters, and I integrated its APIs so schedules, scores, standings, and registration status flow from a single source to two consumers with no manual data entry: the public site above and the GroupMe automation below. This is the load-bearing piece; the site and the bots are both just surfaces over it.

GroupMe communications automation (built on the Teamlinkt API)

The bots are the second consumer of that same Teamlinkt data. Five scheduled GitHub Actions workflows turn it into the daily communications that used to be manual work every game day: nightly schedule posts (Playwright screenshots the live schedule in CI), weekly results-and-standings recaps, morning-after missing-score nudges, registration spots-remaining alerts (with stateless dedupe, so nothing repeats unless the counts change), shuffle-night RSVP headcount checks, and NWS-forecast weather warnings.

Every workflow has dry-run, test, and date-override inputs and shakes down against a test group before posting to real players; posting runs on a dual path (a user token for topics, a bot fallback for the main chats) since GroupMe bots can't post into topics.

Brand and design

The full visual identity, designed in Affinity Designer and Affinity Photo: a logo system with variants and 3D mockups, business cards, 18×24 posters, web and social banners with seasonal variants, Instagram and Facebook assets, per-season registration graphics, and the site's visual design.

Email marketing

HTML email templates produced each season: registration announcements, a welcome series broken out by league night, captain's duties and onboarding, schedule-change and rainout notices, and contractor recruitment.

Operations and business

  • Recruited, trained, and manage a contractor team running against a documented operating playbook.
  • Season-by-season schedules, playoff brackets, and payout reports; sports waiver, rules, and league policies.
  • Facility coordination, venue scheduling, player communications, and retention.
  • Full P&L: pricing, payment processing, contractor 1099 payouts, sponsor relationships, and tax and accounting.

What it demonstrates

  • API integration as the backbone: one Teamlinkt integration drives both the public site and the automation layer, so live league data reaches players with no manual entry.
  • Web and automation engineering: an Astro site with serverless edge endpoints, plus a hands-off communications system on scheduled CI that layers GroupMe and NWS on top of the Teamlinkt data.
  • Owning a real business end to end (product, brand, operations, finance, and a contractor team) with real customers and revenue.
  • Design capability: a complete brand identity built without an outside designer.
  • The same systems-and-automation instinct I bring to IT, applied where there's no team to delegate to.

The scheduling, tournament, live-scoring, and payout software behind the league is its own build; see Volleyball Engine.