diff --git a/data/competitions/arts_design.json b/data/competitions/arts_design.json index 8bc0ae8..3949841 100644 --- a/data/competitions/arts_design.json +++ b/data/competitions/arts_design.json @@ -29,7 +29,7 @@ "type": "deadline", "timezone": "UTC-4", "estimated": false, - "source_url": "https://bowseat.org/programs/ocean-awareness-contest/contest-overview/" + "source_url": "https://bowseat.org/programs/ocean-awareness-contest/faqs/" }, { "label": "Winners announced", @@ -37,7 +37,7 @@ "type": "results", "timezone": "UTC-5", "estimated": false, - "source_url": "https://bowseat.org/programs/ocean-awareness-contest/contest-overview/" + "source_url": "https://bowseat.org/programs/ocean-awareness-contest/awards/" } ], "added_by": "yashkewlani", @@ -52,7 +52,7 @@ "id": "doodle-for-google", "name": "Doodle for Google", "organizer": "Google", - "organizer_url": "https://doodles.google.com/d4g/", + "organizer_url": "https://doodles.google/", "category": "arts_design", "subjects": [ "visual art" @@ -68,7 +68,7 @@ "currency": "USD" }, "prize": "USD 55,000 college scholarship and a USD 50,000 school technology package for the National Winner.", - "official_url": "https://doodles.google.com/d4g/", + "official_url": "https://doodles.google/doodle/doodle-for-google-2025-2026-us-winner", "cycle_year": 2026, "dates": [ { @@ -77,7 +77,7 @@ "type": "deadline", "timezone": "UTC-8", "estimated": false, - "source_url": "https://doodles.google.com/d4g/" + "source_url": "https://doodles.google.com/intl/root/d4g/rules" }, { "label": "Finalists notified by", @@ -85,7 +85,7 @@ "type": "results", "timezone": "UTC-7", "estimated": true, - "source_url": "https://doodles.google.com/d4g/" + "source_url": "https://doodles.google/" } ], "country_tracks": [ @@ -140,7 +140,7 @@ "type": "registration_open", "timezone": "UTC-4", "estimated": true, - "source_url": "https://www.artandwriting.org/awards/" + "source_url": "https://www.artandwriting.org/awards/how-to-enter/" }, { "label": "Latest regional deadline (following the usual early-January pattern)", @@ -156,7 +156,7 @@ "type": "results", "timezone": "UTC-4", "estimated": true, - "source_url": "https://www.artandwriting.org/awards/" + "source_url": "https://www.artandwriting.org/awards/how-to-enter/categories/" } ], "country_tracks": [ @@ -202,7 +202,7 @@ "currency": "USD" }, "prize": "National and World Contest awards; exact prizes vary by country.", - "official_url": "https://www.toyota-dreamcarart.com/", + "official_url": "https://www.toyota-dreamcarart.com/about/", "cycle_year": 2026, "dates": [ { @@ -264,7 +264,7 @@ "id": "youngarts-national-arts-competition", "name": "YoungArts National Arts Award", "organizer": "YoungArts", - "organizer_url": "https://youngarts.org/competition/", + "organizer_url": "https://youngarts.org/", "category": "arts_design", "subjects": [ "visual art", @@ -291,7 +291,7 @@ "type": "deadline", "timezone": "UTC-4", "estimated": false, - "source_url": "https://youngarts.org/competition/" + "source_url": "https://youngarts.org/apply/" } ], "added_by": "yashkewlani", @@ -331,7 +331,7 @@ "type": "deadline", "timezone": "UTC-4", "estimated": true, - "source_url": "https://www.house.gov/educators-and-students/congressional-art-competition" + "source_url": "https://www.house.gov/sites/default/files/2026-02/2026%20Rules%20and%20Regulations%20for%20Congressional%20Offices.pdf" } ], "added_by": "yashkewlani", @@ -346,7 +346,7 @@ "id": "science-without-borders-challenge", "name": "Science Without Borders Challenge", "organizer": "Khaled bin Sultan Living Oceans Foundation", - "organizer_url": "https://www.livingoceansfoundation.org/science-without-borders-challenge-2/", + "organizer_url": "https://www.livingoceansfoundation.org/", "category": "arts_design", "subjects": [ "art", @@ -364,7 +364,7 @@ "currency": "USD" }, "prize": "Cash prizes up to USD 500 per division plus gallery features.", - "official_url": "https://www.livingoceansfoundation.org/science-without-borders-challenge-2/", + "official_url": "https://www.livingoceansfoundation.org/science-without-borders-challenge/", "cycle_year": 2027, "dates": [ { @@ -381,7 +381,8 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-04-01" + "valid_till": "2027-04-01", + "image": "/competitions/science-without-borders-challenge.png" }, { "id": "celebrating-art-contest", @@ -406,7 +407,7 @@ "currency": "USD" }, "prize": "Publication in the annual art book; medals and certificates for finalists.", - "official_url": "https://www.celebratingart.com/", + "official_url": "https://www.celebratingart.com/enter-our-contest", "cycle_year": 2027, "dates": [ { @@ -415,7 +416,7 @@ "type": "deadline", "timezone": "UTC-5", "estimated": true, - "source_url": "https://www.celebratingart.com/" + "source_url": "https://www.celebratingart.com/faq" } ], "added_by": "yashkewlani", @@ -423,6 +424,7 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-03-01" + "valid_till": "2027-03-01", + "image": "/competitions/celebrating-art-contest.png" } ] diff --git a/data/competitions/business.json b/data/competitions/business.json index 00cd73f..b2da83b 100644 --- a/data/competitions/business.json +++ b/data/competitions/business.json @@ -20,7 +20,7 @@ "currency": "USD" }, "prize": "Category winners are named Pete Conrad Scholars.", - "official_url": "https://conrad.spacecenter.org/the-challenge/", + "official_url": "https://conrad.spacecenter.org/about/past-winners/", "cycle_year": 2027, "dates": [ { @@ -29,7 +29,7 @@ "type": "deadline", "timezone": "UTC-6", "estimated": false, - "source_url": "https://conrad.spacecenter.org/the-challenge/" + "source_url": "https://conrad.spacecenter.org/the-challenge/rules-and-regulations/" } ], "added_by": "yashkewlani", @@ -44,7 +44,7 @@ "id": "deca-icdc", "name": "DECA International Career Development Conference (ICDC)", "organizer": "DECA Inc.", - "organizer_url": "https://www.deca.org/conferences/icdc", + "organizer_url": "https://www.deca.org/", "category": "business", "subjects": [ "marketing", @@ -125,7 +125,7 @@ "currency": "USD" }, "prize": "USD 12,000 for first place in each track.", - "official_url": "https://diamondchallenge.org/", + "official_url": "https://diamondchallenge.org/competition/", "cycle_year": 2027, "dates": [ { @@ -134,7 +134,7 @@ "type": "deadline", "timezone": "UTC-5", "estimated": false, - "source_url": "https://diamondchallenge.org/" + "source_url": "https://diamondchallenge.org/resources/" } ], "added_by": "yashkewlani", @@ -149,7 +149,7 @@ "id": "nfte-world-series-of-innovation", "name": "NFTE World Series of Innovation", "organizer": "Network for Teaching Entrepreneurship (NFTE)", - "organizer_url": "https://www.nfte.com/entrepreneurship-competitions/world-series-of-innovation/", + "organizer_url": "https://www.nfte.com/", "category": "business", "subjects": [ "entrepreneurship", @@ -166,7 +166,7 @@ "currency": "USD" }, "prize": "USD 300 to USD 1,500.", - "official_url": "https://www.nfte.com/entrepreneurship-competitions/world-series-of-innovation/", + "official_url": "https://nfte.com/events/world-series-of-innovation/", "cycle_year": 2026, "dates": [ { @@ -183,7 +183,7 @@ "type": "results", "timezone": "UTC-4", "estimated": false, - "source_url": "https://www.nfte.com/entrepreneurship-competitions/world-series-of-innovation/" + "source_url": "https://nfte.com/big-ideas-start-here-nfte-launches-2026-2027-world-series-of-innovation-for-young-changemakers-ages-5-24/" } ], "added_by": "yashkewlani", @@ -258,7 +258,7 @@ "currency": "USD" }, "prize": "National champion titles across dozens of career and technology competitive events.", - "official_url": "https://bpa.org/nlc_conference/2027-nlc/", + "official_url": "https://bpa.org/nlc_conference/amplify-your-impact/dates-and-deadlines/", "cycle_year": 2027, "dates": [ { @@ -349,7 +349,7 @@ "currency": "USD" }, "prize": "World Cup titles, prizes and the opportunity to pitch to international investors.", - "official_url": "https://sageglobal.org/", + "official_url": "https://www.sageglobal.org/competition-overview", "cycle_year": 2027, "dates": [ { @@ -366,7 +366,7 @@ "type": "round", "timezone": "UTC", "estimated": true, - "source_url": "https://sageglobal.org/" + "source_url": "https://www.sageglobal.org/world-cup" } ], "added_by": "yashkewlani", @@ -374,13 +374,14 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-09-01" + "valid_till": "2027-09-01", + "image": "/competitions/sage-global.png" }, { "id": "young-enterprise-company-programme", "name": "Young Enterprise Company Programme", "organizer": "Young Enterprise UK", - "organizer_url": "https://www.young-enterprise.org.uk/programmes/company-programme/", + "organizer_url": "https://www.young-enterprise.org.uk/", "category": "business", "subjects": [ "entrepreneurship", @@ -407,7 +408,7 @@ "type": "registration_close", "timezone": "UTC", "estimated": true, - "source_url": "https://www.young-enterprise.org.uk/programmes/company-programme/" + "source_url": "https://www.young-enterprise.org.uk/contact/frequently-asked-questions" }, { "label": "National finals", @@ -423,6 +424,7 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-07-01" + "valid_till": "2027-07-01", + "image": "/competitions/young-enterprise-company-programme.png" } ] diff --git a/data/competitions/coding.json b/data/competitions/coding.json index 80e6c52..5174901 100644 --- a/data/competitions/coding.json +++ b/data/competitions/coding.json @@ -189,7 +189,7 @@ "currency": "USD" }, "prize": "Cash prizes for top finalists; recognition for qualifying rounds.", - "official_url": "https://www.facebook.com/codingcompetitions/hacker-cup", + "official_url": "https://www.facebook.com/hackercup/", "cycle_year": 2026, "dates": [ { @@ -238,7 +238,7 @@ "currency": "USD" }, "prize": "Cash prizes for top eligible US middle and high school teams.", - "official_url": "https://picoctf.org/", + "official_url": "https://picoctf.org/competitions/2026-spring.html", "cycle_year": 2027, "dates": [ { @@ -247,7 +247,7 @@ "type": "deadline", "timezone": "UTC-5", "estimated": false, - "source_url": "https://picoctf.org/" + "source_url": "https://picoctf.org/competitions/2026-spring-rules.html" } ], "added_by": "yashkewlani", @@ -327,7 +327,7 @@ "currency": "USD" }, "prize": "Certificates with achievement levels for participants and class reports for teachers.", - "official_url": "https://www.bebraschallenge.org/", + "official_url": "https://www.bebraschallenge.org/registration/", "cycle_year": 2026, "dates": [ { @@ -344,7 +344,7 @@ "type": "deadline", "timezone": "UTC-5", "estimated": false, - "source_url": "https://www.bebraschallenge.org/" + "source_url": "https://www.bebraschallenge.org/examples/" } ], "added_by": "shauryagangrade", @@ -376,7 +376,7 @@ "currency": "USD" }, "prize": "Promotion through the Bronze, Silver, Gold and Platinum divisions, and selection for the US IOI training camp.", - "official_url": "https://usaco.org/", + "official_url": "https://usaco.org/index.php?page=contests", "cycle_year": 2027, "dates": [ { @@ -393,7 +393,7 @@ "type": "round", "timezone": "UTC-4", "estimated": true, - "source_url": "https://usaco.org/" + "source_url": "https://usaco.org/index.php?page=history" } ], "added_by": "shauryagangrade", @@ -426,7 +426,7 @@ "currency": "USD" }, "prize": "Cash prizes for the top high school teams and an invitation to the MIT tournament wrap-up.", - "official_url": "https://battlecode.org/", + "official_url": "https://battlecode.org/about.html", "cycle_year": 2027, "dates": [ { @@ -443,7 +443,7 @@ "type": "round", "timezone": "UTC-5", "estimated": true, - "source_url": "https://battlecode.org/" + "source_url": "https://battlecode.org/past.html" } ], "added_by": "yashkewlani", @@ -451,13 +451,14 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-03-01" + "valid_till": "2027-03-01", + "image": "/competitions/mit-battlecode.png" }, { "id": "lockheed-martin-codequest", "name": "Lockheed Martin CodeQuest", "organizer": "Lockheed Martin", - "organizer_url": "https://www.lockheedmartin.com/en-us/who-we-are/communities/community-outreach/education-and-careers/codequest.html", + "organizer_url": "https://www.lockheedmartin.com/", "category": "coding", "subjects": [ "competitive programming", @@ -475,7 +476,7 @@ "currency": "USD" }, "prize": "Awards and recognition for the first, second and third place teams in each division.", - "official_url": "https://www.lockheedmartin.com/en-us/who-we-are/communities/community-outreach/education-and-careers/codequest.html", + "official_url": "https://www.lockheedmartin.com/en-us/who-we-are/communities/codequest.html", "cycle_year": 2027, "dates": [ { @@ -484,7 +485,7 @@ "type": "round", "timezone": "UTC-5", "estimated": true, - "source_url": "https://www.lockheedmartin.com/en-us/who-we-are/communities/community-outreach/education-and-careers/codequest.html" + "source_url": "https://www.lockheedmartin.com/en-us/who-we-are/communities/codequest/code-quest-past-quests.html" } ], "added_by": "yashkewlani", @@ -492,6 +493,7 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-03-01" + "valid_till": "2027-03-01", + "image": "/competitions/lockheed-martin-codequest.png" } ] diff --git a/data/competitions/creative_writing.json b/data/competitions/creative_writing.json index 674e254..7d47dd7 100644 --- a/data/competitions/creative_writing.json +++ b/data/competitions/creative_writing.json @@ -28,7 +28,7 @@ "type": "deadline", "timezone": "UTC+1", "estimated": false, - "source_url": "https://foyleyoungpoets.org/" + "source_url": "https://foyleyoungpoets.org/rules/" }, { "label": "Winners contacted", @@ -36,7 +36,7 @@ "type": "results", "timezone": "UTC+1", "estimated": true, - "source_url": "https://foyleyoungpoets.org/" + "source_url": "https://foyleyoungpoets.org/about/" } ], "added_by": "yashkewlani", @@ -76,7 +76,7 @@ "type": "deadline", "timezone": "UTC-4", "estimated": false, - "source_url": "https://rattle.com/page/poetryprize/" + "source_url": "https://rattle.com/page/submissions/" }, { "label": "Winner and finalists announced", @@ -84,7 +84,7 @@ "type": "results", "timezone": "UTC-4", "estimated": false, - "source_url": "https://rattle.com/page/poetryprize/" + "source_url": "https://rattle.com/page/winners/" } ], "added_by": "yashkewlani", @@ -99,7 +99,7 @@ "id": "river-of-words", "name": "River of Words International Youth Poetry and Art Contest", "organizer": "Center for Environmental Literacy, Saint Mary's College of California", - "organizer_url": "https://www.stmarys-ca.edu/centers-institutes/center-environmental-literacy/river-of-words", + "organizer_url": "https://www.stmarys-ca.edu/", "category": "creative_writing", "subjects": [ "poetry", @@ -125,7 +125,7 @@ "type": "deadline", "timezone": "UTC-8", "estimated": false, - "source_url": "https://www.stmarys-ca.edu/centers-institutes/center-environmental-literacy/river-of-words" + "source_url": "https://www.stmarys-ca.edu/river-words-rules-and-guidelines" } ], "added_by": "yashkewlani", @@ -140,7 +140,7 @@ "id": "adroit-prize", "name": "The Adroit Prizes for Poetry and Prose", "organizer": "The Adroit Journal", - "organizer_url": "https://theadroitjournal.org/prizes/", + "organizer_url": "https://theadroitjournal.org/", "category": "creative_writing", "subjects": [ "poetry", @@ -157,7 +157,7 @@ "currency": "USD" }, "prize": "USD 200 cash reward and publication for winners in poetry and prose.", - "official_url": "https://theadroitjournal.org/prizes/", + "official_url": "https://theadroitjournal.org/adroit-prizes/", "cycle_year": 2027, "dates": [ { @@ -166,7 +166,7 @@ "type": "registration_open", "timezone": "UTC", "estimated": true, - "source_url": "https://theadroitjournal.org/prizes/" + "source_url": "https://theadroitjournal.org/about/submissions/" }, { "label": "Submission deadline (estimated)", @@ -174,7 +174,7 @@ "type": "deadline", "timezone": "UTC", "estimated": true, - "source_url": "https://theadroitjournal.org/prizes/" + "source_url": "https://theadroitjournal.org/adroit-prizes/" } ], "added_by": "shauryagangrade", @@ -189,7 +189,7 @@ "id": "bennington-young-writers-awards", "name": "Bennington Young Writers Awards", "organizer": "Bennington College", - "organizer_url": "https://www.bennington.edu/young-writers-awards", + "organizer_url": "https://www.bennington.edu/", "category": "creative_writing", "subjects": [ "poetry", @@ -216,7 +216,7 @@ "type": "registration_open", "timezone": "UTC-4", "estimated": false, - "source_url": "https://www.bennington.edu/young-writers-awards" + "source_url": "https://www.bennington.edu/events/young-writers-awards" }, { "label": "Submission deadline", @@ -224,7 +224,7 @@ "type": "deadline", "timezone": "UTC-4", "estimated": false, - "source_url": "https://www.bennington.edu/young-writers-awards" + "source_url": "https://www.bennington.edu/events/young-writers-awards" } ], "added_by": "shauryagangrade", @@ -239,7 +239,7 @@ "id": "write-the-world-competitions", "name": "Write the World Monthly Writing Competitions", "organizer": "Write the World", - "organizer_url": "https://writetheworld.org/competitions", + "organizer_url": "https://writetheworld.org/", "category": "creative_writing", "subjects": [ "creative writing" @@ -264,7 +264,7 @@ "type": "deadline", "timezone": "UTC", "estimated": true, - "source_url": "https://writetheworld.org/competitions" + "source_url": "https://writetheworld.org/faq" } ], "added_by": "shauryagangrade", @@ -279,7 +279,7 @@ "id": "reedsy-short-story-contest", "name": "Reedsy Short Story Contest", "organizer": "Reedsy", - "organizer_url": "https://reedsy.com/writing-contest", + "organizer_url": "https://reedsy.com/", "category": "creative_writing", "subjects": [ "fiction", @@ -306,7 +306,7 @@ "type": "deadline", "timezone": "UTC", "estimated": true, - "source_url": "https://reedsy.com/writing-contest" + "source_url": "https://reedsy.com/creative-writing-prompts/" } ], "added_by": "yashkewlani", @@ -314,7 +314,8 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-02-01" + "valid_till": "2027-02-01", + "image": "/competitions/reedsy-short-story-contest.png" }, { "id": "teen-ink-contests", @@ -338,7 +339,7 @@ "currency": "USD" }, "prize": "Publication in Teen Ink plus Amazon gift certificates.", - "official_url": "https://www.teenink.com/contests", + "official_url": "https://www.teenink.com/submission-guidelines", "cycle_year": 2027, "dates": [ { @@ -347,7 +348,7 @@ "type": "deadline", "timezone": "UTC-5", "estimated": true, - "source_url": "https://www.teenink.com/contests" + "source_url": "https://www.teenink.com/about/faq" } ], "added_by": "yashkewlani", @@ -355,6 +356,7 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-02-01" + "valid_till": "2027-02-01", + "image": "/competitions/teen-ink-contests.png" } ] diff --git a/data/competitions/debate_mun.json b/data/competitions/debate_mun.json index 78649fe..5a80ff7 100644 --- a/data/competitions/debate_mun.json +++ b/data/competitions/debate_mun.json @@ -20,7 +20,7 @@ "currency": "USD" }, "prize": "Delegate awards including Best Delegate and Honorable Mention.", - "official_url": "https://www.harvardmun.org/", + "official_url": "https://www.harvardmun.org/about", "cycle_year": 2027, "dates": [ { @@ -29,7 +29,7 @@ "type": "round", "timezone": "UTC-5", "estimated": false, - "source_url": "https://www.harvardmun.org/" + "source_url": "https://www.harvardmun.org/registration-1" }, { "label": "HMUN 2027 closes", @@ -37,7 +37,7 @@ "type": "round", "timezone": "UTC-5", "estimated": false, - "source_url": "https://www.harvardmun.org/" + "source_url": "https://www.harvardmun.org/committee-list" } ], "added_by": "yashkewlani", @@ -52,7 +52,7 @@ "id": "nsda-national-tournament", "name": "National Speech & Debate Tournament", "organizer": "National Speech & Debate Association", - "organizer_url": "https://www.speechanddebate.org/nationals/", + "organizer_url": "https://www.speechanddebate.org/", "category": "debate_mun", "subjects": [ "debate", @@ -78,7 +78,7 @@ "type": "round", "timezone": "UTC-5", "estimated": true, - "source_url": "https://www.speechanddebate.org/nationals/" + "source_url": "https://www.speechanddebate.org/district-tournaments/" }, { "label": "National Tournament", @@ -86,7 +86,7 @@ "type": "round", "timezone": "UTC-5", "estimated": false, - "source_url": "https://www.speechanddebate.org/nationals/" + "source_url": "https://www.speechanddebate.org/nationals-history/" } ], "added_by": "yashkewlani", @@ -186,7 +186,7 @@ "currency": "USD" }, "prize": "World champion title and team awards, plus top speaker awards.", - "official_url": "https://schoolsdebate.com/", + "official_url": "https://schoolsdebate.com/organisations/", "cycle_year": 2027, "dates": [ { @@ -195,7 +195,7 @@ "type": "round", "timezone": "UTC+3", "estimated": true, - "source_url": "https://schoolsdebate.com/" + "source_url": "https://schoolsdebate.com/news/" }, { "label": "WSDC 2027 concludes (estimated)", @@ -203,7 +203,7 @@ "type": "results", "timezone": "UTC+3", "estimated": true, - "source_url": "https://schoolsdebate.com/" + "source_url": "https://schoolsdebate.com/calendar/" } ], "added_by": "shauryagangrade", @@ -235,7 +235,7 @@ "currency": "USD" }, "prize": "Medals and trophies in each event, and the overall world champion title.", - "official_url": "https://widpsc2027.org/", + "official_url": "https://widpsc2027.org/schedule/", "cycle_year": 2027, "dates": [ { @@ -244,7 +244,7 @@ "type": "round", "timezone": "UTC+8", "estimated": false, - "source_url": "https://widpsc2027.org/" + "source_url": "https://widpsc2027.org/registration/" }, { "label": "Grand Finals and closing ceremony", @@ -252,7 +252,7 @@ "type": "results", "timezone": "UTC+8", "estimated": false, - "source_url": "https://widpsc2027.org/" + "source_url": "https://widpsc2027.org/widpsc-history/" } ], "added_by": "shauryagangrade", @@ -284,7 +284,7 @@ "currency": "USD" }, "prize": "Debate experience and a joint resolution adopted after committee work; no cash prize.", - "official_url": "https://eyp.org/", + "official_url": "https://eyp.org/what-we-do/international-sessions/", "cycle_year": 2027, "dates": [ { @@ -293,7 +293,7 @@ "type": "round", "timezone": "UTC+2", "estimated": true, - "source_url": "https://eyp.org/" + "source_url": "https://eyp.org/get-involved/for-young-people/" } ], "added_by": "shauryagangrade", @@ -326,7 +326,7 @@ "currency": "USD" }, "prize": "Committee awards including Outstanding Delegate and Best Legislation.", - "official_url": "https://harvardmodelcongress.org/", + "official_url": "https://harvardmodelcongress.org/conference-schedule", "cycle_year": 2027, "dates": [ { @@ -335,7 +335,7 @@ "type": "round", "timezone": "UTC-5", "estimated": true, - "source_url": "https://harvardmodelcongress.org/" + "source_url": "https://harvardmodelcongress.org/registration-details" }, { "label": "HMC Boston 2027 closes", @@ -343,7 +343,7 @@ "type": "round", "timezone": "UTC-5", "estimated": true, - "source_url": "https://harvardmodelcongress.org/" + "source_url": "https://harvardmodelcongress.org/hmcfaqs" } ], "added_by": "yashkewlani", @@ -351,13 +351,14 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-02-15" + "valid_till": "2027-02-15", + "image": "/competitions/harvard-model-congress.png" }, { "id": "mspdp-public-debate", "name": "Middle School Public Debate Program (MSPDP)", "organizer": "Middle School Public Debate Program", - "organizer_url": "https://www.middleschooldebate.com/", + "organizer_url": "https://www.publicdebateprogram.org/", "category": "debate_mun", "subjects": [ "debate", @@ -375,7 +376,7 @@ "currency": "USD" }, "prize": "Trophies and the chance to represent a region at the annual Youth Championships.", - "official_url": "https://www.middleschooldebate.com/", + "official_url": "https://www.publicdebateprogram.org/middleschool-programdescription", "cycle_year": 2027, "dates": [ { @@ -384,7 +385,7 @@ "type": "round", "timezone": "UTC-8", "estimated": true, - "source_url": "https://www.middleschooldebate.com/" + "source_url": "https://www.publicdebateprogram.org/about" }, { "label": "State championships", @@ -392,7 +393,7 @@ "type": "round", "timezone": "UTC-7", "estimated": true, - "source_url": "https://www.middleschooldebate.com/" + "source_url": "https://www.publicdebateprogram.org/middleschool-leagues" } ], "added_by": "yashkewlani", @@ -400,6 +401,7 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-05-01" + "valid_till": "2027-05-01", + "image": "/competitions/mspdp-public-debate.png" } ] diff --git a/data/competitions/essay_writing.json b/data/competitions/essay_writing.json index 5dfd021..2b77a33 100644 --- a/data/competitions/essay_writing.json +++ b/data/competitions/essay_writing.json @@ -20,7 +20,7 @@ "currency": "USD" }, "prize": "Cash prizes up to USD 8,000 and an internship with The Crimson.", - "official_url": "https://www.essaycomp.org/", + "official_url": "https://www.essaycomp.org/what-is-hcgec", "cycle_year": 2026, "dates": [ { @@ -29,7 +29,7 @@ "type": "registration_close", "timezone": "UTC", "estimated": false, - "source_url": "https://www.essaycomp.org/" + "source_url": "https://www.essaycomp.org/competition-structure-and-dates" }, { "label": "Submission deadline", @@ -37,7 +37,7 @@ "type": "deadline", "timezone": "UTC-4", "estimated": false, - "source_url": "https://www.essaycomp.org/" + "source_url": "https://www.essaycomp.org/faq" }, { "label": "Prizes must be claimed by", @@ -45,7 +45,7 @@ "type": "results", "timezone": "UTC-4", "estimated": false, - "source_url": "https://www.essaycomp.org/" + "source_url": "https://www.essaycomp.org/past-hcgec" } ], "added_by": "yashkewlani", @@ -77,12 +77,12 @@ "currency": "USD" }, "prize": "USD 10,000 for the first-place essay.", - "official_url": "https://www.jfklibrary.org/learn/education/profile-in-courage-essay-contest", + "official_url": "https://www.jfklibrary.org/learn/education/profile-in-courage-essay-contest/for-student-participants", "cycle_year": 2027, "dates": [ { "label": "Submission deadline", - "date": "2027-01-15", + "date": "2027-01-11", "type": "deadline", "timezone": "UTC-5", "estimated": false, @@ -101,7 +101,7 @@ "id": "john-locke-global-essay-prize", "name": "John Locke Institute Global Essay Prize", "organizer": "John Locke Institute", - "organizer_url": "https://www.johnlockeinstitute.com/essay-competition", + "organizer_url": "https://www.johnlockeinstitute.com/", "category": "essay_writing", "subjects": [ "philosophy", @@ -120,7 +120,7 @@ "currency": "USD" }, "prize": "USD 5,000 scholarship for each category winner.", - "official_url": "https://www.johnlockeinstitute.com/essay-competition", + "official_url": "https://www.johnlockeinstitute.com/apply-now", "cycle_year": 2026, "dates": [ { @@ -129,7 +129,7 @@ "type": "registration_close", "timezone": "UTC", "estimated": false, - "source_url": "https://www.johnlockeinstitute.com/essay-competition" + "source_url": "https://essaycompetition.johnlocke.com/" }, { "label": "Submission closes", @@ -168,7 +168,7 @@ "id": "the-politic-high-school-essay-competition", "name": "The Politic High School Essay Competition", "organizer": "The Politic, Yale University", - "organizer_url": "https://thepolitic.org/high-school-competition/", + "organizer_url": "https://thepolitic.org/", "category": "essay_writing", "subjects": [ "journalism", @@ -194,7 +194,7 @@ "type": "registration_close", "timezone": "UTC-5", "estimated": false, - "source_url": "https://thepolitic.org/high-school-competition/" + "source_url": "https://docs.google.com/document/d/14m8YGCvzj8dpvE4noCbGVe9fRewQemR7Gl9ATuHn1Jo/edit?usp=sharing" }, { "label": "Essay submission deadline", @@ -210,7 +210,7 @@ "type": "results", "timezone": "UTC-5", "estimated": false, - "source_url": "https://thepolitic.org/high-school-competition/" + "source_url": "https://thepolitic.org/columns/" } ], "added_by": "yashkewlani", @@ -225,7 +225,7 @@ "id": "ayn-rand-institute-essay-contests", "name": "Ayn Rand Institute Essay Contests", "organizer": "Ayn Rand Institute", - "organizer_url": "https://aynrand.org/", + "organizer_url": "https://aynrand.org/students/", "category": "essay_writing", "subjects": [ "literature", @@ -251,7 +251,7 @@ "type": "deadline", "timezone": "UTC-7", "estimated": false, - "source_url": "https://aynrand.org/students/essay-contests" + "source_url": "https://aynrand.org/students/essay-contests/anthem-essay-contest" }, { "label": "The Fountainhead contest deadline", @@ -259,7 +259,7 @@ "type": "deadline", "timezone": "UTC-7", "estimated": false, - "source_url": "https://aynrand.org/students/essay-contests" + "source_url": "https://aynrand.org/students/essay-contests/the-fountainhead-essay-contest" }, { "label": "Atlas Shrugged contest deadline", @@ -308,7 +308,7 @@ "type": "deadline", "timezone": "UTC-5", "estimated": false, - "source_url": "https://pprize.princeton.edu/apply" + "source_url": "https://pprize.princeton.edu/faqs" } ], "added_by": "yashkewlani", @@ -348,7 +348,7 @@ "type": "deadline", "timezone": "UTC-4", "estimated": true, - "source_url": "https://www.penguinrandomhouse.com/signet-essay-contest/" + "source_url": "https://www.penguinrandomhouse.com/signet-essay-contest-winners" } ], "added_by": "yashkewlani", @@ -381,7 +381,7 @@ "currency": "USD" }, "prize": "Winning editorials are published on The New York Times Learning Network.", - "official_url": "https://www.nytimes.com/spotlight/learning-network-contests", + "official_url": "https://www.nytimes.com/column/learning-contests", "cycle_year": 2027, "dates": [ { @@ -398,7 +398,7 @@ "type": "deadline", "timezone": "UTC-5", "estimated": true, - "source_url": "https://www.nytimes.com/spotlight/learning-network-contests" + "source_url": "https://www.nytimes.com/2025/07/23/learning/our-2025-26-student-contest-calendar.html" } ], "added_by": "yashkewlani", @@ -406,13 +406,14 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-03-15" + "valid_till": "2027-03-15", + "image": "/competitions/nyt-student-editorial-contest.png" }, { "id": "una-usa-global-citizen-essay-contest", "name": "UNA-USA Global Citizen Essay Contest", "organizer": "United Nations Association of the USA", - "organizer_url": "https://www.unausa.org/member-organizations/students-and-young-professionals/global-citizen-essay-contest/", + "organizer_url": "https://unausa.org/programs/students/", "category": "essay_writing", "subjects": [ "international affairs", @@ -429,7 +430,7 @@ "currency": "USD" }, "prize": "Cash awards up to USD 2,500 plus an entry to the UNA National Leadership Meeting.", - "official_url": "https://www.unausa.org/member-organizations/students-and-young-professionals/global-citizen-essay-contest/", + "official_url": "https://www.unausa.org/", "cycle_year": 2027, "dates": [ { @@ -438,7 +439,7 @@ "type": "deadline", "timezone": "UTC-5", "estimated": true, - "source_url": "https://www.unausa.org/member-organizations/students-and-young-professionals/global-citizen-essay-contest/" + "source_url": "https://unausa.org/newsandstories/" } ], "added_by": "yashkewlani", @@ -446,6 +447,7 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-03-15" + "valid_till": "2027-03-15", + "image": "/competitions/una-usa-global-citizen-essay-contest.png" } ] diff --git a/data/competitions/film_video.json b/data/competitions/film_video.json index abba4c6..5c64c40 100644 --- a/data/competitions/film_video.json +++ b/data/competitions/film_video.json @@ -20,7 +20,7 @@ "currency": "USD" }, "prize": "Scholarships and technology prizes.", - "official_url": "https://www.hsfilmfest.com/", + "official_url": "https://www.hsfilmfest.com/competitions", "cycle_year": 2027, "dates": [ { @@ -29,7 +29,7 @@ "type": "deadline", "timezone": "UTC-4", "estimated": false, - "source_url": "https://www.hsfilmfest.com/" + "source_url": "https://www.hsfilmfest.com/faq" } ], "added_by": "yashkewlani", @@ -77,7 +77,7 @@ "type": "deadline", "timezone": "UTC-8", "estimated": false, - "source_url": "https://www.nffty.org/submit" + "source_url": "https://www.nffty.org/official-rules-guidelines" }, { "label": "Festival in Seattle", @@ -116,7 +116,7 @@ "currency": "USD" }, "prize": "Category awards including the Rising Star Award; winning films screen at the Chicago International Film Festival.", - "official_url": "https://www.chicagofilmfestival.com/cineyouth", + "official_url": "https://filmfreeway.com/CineYouthFestival", "cycle_year": 2027, "dates": [ { @@ -141,7 +141,7 @@ "type": "round", "timezone": "UTC-5", "estimated": true, - "source_url": "https://www.chicagofilmfestival.com/cineyouth" + "source_url": "https://www.chicagofilmfestival.com/cineyouth/schedule/" } ], "added_by": "shauryagangrade", @@ -172,7 +172,7 @@ "currency": "USD" }, "prize": "Cash prizes from USD 250 to USD 1,000 per category, plus statewide broadcast of winning films.", - "official_url": "https://directingchangeca.org/", + "official_url": "https://directingchangeca.org/contest-rules/", "cycle_year": 2027, "dates": [ { @@ -181,7 +181,7 @@ "type": "deadline", "timezone": "UTC-8", "estimated": false, - "source_url": "https://directingchangeca.org/" + "source_url": "https://directingchangeca.org/get-started/" } ], "added_by": "shauryagangrade", @@ -230,7 +230,7 @@ "type": "results", "timezone": "UTC-4", "estimated": false, - "source_url": "https://www.studentcam.org/rules/" + "source_url": "https://www.studentcam.org/past-winners/" } ], "added_by": "shauryagangrade", @@ -245,7 +245,7 @@ "id": "world-of-7-billion-student-video-contest", "name": "World of 7 Billion Student Video Contest", "organizer": "Population Connection", - "organizer_url": "https://www.worldof7billion.org/student-video-contest/", + "organizer_url": "https://www.worldof8billion.org/", "category": "film_video", "subjects": [ "video production", @@ -263,16 +263,16 @@ "currency": "USD" }, "prize": "Cash prizes up to USD 1,000 across grade divisions.", - "official_url": "https://www.worldof7billion.org/student-video-contest/", + "official_url": "https://www.worldof8billion.org/video-contest/", "cycle_year": 2027, "dates": [ { "label": "Video submission deadline", - "date": "2027-03-15", + "date": "2027-03-03", "type": "deadline", "timezone": "UTC-5", - "estimated": true, - "source_url": "https://www.worldof7billion.org/student-video-contest/" + "estimated": false, + "source_url": "https://www.worldof8billion.org/video-contest/rules-and-guidelines/" } ], "added_by": "yashkewlani", @@ -280,7 +280,8 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-04-01" + "valid_till": "2027-04-01", + "image": "/competitions/world-of-7-billion-student-video-contest.png" }, { "id": "48-hour-film-project", @@ -304,7 +305,7 @@ "currency": "USD" }, "prize": "Screenings, awards and a shot at the annual National Best Film prize.", - "official_url": "https://www.48hourfilm.com/", + "official_url": "https://www.48hourfilm.com/rules", "cycle_year": 2027, "dates": [ { @@ -313,7 +314,7 @@ "type": "round", "timezone": "UTC-4", "estimated": true, - "source_url": "https://www.48hourfilm.com/" + "source_url": "https://www.48hourfilm.com/about" } ], "added_by": "yashkewlani", @@ -321,6 +322,7 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-07-01" + "valid_till": "2027-07-01", + "image": "/competitions/48-hour-film-project.png" } ] diff --git a/data/competitions/finance.json b/data/competitions/finance.json index 06a4ba3..9ab438c 100644 --- a/data/competitions/finance.json +++ b/data/competitions/finance.json @@ -3,7 +3,7 @@ "id": "national-personal-finance-challenge", "name": "National Personal Finance Challenge", "organizer": "Council for Economic Education", - "organizer_url": "https://www.councilforeconed.org/programs/for-students/national-personal-finance-challenge/", + "organizer_url": "https://www.councilforeconed.org/", "category": "finance", "subjects": [ "personal finance" @@ -19,7 +19,7 @@ "currency": "USD" }, "prize": "National championship title and cash awards.", - "official_url": "https://www.councilforeconed.org/programs/for-students/national-personal-finance-challenge/", + "official_url": "https://npfc.councilforeconed.org/", "cycle_year": 2027, "dates": [ { @@ -43,7 +43,7 @@ "id": "new-york-fed-s-high-school-economics-essay", "name": "High School Fed Challenge", "organizer": "Federal Reserve Bank of New York", - "organizer_url": "https://www.newyorkfed.org/education", + "organizer_url": "https://www.newyorkfed.org/", "category": "finance", "subjects": [ "economics", @@ -60,7 +60,7 @@ "currency": "USD" }, "prize": "Publication in the Journal of Future Economists.", - "official_url": "https://www.newyorkfed.org/education", + "official_url": "https://www.newyorkfed.org/outreach-and-education/high-school/high-school-fed-challenge", "cycle_year": 2026, "dates": [ { @@ -84,7 +84,7 @@ "id": "wharton-global-high-school-investment-competition", "name": "Wharton Global High School Investment Competition", "organizer": "Wharton Global Youth Program, University of Pennsylvania", - "organizer_url": "https://globalyouth.wharton.upenn.edu/competitions/investment-competition/", + "organizer_url": "https://globalyouth.wharton.upenn.edu/", "category": "finance", "subjects": [ "investing", @@ -110,7 +110,7 @@ "type": "registration_close", "timezone": "UTC-5", "estimated": false, - "source_url": "https://globalyouth.wharton.upenn.edu/competitions/investment-competition/" + "source_url": "https://globalyouth.wharton.upenn.edu/competitions/investment-competition/register-now/" } ], "added_by": "yashkewlani", @@ -125,7 +125,7 @@ "id": "wharton-high-school-data-science-competition", "name": "Wharton High School Data Science Competition", "organizer": "Wharton Sports Analytics and Business Initiative, University of Pennsylvania", - "organizer_url": "https://wsb.wharton.upenn.edu/wharton-data-competition/", + "organizer_url": "https://wsb.wharton.upenn.edu/", "category": "finance", "subjects": [ "data science", @@ -151,7 +151,7 @@ "type": "deadline", "timezone": "UTC-4", "estimated": false, - "source_url": "https://wsb.wharton.upenn.edu/wharton-data-competition/" + "source_url": "https://wsb.wharton.upenn.edu/wharton-data-competition/about/" } ], "added_by": "yashkewlani", @@ -199,7 +199,7 @@ "type": "round", "timezone": "UTC-4", "estimated": true, - "source_url": "https://www.councilforeconed.org/programs/for-students/national-economic-challenge/" + "source_url": "https://www.councilforeconed.org/programs/for-students/" } ], "added_by": "yashkewlani", @@ -240,7 +240,7 @@ "type": "registration_open", "timezone": "UTC-5", "estimated": true, - "source_url": "https://www.stockmarketgame.org/" + "source_url": "https://www.stockmarketgame.org/whats_new.html" } ], "added_by": "yashkewlani", @@ -255,7 +255,7 @@ "id": "ja-stock-market-challenge", "name": "JA Stock Market Challenge", "organizer": "Junior Achievement", - "organizer_url": "https://jausa.ja.org/programs/ja-in-the-classroom", + "organizer_url": "https://jausa.ja.org/", "category": "finance", "subjects": [ "stock market", @@ -273,7 +273,7 @@ "currency": "USD" }, "prize": "Trophy and recognition for the team with the highest portfolio value.", - "official_url": "https://jausa.ja.org/programs/ja-in-the-classroom", + "official_url": "https://jausa.ja.org/programs/ja-stock-market", "cycle_year": 2027, "dates": [ { @@ -282,7 +282,7 @@ "type": "round", "timezone": "UTC-5", "estimated": true, - "source_url": "https://jausa.ja.org/programs/ja-in-the-classroom" + "source_url": "https://jausa.ja.org/events/opportunity/national-ja-stock-market-challenge" } ], "added_by": "yashkewlani", @@ -290,7 +290,8 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-03-01" + "valid_till": "2027-03-01", + "image": "/competitions/ja-stock-market-challenge.png" }, { "id": "fed-challenge-high-school", @@ -323,7 +324,7 @@ "type": "round", "timezone": "UTC-5", "estimated": true, - "source_url": "https://www.federalreserve.gov/education/fed-challenge.htm" + "source_url": "https://www.newyorkfed.org/outreach-and-education/high-school/high-school-fed-challenge" }, { "label": "National championship", @@ -331,7 +332,7 @@ "type": "round", "timezone": "UTC-4", "estimated": true, - "source_url": "https://www.federalreserve.gov/education/fed-challenge.htm" + "source_url": "https://www.federalreserve.gov/" } ], "added_by": "yashkewlani", @@ -339,6 +340,7 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-05-01" + "valid_till": "2027-05-01", + "image": "/competitions/fed-challenge-high-school.png" } ] diff --git a/data/competitions/history.json b/data/competitions/history.json index e979b2a..bd34712 100644 --- a/data/competitions/history.json +++ b/data/competitions/history.json @@ -20,7 +20,7 @@ "currency": "USD" }, "prize": "Publication in The Concord Review.", - "official_url": "https://tcr.org/", + "official_url": "https://tcr.org/submit", "cycle_year": 2026, "dates": [ { @@ -29,7 +29,7 @@ "type": "deadline", "timezone": "UTC-4", "estimated": false, - "source_url": "https://tcr.org/" + "source_url": "https://tcr.org/NWB-FAQ" }, { "label": "Spring issue deadline", @@ -52,7 +52,7 @@ "id": "national-history-bowl", "name": "National History Bowl", "organizer": "International Academic Competitions", - "organizer_url": "https://www.historybowl.com/", + "organizer_url": "https://www.iacompetitions.com/", "category": "history", "subjects": [ "history" @@ -85,7 +85,7 @@ "type": "round", "timezone": "UTC-4", "estimated": false, - "source_url": "https://www.historybowl.com/" + "source_url": "https://www.iacompetitions.com/varsity-jv-nationals/" } ], "added_by": "yashkewlani", @@ -167,7 +167,7 @@ "id": "national-history-bee", "name": "National History Bee", "organizer": "International Academic Competitions", - "organizer_url": "https://www.historybowl.com/", + "organizer_url": "https://www.iacompetitions.com/", "category": "history", "subjects": [ "history" @@ -192,7 +192,7 @@ "type": "round", "timezone": "UTC-4", "estimated": false, - "source_url": "https://www.historybowl.com/" + "source_url": "https://www.iacompetitions.com/varsity-jv-nationals/" } ], "added_by": "yashkewlani", @@ -233,7 +233,7 @@ "type": "deadline", "timezone": "UTC-4", "estimated": false, - "source_url": "https://billofrightsinstitute.org/we-the-students-essay-contest/" + "source_url": "https://billofrightsinstitute.org/essays/" } ], "added_by": "yashkewlani", @@ -273,7 +273,7 @@ "type": "registration_open", "timezone": "UTC-4", "estimated": true, - "source_url": "https://www.historyolympiad.com/" + "source_url": "https://www.historyolympiad.com/registration/" }, { "label": "7th International History Olympiad, summer 2027 (estimated)", @@ -281,7 +281,7 @@ "type": "round", "timezone": "UTC", "estimated": true, - "source_url": "https://www.historyolympiad.com/" + "source_url": "https://www.historyolympiad.com/next-international-history-olympiad-to-be-held-in-summer-2027/" } ], "added_by": "shauryagangrade", @@ -313,7 +313,7 @@ "currency": "USD" }, "prize": "National winners and their teachers receive cash awards and certificates.", - "official_url": "https://www.dar.org/national-society/scholarships/history-essay-contest", + "official_url": "https://www.dar.org/outreach/education/essay-contests", "cycle_year": 2027, "dates": [ { @@ -322,7 +322,7 @@ "type": "deadline", "timezone": "UTC-5", "estimated": true, - "source_url": "https://www.dar.org/national-society/scholarships/history-essay-contest" + "source_url": "https://www.dar.org/national-society/education/education-resources" } ], "added_by": "yashkewlani", @@ -336,7 +336,7 @@ "id": "national-history-challenge-australia", "name": "National History Challenge (Australia)", "organizer": "History Teachers' Association of Australia", - "organizer_url": "https://www.historychallenge.com.au/", + "organizer_url": "https://historychallenge.org.au/", "category": "history", "subjects": [ "history", @@ -354,7 +354,7 @@ "currency": "USD" }, "prize": "State and national cash awards and trophies.", - "official_url": "https://www.historychallenge.com.au/", + "official_url": "https://historychallenge.org.au/contest-information", "cycle_year": 2027, "dates": [ { @@ -363,7 +363,7 @@ "type": "registration_open", "timezone": "UTC+11", "estimated": true, - "source_url": "https://www.historychallenge.com.au/" + "source_url": "https://historychallenge.org.au/" }, { "label": "Entry deadline", @@ -371,7 +371,7 @@ "type": "deadline", "timezone": "UTC+10", "estimated": true, - "source_url": "https://www.historychallenge.com.au/" + "source_url": "https://historychallenge.org.au/submit-your-entry" } ], "added_by": "yashkewlani", @@ -379,6 +379,7 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-09-15" + "valid_till": "2027-09-15", + "image": "/competitions/national-history-challenge-australia.png" } ] diff --git a/data/competitions/humanities.json b/data/competitions/humanities.json index f7facd5..3d368ae 100644 --- a/data/competitions/humanities.json +++ b/data/competitions/humanities.json @@ -99,7 +99,7 @@ "currency": "USD" }, "prize": "Medals and certificates for high scorers.", - "official_url": "https://www.nle.org/", + "official_url": "https://www.nle.org/about-us", "cycle_year": 2027, "dates": [ { @@ -116,7 +116,7 @@ "type": "deadline", "timezone": "UTC-4", "estimated": false, - "source_url": "https://www.nle.org/" + "source_url": "https://www.nle.org/alignment" } ], "added_by": "yashkewlani", @@ -147,7 +147,7 @@ "currency": "USD" }, "prize": "Gold, silver and bronze medals plus honorable mentions.", - "official_url": "https://www.philosophy-olympiad.org/", + "official_url": "https://www.philosophy-olympiad.org/?page_id=1706", "cycle_year": 2027, "dates": [ { @@ -156,7 +156,7 @@ "type": "round", "timezone": "UTC", "estimated": true, - "source_url": "https://www.philosophy-olympiad.org/" + "source_url": "https://www.philosophy-olympiad.org/?page_id=2" } ], "added_by": "shauryagangrade", @@ -187,7 +187,7 @@ "currency": "USD" }, "prize": "Gold, silver and bronze medals for the top scorers.", - "official_url": "https://geoolympiad.org/", + "official_url": "https://geoolympiad.org/about/", "cycle_year": 2027, "dates": [ { @@ -204,7 +204,7 @@ "type": "results", "timezone": "UTC+3", "estimated": true, - "source_url": "https://geoolympiad.org/" + "source_url": "https://geoolympiad.org/guidelines/" } ], "added_by": "shauryagangrade", @@ -236,7 +236,7 @@ "currency": "USD" }, "prize": "Cash prizes and recognition at a prize giving ceremony at the Bodleian Library, Oxford.", - "official_url": "https://www.ogn.ox.ac.uk/", + "official_url": "https://www.ogn.ox.ac.uk/learners", "cycle_year": 2027, "dates": [ { @@ -245,7 +245,7 @@ "type": "deadline", "timezone": "UTC", "estimated": true, - "source_url": "https://www.ogn.ox.ac.uk/" + "source_url": "https://www.ogn.ox.ac.uk/content/oxford-german-olympiad-2026-round-2" } ], "added_by": "shauryagangrade", @@ -279,7 +279,7 @@ "currency": "USD" }, "prize": "Trophies and sweepstakes points at the national convention.", - "official_url": "https://www.njcl.org/", + "official_url": "https://aclclassics.org/njcl/", "cycle_year": 2027, "dates": [ { @@ -288,7 +288,7 @@ "type": "round", "timezone": "UTC-5", "estimated": true, - "source_url": "https://www.njcl.org/" + "source_url": "https://aclclassics.org/njcl/convention" } ], "added_by": "yashkewlani", @@ -296,7 +296,8 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-08-01" + "valid_till": "2027-08-01", + "image": "/competitions/certamen-nlc.png" }, { "id": "le-grand-concours", @@ -320,7 +321,7 @@ "currency": "USD" }, "prize": "National medals and certificates awarded by score percentile.", - "official_url": "https://www.frenchteachers.org/le-grand-concours", + "official_url": "https://www.frenchteachers.org/contests", "cycle_year": 2027, "dates": [ { @@ -329,7 +330,7 @@ "type": "round", "timezone": "UTC-5", "estimated": true, - "source_url": "https://www.frenchteachers.org/le-grand-concours" + "source_url": "https://www.frenchteachers.org/nfc-teachers" } ], "added_by": "yashkewlani", @@ -337,6 +338,7 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-04-01" + "valid_till": "2027-04-01", + "image": "/competitions/le-grand-concours.png" } ] diff --git a/data/competitions/interdisciplinary.json b/data/competitions/interdisciplinary.json index 94ccce8..3d9557e 100644 --- a/data/competitions/interdisciplinary.json +++ b/data/competitions/interdisciplinary.json @@ -98,7 +98,7 @@ "currency": "USD" }, "prize": "Educational scholarships for finalist and grand prize teams.", - "official_url": "https://technovationchallenge.org/competition/", + "official_url": "https://technovationchallenge.org/about/", "cycle_year": 2027, "dates": [ { @@ -163,7 +163,7 @@ "type": "round", "timezone": "UTC-4", "estimated": false, - "source_url": "https://envirothon.org/2027-maryland/" + "source_url": "https://envirothon.org/about-us/" } ], "added_by": "yashkewlani", @@ -206,7 +206,7 @@ "type": "registration_close", "timezone": "UTC-5", "estimated": false, - "source_url": "https://usaeop.com/program/ecybermission/" + "source_url": "https://www.ecybermission.com/CompetitionRules" } ], "added_by": "yashkewlani", @@ -239,7 +239,7 @@ "currency": "USD" }, "prize": "FIRST Championship titles and a large scholarship pool.", - "official_url": "https://www.firstinspires.org/programs/ftc/", + "official_url": "https://www.firstinspires.org/programs/ftc/game-and-season", "cycle_year": 2027, "dates": [ { @@ -298,7 +298,7 @@ "type": "registration_close", "timezone": "UTC-4", "estimated": false, - "source_url": "https://competition.igem.org/about" + "source_url": "https://competition.igem.org/register" } ], "added_by": "yashkewlani", @@ -348,7 +348,7 @@ "type": "round", "timezone": "UTC", "estimated": true, - "source_url": "https://first.global/fgc/" + "source_url": "https://first.global/about/" } ], "added_by": "yashkewlani", @@ -458,7 +458,7 @@ "type": "registration_open", "timezone": "UTC-5", "estimated": true, - "source_url": "https://www.odysseyofthemind.com/" + "source_url": "https://odysseyofthemind.com/problems/" }, { "label": "World Finals", @@ -466,7 +466,7 @@ "type": "round", "timezone": "UTC-4", "estimated": true, - "source_url": "https://www.odysseyofthemind.com/" + "source_url": "https://odysseyofthemind.com/world-finals-2/" } ], "added_by": "yashkewlani", @@ -474,7 +474,8 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-06-01" + "valid_till": "2027-06-01", + "image": "/competitions/odyssey-of-the-mind.png" }, { "id": "destination-imagination", @@ -508,7 +509,7 @@ "type": "registration_open", "timezone": "UTC-5", "estimated": true, - "source_url": "https://www.destinationimagination.org/" + "source_url": "https://www.destinationimagination.org/challenge-experience/" }, { "label": "DI Global Finals", @@ -516,7 +517,7 @@ "type": "round", "timezone": "UTC-4", "estimated": true, - "source_url": "https://www.destinationimagination.org/" + "source_url": "https://www.destinationimagination.org/challenge-experience/global-finals" } ], "added_by": "yashkewlani", @@ -524,6 +525,7 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-06-01" + "valid_till": "2027-06-01", + "image": "/competitions/destination-imagination.png" } ] diff --git a/data/competitions/mathematics.json b/data/competitions/mathematics.json index 5863a43..a29bb52 100644 --- a/data/competitions/mathematics.json +++ b/data/competitions/mathematics.json @@ -19,7 +19,7 @@ "currency": "USD" }, "prize": "Individual, team and event awards; recognition among top US math programs.", - "official_url": "https://www.hmmt.org/", + "official_url": "https://www.hmmt.org/www/tournaments/novfeb", "cycle_year": 2026, "dates": [ { @@ -28,7 +28,7 @@ "type": "registration_close", "timezone": "UTC-4", "estimated": false, - "source_url": "https://www.hmmt.org/" + "source_url": "https://www.hmmt.org/rg/deadlines" }, { "label": "HMMT November (MIT)", @@ -36,7 +36,7 @@ "type": "round", "timezone": "UTC-5", "estimated": false, - "source_url": "https://www.hmmt.org/" + "source_url": "https://www.hmmt.org/www/tournaments/novfeb" }, { "label": "HMMT February (Harvard)", @@ -44,7 +44,7 @@ "type": "round", "timezone": "UTC-5", "estimated": false, - "source_url": "https://www.hmmt.org/" + "source_url": "https://www.hmmt.org/www/tournaments/novfeb" } ], "added_by": "yashkewlani", @@ -170,7 +170,7 @@ "currency": "USD" }, "prize": "USD 50,000 first prize, from a USD 100,000 total prize pool.", - "official_url": "https://mathprize.atfoundation.org/", + "official_url": "https://mathprize.atfoundation.org/apply", "cycle_year": 2026, "dates": [ { @@ -179,7 +179,7 @@ "type": "round", "timezone": "UTC-4", "estimated": false, - "source_url": "https://mathprize.atfoundation.org/" + "source_url": "https://mathprize.atfoundation.org/experience/schedule" } ], "added_by": "yashkewlani", @@ -194,7 +194,7 @@ "id": "usamo", "name": "USA Mathematical Olympiad (USAMO)", "organizer": "Mathematical Association of America (MAA)", - "organizer_url": "https://maa.org/maa-invitational-competitions/", + "organizer_url": "https://maa.org/", "category": "mathematics", "subjects": [ "mathematics", @@ -215,12 +215,12 @@ "cycle_year": 2027, "dates": [ { - "label": "USAMO test date", - "date": "2027-03-24", + "label": "USAMO test date (day 1 of 2)", + "date": "2027-03-20", "type": "round", "timezone": "UTC-4", "estimated": false, - "source_url": "http://web.archive.org/web/20260826221856/https://maa.org/maa-invitational-competitions/" + "source_url": "https://maa.org/wp-content/uploads/2026/08/2026-27-USAMO_USAJMO-Policies-1.pdf" } ], "added_by": "yashkewlani", @@ -251,7 +251,7 @@ "currency": "USD" }, "prize": "Team and individual rankings across all competing sites; top scorers recognized nationally.", - "official_url": "https://arml3.com/", + "official_url": "https://arml3.com/arml-2026-registration-page/", "cycle_year": 2027, "dates": [ { @@ -268,7 +268,7 @@ "type": "round", "timezone": "UTC-4", "estimated": true, - "source_url": "https://arml3.com/" + "source_url": "https://arml3.com/arml-meet-results/" } ], "added_by": "yashkewlani", @@ -355,7 +355,7 @@ "currency": "USD" }, "prize": "Team and individual rankings published online; no cash prize.", - "official_url": "https://purplecomet.org/", + "official_url": "https://purplecomet.org/information", "cycle_year": 2027, "dates": [ { @@ -364,7 +364,7 @@ "type": "round", "timezone": "UTC-4", "estimated": false, - "source_url": "https://purplecomet.org/" + "source_url": "https://purplecomet.org/information" }, { "label": "Contest window closes", @@ -372,7 +372,7 @@ "type": "deadline", "timezone": "UTC-4", "estimated": false, - "source_url": "https://purplecomet.org/" + "source_url": "https://purplecomet.org/answers" } ], "added_by": "yashkewlani", @@ -404,7 +404,7 @@ "currency": "USD" }, "prize": "Diplomas of first, second and third degree by score; no cash prize.", - "official_url": "https://www.turgor.ru/en/", + "official_url": "https://www.turgor.ru/en/problems/", "cycle_year": 2027, "dates": [ { @@ -413,7 +413,7 @@ "type": "round", "timezone": "UTC+3", "estimated": true, - "source_url": "https://www.turgor.ru/en/" + "source_url": "https://www.turgor.ru/en/news/" }, { "label": "Spring round (following the usual February to March pattern, local city dates vary)", @@ -421,7 +421,7 @@ "type": "round", "timezone": "UTC+3", "estimated": true, - "source_url": "https://www.turgor.ru/en/" + "source_url": "https://www.turgor.ru/en/problems/" } ], "added_by": "yashkewlani", @@ -453,7 +453,7 @@ "currency": "USD" }, "prize": "Over USD 100,000 in scholarship prizes, with the top teams presenting their models in New York City.", - "official_url": "https://m3challenge.siam.org/", + "official_url": "https://m3challenge.siam.org/the-challenge/", "cycle_year": 2027, "dates": [ { @@ -470,7 +470,7 @@ "type": "deadline", "timezone": "UTC-5", "estimated": true, - "source_url": "https://m3challenge.siam.org/" + "source_url": "https://m3challenge.siam.org/the-challenge/rules-and-guidelines/" }, { "label": "Challenge weekend (estimated)", @@ -478,7 +478,7 @@ "type": "round", "timezone": "UTC-5", "estimated": true, - "source_url": "https://m3challenge.siam.org/" + "source_url": "https://m3challenge.siam.org/the-challenge/" } ], "added_by": "shauryagangrade", @@ -493,7 +493,7 @@ "id": "amc10-12", "name": "American Mathematics Competitions 10 and 12 (AMC 10/12)", "organizer": "Mathematical Association of America", - "organizer_url": "https://amc.maa.org/", + "organizer_url": "https://maa.org/", "category": "mathematics", "subjects": [ "mathematics", @@ -510,24 +510,24 @@ "currency": "USD" }, "prize": "Certificates of distinction; automatic AIME qualification for top scorers.", - "official_url": "https://amc.maa.org/", + "official_url": "https://maa.org/student-programs/amc/", "cycle_year": 2026, "dates": [ { "label": "AMC 10/12 A", - "date": "2026-11-11", + "date": "2026-11-05", "type": "round", "timezone": "UTC-5", - "estimated": true, - "source_url": "https://amc.maa.org/" + "estimated": false, + "source_url": "https://maa.org/student-programs/amc/" }, { "label": "AMC 10/12 B", - "date": "2026-11-17", + "date": "2026-11-13", "type": "round", "timezone": "UTC-5", - "estimated": true, - "source_url": "https://amc.maa.org/" + "estimated": false, + "source_url": "https://maa.org/maa-amc-registration-faq/" } ], "added_by": "yashkewlani", @@ -558,7 +558,7 @@ "currency": "USD" }, "prize": "Award certificates and gifts for top national scorers.", - "official_url": "https://www.aksf.org/", + "official_url": "https://www.aksf.org/official.xhtml", "cycle_year": 2027, "dates": [ { @@ -566,8 +566,8 @@ "date": "2027-03-18", "type": "round", "timezone": "UTC+1", - "estimated": true, - "source_url": "https://www.aksf.org/" + "estimated": false, + "source_url": "https://www.kangarooqatar.org/ikmc" } ], "added_by": "yashkewlani", diff --git a/data/competitions/research.json b/data/competitions/research.json index 4c006ea..da473e3 100644 --- a/data/competitions/research.json +++ b/data/competitions/research.json @@ -22,7 +22,7 @@ "currency": "USD" }, "prize": "USD 250,000 top award; USD 3.1 million distributed annually.", - "official_url": "https://www.societyforscience.org/regeneron-sts/", + "official_url": "https://www.societyforscience.org/regeneron-sts/application-requirements/", "cycle_year": 2026, "dates": [ { @@ -31,7 +31,7 @@ "type": "deadline", "timezone": "UTC-5", "estimated": false, - "source_url": "https://www.societyforscience.org/regeneron-sts/" + "source_url": "https://www.societyforscience.org/regeneron-sts/official-rules/" } ], "added_by": "yashkewlani", @@ -66,7 +66,7 @@ "currency": "USD" }, "prize": "Scholarships and cash awards at regional and national level, totaling over USD 400,000 annually.", - "official_url": "https://www.jshs.org/", + "official_url": "https://www.jshs.org/national-symposium/", "cycle_year": 2027, "dates": [ { @@ -75,7 +75,7 @@ "type": "round", "timezone": "UTC-5", "estimated": true, - "source_url": "https://www.jshs.org/" + "source_url": "https://www.jshs.org/regional-competitions/" }, { "label": "National Symposium (estimated)", @@ -83,7 +83,7 @@ "type": "round", "timezone": "UTC-4", "estimated": true, - "source_url": "https://www.jshs.org/" + "source_url": "https://www.jshs.org/national-competition/" } ], "added_by": "shauryagangrade", @@ -116,7 +116,7 @@ "currency": "USD" }, "prize": "Gold, silver and bronze medals, with winners earning recognition and college scholarships.", - "official_url": "https://geniusolympiad.org/", + "official_url": "https://geniusolympiad.org/guides.html", "cycle_year": 2027, "dates": [ { @@ -125,7 +125,7 @@ "type": "registration_open", "timezone": "UTC-5", "estimated": true, - "source_url": "https://geniusolympiad.org/" + "source_url": "https://geniusolympiad.org/disciplines.html" }, { "label": "Application deadline (estimated)", @@ -133,7 +133,7 @@ "type": "deadline", "timezone": "UTC-5", "estimated": true, - "source_url": "https://geniusolympiad.org/" + "source_url": "https://geniusolympiad.org/global.html" }, { "label": "Genius Olympiad finals (Rochester, NY)", @@ -141,7 +141,7 @@ "type": "round", "timezone": "UTC-4", "estimated": true, - "source_url": "https://geniusolympiad.org/" + "source_url": "https://geniusolympiad.org/live" } ], "added_by": "shauryagangrade", @@ -175,7 +175,7 @@ "currency": "USD" }, "prize": "An up to USD 1,000 project grant, mentorship from MIT researchers and an expenses paid trip to MIT.", - "official_url": "https://think.mit.edu/", + "official_url": "https://think.mit.edu/static_files/THINK_Program_Guidelines_2026.pdf", "cycle_year": 2027, "dates": [ { @@ -192,7 +192,7 @@ "type": "deadline", "timezone": "UTC-5", "estimated": true, - "source_url": "https://think.mit.edu/" + "source_url": "https://think.mit.edu/static_files/Results_2026.pdf" } ], "added_by": "shauryagangrade", @@ -207,7 +207,7 @@ "id": "broadcom-masters", "name": "Broadcom MASTERS (Thermo Fisher Junior Innovators Challenge)", "organizer": "Society for Science and Thermo Fisher Scientific", - "organizer_url": "https://www.societyforscience.org/thermo-fisher-jic/", + "organizer_url": "https://www.societyforscience.org/", "category": "research", "subjects": [ "science", @@ -234,7 +234,7 @@ "type": "deadline", "timezone": "UTC-5", "estimated": true, - "source_url": "https://www.societyforscience.org/thermo-fisher-jic/" + "source_url": "https://www.societyforscience.org/isef/affiliated-fair-network/" }, { "label": "National finals (Washington DC)", @@ -242,7 +242,7 @@ "type": "round", "timezone": "UTC-4", "estimated": true, - "source_url": "https://www.societyforscience.org/thermo-fisher-jic/" + "source_url": "https://www.societyforscience.org/competitions/" } ], "added_by": "yashkewlani", @@ -250,13 +250,14 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-11-15" + "valid_till": "2027-11-15", + "image": "/competitions/broadcom-masters.png" }, { "id": "globe-virtual-science-fair", "name": "GLOBE Virtual Science Fair", "organizer": "GLOBE Program", - "organizer_url": "https://www.globe.gov/web/virtual-science-fair/", + "organizer_url": "https://www.globe.gov/", "category": "research", "subjects": [ "earth science", @@ -283,7 +284,7 @@ "type": "registration_open", "timezone": "UTC", "estimated": true, - "source_url": "https://www.globe.gov/web/virtual-science-fair/" + "source_url": "https://www.globe.gov/about" }, { "label": "GSF submission deadline", @@ -291,7 +292,7 @@ "type": "deadline", "timezone": "UTC", "estimated": true, - "source_url": "https://www.globe.gov/web/virtual-science-fair/" + "source_url": "https://www.globe.gov/about/impact" } ], "added_by": "yashkewlani", @@ -299,6 +300,7 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-04-15" + "valid_till": "2027-04-15", + "image": "/competitions/globe-virtual-science-fair.png" } ] diff --git a/data/competitions/scholarship.json b/data/competitions/scholarship.json index bbe1503..01c85a7 100644 --- a/data/competitions/scholarship.json +++ b/data/competitions/scholarship.json @@ -24,7 +24,7 @@ "currency": "USD" }, "prize": "USD 100,000, USD 50,000 or USD 25,000 scholarship.", - "official_url": "https://www.davidsongifted.org/gifted-programs/fellows-scholarship/", + "official_url": "https://www.davidsongifted.org/gifted-programs/fellows-scholarship/eligibility-and-application/", "cycle_year": 2027, "dates": [ { @@ -33,7 +33,7 @@ "type": "deadline", "timezone": "UTC-8", "estimated": false, - "source_url": "https://www.davidsongifted.org/gifted-programs/fellows-scholarship/" + "source_url": "https://www.davidsongifted.org/gifted-programs/fellows-scholarship/scholarship-categories/" } ], "added_by": "yashkewlani", @@ -48,7 +48,7 @@ "id": "coca-cola-scholars", "name": "Coca-Cola Scholars Program", "organizer": "The Coca-Cola Scholars Foundation", - "organizer_url": "https://www.coca-colascholars.org/", + "organizer_url": "https://www.coca-colascholarsfoundation.org/", "category": "scholarship", "subjects": [ "academics", @@ -65,7 +65,7 @@ "currency": "USD" }, "prize": "A USD 20,000 college scholarship for 150 outstanding scholars each year.", - "official_url": "https://www.coca-colascholars.org/", + "official_url": "https://www.coca-colascholarsfoundation.org/apply/", "cycle_year": 2027, "dates": [ { @@ -74,7 +74,7 @@ "type": "registration_open", "timezone": "UTC-4", "estimated": true, - "source_url": "https://www.coca-colascholars.org/" + "source_url": "https://www.coca-colascholarsfoundation.org/" }, { "label": "Application deadline", @@ -82,7 +82,7 @@ "type": "deadline", "timezone": "UTC-4", "estimated": false, - "source_url": "https://www.coca-colascholars.org/" + "source_url": "https://www.coca-colascholarsfoundation.org/about/faq" } ], "added_by": "shauryagangrade", @@ -137,7 +137,7 @@ "id": "elks-mvs", "name": "Elks National Foundation Most Valuable Student Scholarship", "organizer": "Elks National Foundation", - "organizer_url": "https://www.elks.org/scholars/scholarships/mvs.cfm", + "organizer_url": "https://www.elks.org/", "category": "scholarship", "subjects": [ "academics", @@ -163,7 +163,7 @@ "type": "deadline", "timezone": "UTC-8", "estimated": false, - "source_url": "https://www.elks.org/scholars/scholarships/mvs.cfm" + "source_url": "https://www.elks.org/scholarweb/resources/MVSFAQ.cfm" } ], "added_by": "shauryagangrade", @@ -195,7 +195,7 @@ "currency": "USD" }, "prize": "Full cost of attendance, last dollar scholarship for the 2027 cohort.", - "official_url": "https://www.thegatesscholarship.org/", + "official_url": "https://www.thegatesscholarship.org/about-gates", "cycle_year": 2027, "dates": [ { @@ -204,7 +204,7 @@ "type": "deadline", "timezone": "UTC-7", "estimated": true, - "source_url": "https://www.thegatesscholarship.org/" + "source_url": "https://www.thegatesscholarship.org/help-center/student" } ], "added_by": "shauryagangrade", @@ -237,7 +237,7 @@ "currency": "USD" }, "prize": "Up to USD 75,000 over five years plus programmatic support.", - "official_url": "https://www.jkcf.org/our-scholarships/young-scholars-program/", + "official_url": "https://www.jkcf.org/our-scholarships/young-scholars-program/how-to-apply/", "cycle_year": 2027, "dates": [ { @@ -246,7 +246,7 @@ "type": "deadline", "timezone": "UTC-4", "estimated": true, - "source_url": "https://www.jkcf.org/our-scholarships/young-scholars-program/" + "source_url": "https://www.jkcf.org/our-scholarships/young-scholars-program/faqs/" } ], "added_by": "yashkewlani", @@ -254,13 +254,14 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-06-01" + "valid_till": "2027-06-01", + "image": "/competitions/jack-kent-cooke-young-scholars.png" }, { "id": "ron-brown-scholar-program", "name": "Ron Brown Scholar Program", "organizer": "Ron Brown Scholar Fund", - "organizer_url": "https://www.ronbrown.org/capstones/scholar-program/", + "organizer_url": "https://ronbrown.org/", "category": "scholarship", "subjects": [ "academics", @@ -287,7 +288,7 @@ "type": "deadline", "timezone": "UTC-5", "estimated": true, - "source_url": "https://www.ronbrown.org/capstones/scholar-program/" + "source_url": "https://ronbrown.org/ron-brown-scholarship/" } ], "added_by": "yashkewlani", @@ -295,6 +296,7 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-02-15" + "valid_till": "2027-02-15", + "image": "/competitions/ron-brown-scholar-program.png" } ] diff --git a/data/competitions/stem.json b/data/competitions/stem.json index 229ac45..c3a85fc 100644 --- a/data/competitions/stem.json +++ b/data/competitions/stem.json @@ -30,7 +30,7 @@ "type": "round", "timezone": "UTC+2", "estimated": true, - "source_url": "https://ijsoweb.org/" + "source_url": "https://ijsoweb.org/ijso-2026-bulgaria" } ], "country_tracks": [ @@ -179,7 +179,7 @@ "type": "deadline", "timezone": "UTC-4", "estimated": false, - "source_url": "https://thebrainbee.org/" + "source_url": "https://www.thebrainbee.org/competition/" }, { "label": "World Championship", @@ -419,7 +419,7 @@ "type": "round", "timezone": "UTC+7", "estimated": false, - "source_url": "https://ioaastrophysics.org/" + "source_url": "https://ioaastrophysics.org/current-ioaa/news" }, { "label": "Results announced", @@ -499,7 +499,7 @@ "type": "ceremony", "timezone": "UTC-7", "estimated": false, - "source_url": "https://www.societyforscience.org/isef/" + "source_url": "https://www.societyforscience.org/isef/awards/" } ], "country_tracks": [ @@ -554,7 +554,7 @@ "type": "registration_open", "timezone": "UTC-5", "estimated": false, - "source_url": "https://www.soinc.org/" + "source_url": "https://www.soinc.org/events/2027-division-b-events" }, { "label": "National Tournament", @@ -562,7 +562,7 @@ "type": "round", "timezone": "UTC-5", "estimated": true, - "source_url": "https://www.soinc.org/" + "source_url": "https://www.soinc.org/play/past-tournament-results" } ], "added_by": "yashkewlani", @@ -612,7 +612,7 @@ "type": "round", "timezone": "UTC-4", "estimated": false, - "source_url": "https://wro-association.org/" + "source_url": "https://wro-association.org/competition/2026-season/" } ], "country_tracks": [ @@ -718,7 +718,7 @@ "type": "round", "timezone": "UTC+8", "estimated": false, - "source_url": "https://ioai-official.org/singapore-2027/" + "source_url": "https://ioai-official.org/about/" } ], "added_by": "yashkewlani", @@ -766,7 +766,7 @@ "type": "round", "timezone": "UTC", "estimated": true, - "source_url": "https://eupho.ee/" + "source_url": "https://eupho.ee/rules/" } ], "added_by": "yashkewlani", @@ -799,7 +799,7 @@ "currency": "USD" }, "prize": "Cash awards and recognition across three research tracks at the national final.", - "official_url": "https://biotechinstitute.org/biogeneius/", + "official_url": "https://biotechinstitute.org/about-us/", "cycle_year": 2027, "dates": [ { @@ -808,7 +808,7 @@ "type": "round", "timezone": "UTC-4", "estimated": true, - "source_url": "https://biotechinstitute.org/biogeneius/" + "source_url": "https://biotechinstitute.org/past-biogeneius-winners/" } ], "added_by": "yashkewlani", @@ -852,7 +852,7 @@ "type": "round", "timezone": "UTC-5", "estimated": true, - "source_url": "https://science.osti.gov/wdts/nsb" + "source_url": "https://science.osti.gov/wdts/nsb/Regional-Competitions" }, { "label": "National Finals (Washington DC)", @@ -860,7 +860,7 @@ "type": "round", "timezone": "UTC-4", "estimated": true, - "source_url": "https://science.osti.gov/wdts/nsb" + "source_url": "https://science.osti.gov/wdts/nsb/Key-Dates" } ], "added_by": "yashkewlani", @@ -868,7 +868,8 @@ "by": "yashkewlani", "on": "2026-09-13" }, - "valid_till": "2027-05-01" + "valid_till": "2027-05-01", + "image": "/competitions/national-science-bowl.png" }, { "id": "exploravision", @@ -892,7 +893,7 @@ "currency": "USD" }, "prize": "Regional winners receive savings bonds; national winners get a trip and up to USD 10,000 in savings bonds.", - "official_url": "https://www.exploravision.org/", + "official_url": "https://www.exploravision.org/rules-requirements/", "cycle_year": 2027, "dates": [ { @@ -901,7 +902,7 @@ "type": "deadline", "timezone": "UTC-5", "estimated": true, - "source_url": "https://www.exploravision.org/" + "source_url": "https://www.exploravision.org/for-teachers/" } ], "added_by": "yashkewlani", diff --git a/public/competitions/48-hour-film-project.png b/public/competitions/48-hour-film-project.png new file mode 100644 index 0000000..252c659 Binary files /dev/null and b/public/competitions/48-hour-film-project.png differ diff --git a/public/competitions/adroit-prize.png b/public/competitions/adroit-prize.png index 4a7c78f..675a8b3 100644 Binary files a/public/competitions/adroit-prize.png and b/public/competitions/adroit-prize.png differ diff --git a/public/competitions/all-american-high-school-film-festival.png b/public/competitions/all-american-high-school-film-festival.png index 1b37af6..44011b9 100644 Binary files a/public/competitions/all-american-high-school-film-festival.png and b/public/competitions/all-american-high-school-film-festival.png differ diff --git a/public/competitions/ayn-rand-institute-essay-contests.png b/public/competitions/ayn-rand-institute-essay-contests.png index 1a2c15c..cb99f37 100644 Binary files a/public/competitions/ayn-rand-institute-essay-contests.png and b/public/competitions/ayn-rand-institute-essay-contests.png differ diff --git a/public/competitions/bebras-challenge.png b/public/competitions/bebras-challenge.png index cc5de74..20b3af6 100644 Binary files a/public/competitions/bebras-challenge.png and b/public/competitions/bebras-challenge.png differ diff --git a/public/competitions/bennington-young-writers-awards.png b/public/competitions/bennington-young-writers-awards.png index 199f38f..c129e4e 100644 Binary files a/public/competitions/bennington-young-writers-awards.png and b/public/competitions/bennington-young-writers-awards.png differ diff --git a/public/competitions/bpa-national-leadership-conference.png b/public/competitions/bpa-national-leadership-conference.png index 70b213b..06554f5 100644 Binary files a/public/competitions/bpa-national-leadership-conference.png and b/public/competitions/bpa-national-leadership-conference.png differ diff --git a/public/competitions/broadcom-masters.png b/public/competitions/broadcom-masters.png new file mode 100644 index 0000000..6ec3faf Binary files /dev/null and b/public/competitions/broadcom-masters.png differ diff --git a/public/competitions/c-span-studentcam.png b/public/competitions/c-span-studentcam.png index fcc3ab9..a25c814 100644 Binary files a/public/competitions/c-span-studentcam.png and b/public/competitions/c-span-studentcam.png differ diff --git a/public/competitions/celebrating-art-contest.png b/public/competitions/celebrating-art-contest.png new file mode 100644 index 0000000..e386f1c Binary files /dev/null and b/public/competitions/celebrating-art-contest.png differ diff --git a/public/competitions/certamen-nlc.png b/public/competitions/certamen-nlc.png new file mode 100644 index 0000000..06f312e Binary files /dev/null and b/public/competitions/certamen-nlc.png differ diff --git a/public/competitions/concord-review.png b/public/competitions/concord-review.png index de5b0f0..714d2dd 100644 Binary files a/public/competitions/concord-review.png and b/public/competitions/concord-review.png differ diff --git a/public/competitions/congressional-art-competition.png b/public/competitions/congressional-art-competition.png index 783c1ae..4429bc6 100644 Binary files a/public/competitions/congressional-art-competition.png and b/public/competitions/congressional-art-competition.png differ diff --git a/public/competitions/davidson-fellows-scholarship.png b/public/competitions/davidson-fellows-scholarship.png index c0cffa2..cf09382 100644 Binary files a/public/competitions/davidson-fellows-scholarship.png and b/public/competitions/davidson-fellows-scholarship.png differ diff --git a/public/competitions/deca-icdc.png b/public/competitions/deca-icdc.png index bed2655..30c5f37 100644 Binary files a/public/competitions/deca-icdc.png and b/public/competitions/deca-icdc.png differ diff --git a/public/competitions/destination-imagination.png b/public/competitions/destination-imagination.png new file mode 100644 index 0000000..e47b63d Binary files /dev/null and b/public/competitions/destination-imagination.png differ diff --git a/public/competitions/diamond-challenge.png b/public/competitions/diamond-challenge.png index f992be9..c0562dc 100644 Binary files a/public/competitions/diamond-challenge.png and b/public/competitions/diamond-challenge.png differ diff --git a/public/competitions/directing-change-ca.png b/public/competitions/directing-change-ca.png index 7a19250..c3a58f4 100644 Binary files a/public/competitions/directing-change-ca.png and b/public/competitions/directing-change-ca.png differ diff --git a/public/competitions/doodle-for-google.png b/public/competitions/doodle-for-google.png index b018b02..7329020 100644 Binary files a/public/competitions/doodle-for-google.png and b/public/competitions/doodle-for-google.png differ diff --git a/public/competitions/ecybermission.png b/public/competitions/ecybermission.png index ed988e3..2da25af 100644 Binary files a/public/competitions/ecybermission.png and b/public/competitions/ecybermission.png differ diff --git a/public/competitions/envirothon.png b/public/competitions/envirothon.png index 2d8e23a..f0dd4b7 100644 Binary files a/public/competitions/envirothon.png and b/public/competitions/envirothon.png differ diff --git a/public/competitions/european-physics-olympiad.png b/public/competitions/european-physics-olympiad.png index a62521a..a0d2140 100644 Binary files a/public/competitions/european-physics-olympiad.png and b/public/competitions/european-physics-olympiad.png differ diff --git a/public/competitions/european-youth-parliament.png b/public/competitions/european-youth-parliament.png index c66ef13..1c5f6d4 100644 Binary files a/public/competitions/european-youth-parliament.png and b/public/competitions/european-youth-parliament.png differ diff --git a/public/competitions/fbla-national-leadership-conference.png b/public/competitions/fbla-national-leadership-conference.png index 3aebfd3..b08b410 100644 Binary files a/public/competitions/fbla-national-leadership-conference.png and b/public/competitions/fbla-national-leadership-conference.png differ diff --git a/public/competitions/fed-challenge-high-school.png b/public/competitions/fed-challenge-high-school.png new file mode 100644 index 0000000..8c4a1d0 Binary files /dev/null and b/public/competitions/fed-challenge-high-school.png differ diff --git a/public/competitions/first-global-challenge.png b/public/competitions/first-global-challenge.png index b5d0763..766e8b3 100644 Binary files a/public/competitions/first-global-challenge.png and b/public/competitions/first-global-challenge.png differ diff --git a/public/competitions/first-robotics-competition.png b/public/competitions/first-robotics-competition.png index 1f94296..cf8c696 100644 Binary files a/public/competitions/first-robotics-competition.png and b/public/competitions/first-robotics-competition.png differ diff --git a/public/competitions/first-tech-challenge.png b/public/competitions/first-tech-challenge.png index 1f94296..cf8c696 100644 Binary files a/public/competitions/first-tech-challenge.png and b/public/competitions/first-tech-challenge.png differ diff --git a/public/competitions/foyle-young-poets-of-the-year-award.png b/public/competitions/foyle-young-poets-of-the-year-award.png index a73e441..3faea74 100644 Binary files a/public/competitions/foyle-young-poets-of-the-year-award.png and b/public/competitions/foyle-young-poets-of-the-year-award.png differ diff --git a/public/competitions/globe-virtual-science-fair.png b/public/competitions/globe-virtual-science-fair.png new file mode 100644 index 0000000..e4c5e13 Binary files /dev/null and b/public/competitions/globe-virtual-science-fair.png differ diff --git a/public/competitions/harvard-crimson-global-essay-competition.png b/public/competitions/harvard-crimson-global-essay-competition.png index b763e4a..093155c 100644 Binary files a/public/competitions/harvard-crimson-global-essay-competition.png and b/public/competitions/harvard-crimson-global-essay-competition.png differ diff --git a/public/competitions/harvard-model-congress.png b/public/competitions/harvard-model-congress.png new file mode 100644 index 0000000..ce5d51a Binary files /dev/null and b/public/competitions/harvard-model-congress.png differ diff --git a/public/competitions/harvard-model-united-nations.png b/public/competitions/harvard-model-united-nations.png index fcaa451..8d303ad 100644 Binary files a/public/competitions/harvard-model-united-nations.png and b/public/competitions/harvard-model-united-nations.png differ diff --git a/public/competitions/hmmt.png b/public/competitions/hmmt.png index df44530..9b17006 100644 Binary files a/public/competitions/hmmt.png and b/public/competitions/hmmt.png differ diff --git a/public/competitions/igem-high-school.png b/public/competitions/igem-high-school.png index 0014857..9f05e93 100644 Binary files a/public/competitions/igem-high-school.png and b/public/competitions/igem-high-school.png differ diff --git a/public/competitions/international-biology-olympiad.png b/public/competitions/international-biology-olympiad.png index f0e6a42..8f11ed5 100644 Binary files a/public/competitions/international-biology-olympiad.png and b/public/competitions/international-biology-olympiad.png differ diff --git a/public/competitions/international-brain-bee.png b/public/competitions/international-brain-bee.png index d4bf6ce..f8d86ee 100644 Binary files a/public/competitions/international-brain-bee.png and b/public/competitions/international-brain-bee.png differ diff --git a/public/competitions/international-chemistry-olympiad.png b/public/competitions/international-chemistry-olympiad.png index 06a8db3..53de7cd 100644 Binary files a/public/competitions/international-chemistry-olympiad.png and b/public/competitions/international-chemistry-olympiad.png differ diff --git a/public/competitions/international-geography-olympiad.png b/public/competitions/international-geography-olympiad.png index 220185f..bfd95f7 100644 Binary files a/public/competitions/international-geography-olympiad.png and b/public/competitions/international-geography-olympiad.png differ diff --git a/public/competitions/international-history-olympiad.png b/public/competitions/international-history-olympiad.png index 943f6cc..5fdcff1 100644 Binary files a/public/competitions/international-history-olympiad.png and b/public/competitions/international-history-olympiad.png differ diff --git a/public/competitions/international-linguistics-olympiad.png b/public/competitions/international-linguistics-olympiad.png index 8a40f3e..87b5d9c 100644 Binary files a/public/competitions/international-linguistics-olympiad.png and b/public/competitions/international-linguistics-olympiad.png differ diff --git a/public/competitions/international-olympiad-in-informatics.png b/public/competitions/international-olympiad-in-informatics.png index b018b02..e4db24c 100644 Binary files a/public/competitions/international-olympiad-in-informatics.png and b/public/competitions/international-olympiad-in-informatics.png differ diff --git a/public/competitions/ioaa.png b/public/competitions/ioaa.png index 240d676..9da7fec 100644 Binary files a/public/competitions/ioaa.png and b/public/competitions/ioaa.png differ diff --git a/public/competitions/ja-company-of-the-year.png b/public/competitions/ja-company-of-the-year.png index d67debd..868838b 100644 Binary files a/public/competitions/ja-company-of-the-year.png and b/public/competitions/ja-company-of-the-year.png differ diff --git a/public/competitions/ja-stock-market-challenge.png b/public/competitions/ja-stock-market-challenge.png new file mode 100644 index 0000000..868838b Binary files /dev/null and b/public/competitions/ja-stock-market-challenge.png differ diff --git a/public/competitions/jack-kent-cooke-young-scholars.png b/public/competitions/jack-kent-cooke-young-scholars.png new file mode 100644 index 0000000..4c4dabe Binary files /dev/null and b/public/competitions/jack-kent-cooke-young-scholars.png differ diff --git a/public/competitions/jshs.png b/public/competitions/jshs.png index 9763d31..106041f 100644 Binary files a/public/competitions/jshs.png and b/public/competitions/jshs.png differ diff --git a/public/competitions/le-grand-concours.png b/public/competitions/le-grand-concours.png new file mode 100644 index 0000000..d46fd6b Binary files /dev/null and b/public/competitions/le-grand-concours.png differ diff --git a/public/competitions/lockheed-martin-codequest.png b/public/competitions/lockheed-martin-codequest.png new file mode 100644 index 0000000..614347f Binary files /dev/null and b/public/competitions/lockheed-martin-codequest.png differ diff --git a/public/competitions/math-prize-for-girls.png b/public/competitions/math-prize-for-girls.png index a0823f8..d1dbbcc 100644 Binary files a/public/competitions/math-prize-for-girls.png and b/public/competitions/math-prize-for-girls.png differ diff --git a/public/competitions/mathcounts.png b/public/competitions/mathcounts.png index d92726e..24eecd5 100644 Binary files a/public/competitions/mathcounts.png and b/public/competitions/mathcounts.png differ diff --git a/public/competitions/mathworks-m3-challenge.png b/public/competitions/mathworks-m3-challenge.png index e6162b7..327e1af 100644 Binary files a/public/competitions/mathworks-m3-challenge.png and b/public/competitions/mathworks-m3-challenge.png differ diff --git a/public/competitions/mit-battlecode.png b/public/competitions/mit-battlecode.png new file mode 100644 index 0000000..e8777b5 Binary files /dev/null and b/public/competitions/mit-battlecode.png differ diff --git a/public/competitions/mit-think.png b/public/competitions/mit-think.png index 1ed0cd5..3933b59 100644 Binary files a/public/competitions/mit-think.png and b/public/competitions/mit-think.png differ diff --git a/public/competitions/mspdp-public-debate.png b/public/competitions/mspdp-public-debate.png new file mode 100644 index 0000000..578892e Binary files /dev/null and b/public/competitions/mspdp-public-debate.png differ diff --git a/public/competitions/national-economics-challenge.png b/public/competitions/national-economics-challenge.png index 65a6823..51965e3 100644 Binary files a/public/competitions/national-economics-challenge.png and b/public/competitions/national-economics-challenge.png differ diff --git a/public/competitions/national-history-bee.png b/public/competitions/national-history-bee.png index c329f2c..6730d8a 100644 Binary files a/public/competitions/national-history-bee.png and b/public/competitions/national-history-bee.png differ diff --git a/public/competitions/national-history-bowl.png b/public/competitions/national-history-bowl.png index c329f2c..6730d8a 100644 Binary files a/public/competitions/national-history-bowl.png and b/public/competitions/national-history-bowl.png differ diff --git a/public/competitions/national-history-challenge-australia.png b/public/competitions/national-history-challenge-australia.png new file mode 100644 index 0000000..328c2c4 Binary files /dev/null and b/public/competitions/national-history-challenge-australia.png differ diff --git a/public/competitions/national-history-day.png b/public/competitions/national-history-day.png index 6a2391c..9ec0d0c 100644 Binary files a/public/competitions/national-history-day.png and b/public/competitions/national-history-day.png differ diff --git a/public/competitions/national-personal-finance-challenge.png b/public/competitions/national-personal-finance-challenge.png index 65a6823..a11a7d9 100644 Binary files a/public/competitions/national-personal-finance-challenge.png and b/public/competitions/national-personal-finance-challenge.png differ diff --git a/public/competitions/national-science-bowl.png b/public/competitions/national-science-bowl.png new file mode 100644 index 0000000..e1c2312 Binary files /dev/null and b/public/competitions/national-science-bowl.png differ diff --git a/public/competitions/nffty.png b/public/competitions/nffty.png index 0bebe5b..78c89da 100644 Binary files a/public/competitions/nffty.png and b/public/competitions/nffty.png differ diff --git a/public/competitions/nfte-world-series-of-innovation.png b/public/competitions/nfte-world-series-of-innovation.png index 3467e0b..12f4759 100644 Binary files a/public/competitions/nfte-world-series-of-innovation.png and b/public/competitions/nfte-world-series-of-innovation.png differ diff --git a/public/competitions/nyt-student-editorial-contest.png b/public/competitions/nyt-student-editorial-contest.png new file mode 100644 index 0000000..76ecaae Binary files /dev/null and b/public/competitions/nyt-student-editorial-contest.png differ diff --git a/public/competitions/odyssey-of-the-mind.png b/public/competitions/odyssey-of-the-mind.png new file mode 100644 index 0000000..47be3ef Binary files /dev/null and b/public/competitions/odyssey-of-the-mind.png differ diff --git a/public/competitions/oxford-german-olympiad.png b/public/competitions/oxford-german-olympiad.png index f22da90..1ab5cf1 100644 Binary files a/public/competitions/oxford-german-olympiad.png and b/public/competitions/oxford-german-olympiad.png differ diff --git a/public/competitions/purple-comet-math-meet.png b/public/competitions/purple-comet-math-meet.png index 4b6b458..024658e 100644 Binary files a/public/competitions/purple-comet-math-meet.png and b/public/competitions/purple-comet-math-meet.png differ diff --git a/public/competitions/questbridge-national-college-match.png b/public/competitions/questbridge-national-college-match.png index 97e693e..6d98ee7 100644 Binary files a/public/competitions/questbridge-national-college-match.png and b/public/competitions/questbridge-national-college-match.png differ diff --git a/public/competitions/rattle-poetry-prize.png b/public/competitions/rattle-poetry-prize.png index 40faff2..ff5b1bf 100644 Binary files a/public/competitions/rattle-poetry-prize.png and b/public/competitions/rattle-poetry-prize.png differ diff --git a/public/competitions/reedsy-short-story-contest.png b/public/competitions/reedsy-short-story-contest.png new file mode 100644 index 0000000..d18fd45 Binary files /dev/null and b/public/competitions/reedsy-short-story-contest.png differ diff --git a/public/competitions/regeneron-isef.png b/public/competitions/regeneron-isef.png index 5ecee48..6ec3faf 100644 Binary files a/public/competitions/regeneron-isef.png and b/public/competitions/regeneron-isef.png differ diff --git a/public/competitions/regeneron-science-talent-search.png b/public/competitions/regeneron-science-talent-search.png index 5ecee48..6ec3faf 100644 Binary files a/public/competitions/regeneron-science-talent-search.png and b/public/competitions/regeneron-science-talent-search.png differ diff --git a/public/competitions/ron-brown-scholar-program.png b/public/competitions/ron-brown-scholar-program.png new file mode 100644 index 0000000..fdc37d6 Binary files /dev/null and b/public/competitions/ron-brown-scholar-program.png differ diff --git a/public/competitions/sage-global.png b/public/competitions/sage-global.png new file mode 100644 index 0000000..8753442 Binary files /dev/null and b/public/competitions/sage-global.png differ diff --git a/public/competitions/scholastic-art-and-writing-awards.png b/public/competitions/scholastic-art-and-writing-awards.png index d287dd8..81ca25a 100644 Binary files a/public/competitions/scholastic-art-and-writing-awards.png and b/public/competitions/scholastic-art-and-writing-awards.png differ diff --git a/public/competitions/science-olympiad.png b/public/competitions/science-olympiad.png index 47c2b6b..0e76f4d 100644 Binary files a/public/competitions/science-olympiad.png and b/public/competitions/science-olympiad.png differ diff --git a/public/competitions/science-without-borders-challenge.png b/public/competitions/science-without-borders-challenge.png new file mode 100644 index 0000000..4173279 Binary files /dev/null and b/public/competitions/science-without-borders-challenge.png differ diff --git a/public/competitions/signet-classics-student-scholarship-essay-contest.png b/public/competitions/signet-classics-student-scholarship-essay-contest.png index 5d52190..61be3cc 100644 Binary files a/public/competitions/signet-classics-student-scholarship-essay-contest.png and b/public/competitions/signet-classics-student-scholarship-essay-contest.png differ diff --git a/public/competitions/teen-ink-contests.png b/public/competitions/teen-ink-contests.png new file mode 100644 index 0000000..7e32433 Binary files /dev/null and b/public/competitions/teen-ink-contests.png differ diff --git a/public/competitions/the-politic-high-school-essay-competition.png b/public/competitions/the-politic-high-school-essay-competition.png index cca4414..e96de0b 100644 Binary files a/public/competitions/the-politic-high-school-essay-competition.png and b/public/competitions/the-politic-high-school-essay-competition.png differ diff --git a/public/competitions/tournament-of-the-towns.png b/public/competitions/tournament-of-the-towns.png index 73f3634..48cffce 100644 Binary files a/public/competitions/tournament-of-the-towns.png and b/public/competitions/tournament-of-the-towns.png differ diff --git a/public/competitions/una-usa-global-citizen-essay-contest.png b/public/competitions/una-usa-global-citizen-essay-contest.png new file mode 100644 index 0000000..cff1f6f Binary files /dev/null and b/public/competitions/una-usa-global-citizen-essay-contest.png differ diff --git a/public/competitions/we-the-students-essay-contest.png b/public/competitions/we-the-students-essay-contest.png index 4da03dc..261a360 100644 Binary files a/public/competitions/we-the-students-essay-contest.png and b/public/competitions/we-the-students-essay-contest.png differ diff --git a/public/competitions/wharton-global-high-school-investment-competition.png b/public/competitions/wharton-global-high-school-investment-competition.png index f640ce0..0269397 100644 Binary files a/public/competitions/wharton-global-high-school-investment-competition.png and b/public/competitions/wharton-global-high-school-investment-competition.png differ diff --git a/public/competitions/wharton-high-school-data-science-competition.png b/public/competitions/wharton-high-school-data-science-competition.png index f640ce0..0269397 100644 Binary files a/public/competitions/wharton-high-school-data-science-competition.png and b/public/competitions/wharton-high-school-data-science-competition.png differ diff --git a/public/competitions/widpsc.png b/public/competitions/widpsc.png index cd323e7..baf6aa3 100644 Binary files a/public/competitions/widpsc.png and b/public/competitions/widpsc.png differ diff --git a/public/competitions/world-of-7-billion-student-video-contest.png b/public/competitions/world-of-7-billion-student-video-contest.png new file mode 100644 index 0000000..6023085 Binary files /dev/null and b/public/competitions/world-of-7-billion-student-video-contest.png differ diff --git a/public/competitions/world-robot-olympiad.png b/public/competitions/world-robot-olympiad.png index 96295ea..395c7db 100644 Binary files a/public/competitions/world-robot-olympiad.png and b/public/competitions/world-robot-olympiad.png differ diff --git a/public/competitions/world-scholars-cup.png b/public/competitions/world-scholars-cup.png index e155fe0..0dea228 100644 Binary files a/public/competitions/world-scholars-cup.png and b/public/competitions/world-scholars-cup.png differ diff --git a/public/competitions/world-schools-debating-championship.png b/public/competitions/world-schools-debating-championship.png index 680fc48..b9fa117 100644 Binary files a/public/competitions/world-schools-debating-championship.png and b/public/competitions/world-schools-debating-championship.png differ diff --git a/public/competitions/young-enterprise-company-programme.png b/public/competitions/young-enterprise-company-programme.png new file mode 100644 index 0000000..ce8f209 Binary files /dev/null and b/public/competitions/young-enterprise-company-programme.png differ diff --git a/public/competitions/youngarts-national-arts-competition.png b/public/competitions/youngarts-national-arts-competition.png index 2a48ab0..ce90e54 100644 Binary files a/public/competitions/youngarts-national-arts-competition.png and b/public/competitions/youngarts-national-arts-competition.png differ diff --git a/scripts/refresh-competition-logos.mjs b/scripts/refresh-competition-logos.mjs new file mode 100644 index 0000000..f1cc5c9 --- /dev/null +++ b/scripts/refresh-competition-logos.mjs @@ -0,0 +1,394 @@ +// Refreshes competition logo PNGs in public/competitions to a quality that +// survives the card banner: any record whose current logo is missing or under +// ~128px on the long edge is re-fetched at a larger size. +// +// Strategy, per competition: +// 1. A curated OVERRIDES map (id -> ordered candidate URLs). This is where +// researched, known-good logo URLs for tricky sites live. +// 2. Otherwise probe the record's official domain for the standard touch +// icon / android-chrome asset paths, which are real logo marks at +// 180px+, unlike favicon.ico. +// +// The first candidate that yields a readable raster at or above the size bar +// (128px, preferring 256px+) wins. Every accepted asset is converted to a +// transparent-background PNG, trimmed of whitespace, and centered on a 512x512 +// transparent canvas so all cards render uniformly via object-contain. +// +// Idempotent: already-fine logos are never overwritten. Usage: +// node scripts/refresh-competition-logos.mjs [--overwrite] +// --overwrite re-fetches every record even when the current logo already +// clears the size bar. + +import { readFileSync, writeFileSync, existsSync, readdirSync } from "node:fs"; +import { resolve, join } from "node:path"; +import sharp from "sharp"; + +const ROOT = process.cwd(); +const DATA_DIR = process.argv.includes("--data-dir") + ? resolve(process.argv[process.argv.indexOf("--data-dir") + 1]) + : join(ROOT, "data", "competitions"); +const OUT_DIR = join(ROOT, "public", "competitions"); +const OVERWRITE = process.argv.includes("--overwrite"); +const MAX_EDGE = 512; +const SIZE_BAR = 128; + +const UA = + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0 Safari/537.36"; + +// Curated, researched logo URLs in priority order. Prefer a mark over a +// cover photo; the picker scores square-ish images highly and rejects +// anything it cannot rasterize at the size bar. +const OVERRIDES = { + // Researched, known-good logo URLs in priority order (best first). + "international-olympiad-in-informatics": [ + "https://upload.wikimedia.org/wikipedia/commons/thumb/3/34/IOI_logo.png/960px-IOI_logo.png", + ], + "world-scholars-cup": [ + "https://upload.wikimedia.org/wikipedia/en/a/af/WSC_Logo_notext.png", + ], + "ayn-rand-institute-essay-contests": [ + "https://upload.wikimedia.org/wikipedia/commons/thumb/8/8b/Ari_logo_header.png/960px-Ari_logo_header.png", + ], + // Official brand mark from the org's own site. + envirothon: [ + "https://envirothon.org/wp-content/uploads/2022/02/Envirothon-logo-Registered143x.png", + ], + hmmt: ["https://hmmt-prod.s3.amazonaws.com/static/img/logo/hmmt/logo.png"], + "tournament-of-the-towns": ["https://www.turgor.ru/i/logo.gif"], + "ja-company-of-the-year": [ + "https://cdn.worldvectorlogo.com/logos/junior-achievement.svg", + ], + "ja-stock-market-challenge": [ + "https://cdn.worldvectorlogo.com/logos/junior-achievement.svg", + ], + "questbridge-national-college-match": [ + "https://www.questbridge.org/apple-touch-icon.png", + ], + "mit-think": ["https://think.mit.edu/images/blinker.svg"], + "nsda-national-tournament": [ + // Only white-on-transparent colorways are hosted; skip (checked by hand: + // the RGB option renders as a near-blank frame). + "https://www.speechanddebate.org/wp-content/uploads/NSDA-Logo-RGB.png", + "https://www.speechanddebate.org/wp-content/uploads/NSDA-Logo-RGB-REVERSED.png", + ], + "certamen-nlc": [ + // NLE's own 192px favicon is a clean brand mark. + "https://www.nle.org/favicon.ico", + ], + "congressional-art-competition": [ + // The official seal of the U.S. House, which runs the program. + "https://commons.wikimedia.org/wiki/Special:FilePath/Seal_of_the_United_States_House_of_Representatives.svg", + ], + "bennington-young-writers-awards": [ + "https://upload.wikimedia.org/wikipedia/commons/8/81/Bennington_College_logo.jpg", + ], +}; + +const STATIC_PATHS = [ + "/apple-touch-icon.png", + "/apple-touch-icon-precomposed.png", + "/apple-touch-icon-180x180.png", + "/apple-touch-icon-152x152.png", + "/android-chrome-512x512.png", + "/android-chrome-192x192.png", + "/favicon-512x512.png", + "/favicon-192x192.png", +]; + +function log(rec, msg) { + console.log(`${msg} (${rec.id})`); +} + +async function fetchBuffer(url, timeoutMs = 15000) { + const ctrl = new AbortController(); + const t = setTimeout(() => ctrl.abort(), timeoutMs); + try { + const res = await fetch(url, { + redirect: "follow", + signal: ctrl.signal, + headers: { "user-agent": UA, accept: "image/*,*/*;q=0.8" }, + }); + if (!res.ok) return null; + const buf = Buffer.from(await res.arrayBuffer()); + if (buf.length < 500) return null; // too small to be a real logo + return buf; + } catch { + return null; + } finally { + clearTimeout(t); + } +} + +async function fetchText(url, timeoutMs = 15000) { + const ctrl = new AbortController(); + const t = setTimeout(() => ctrl.abort(), timeoutMs); + try { + const res = await fetch(url, { + redirect: "follow", + signal: ctrl.signal, + headers: { "user-agent": UA, accept: "text/html,*/*;q=0.5" }, + }); + if (!res.ok) return null; + return await res.text(); + } catch { + return null; + } finally { + clearTimeout(t); + } +} + +// Follow a homepage's icon links to the real asset URLs instead of guessing +// standard paths (most sites host icons on a CDN now). Returns URL, highest +// sizes first; falls back to og:image as a last resort. +async function discoverAssets(baseUrl) { + const html = await fetchText(baseUrl); + if (!html) return []; + const hrefs = []; + const links = [...html.matchAll(/]*>/gi)]; + for (const m of links) { + const tag = m[0]; + const rel = (tag.match(/rel\s*=\s*["']([^"']*)["']/i)?.[1] ?? "").toLowerCase(); + const href = tag.match(/href\s*=\s*["']([^"']+)["']/i)?.[1]; + const sizes = (tag.match(/sizes\s*=\s*["']([^"']*)["']/i)?.[1] ?? "").match( + /^(\d+)x(\d+)$/, + ); + if (!rel.includes("icon") || !href) continue; + const { width = 0, height = 0 } = sizes + ? { width: +sizes[1], height: +sizes[2] } + : {}; + hrefs.push({ href, width, height, kind: rel.includes("apple") ? "apple" : "icon" }); + } + const metas = [...html.matchAll(/]*>/gi)]; + for (const m of metas) { + const name = (m[0].match(/name\s*=\s*["']([^"']+)["']/i)?.[1] ?? "").toLowerCase(); + const content = m[0].match(/content\s*=\s*["']([^"']+)["']/i)?.[1]; + if ((name === "msapplication-tileimage" || name === "twitter:image") && content) { + hrefs.push({ href: content, width: 144, height: 144, kind: "icon" }); + } + } + const og = html.match( + /]*property\s*=\s*["']og:image["'][^>]*content\s*=\s*["']([^"']+)["']/i, + ); + if (og) hrefs.push({ href: og[1], width: 0, height: 0, kind: "og" }); + + const resolved = hrefs + .map((h) => { + try { + return { url: new URL(h.href, baseUrl).href, ...h }; + } catch { + return null; + } + }) + .filter(Boolean) + .filter((h) => !h.url.startsWith("data:")); + // Prefer brand marks over og covers, then larger declared sizes. + resolved.sort( + (a, b) => (a.kind === "og" ? 1 : 0) - (b.kind === "og" ? 1 : 0) || b.width - a.width, + ); + return resolved.map((h) => h.url); +} + +async function sizeOf(buf) { + try { + const meta = await sharp(buf).metadata(); + return { w: meta.width, h: meta.height }; + } catch { + return null; + } +} + +// A file can clear the size bar yet be a visually empty canvas (all-alpha) or +// a near-solid white tile, which is worse than a small-but-real mark. Detect +// both by sampling alpha coverage on a small downscale. +async function isBlankPng(buf) { + try { + const { data, info } = await sharp(buf) + .resize(48) + .raw() + .toBuffer({ resolveWithObject: true }); + const n = info.width * info.height; + let vis = 0; + let sum = 0; + for (let i = 0; i < data.length; i += 4) { + if (data[i + 3] > 128) { + vis++; + sum += data[i] + data[i + 1] + data[i + 2]; + } + } + const ratio = vis / n; + if (ratio < 0.05) return true; // essentially an empty canvas + const mean = vis ? sum / (vis * 3) : 0; + if (ratio > 0.7 && mean > 245) return true; // near-solid white tile + return false; + } catch { + return false; + } +} + +// Lower is better. Square-ish large marks outrank wide covers. +function score(w, h) { + const long = Math.max(w, h); + const short = Math.min(w, h); + const squareness = short / long; + return long < SIZE_BAR ? Infinity : 1e9 - long * 10 - squareness * 1e6; +} + +async function convertToPng(buf, outFile) { + let resized; + try { + resized = await sharp(buf) + .rotate() + .trim() + .resize({ + width: MAX_EDGE, + height: MAX_EDGE, + fit: "inside", + withoutEnlargement: false, + }) + .png() + .toBuffer(); + } catch { + // A fully transparent frame refuses to trim; fall back to untrimmed. + resized = await sharp(buf) + .rotate() + .resize({ + width: MAX_EDGE, + height: MAX_EDGE, + fit: "inside", + withoutEnlargement: false, + }) + .png() + .toBuffer(); + } + const { width, height } = await sharp(resized).metadata(); + const canvas = sharp({ + create: { + width: MAX_EDGE, + height: MAX_EDGE, + channels: 4, + background: { r: 0, g: 0, b: 0, alpha: 0 }, + }, + }); + const composed = await canvas + .composite([{ input: resized, gravity: "centre" }]) + .png() + .toBuffer(); + writeFileSync(outFile, composed); + return { width, height }; +} + +async function tryAssets(rec, urls) { + const loaded = []; + for (const url of urls) { + if (!url) continue; + const buf = await fetchBuffer(url); + if (!buf) continue; + const sz = await sizeOf(buf); + if (!sz) continue; + loaded.push({ url, buf, s: score(sz.w, sz.h) }); + } + if (!loaded.length) return null; + loaded.sort((a, b) => a.s - b.s); + for (const cand of loaded) { + // A candidate that is itself an empty canvas or solid-white tile (see + // isBlankPng) is never an upgrade, no matter how large. + if (await isBlankPng(cand.buf)) continue; + const dims = await convertToPng(cand.buf, join(OUT_DIR, `${rec.id}.png`)); + return { url: cand.url, w: dims.width, h: dims.height }; + } + return null; +} + +const fileNames = readdirSync(DATA_DIR).filter((f) => f.endsWith(".json")); + +async function main() { + const list = []; + for (const fn of fileNames) { + const recs = JSON.parse(readFileSync(join(DATA_DIR, fn), "utf8")); + for (const r of recs) list.push(r); + } + + let updated = 0; + let skipped = 0; + let failed = 0; + + const workers = Math.min(8, list.length); + let idx = 0; + + async function worker() { + while (idx < list.length) { + const rec = list[idx++]; + const outFile = join(OUT_DIR, `${rec.id}.png`); + let size = null; + if (!OVERWRITE && existsSync(outFile)) { + size = await sizeOf(readFileSync(outFile)); + } + if ( + size && + Math.max(size.w, size.h) >= SIZE_BAR && + !(await isBlankPng(readFileSync(outFile))) + ) { + log(rec, "SKIP already fine"); + skipped++; + continue; + } + const siteFor = [rec.official_url, rec.organizer_url] + .map((u) => { + try { + return u ? new URL(u) : null; + } catch { + return null; + } + }) + .find(Boolean); + const domainOf = siteFor ? siteFor.hostname.replace(/^www\./, "") : null; + // A competition hosted on a deep path of someone else's domain (e.g. + // filmfreeway.com/festival/x, mlh.io/seasons/...) has no favicon of its + // own; the Google favicon for that host would be the host's mark, not the + // competition's, so never fall back to it there. + const deepHostPath = + siteFor && + siteFor.pathname.replace(/\/+$/, "").split("/").filter(Boolean).length > 1; + const override = OVERRIDES[rec.id]; + const discovered = domainOf ? await discoverAssets(`https://${domainOf}/`) : []; + const candidates = [ + ...(override ?? []), + ...((override ?? []).length + ? [] + : [ + ...STATIC_PATHS.map((p) => `https://${domainOf}${p}`), + ...discovered, + // Last resort: the site's favicon at 256px. It is the same mark + // a site already ships, so never wrong content, and at 256px it + // clears the size bar without the 10-20x stretch that pixelated + // the old 16-48px copies. + ...(domainOf && !deepHostPath + ? [ + `https://www.google.com/s2/favicons?domain=${domainOf}&sz=256`, + `https://www.google.com/s2/favicons?domain=${domainOf}&sz=512`, + ] + : []), + ]), + ]; + const got = await tryAssets(rec, candidates); + if (got) { + console.log(`OK ${rec.id} ${got.w}x${got.h} <- ${got.url}`); + updated++; + } else { + log(rec, "FAIL (no candidate asset found)"); + failed++; + } + } + } + + await Promise.all(Array.from({ length: workers }, worker)); + + console.log( + `\ndone: ${updated} updated, ${skipped} skipped (already fine), ${failed} failed`, + ); +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); diff --git a/scripts/validate-competitions.mjs b/scripts/validate-competitions.mjs index 6331a4e..3c96ee5 100644 --- a/scripts/validate-competitions.mjs +++ b/scripts/validate-competitions.mjs @@ -23,6 +23,8 @@ * - country_tracks[].country is one of the 13 permitted codes and does not * repeat within one record; each stage has a real calendar date and a * well-formed source_url + * - At least 3 distinct source URLs per record, counting organizer_url, + * official_url, dates[].source_url, and country_tracks URLs (#268) * - No em dashes in any string field * * Exits 0 when all files pass, 1 when any error is found. @@ -296,6 +298,18 @@ for (const file of files) { } } + // At least 3 distinct source URLs per record. A competition that reuses + // the same page for organizer, official and source_url is only one link + // deep, so every record must point at 3 distinct pages somewhere across + // its URL fields (#268). + const distinct = collectDistinctUrls(r); + if (distinct.size < 3) { + err( + loc, + `record must have at least 3 distinct source URLs, found ${distinct.size} (${[...distinct].join(", ")})`, + ); + } + // cycle_year sanity if (r.cycle_year !== undefined && !Number.isInteger(r.cycle_year)) { err(loc, `cycle_year must be an integer, got ${JSON.stringify(r.cycle_year)}`); @@ -345,6 +359,34 @@ for (const file of files) { ); } +/** + * The set of distinct pages a record links to, normalized so that + * http/https, a leading "www.", default ports, trailing slashes and hash + * fragments do not count as separate links (#268). Different pathnames on + * the same site are distinct pages. + */ +function collectDistinctUrls(r) { + const hrefs = [r.organizer_url, r.official_url]; + for (const d of r.dates ?? []) hrefs.push(d.source_url); + for (const ct of r.country_tracks ?? []) { + hrefs.push(ct.official_url); + for (const st of ct.stages ?? []) hrefs.push(st.source_url); + } + + const seen = new Set(); + for (const href of hrefs) { + try { + const { host, pathname, search } = new URL(href); + const key = + `${host.replace(/^www\./, "")}${pathname.replace(/\/$/, "")}${search}`.toLowerCase(); + seen.add(key); + } catch { + // Not a well-formed URL; the individual field checks report it. + } + } + return seen; +} + function checkEmDashes(value, loc, path = "") { if (typeof value === "string") { if (hasEmDash(value)) { diff --git a/src/lib/validate-competitions.test.ts b/src/lib/validate-competitions.test.ts index 968d8ee..9dcbcde 100644 --- a/src/lib/validate-competitions.test.ts +++ b/src/lib/validate-competitions.test.ts @@ -24,7 +24,7 @@ function validRecord(overrides: Record = {}) { region: "international", fee: { amount: 0, currency: "USD" }, prize: "A prize", - official_url: "https://example.com", + official_url: "https://example.org", cycle_year: 2026, dates: [ { @@ -239,6 +239,17 @@ describe("competitions validator", () => { expect(result.stderr).toContain("contains an em dash"); }); + it("fails when a record has fewer than 3 distinct source URLs", () => { + const result = runValidator({ + // official_url collapses onto organizer_url, leaving only two pages. + "stem.json": [validRecord({ official_url: "https://example.com" })], + }); + + expect(result.status).toBe(1); + expect(result.stderr).toContain("at least 3 distinct source URLs"); + expect(result.stderr).toContain("found 2"); + }); + it("fails on an unknown field not in the schema", () => { const result = runValidator({ "stem.json": [validRecord({ rating: 4.8 })],