Skip to content

Repository files navigation

$${\color{blue}Extemplary}$$


A free tool for practicing NSDA Extemporaneous Speaking, usable either as a website or installed as a real Chrome/Edge/Firefox extension. Record a full round or a quick drill, recieve tailored comments & feedback, review your speech transcript, and automatically save a history of every round you've practiced.

Wanna know how to deploy?

Extemp Logo

---------TABLE OF CONTENTS---------

  1. What is Extemp?

  2. Features

  3. Deployment πŸ“¦

  4. Landing Site 🏁

  5. Software βš™οΈ

  6. Supabase setup πŸ’Ύ

  7. Email delivery 🌐

  8. Browser support

  9. Privacy & data πŸ›‘οΈ

  10. Disclaimer ⚠️


What is Extemp? πŸ—£οΈ

Extemporaneous Speaking refers to a speech event where you deliver a 7 minute memorized speech (no notes!) on a topic that you will be given 30 minutes to research. The aim of Extemporaneous Speaking is to deliver the strongest, most well crafted speech with precise evidence and flawless reasoning, testing both your presentational and analytical writing skills.

From https://www.speechanddebate.org/competition-events/:

"International Extemporaneous Speaking (IX) is a seven-minute speech event (with a 30-second grace period) focused on current international issues. Students have 30 minutes to prepare a speech in response to one of three selected questions related to global politics, economics, or culture. During prep, students may consult research they’ve brought with them; at some tournaments, including the National Tournament, they may also use the internet. Each speech is delivered from memory without notes."

"United States Extemporaneous Speaking (USX) is a seven-minute speech event (with a 30-second grace period) that focuses on current events within the United States. Students have 30 minutes to prepare a speech in response to one of three selected questions related to U.S. politics, economics, domestic policy, or cultural issues. During prep, students may consult research they’ve brought with them; at some tournaments, including the National Tournament, they may also use the internet. Each speech is delivered from memory without notes."


Features 🧩


How the Extention works (summed up in one flowchart!) Sign up β†’ Generate questions β†’ Write a speech β†’ Record your speech β†’ Receive feedback β†’ Set goals β†’ Practice more β†’ Track your improvement/progress β†’ Correct bad habits & general weaknesses

  • Record a round | Generate 3 realistic practice questions, run a prep timer, then record on your webcam for your speech. There are actually 3 practice modes to pick from right on the record screen, with each having its own timer and unique rubric:
  1. Regular Practice πŸ”΅: 30 minute prep, 7 minute round, graded on 8 categories.
  • What an Extemp round at a tournament would actually look like. Recommended if you are working on everything in Extemp.
  1. Rapid Drill: Introduction πŸ”΄: 5 minute prep, 1 minute intro, graded on 5 categories.
  • Recommended if you are focusing on introductions, creative AGDs, signposting, and vocal delivery
  1. Rapid Drill: Body 🟑: 10 minute prep, a 2 minute body paragraph, graded on 6 categories.
  • Recommended if you are focusing on the content, evidence, analysis, and vocal delivery
  1. Drafting 🟒: 10-15 minute prep, a rough draft (in paragraphs & bullet points) of a tournament standard speech, graded only on content (no delivery/speech).
  • Recommended if you are focusing only on quality of information

record

  • Extemp Practice Question Difficulty Selection | Allows the user to select how niche and complex the auto-generated extemp questions will be. With 30 total difficulty levels and a unique example of a question at that level, the user can adjust the difficulty of the questions based on their own personal skill level (novice, varsity,etc).

qdiff

  • AI judged Ballot | Extemplary Transcribes your speech, analyzes vocal delivery from the extracted audio, and scores you on a custom made 8-category NSDA extemp rubric. The user can select their perferred AI model from the list below, in order from cheapest & weakest to most expensive & advanced.
  1. GPT-OSS 120B
  2. Qwen3.8 2.4T A95B
  3. Gemini 3.7 Flash
  4. GLM 5.2
  5. DeepSeek V4 Pro 0813
  6. Kimi K3
  7. Claude Opus 5

rubric1

