3 DivisionsPitcher OnlyPositional Player OnlyPitcher/Positional Player Combined
Date :
Friday, June 27th
Price:
Pitcher Only - $150Positional Player Only - $175Pitcher/Positional Player Combined - $199
Firecracker Sports will be hosting a College Showcase Camp in the Providence area. This camp is available to all prospective baseball players, regardless of whether you are participating in the tournament or a local program. This event is also a qualifying event for our pinnacle showcase of the summer, Fire55.
All players will receive a pro style workout and a statistical data driven evaluation performed by college and professional coaches. These evaluations will be made available online and distributed to our college scouting and contact database. We hire college and pro coaches to be on the field instructing but also providing evaluations on each player so we guarantee 25+ coaches at our events.
Rain date/inclement weather options: TBA
Who: 2026-2028 Graduates. (JUCO, 2025 and 2029 Graduates must inquire before registering)
What to Wear: White baseball pants, your summer travel team hat and cleats. (A number on their t-shirt will identify players). Catchers are to provide their own gear.
Reporting Time: Please report at 5:30PM-5:45PM at the entrance of the baseball field to begin your check-in process.
Cost to Player: All participants have a registration fee based on their position and/or multiple positions as well. $150 for pitchers only and $175 for position players only. There is a $199.00 fee if you want to work out as a positional player and pitcher as well. There are multi-event discounts available. We have sold out ever showcase camp over our 15 years of runnings events with over 2500+ players attending. Our events in Old Orchard Beach, Maine; Providence, Rhode Island; Saratoga, New York and Westchester, New York were a big hit as we hosted 150+ college and professional coaches over the past year.
Is there a list of recommended hotels for this event?
Thatโs a great question! Yes please check out โHotelsโ on our home page or at the very top of this page with the menu section. There is a list of events we are running in 2025 that come with Group Blocks along with Individual reservations requests through our in-house housing service, part of our first class customer service you can get no where else.
What is your refund/weather cancellation policy?
Unfortunately weather or โAct of Godโ issues can be a factor in running quality baseball events. Please see our policies below.
Rain/Bad Weather: Alternative sites are always an option. If not, full credit towards a future 2025/2026 event.
Injury (with proper medical documentation): Full credit towards a future 2025/2026 event.
No-show and/or no communication about absence = No Refund
Registration
College Coaches Attending
University of Missouri
University of Albany
Central Connecticut State University
Castleton University Southern Connecticut State University Albertus Magnus College Rhode Island College University Of St. Joseph's (CT) Assumption University Rensselaer Polytechnic Institute Massasoit Community College
To Book Using your Team Block or to Book as an Individual, Not Within a Team Block: Click Here!
Our Hotel Policies
ALL TRAVELING TEAM MANAGERS/CLUB ADMINISTRATORS MUST REVIEW OUR HOTEL POLICY & RULES PRESENTED BELOW. FAILURE TO KNOW OUR POLICY COULD SUBJECT YOUR TEAM TO NON-ACCEPTANCE OR REMOVAL FROM THE TOURNAMENT
To insure the quality of service provided during a Firecracker Sports event this organization has put in a Hotel Obligation Policy.
WHAT IS A โHOTEL OBLIGATIONโ TOURNAMENT?
Simply stated, if your team requires hotel accommodations (team traveling 75 miles or more to the eventโs destination city) your team MUST stay at one of the approved participating tournament partner hotels. Teams are required to designate a representative to block off rooms for the entire team through our hotel portal or staff. These participating hotels are reviewable by clicking on the โhotelโ links on the tournament event page or on the main page of Firecracker Sports. We do not have a full โstay to playโ policy but we do require 75% of your team/coaches to stay with one of our partner hotels through our website. Reservations should be made ASAP as the hotels fill up quick.
We do have a waiver policy, if teams do NOT want to book through us, but want to participate in our events. Please see below.
WHY DOES THIS TOURNAMENT HAVE A โHOTEL OBLIGATION?โ
We work very hard to keep our costs down and also balance the economic impact a tournament like ours can have towards the communities and programs we serve. The approved hotels on this website assist with both concerns and the following are the benefits to our programs:
We only require 75% of your team to stay with one of our hotels. This allows 25% of your team to use points for their stay at another hotel, use Air BNB or camp sites for their travel preferences.
To make it manageable we have room nights โblockedโ for our out-of-town teams from our participating tournament partner hotels.
Because we do not use a Third Party Housing Group and we negotiate large blocks of rooms with the hotels directly, youโll find a wide variety of best pricing and amenities from our hotels.
Care in selecting location and proximity to our playing field. See our โfields/facilitiesโ tab to find out where your team most likely will be playing so you can lock down hotels near your fields.
All of our tournament hotels have been approved due to their quality and desire to give our guests the best event experience.
Room inventory which is shared with the tournament to ensure that room demands can be met from year to year.
SCHEDULES & STANDINGS
Brackets
TOP PERFORMERS
RULES
There is no rules.
WEATHER
Venue Location
`);printWindow.document.close();
});
/*
function gpe_get_schedules_list() {
const event_id = '39842';
let division_filter_drop = $("#division_filter_drop").val();
let pool_filter_drop = $("#pool_filter_drop").val();
let date_filter_drop = $("#date_filter_drop").val();// Show processing indicator (manually trigger it)
table.destroy(); // Destroy old DataTable before making new AJAX call
$("#schedules_table tbody").html('Loading...'); // Temporary loader row$.ajax({
url: gpe.ajax_url,
type: 'post',
data: {
action: 'gpe_ajax',
type: 'gpe_get_schedules_list',
event_id: event_id,
division_filter_drop: division_filter_drop,
pool_filter_drop: pool_filter_drop,
date_filter_drop: date_filter_drop
},
success: function (response) {
// Clear the table body and add new content
$("#schedules_table tbody").empty().html(response.data.html);// Reinitialize DataTable with processing enabled
table = $("#schedules_table").DataTable({
processing: true,
serverSide: false, // Keep it false unless loading data dynamically
searching: true,
paging: true,
autoWidth: false
});
}
});
}
function gpe_get_standing_list() {
const event_id = '39842';
let division_filter_drop = $("#division_filter_drop_for_standing").val();
let pool_filter_drop = $("#pool_filter_drop_for_standing").val();
// Show processing indicator (manually trigger it)
standings_table.destroy(); // Destroy old DataTable before making new AJAX call
$("#standings_table tbody").html('Loading...'); // Temporary loader row
$.ajax({
url: gpe.ajax_url,
type: 'post',
data: {
action: 'gpe_ajax',
type: 'gpe_get_standing_list',
event_id: event_id,
division_filter_drop: division_filter_drop,
pool_filter_drop: pool_filter_drop
},
success: function (response) {
// Clear the table body and add new content
$("#standings_table tbody").empty().html(response.data.html);
// Reinitialize DataTable with processing enabled
standings_table = $("#standings_table").DataTable({
processing: true,
serverSide: false, // Keep it false unless loading data dynamically
searching: true,
paging: false
});
}
});
}*/
$('#shareDropdown').change(function(){
var selectedOption = $(this).val();
if (selectedOption === "copy") {
var pageLink = window.location.href;
var tempInput = $("");
$("body").append(tempInput);
tempInput.val(pageLink).select();
document.execCommand("copy");
tempInput.remove();
Swal.fire({
title:"Success",
text:"Copied to clipboard!",
icon:'success'
});
// Reset dropdown selection
$(this).prop('selectedIndex', 0);
}
});
});
let isSchedulesTableInitialized = false;function gpeCustomeTabsnew(evt, cityName) {
var i, tabcontent, tablinks;
tabcontent = document.getElementsByClassName("gpe_tabcontent");
for (i = 0; i < tabcontent.length; i++) {
tabcontent[i].style.display = "none";
}
tablinks = document.getElementsByClassName("gpe_tablinks");
for (i = 0; i < tablinks.length; i++) {
tablinks[i].className = tablinks[i].className.replace(" gpe_active", "");
}
document.getElementById(cityName).style.display = "block";
evt.currentTarget.className += " gpe_active";if (cityName === "schedules_and_standings") {
// โ Prevent reinitializing the DataTable
if (!isSchedulesTableInitialized) {
// Only call once
window.gpe_get_schedules_list();
window.gpe_get_standing_list();
isSchedulesTableInitialized = true;
}
}
}function gpeCustomeTabs(evt, cityName) {
var i, tabcontent, tablinks;
tabcontent = document.getElementsByClassName("gpe_tabcontent");
for (i = 0; i < tabcontent.length; i++) {
tabcontent[i].style.display = "none";
}
tablinks = document.getElementsByClassName("gpe_tablinks");
for (i = 0; i < tablinks.length; i++) {
tablinks[i].className = tablinks[i].className.replace(" gpe_active", "");
}
document.getElementById(cityName).style.display = "block";
evt.currentTarget.className += " gpe_active";
// Redraw connectors when Bracket tab is activated
if (cityName === "brackets"){
//alert("Bracket");
loadSavedBracket();
}
if (cityName === "brackets" && window.globalSerialMap) {
// Wait until the browser has painted the visible DOM
//requestAnimationFrame(() => {
//setTimeout(() => {
//waitForLayoutAndDraw(window.globalSerialMap, 20);
waitForLayoutAndDrawStable(window.globalSerialMap, 20);
//}, 100);
//});
}
}// Get the element with id="defaultOpen" and click on it
document.getElementById("defaultOpen").click();
var acc = document.getElementsByClassName("gpe_accordion");
var i;
for (i = 0; i < acc.length; i++) {
acc[i].addEventListener("click", function() {
this.classList.toggle("active");
var panel = this.nextElementSibling;
if (panel.style.maxHeight) {
panel.style.maxHeight = null;
} else {
panel.style.maxHeight = panel.scrollHeight + "px";
}
});
}var latitude = document.getElementById("latitude").value;
var longitude = document.getElementById("longitude").value;var iframe = document.createElement("iframe");
iframe.src = "https://www.google.com/maps/embed?pb=!1m28!1m12!1m3!1d19797.686238814687!2d-71.3765509!3d41.8633795!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!4m13!3e6!4m5!1s0x89e45a80fc2b13ab%3A0x8f62f2e279889968!2sCurrent%20Location!3m2!1d" + latitude + "!2d" + longitude + "!4m5!1s0x89e45a7a2b41f7f3%3A0x6cb46461e8d0c1b4!2s" + latitude + "%2C" + longitude + "!3m2!1d" + latitude + "!2d" + longitude + "!5e0!3m2!1sen!2sus!4v1644233201036!5m2!1sen!2sus";
iframe.width = "528";
iframe.height = "295";
iframe.style.border = "0";
iframe.allowfullscreen = true;var mapContainer = document.getElementById("mapContainer");
mapContainer.innerHTML = "";
mapContainer.appendChild(iframe);
function getPoolsByDivision(divisionId) {
return $.ajax({
url: gpe.ajax_url,
method: "POST",
dataType: "json",
data: {
action: "gpe_ajax",
type: "get_pools_save",
division_id: divisionId
}
});
}function loadSavedBracket() {
// Get the division ID from the division select dropdown
const divisionId = $("#division_select").val();
// Get the current event ID dynamically from PHP
const eventId = '39842';// If division ID is not selected, exit early
if (!divisionId) return;
$.when(
$.ajax({
url: gpe.ajax_url,
type: "POST",
dataType: "json",
data: {
action: "gpe_ajax",
type: "get_saved_bracket",
event_id: eventId,
division_id: divisionId
}
}),
getPoolsByDivision(divisionId)
).done(function (bracketRes, poolsRes) {
// Extract bracket data from the first response (bracketRes)
let bracketData = bracketRes[0]?.data?.bracket_data || [];// Remove duplicates based on 'name' or 'id' or 'mapper_id' (whichever is unique)
bracketData = bracketData.filter((item, index, self) =>
index === self.findIndex(t => t.name === item.name)
);// Prepare a map of pool ID to pool title
const poolMap = {};
poolsRes[0]?.data?.forEach(pool => {
poolMap[pool.id] = pool.title;
});// Call renderSavedBracket function to render the bracket
renderSavedBracket(bracketData, poolMap);
}).fail(function () {
$("#bracket").html("
Error loading bracket.
");
});
// Perform both AJAX requests in parallel
/*$.when(
$.ajax({
url: gpe.ajax_url, // URL for the AJAX request
type: "POST", // HTTP method
dataType: "json", // Expected response type
data: {
action: "gpe_ajax", // WordPress action hook for AJAX
type: "get_saved_bracket", // Custom action to get saved bracket data
event_id: eventId, // The current event ID
division_id: divisionId // The selected division ID
}
}),
getPoolsByDivision(divisionId) // Function to get pools for the selected division
).done(function (bracketRes, poolsRes) {
// Extract bracket data from the first response (bracketRes)
const bracketData = bracketRes[0]?.data?.bracket_data || [];
// Prepare a map of pool ID to pool title
const poolMap = {};
poolsRes[0]?.data?.forEach(pool => {
poolMap[pool.id] = pool.title;
});// Call renderSavedBracket function to render the bracket
renderSavedBracket(bracketData, poolMap);
}).fail(function () {
// In case of failure, show an error message in the bracket container
$("#bracket").html("
Error loading bracket.
");
});*/
}
function renderSavedBracket(bracketData, poolMap) {
let bracketWrapper = $(".bracket_wrapper");
if (bracketWrapper.length === 0) {
bracketWrapper = $("
").addClass("bracket_wrapper");
// Append it to the main container if it's missing
$("#bracket").replaceWith(bracketWrapper);
} else {
bracketWrapper.empty(); // Clear existing content if already present
}
let bracketDiv = $("
")
.addClass("match")
.attr("id", matchId)
.attr("data-match-index", match.name);let score1 = match.team1_score ?? "-";
let score2 = match.team2_score ?? "-";
// Inside your rendering function (e.g. inside a loop for each match)
if (match.team_id1 && !teamSeedMap[match.team_id1] && match.seed1 && match.seed1 !== "0") {
teamSeedMap[match.team_id1] = match.seed1;
}
if (match.team_id2 && !teamSeedMap[match.team_id2] && match.seed2 && match.seed2 !== "0") {
teamSeedMap[match.team_id2] = match.seed2;
}// Use stored seed if available; fallback to current if it's valid (not "0")
let seed1 = "";
if (match.team_id1) {
const storedSeed1 = teamSeedMap[match.team_id1];
seed1 = storedSeed1 ? `(${storedSeed1}) ` : (match.seed1 && match.seed1 !== "0" ? `(${match.seed1}) ` : "");
}let seed2 = "";
if (match.team_id2) {
const storedSeed2 = teamSeedMap[match.team_id2];
seed2 = storedSeed2 ? `(${storedSeed2}) ` : (match.seed2 && match.seed2 !== "0" ? `(${match.seed2}) ` : "");
}//let team1 = match.team_name1 ?? "Team 1";
//let team2 = match.team_name2 ?? "Team 2";
let team1 = match.source_label_team1 && match.source_label_team1.trim() !== "" ? match.source_label_team1 : (match.team_name1 ?? "Team 1");
let team2 = match.source_label_team2 && match.source_label_team2.trim() !== "" ? match.source_label_team2 : (match.team_name2 ?? "Team 2");
// Combine seed and name for display
let displayTeam1 = `${seed1}${team1}`;
let displayTeam2 = `${seed2}${team2}`;let startTime = formatStartDateTime(match.start_date, match.start_time);
let location = match.location || "";matchDiv.html(`
${match.name}
${startTime}
${location}
${displayTeam1}${score1}
${displayTeam2}${score2}
`);const matchContainer = $("
").addClass("match-container").css("margin-bottom", "20px");
matchContainer.append(matchDiv);match.serial = serial;
if (!groupMatches[match.column_number]) groupMatches[match.column_number] = [];
groupMatches[match.column_number].push(match);serialMap[`${group}-${serial}`] = {
...match,
group,
column: match.column_number,
serial
};if (i === 0) roundDiv1.append(matchContainer);
else if (i >= 1 && i <= 4) roundDiv2.append(matchContainer);
else if (i === 5 || i === 6) roundDiv3.append(matchContainer);
else if (i === 7) roundDiv4.append(matchContainer);
});columnsContainer.append(roundDiv1);
columnsContainer.append($("
").addClass("round").attr("data-column", columns[0]);
let roundDiv2 = $("
").addClass("round").attr("data-column", columns[1]);
let roundDiv3 = $("
").addClass("round").attr("data-column", columns[2]);
displayOrder.forEach((match, i) => {
const serial = groupSerialCounter++;
const matchId = `match-serial-${group}-${serial}`;
let matchDiv = $("
")
.addClass("match")
.attr("id", matchId)
.attr("data-match-index", match.name);let score1 = match.team1_score ?? "-";
let score2 = match.team2_score ?? "-";
// Inside your rendering function (e.g. inside a loop for each match)
if (match.team_id1 && !teamSeedMap[match.team_id1] && match.seed1 && match.seed1 !== "0") {
teamSeedMap[match.team_id1] = match.seed1;
}
if (match.team_id2 && !teamSeedMap[match.team_id2] && match.seed2 && match.seed2 !== "0") {
teamSeedMap[match.team_id2] = match.seed2;
}// Use stored seed if available; fallback to current if it's valid (not "0")
let seed1 = "";
if (match.team_id1) {
const storedSeed1 = teamSeedMap[match.team_id1];
seed1 = storedSeed1 ? `(${storedSeed1}) ` : (match.seed1 && match.seed1 !== "0" ? `(${match.seed1}) ` : "");
}let seed2 = "";
if (match.team_id2) {
const storedSeed2 = teamSeedMap[match.team_id2];
seed2 = storedSeed2 ? `(${storedSeed2}) ` : (match.seed2 && match.seed2 !== "0" ? `(${match.seed2}) ` : "");
}//let team1 = match.team_name1 ?? "Team 1";
//let team2 = match.team_name2 ?? "Team 2";
let team1 = match.source_label_team1 && match.source_label_team1.trim() !== "" ? match.source_label_team1 : (match.team_name1 ?? "Team 1");
let team2 = match.source_label_team2 && match.source_label_team2.trim() !== "" ? match.source_label_team2 : (match.team_name2 ?? "Team 2");
// Combine seed and name for display
let displayTeam1 = `${seed1}${team1}`;
let displayTeam2 = `${seed2}${team2}`;let startTime = formatStartDateTime(match.start_date, match.start_time);
let location = match.location || "";matchDiv.html(`
${match.name}
${startTime}
${location}
${displayTeam1}${score1}
${displayTeam2}${score2}
`);
const matchContainer = $("
").addClass("match-container");
matchContainer.append(matchDiv);match.serial = serial;
serialMap[`${group}-${serial}`] = {
...match,
group,
column: match.column_number,
serial
};if (i === 0) roundDiv1.append(matchContainer);
else if (i === 1 || i === 2) roundDiv2.append(matchContainer);
else if (i === 3) roundDiv3.append(matchContainer);
});columnsContainer.append(roundDiv1);
columnsContainer.append($("