<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ish D</title>
    <description>The latest articles on DEV Community by Ish D (@outofjam).</description>
    <link>https://dev.to/outofjam</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3345873%2F4b5a1b45-2e2a-42a1-ab15-733bc133cdd3.png</url>
      <title>DEV Community: Ish D</title>
      <link>https://dev.to/outofjam</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/outofjam"/>
    <language>en</language>
    <item>
      <title>Building a Wrestling Title History API with Laravel</title>
      <dc:creator>Ish D</dc:creator>
      <pubDate>Fri, 11 Jul 2025 14:33:51 +0000</pubDate>
      <link>https://dev.to/outofjam/building-a-wrestling-title-history-api-with-laravel-3c4b</link>
      <guid>https://dev.to/outofjam/building-a-wrestling-title-history-api-with-laravel-3c4b</guid>
      <description>&lt;p&gt;I recently launched PopDropkick.dev, a REST API for professional wrestling data — specifically focused on tracking wrestlers, promotions, championships, and detailed title reigns.&lt;/p&gt;

&lt;p&gt;It started as a fun Laravel side project to explore API design and relationship modeling, but it’s grown into something more structured and (hopefully) useful to others.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The API handles:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wrestler profiles (with slugs, aliases, and debut dates)&lt;/li&gt;
&lt;li&gt;Promotions and cross-promotion affiliations&lt;/li&gt;
&lt;li&gt;Championship title reigns — including vacated titles and multi-reign tracking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’ve populated it with a full history of the NXT Championship for now, and it’s ready for expansion into more titles and promotions (AEW, WWE, NJPW, etc.).&lt;/p&gt;

&lt;p&gt;🔗 Links&lt;/p&gt;

&lt;p&gt;&lt;a href="https://popdropkick.dev" rel="noopener noreferrer"&gt;Live API&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/outofjam/popdropkickv1" rel="noopener noreferrer"&gt;GitHub Repo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why I Built This&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We consume and test with a lot of APIs at place my work but that data is never fun. Most wrestling stat sources are either static HTML, heavily scraped, or organized in a way that isn't developer-friendly. I wanted something:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JSON-first&lt;/li&gt;
&lt;li&gt;RESTful and linkable&lt;/li&gt;
&lt;li&gt;Easy to query for reign history, current champions and something highly flexible&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each Title Reign ties to a Wrestler and a Championship, and includes:&lt;/p&gt;

&lt;p&gt;won_on, lost_on&lt;/p&gt;

&lt;p&gt;won_at, lost_at (events or shows)&lt;/p&gt;

&lt;p&gt;reign_number&lt;/p&gt;

&lt;p&gt;vacated logic&lt;/p&gt;

&lt;p&gt;Human-readable reign length (like 6mos and 3w) is generated automatically based on date intervals.&lt;/p&gt;

&lt;p&gt;Example: Tommaso Ciampa&lt;/p&gt;

&lt;p&gt;Calling this endpoint:&lt;/p&gt;

&lt;p&gt;GET /api/wrestlers/tommaso-ciampa&lt;/p&gt;

&lt;p&gt;Returns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "data": {
    "id": "f05533f7-0ef1-4b65-b130-b12504f08852",
    "slug": "tommaso-ciampa",
    "ring_name": "Tommaso Ciampa",
    "real_name": "Tommaso Whitney",
    "also_known_as": [],
    "active_title_reigns": [],
    "promotions": [
      {
        "id": "5095d51e-adee-4173-824f-ecdad2b755ee",
        "name": "NXT",
        "slug": "nxt",
        "detail_url": "https://popdropkick.dev/api/promotions/nxt",
        "abbreviation": "NXT"
      }
    ],
    "active_promotions": [
      {
        "id": "5095d51e-adee-4173-824f-ecdad2b755ee",
        "name": "NXT",
        "slug": "nxt",
        "detail_url": "https://popdropkick.dev/api/promotions/nxt",
        "abbreviation": "NXT"
      }
    ],
    "debut_date": "2005-01-01",
    "title_reigns": [
      {
        "championship_id": "395280ec-7cf0-42c7-ad50-b8da0c3ba6ba",
        "championship_name": "NXT Championship",
        "won_on": "2021-09-14",
        "won_at": "NXT 2.0 (premiere)",
        "lost_on": "2022-01-04",
        "lost_at": "NXT New Year's Evil 2022",
        "reign_number": 1,
        "win_type": null,
        "reign_length": 112,
        "reign_length_human": "3mos and 3w"
      },
      {
        "championship_id": "395280ec-7cf0-42c7-ad50-b8da0c3ba6ba",
        "championship_name": "NXT Championship",
        "won_on": "2018-07-25",
        "won_at": "NXT (TV)",
        "lost_on": "2019-02-20",
        "lost_at": "vacated",
        "reign_number": 1,
        "win_type": null,
        "reign_length": 210,
        "reign_length_human": "6mos and 3w"
      }
    ],
    "created_at": "2025-07-10T14:59:36+00:00",
    "updated_at": "2025-07-10T14:59:36+00:00"
  },
  "meta": {
    "status": 200,
    "counts": {
      "title_reigns": 2,
      "active_title_reigns": 0,
      "promotions": 1,
      "active_promotions": 1
    },
    "timestamps": {
      "timestamp": "2025-07-10T16:01:03+00:00",
      "response_time_ms": 61.45
    }
  },
  "message": null
}        

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What's Next&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add more championships and wrestlers (want to help?)&lt;/li&gt;
&lt;li&gt;Handle tag team title reigns (with multiple wrestlers per reign)&lt;/li&gt;
&lt;li&gt;Add pagination and filtering for title reigns&lt;/li&gt;
&lt;li&gt;More metadata: Longest/Shortest reign, Most reigns, Total Championships Held, &lt;del&gt;Days as Champion&lt;/del&gt; &amp;lt;-- done&lt;/li&gt;
&lt;li&gt;Open up POST/PATCH endpoints for contributors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Want to Try It?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can hit the live API at &lt;a href="https://popdropkick.dev" rel="noopener noreferrer"&gt;https://popdropkick.dev&lt;/a&gt;, or check out the source code on GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/outofjam/popdropkickv1" rel="noopener noreferrer"&gt;https://github.com/outofjam/popdropkickv1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The auto generated docs are at &lt;a href="https://popdropkick.dev/docs/api" rel="noopener noreferrer"&gt;https://popdropkick.dev/docs/api&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want to mess with protected routes (POST, PATCH), ping me and I’ll send over an API token.&lt;/p&gt;

&lt;p&gt;Thanks for reading! Feedback is more than welcome.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>laravel</category>
      <category>wrestling</category>
      <category>api</category>
    </item>
  </channel>
</rss>
