For this project, I’m turning to the 2022 Lahman baseball database to develop an offensive score rating for players with over 4,000 at-bats.
Note that this data is updated through the 2022 season. Future Hall of Famers such as Miguel Cabrara and Albert Pujols are still active during this time period and will only improve their overall score.
The process of creating an offensive score rating is quite an interesting one, although not always straightforward. It’s a great way to learn more about various players, compare them with others from their era, and maybe even get a sense of their Hall of Fame prospects. It’s a bit of a fun exercise that offers some neat insights into the world of baseball statistics.
How did I create my score?
- To begin, I focused the dataset exclusively on position players who have recorded over 4,000 at-bats (removing players linked to steroid use), resulting in 1,233 players that we will rank.
- Each player’s performance in various offensive categories was then evaluated and converted into percentiles to standardize comparisons.
- I narrowed down the key categories to seven crucial ones: 1) home runs, 2) batting average, 3) runs batted in, 4) hits, 5) at-bats, 6) walks, and 7) strikeouts. I combined these percentiles for each player, applying different weights to each category based on their perceived significance in the game.
Here is an overview of the weighting system that I used.
Category | Weight |
Home Runs | 5 |
Average | 5 |
Runs Batted In | 4 |
Hits | 4 |
At Bats | 3 |
Base on Balls | 2 |
Strike Outs | 1 |
Here is an example of how I computed the overall score for Babe Ruth.
Initially, I calculate where Babe Ruth ranks in percentiles among all hitters with more than 4,000 at-bats. Ruth excelled, landing in the highest percentile for home runs, batting average, runs batted in, and total at-bats. However, as is common with heavy hitters, he had a high strikeout rate, placing him in the 90th percentile for strikeouts, which impacts his overall rating negatively.
Player | Home Runs | Average | Runs Batted In | Hits | At Bats | Base on Balls | Strike Outs |
Babe Ruth | 1 | 1 | 1 | 4 | 9 | 1 | 90 |
I then subtract each metric from 100 (as we are used to seeing higher scores for better players) and apply the weighted metric as I described above. This gives us the following for Babe Ruth.
Player | Home Runs | Average | Runs Batted In | Hits | At Bats | Base on Balls | Strike Outs |
Babe Ruth | 495 | 495 | 396 | 384 | 273 | 198 | 10 |
The sum of these numbers is 2,251, the overall score we give Babe Ruth.
My scoring system is designed to highlight players from the live ball era who demonstrated enduring excellence over their careers. It tends to favor those with lengthy, consistent careers, meaning a player who has sustained solid performance over 20 years is likely to rank higher than one who had a stellar career over a decade. Additionally, in an effort to maintain the integrity of the metrics, I’ve chosen to exclude players whose careers are associated with performance-enhancing drugs (PEDs).
The summary statistics on my dataset look like the following.
Maximum Score | 2,315 |
Minimum Score | 114 |
Range | 2,201 |
Average | 1,209 |
Standard Deviation | 497 |
Overall, the first-place score goes to Stan Musical with a score of 2,315, and last place goes to Red Dooin, a catcher in the dead ball era, with a score of 114.
Reviewing the top ten players by offensive score, we see a list of all-time greats. My data is through 2022, including Miguel Cabrera, who retired in 2023 and could move up this list.
Rank | Score | Name | Position | Years Active | HR | AVG | RBI | H | AB | BB | SO |
1 | 2315 | Stan Musial | First Baseman | 1941 – 1963 | 475 | 0.330 | 1,951 | 3,630 | 10,972 | 1,599 | 696 |
2 | 2261 | Ted Williams | Left Fielder | 1939 – 1960 | 521 | 0.344 | 1,839 | 2654 | 7,706 | 2,021 | 709 |
3 | 2260 | Lou Gehrig | First Baseman | 1923 – 1939 | 493 | 0.340 | 1,995 | 2721 | 8,001 | 1,508 | 790 |
4 | 2251 | Babe Ruth | Right Fielder | 1914 – 1935 | 714 | 0.342 | 2,217 | 2,873 | 8,398 | 2,062 | 1,330 |
5 | 2239 | Mel Ott | Right Fielder | 1926 – 1947 | 511 | 0.304 | 1,860 | 2,876 | 9,456 | 1,708 | 896 |
6 | 2238 | Hank Aaron | Right Fielder | 1954 – 1976 | 755 | 0.304 | 2,297 | 3,771 | 12,364 | 1,402 | 1,383 |
7 | 2226 | Jimmie Foxx | First Baseman | 1925 – 1945 | 534 | 0.325 | 1,922 | 2,646 | 8,134 | 1,452 | 1,311 |
8 | 2222 | Willie Mays | Center Fielder | 1951 – 1973 | 660 | 0.301 | 1,903 | 3,283 | 10,881 | 1,464 | 1,526 |
9 | 2221 | Miguel Cabrera | First Baseman | 2003 – 2022* | 507 | 0.308 | 1,847 | 3,088 | 10,022 | 1,227 | 2,031 |
10 | 2220 | Rogers Hornsby | Second Baseman | 1915 – 1937 | 301 | 0.358 | 1,584 | 2,930 | 8,173 | 1,038 | 679 |
From my previous analysis that reviews offensive categories by year, we determined that runs are trending ever so slightly downward, and home runs and strikeouts are increasing. By analyzing Hall of Fame inductees by their offense score and their last year playing Major League baseball, we gain valuable insights into evolving standards for Hall of Fame selection. This approach allows us to assess whether the bar for induction is being raised over time, offering a unique perspective on the criteria and benchmarks that define a Hall of Fame-worthy career.
From the following scatter plot showing only Hall of Fame inductees, we get a correlation score of .40. Although not a large correlation, the offense output criteria to get elected appears to be increasing. Here, I have also limited the data set to Hall of Famers who are position players who are not pitchers or were elected for their managerial roles. This removed Joe Torre, Al Lopez, Billy Southworth, Charlie Comiskey, Wilbert Robinson, Casey Stengel, Miller Huggins, Bucky Harris, Ned Hanlon, and Leo Durocher, who all had over 4,000 at-bats during their career but were selected for the Hall of Fame due to their successful managerial careers.
If we review all players, and not just Hall of Fame inductees, who had over 4,000 at-bats during their career, we do not see an increase in their offense score compared to the era in which they played.
This graph works best in proper visualization software, where you can hover over the data points to see which players are not inducted into the Hall of Fame but appear to have an offense score similar to their peers.
We can also look at the distribution of our offense score and see it does resemble a normal distribution.
Let’s now look at players by position.
Examining players by position offers us a unique lens through which to identify potential Hall of Fame candidates based on their career achievements. Additionally, this perspective sheds light on those who played in the dead ball era, a time when offensive accomplishments were more challenging to achieve. Recognizing the extraordinary feats of these players within the context of their era adds a valuable dimension to our appreciation of their skills and contributions to the game.
Catchers
Rank | Score | Player | HOF | Years Active | HR | AVG | RBI | H | AB | BB | SO |
48 | 2,046 | Mike Piazza | Y | 1992 – 2007 | 427 | 0.307 | 1,335 | 2,127 | 6,911 | 759 | 1,113 |
69 | 2,006 | Yogi Berra | Y | 1946 – 1965 | 358 | 0.284 | 1,430 | 2,150 | 7,555 | 704 | 414 |
74 | 1,995 | Ted Simmons | Y | 1968 – 1988 | 248 | 0.284 | 1,389 | 2,472 | 8,680 | 855 | 694 |
77 | 1,988 | Joe Torre | Y | 1960 – 1977 | 252 | 0.297 | 1,185 | 2,342 | 7,874 | 779 | 1,094 |
102 | 1,943 | Bill Dickey | Y | 1928 – 1946 | 202 | 0.312 | 1,209 | 1,969 | 6,300 | 678 | 289 |
137 | 1,875 | Gabby Hartnett | Y | 1922 – 1941 | 236 | 0.297 | 1,179 | 1,912 | 6,432 | 703 | 697 |
158 | 1,847 | Carlton Fisk | Y | 1969 – 1993 | 376 | 0.269 | 1,330 | 2,356 | 8,756 | 849 | 1,386 |
184 | 1,803 | Joe Mauer | N | 2004 – 2018 | 143 | 0.306 | 923 | 2,123 | 6,930 | 939 | 1,034 |
191 | 1,788 | Johnny Bench | Y | 1967 – 1983 | 389 | 0.267 | 1,376 | 2,048 | 7,658 | 891 | 1,278 |
213 | 1,744 | Ernie Lombardi | Y | 1931 – 1947 | 190 | 0.306 | 990 | 1,792 | 5,855 | 430 | 262 |
First Baseman
Rank | Score | Player | HOF | Years Active | HR | AVG | RBI | H | AB | BB | SO |
1 | 2,315 | Stan Musial | Y | 1941 – 1963 | 475 | 0.330 | 1,951 | 3,630 | 10,972 | 1,599 | 696 |
3 | 2,260 | Lou Gehrig | Y | 1923 – 1939 | 493 | 0.340 | 1,995 | 2,721 | 8,001 | 1,508 | 790 |
7 | 2,226 | Jimmie Foxx | Y | 1925 – 1945 | 534 | 0.325 | 1,922 | 2,646 | 8,134 | 1,452 | 1,311 |
9 | 2,221 | Miguel Cabrera | N | 2003 – 2022* | 507 | 0.308 | 1,847 | 3,088 | 10,022 | 1,227 | 2,031 |
11 | 2,200 | Albert Pujols | N | 2001 – 2022* | 703 | 0.296 | 2,218 | 3,384 | 11,421 | 1,373 | 1,404 |
20 | 2,164 | Todd Helton | N | 1997 – 2013 | 369 | 0.316 | 1,406 | 2,519 | 7,962 | 1,335 | 1,175 |
24 | 2,134 | Eddie Murray | Y | 1977 – 1997 | 504 | 0.287 | 1,917 | 3,255 | 11,336 | 1,333 | 1,516 |
30 | 2,106 | Jeff Bagwell | Y | 1991 – 2005 | 449 | 0.296 | 1,529 | 2,314 | 7,797 | 1,401 | 1,558 |
38 | 2,072 | Johnny Mize | Y | 1936 – 1953 | 359 | 0.312 | 1,337 | 2,011 | 6,443 | 856 | 524 |
40 | 2,067 | Cap Anson | Y | 1871 – 1897 | 97 | 0.334 | 2,075 | 3,435 | 10,281 | 984 | 330 |
Second Baseman
Rank | Score | Player | HOF | Years Active | HR | AVG | RBI | H | AB | BB | SO |
10 | 2,220 | Rogers Hornsby | Y | 1915 – 1937 | 301 | 0.358 | 1,584 | 2,930 | 8,173 | 1,038 | 679 |
21 | 2,147 | Charlie Gehringer | Y | 1924 – 1942 | 184 | 0.320 | 1,427 | 2,839 | 8,860 | 1,186 | 372 |
42 | 2,066 | Robinson Cano | N | 2005 – 2022 | 335 | 0.300 | 1,306 | 2,639 | 8,773 | 620 | 1,214 |
49 | 2,043 | Jeff Kent | N | 1992 – 2008 | 377 | 0.289 | 1,518 | 2,461 | 8,498 | 801 | 1,522 |
62 | 2,023 | Roberto Alomar | Y | 1988 – 2004 | 210 | 0.300 | 1,134 | 2,724 | 9,073 | 1,032 | 1,140 |
79 | 1,986 | Frankie Frisch | Y | 1919 – 1937 | 105 | 0.316 | 1,244 | 2,880 | 9,112 | 728 | 272 |
82 | 1,980 | Craig Biggio | Y | 1988 – 2007 | 291 | 0.281 | 1,175 | 3,060 | 1,0876 | 1,160 | 1,753 |
101 | 1,943 | Nap Lajoie | Y | 1896 – 1916 | 82 | 0.338 | 1,599 | 3,243 | 9,590 | 516 | 321 |
103 | 1,941 | Eddie Collins | Y | 1906 – 1930 | 47 | 0.333 | 1,300 | 3,315 | 9,949 | 1,499 | 400 |
121 | 1,904 | Ryne Sandberg | Y | 1981 – 1997 | 282 | 0.284 | 1,061 | 2,386 | 8,385 | 761 | 1,260 |
Third Baseman
Rank | Score | Player | HOF | Years Active | HR | AVG | RBI | H | AB | BB | SO |
12 | 2,199 | George Brett | Y | 1973 – 1993 | 317 | 0.304 | 1,596 | 3,154 | 10,349 | 1,096 | 908 |
13 | 2,188 | Chipper Jones | Y | 1993 – 2012 | 468 | 0.303 | 1,623 | 2,726 | 8,984 | 1,512 | 1,409 |
33 | 2,094 | Adrian Beltre | N | 1998 – 2018 | 477 | 0.286 | 1,707 | 3,166 | 11,068 | 848 | 1,732 |
84 | 1,975 | Wade Boggs | Y | 1982 – 1999 | 118 | 0.327 | 1,014 | 3,010 | 9,180 | 1,412 | 745 |
99 | 1,950 | Aramis Ramirez | N | 1998 – 2015 | 386 | 0.283 | 1,417 | 2,303 | 8,136 | 633 | 1,238 |
110 | 1,928 | Ron Santo | Y | 1960 – 1974 | 342 | 0.276 | 1,331 | 2,254 | 8,143 | 1,108 | 1,343 |
117 | 1,918 | Eddie Mathews | Y | 1952 – 1968 | 512 | 0.271 | 1,453 | 2,315 | 8,537 | 1,444 | 1,487 |
123 | 1,900 | Ken Boyer | N | 1955 – 1969 | 282 | 0.287 | 1,141 | 2,143 | 7,455 | 713 | 1,017 |
136 | 1,878 | Scott Rolen | Y | 1996 – 2012 | 316 | 0.280 | 1,287 | 2,077 | 7,398 | 899 | 1,410 |
139 | 1,875 | Mike Schmidt | Y | 1972 – 1989 | 548 | 0.267 | 1,595 | 2,234 | 8,352 | 1,507 | 1,883 |
Shortstop
Rank | Score | Player | HOF | Years Active | HR | AVG | RBI | H | AB | BB | SO |
25 | 2,133 | Derek Jeter | Y | 1995 – 2014 | 260 | 0.309 | 1,311 | 3,465 | 11,195 | 1,082 | 1,840 |
61 | 2,025 | Cal Ripken | Y | 1981 – 2001 | 431 | 0.275 | 1,695 | 3,184 | 11,551 | 1,129 | 1,305 |
59 | 2,025 | Honus Wagner | Y | 1897 – 1917 | 101 | 0.327 | 1,733 | 3,420 | 10,439 | 963 | 735 |
65 | 2,014 | Robin Yount | Y | 1974 – 1993 | 251 | 0.285 | 1,406 | 3,142 | 11,008 | 966 | 1,350 |
71 | 2,001 | Joe Cronin | Y | 1926 – 1945 | 170 | 0.301 | 1,424 | 2,285 | 7,579 | 1,059 | 700 |
98 | 1,952 | Julio Franco | N | 1982 – 2007 | 173 | 0.298 | 1,194 | 2,586 | 8,677 | 917 | 1,341 |
118 | 1,915 | Barry Larkin | Y | 1986 – 2004 | 198 | 0.294 | 960 | 2,340 | 7,937 | 939 | 817 |
146 | 1,868 | Michael Young | N | 2000 – 2013 | 185 | 0.299 | 1,030 | 2,375 | 7,918 | 575 | 1,235 |
157 | 1,847 | Alan Trammell | Y | 1977 – 1996 | 185 | 0.285 | 1,003 | 2,365 | 8,288 | 850 | 874 |
161 | 1,845 | George Davis | Y | 1890 – 1909 | 73 | 0.294 | 1,440 | 2,665 | 9,045 | 874 | 613 |
Left Field
Rank | Score | Player | HOF | Years Active | HR | AVG | RBI | H | AB | BB | SO |
2 | 2261 | Ted Williams | Y | 1939 – 1960 | 521 | 0.344 | 1839 | 2654 | 7706 | 2021 | 709 |
16 | 2170 | Al Simmons | Y | 1924 – 1944 | 307 | 0.334 | 1827 | 2927 | 8759 | 615 | 737 |
18 | 2166 | Goose Goslin | Y | 1921 – 1938 | 248 | 0.315 | 1609 | 2735 | 8656 | 949 | 585 |
26 | 2125 | Carl Yastrzemski | Y | 1961 – 1983 | 452 | 0.285 | 1844 | 3419 | 11988 | 1845 | 1393 |
27 | 2119 | Billy Williams | Y | 1959 – 1976 | 426 | 0.289 | 1475 | 2711 | 9350 | 1045 | 1046 |
43 | 2065 | Jim Rice | Y | 1974 – 1989 | 382 | 0.298 | 1451 | 2452 | 8225 | 670 | 1423 |
52 | 2037 | Luis Gonzalez | N | 1990 – 2008 | 354 | 0.282 | 1439 | 2591 | 9157 | 1155 | 1218 |
56 | 2029 | Moises Alou | N | 1990 – 2008 | 332 | 0.303 | 1287 | 2134 | 7037 | 737 | 894 |
76 | 1989 | Bob Johnson | N | 1933 – 1945 | 288 | 0.296 | 1283 | 2051 | 6920 | 1075 | 851 |
75 | 1989 | Zack Wheat | Y | 1909 – 1927 | 132 | 0.316 | 1248 | 2884 | 9106 | 650 | 572 |
Center Field
Rank | Score | Player | HOF | Years Active | HR | AVG | RBI | H | AB | BB | SO |
8 | 2,222 | Willie Mays | Y | 1951 – 1973 | 660 | 0.301 | 1,903 | 3,283 | 10,881 | 1,464 | 1,526 |
22 | 2,147 | Joe DiMaggio | Y | 1936 – 1951 | 361 | 0.324 | 1,537 | 2,214 | 8,102 | 790 | 369 |
23 | 2,135 | Mickey Mantle | Y | 1951 – 1968 | 536 | 0.298 | 1,509 | 2,415 | 8,102 | 1,733 | 1,710 |
28 | 2,110 | Tris Speaker | Y | 1907 – 1928 | 117 | 0.344 | 1,529 | 3,514 | 10,195 | 1,381 | 323 |
34 | 2,093 | Ty Cobb | Y | 1905 – 1928 | 117 | 0.366 | 1,944 | 4,189 | 11,436 | 1,249 | 608 |
35 | 2,092 | Ken Griffey | Y | 1989 – 2010 | 630 | 0.283 | 1,836 | 2,781 | 9,801 | 1,312 | 1,779 |
54 | 2,033 | Bernie Williams | N | 1991 – 2006 | 287 | 0.296 | 1,257 | 2,336 | 7,869 | 1,069 | 1,212 |
57 | 2,027 | Duke Snider | Y | 1947 – 1964 | 407 | 0.295 | 1,333 | 2,116 | 7,161 | 971 | 1,237 |
58 | 2,026 | Carlos Beltran | N | 1998 – 2017 | 435 | 0.278 | 1,587 | 2,725 | 9,768 | 1,084 | 1,795 |
67 | 2,012 | Al Oliver | N | 1968 – 1985 | 219 | 0.303 | 1,326 | 2,743 | 9,049 | 535 | 756 |
Right Field
Rank | Score | Player | HOF | Years Active | HR | AVG | RBI | H | AB | BB | SO |
4 | 2,251 | Babe Ruth | Y | 1914 – 1935 | 714 | 0.342 | 2,217 | 2,873 | 8,398 | 2,062 | 1,330 |
5 | 2,239 | Mel Ott | Y | 1926 – 1947 | 511 | 0.304 | 1,860 | 2,876 | 9,456 | 1,708 | 896 |
6 | 2,238 | Hank Aaron | Y | 1954 – 1976 | 755 | 0.304 | 2,297 | 3,771 | 12,364 | 1,402 | 1,383 |
14 | 2,187 | Al Kaline | Y | 1953 – 1974 | 399 | 0.297 | 1,583 | 3,007 | 10,116 | 1,277 | 1,020 |
15 | 2,171 | Frank Robinson | Y | 1956 – 1976 | 586 | 0.294 | 1,812 | 2,943 | 10,006 | 1,420 | 1,532 |
17 | 2,170 | Vladimir Guerrero | Y | 1996 – 2011 | 449 | 0.317 | 1,496 | 2,590 | 8,155 | 737 | 985 |
32 | 2,097 | Harry Heilmann | Y | 1914 – 1932 | 183 | 0.341 | 1,539 | 2,660 | 7,787 | 856 | 550 |
36 | 2,086 | Dave Winfield | Y | 1973 – 1995 | 465 | 0.282 | 1,833 | 3,110 | 11,003 | 1,216 | 1,686 |
39 | 2,069 | Larry Walker | Y | 1989 – 2005 | 383 | 0.312 | 1,311 | 2,160 | 6,907 | 913 | 1,231 |
41 | 2,066 | Roberto Clemente | Y | 1955 – 1972 | 240 | 0.317 | 1,305 | 3,000 | 9,454 | 621 | 1,230 |
Designated Hitter
Rank | Score | Player | HOF | Years Active | HR | AVG | RBI | H | AB | BB | SO |
19 | 2,166 | Frank Thomas | Y | 1990 – 2008 | 521 | 0.301 | 1,704 | 2,468 | 8,199 | 1,667 | 1,397 |
29 | 2,109 | Paul Molitor | Y | 1978 – 1998 | 234 | 0.306 | 1,307 | 3,319 | 10,835 | 1,094 | 1,244 |
31 | 2,105 | Harold Baines | Y | 1980 – 2001 | 384 | 0.289 | 1,628 | 2,866 | 9,908 | 1,062 | 1,441 |
37 | 2,076 | Edgar Martinez | Y | 1987 – 2004 | 309 | 0.311 | 1,261 | 2,247 | 7,213 | 1,283 | 1,202 |
104 | 1,941 | Victor Martinez | N | 2002 – 2018 | 246 | 0.295 | 1,178 | 2,153 | 7,297 | 730 | 891 |
112 | 1,924 | Chili Davis | N | 1981 – 1999 | 350 | 0.274 | 1,372 | 2,380 | 8,673 | 1,194 | 1,698 |
171 | 1,820 | Hal McRae | N | 1968 – 1987 | 191 | 0.289 | 1,097 | 2,091 | 7,218 | 648 | 779 |
174 | 1,816 | Nelson Cruz | N | 2005 – 2022 | 459 | 0.274 | 1,302 | 2,018 | 7,358 | 732 | 1,870 |
220 | 1,735 | Brian Downing | N | 1973 – 1992 | 275 | 0.267 | 1,073 | 2,099 | 7,853 | 1,197 | 1,127 |
232 | 1,717 | Don Baylor | N | 1970 – 1988 | 338 | 0.260 | 1,276 | 2,135 | 8,198 | 805 | 1,069 |
Summary
If we add up the top 10 scores for each position, we can get an idea of what positions have the most offensive players.
Position | Score |
First Base | 21,765 |
Right Field | 21,574 |
Left Field | 20,950 |
Center Field | 20,897 |
Second Base | 20,253 |
Third Base | 19,905 |
Shortstop | 19,625 |
Catcher | 19,035 |
Next, we can graph a cumulative summary between the First Base and Right Field positions to determine which position has the higher offensive output across all MLB players with over 4,000 at-bats. Reviewing the cumulative summary graph where the player rank is on the x-axis, we can see that First Baseman has a higher offensive output position, but is it statistically significant?
Placing the individual offense scores of First Baseman and Right Fielders into an online t-test calculator, we see no significant difference between the positions; as it states below, “By conventional criteria, this difference is considered to be not quite statistically significant.”.
The P-value is used to determine the statistical significance of the results from a hypothesis test. It represents the probability of observing the test results under the null hypothesis. In the context of a 99% confidence interval (CI), you would typically use a significance level (alpha) of 0.01.
In the t-test we performed, the P-value obtained was approximately 0.066. To determine if the result is statistically significant at the 99% confidence level:
- If the P-value is less than or equal to 0.01, the result is statistically significant, and the test passes the significance test at the 99% CI (meaning there is sufficient evidence to reject the null hypothesis at this level).
- If the P-value is greater than 0.01, the result is not statistically significant at the 99% CI, and the test fails the significance test at this level (meaning there is not enough evidence to reject the null hypothesis at this level).
Since the P-value (0.066) is greater than 0.01, the result is not statistically significant at the 99% confidence level. Therefore, the test fails to reject the null hypothesis at the 99% CI, indicating that any observed difference in performance scores could very well be due to random chance rather than a true difference between the groups.
Conclusion
Evaluating Hall of Fame eligibility is far from a precise science. This exercise in devising my own evaluation system has been immensely engaging, involving countless hours of meticulous review, fine-tuning, and the discovery of players previously unknown to me.
My analysis leverages the comprehensive Lahman baseball dataset. Should you be interested in the code used for this analysis, please feel free to send me a message. Be aware, the data handling involved a significant amount of aggregation, pivoting, cleaning, and calculating. I’m more than happy to share my codebase with anyone interested in exploring it further.
Happy Coding!