-Ballot Feedback Model Selection | As previously stated, the user can select which perferred LLM they would like to use to provide them feedback on their speeches. The 7 options are GPT-OSS 120B, GLM 5.2, DeepSeek V4, Claude Sonnet 5, Kimi K3, Claude Opus 4.8, and Claude Opus 5. To help users choose which model suits their Extemp needs, Extemplary provides a visual graphic illustrating the overall "score" of said model based in 2 categories: their intellectual ability & deep reasoning skills and their cost. These values reached via holistic approach. I based the scores off openrouter rankings https://openrouter.ai/rankings, tests on the Extemplary platform, and other misc. LLM rankings. For experienced Extempers & more difficult questions, use Opus 5 or Opus 4.8. For more prolithic uses of the Ballot Feedback feature (if you intend to use it multiple times daily), use Deepseek V4 Pro. If you are a beginner or doing an easy question, use the default GPT-OSS 120B.

-AI Token Usage | In order to keep Extemplary free and open sources, every aspect that involes an LLM or API key is rate limited to a certain amount daily (resets midnight UTC). This includes featues such as: Ballot Feedback, Citation Checker, Practice Question Generator, Current Events Summary, Resets daily at midnight UTC. You should be able to comfortably get ~15-40 uses of each depending on the complexity. If you choose to use a more expensive model for Ballot Feedback, it will be more around 5-10 uses.

  • Tournament Briefings | Allows the user to generate a comprehensive overview on current events (domestic, international, and economic). This overview contains important news in the US, internationally, and in the economy. Every bullet point/piece of current event also contains a link if users need to research/learn more about that spefific topic topic. There is also a section for "What to Expect at Your Tournament" are options to download/save for later viewing.

briefingimg

  • Vocal Delivery Analysis | Each speech will be measured for volume, emphasis, tone/pitch variety, pauses, pace (WPM), filler words, and stutters/repetitions.

test

  • Annotated transcript | An automated transcript with personalized comments (πŸŸ₯ = big mistake, 🟦 = comment, 🟩 = brilliant move, 🟨 = minor error).

annotation

  • Watch & Read Along | The video of your speech plays along with the transcript. Click any word to jump the video to that exact moment (precise down to the tenth of a second). The current word will be highlighted live as it plays so you can comfortably follow along.

  • Citation checker | Before you use a statistic/quote or want to verify someone else's claim and evidence, paste the claim, the date, and the source in the citation checker and Extemplary will search the web to verify it. The result could either be TRUE, FALSE, or UNVERIFIED, with a 2-3 sentence explanation and a link to the source of the claim/evidence. If you're not sure of the exact date, you can swap any unknown digit for ? (ex. 06/??/2025) for a range of possible dates.

sschecker

  • Example ballot | An example sample round (with speech and ballot) so first-time users can see what a finished round looks like before recording their own, including the same synced playback experience.

feedback

  • Accounts & sign-in | Sign up with an email and password to use Extemplary and track your progress. Sessions are saved automatically. If you close the tab and come back later, you will be still signed in. Sign out any time from the account menu.

  • Cloud-saved ballot history | Every completed round, whether it is regular practice or a rapid drill, is saved and automatically stored onto your account and available from any device you sign in on, via the My History page. Each entry is tagged with which of the 3 practice modes it came from, and a dropdown filter lets you narrow the whole page (round list, trend graphs, and averages included) down to just Regular Practice, Rapid Drill: Introduction, or Rapid Drill: Body instead of always seeing everything mixed together.

bhistory1

  • Coach's Overall Notes | Comprehensive feedback of your Extemp journey that finds patterns across your entire practice history, naming your biggest recurring strength, your biggest recurring area to improve, and one concrete next step. It's designed to update automatically at designated milestone rounds or whenever you record a particularly brillian round.

coach

  • Trends across your ballots | The "History view" combines & stores your average score in each rubric category across every round you've recorded, with per-category bars plus your top overall strengths and weaknesses.

tredn

  • Line Graphs | Line graphs illustrating your overall score, sorted by individual rubric category and type of practice, plotted round-by-round across all of your speeches. This not only helps with tracking your progress in a specific area across months of hard work, but also serves as a representation of your speeches as a whole.

lineg

  • Streak & Calendar | A practice streak: When you record a ballot, set a goal, or complete one keeps the streak alive. Your current streak lives in a flame counter fixed to the top of the app, and the full Streak Calendar view lays out a month-by-month history of active days, and your current & best streak.

calendarimg

  • tournament & event tracker | Located in the calendar tab, you can add an upcoming tournament's date and name on the calendar. It will also show up in list below the calendar.

  • Goals | Set some attainable goals to achieve in the future! Either hit a streak length, beat an overall score threshold, beat a threshold in one specific rubric category, complete a number of practice rounds, or live video ballots this month. Each goal tracks its own live progress. My History also contains Suggested Goals that are auto-generated from your own weakest rubric categories, current average score, and current streak, so there's always a sensible next target waiting for you.

goal

*Image was extended for photo. The real site is more horizontal than this photo portrays.

  • Session score tracking & export | Precise score tracking within a session. You can also export the entire speech ballot report to either a .txt file or a printable ballot. You also can download & export your speech recording.

  • Extemp Rubric | A custom and comprehensive rubric that includes all aspects of an extemp speech for grading speeches.

rubric1

  • Installable PWA | Works offline for timing/recording; add to your phone's home screen.

  • Tutorial | The first time you create an account, an easy to follow tutorial gides you through every part of the app, allowing the user to try every feature the site offers. The tutorial highlights actual buttons, waits for user input and before moving on. It covers every single feature currently present on the Extension

tutorial_image

Note: Extemplary requires camera and microphone access for recording speeches (duh, unless you upload the speech).

Deployment πŸ“¦


Method 1: GitHub Pages (Browser)

Use the link not-a-robot-really.github.io/Extemplary/ to try it on the web browser via GitHub pages. aboutextemppng

Method 2: Extension

Extemplary also serves as a browser extension (Manifest V3). Just pin it to your toolbar like any other extension. It works in Chrome, Edge, and Firefox.

  1. Go to https://github.com/Not-A-Robot-Really/Extemplary
  2. Click on <> Code, press Local, and then hit Download ZIP. A ZIP file of the entire repo will be downloaded on your end.

downloadzippng

  1. Open chrome://extensions in Chrome.

  2. Turn on Developer mode.

  3. Click Load unpacked and select Extemplary-main. Make sure you pressed Extract All on Extemplary-main.zip before you do this step. devmodepng

  4. Click on the puzzle icon 🧩 to the right of the search bar and click on Extemplary. laststep

Notes:

  • Every YouTube video in the extension (the video of the example speech) is unable to be view directly in the extension. You will have to visit the external link. This issue does not exist on GitHub pages.
  • Extemplary.html was split into separate app.js, landing-app.js, tutorial.js, data.js, index.html, and landingsite.html files so it can be easily packaged as an extension file.
  • background.js opens the landing site when you open the Extemplary extension.
  • The extension only requests the storage and windows permissions, plus host access to its Supabase project.
  • If you'd rather just use the web version on GitHub pages, that's completely fine. Nothing about the extension changes how the site works except for no YouTube embeds.

Landing Site 🏁


The sign-in screen is also a landing page. Scroll down past the log in info to see a glimpes of what the app can actually do. Interact with the several features which you can try live, no account required!

  • 1️⃣ Real practice questions | pick between domestic, economic, and international topics and get three relevant extemp questions on the spot (one free try per browser).

  • 2️⃣ Current event briefings | Generate current events & news briefing (one free try per browser).

  • 3️⃣ A working prep timer | Just a 30 minute timer that you can pause/unpause and restart.

  • Watch & Read Along preview | A small portion of the transcript with clickable comments with a video of the full speech.

  • 4️⃣ AI-judged ballot preview | One full, real category (with score, What Worked, Critical Flaws, and What You Could Have Done) pulled from an actual ballot.

  • 5️⃣ Citation checker | Verify 1 real claim against its source, the exact same way the in-app Citation Checker does (one free try per browser).

  • 6️⃣ Example Ballot | Contains a complete example round with an example transcript, video, feedback, comments, rubric, and score.

Software βš™οΈ


Supabase: provides authentication and cloud storage

  • Transcription: Groq's Whisper (whisper-large-v3)
  • Judging: Groq's GPT-OSS 120B, Opus 5, Opus 4.8, Kimi K3, Sonnet 5, GLM 5.2, OR DeepSeek V4
  • Question drafting, briefings & citation checking: Google's Gemini (using live web searches)
  • Audio analysis: Web Audio API (client-side FFT/pitch/volume analysis)
  • Video: MediaRecorder for capture and<video> for review/playback. The example ballot utilizes the YouTube IFrame API for its sample speech.
  • Accounts: Supabase Auth (requires email + password), loaded client-side via supabase-js
  • Cloud storage: Supabase table (ballots) for scores, transcripts, and feedback. Table (user_overall_feedback) was created/used for the "Coach's Overall Notes" comments. Table (calendar_events) was created/used for tournament/event dates on the Calendar. The table (user_goals) was used for storing goals and their targets. Last, a private Supabase Storage bucket (ballot-videos) was created for storing recorded videos with Row Level Security so that each account can only ever access its own data
  • Streak calculation: Client side from ballots and user_goals rows. A day counts as "active" if you recorded a ballot, set a goal, or currently have a goal complete that day.
  • Local storage: (localStorage`) used for minor preferences (theme, timer settings) and for whether a browser has already tried its one free landing-page demo (questions, briefings, citation checker). Everything privacy & account related (ex. ballots, video, session, streak/calendar events, goals) is in Supabase.

Creating an account πŸ‘€


You'll land on the sign in screen (landing page) the first time you open the app.

  1. Locate the Sign Up tab, enter an email and a password (requires 6+ characters), and submit.
  2. You may need to check your email and click a confirmation link before your first log in (see Supabase setup below).
  3. Once signed in, you will stay signed in automatically until you tap Sign out in the top right of the account menu. You will also see a tutorial that will guide you through all the features of Extemplary.

Every round completed while signed in is saved automatically. Click on any past round in the "My Ballot History" page to rewatch the video, re-read the transcript, or re-read the full judge's feedback, read your Coach's Overall Notes, view your progress graphs, general strengths/weaknesses and view & add Goals (with auto-suggested ones based on your own weak spots).

API keys πŸ”‘


The app utilizes default Groq and Gemini API keys for transcription, judging, and question/briefing/citation generation. As of now, the API keys now cannot be replaced by your own.

Supabase setup πŸ’Ύ


Accounts and cloud history run on a Supabase project.

If you fork this project and want your own Supabase backend rather than the one it comes with... Create a new Supabase project: run setup.sql there, and swap in your project's URL and anon key in SUPABASE_URL / SUPABASE_ANON_KEY near the top of <script> in Extemplary.html. The anon key is meant to be public, Row Level Security. It is not meant to be key secrecy.

Email delivery 🌐


Account Creation: In order to sign up for Extemplary, you must provide a valid registration email and generate a 8+ letter long password. You will then receive a verification email in your inbox from Clerk. Enter the 6 digit number, and you will be automatically enter the extension!

Browser support


Requires a modern browser supporting MediaRecorder, getUserMedia, and the Web Audio API. Also requires camera and microphone (via Https:// or localhost) unless you want manually upload a recording or upload from YouTube.

Latest versions of Chrome, Edge, Firefox, or Safari should be fine for Extemplary.

Privacy & data πŸ›‘οΈ


  • Audio is sent only to Groq's API for transcription and judging; question drafting, briefing generation, and citation checking are sent only to Google's Gemini API.
  • Account email/password and ballot history (scores, transcripts, feedback, and recorded video) are stored in Supabase, associated only with your account, and protected by Row Level Security. In other words, no other user can read or modify your data through the app.
  • Your Streak Calendar data (tournament/event entries) and Goals data (goal type, target, progress source) are likewise stored in Supabase, tied to your account, and protected by Row Level Security.
  • Recorded video is stored in private storage buckets; it is only ever served back to your browser via short-lived signed links generated while you're signed in, not via public URLs.
  • The landing page's "free try" demos (practice questions, current event briefings, citation checker) run before sign-in and are not saved anywhere only a "used" sign is stored locally so the free sample isn't repeatable.

Disclaimer ⚠️


This is an unofficial practice tool and is not affiliated with or endorsed by the NSDA.

License


MIT License

Copyright (c) 2026 Extemplary contributors

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

API keys: this repo includes working default Groq, Gemini, and Supabase keys so it runs out of the box. The MIT license does not give rights to those specific keys or the data behind them. If you fork or redeploy this publicly, please swap in your own Groq API key, your own Gemini API key, and your own Supabase project rather than reusing the current ones.

About

A browser-based practice tool for NSDA Extemporaneous Speaking :)

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages