debate_LMS / src /views /week4.py
raymondEDS's picture
Push to week 4
a384b03
import streamlit as st
from utils import init_supabase, save_submission, get_existing_submission, get_all_submissions, get_student_debate_case
def show_week4_content():
"""Show Week 4 content"""
st.title("๐Ÿงฑ Week 4: How to Structure a Framework in Traditional LD Debates")
st.markdown("---")
# Check if user is authenticated
if not st.session_state.get('authenticated', False):
st.error("Please log in to access this content.")
return
# Get username for submissions
username = st.session_state.get('username')
# Debug: Show user information
st.sidebar.markdown("---")
st.sidebar.markdown("**Debug Info:**")
st.sidebar.write(f"Username: {username}")
if not username:
st.error("Unable to retrieve user information. Please try logging in again.")
return
# Week overview
st.markdown("""
## ๐Ÿค” Reflection Scenario: The School Budget Dilemma
**Imagine this scenario:**
Your school has received a $50,000 grant and needs to decide how to spend it. There are three competing proposals:
* **Proposal A:** Build a new computer lab with the latest technology
* **Proposal B:** Expand the library with more books and study spaces
* **Proposal C:** Create an after-school sports program for underserved students
**The Problem:** Without clear criteria for making this decision, the school board is stuck in endless arguments. Each proposal has strong supporters with different perspectives:
* The tech teacher argues computers prepare students for the future
* The librarian says reading skills are fundamental to all learning
* The PE teacher claims physical activity improves academic performance and mental health
**The Challenge:** How do you decide what's "best" when everyone has valid arguments but different priorities?
""")
# Reflection questions
st.markdown("### **๐Ÿ’ญ Reflection Questions:**")
reflection_questions = [
"What criteria would you use to evaluate these proposals?",
"How might different people define 'what's best for students' differently?",
"Why is it difficult to make decisions without clear evaluation standards?"
]
for i, question in enumerate(reflection_questions, 1):
st.markdown(f"**{i}.** {question}")
st.markdown("""
**๐ŸŽฏ The Framework Connection:**
This scenario shows exactly why frameworks matter in debate. Without clear criteria for evaluation, arguments become meaningless comparisons of apples and oranges. A framework gives you the measuring stick to decide what counts as a "good" argument and what doesn't.
In debate, your framework is your decision-making system. It tells the judge not just what to care about, but HOW to evaluate competing claims.
""")
# Content tabs
tab1, tab2, tab3 = st.tabs(["๐ŸŽค Speaking Drills", "๐Ÿ“– Lecture Notes", "๐Ÿ“ Your Debate Case"])
with tab1:
st.subheader("๐ŸŽค Speaking Activity: Present Your Week 3 Debate Case")
st.markdown("""
### **Objective:** Practice presenting your debate case from last week
This activity helps you develop your speaking skills and get comfortable presenting your arguments. Choose one of the three presentation options below.
""")
st.markdown("---")
st.markdown("### **Choose Your Presentation Option:**")
presentation_option = st.selectbox(
"Select how you want to present your case:",
[
"1. Read your entire case out loud",
"2. Present 1 argument you think is the best and explain why",
"3. Talk about what you think is a good strategy"
],
key="presentation_option"
)
if presentation_option == "1. Read your entire case out loud":
st.markdown("""
**Option 1: Full Case Presentation**
**Instructions:** Read your entire debate case out loud, including all your arguments and evidence. This helps you practice delivering your complete case smoothly and confidently.
**Tips:**
- Speak clearly and at a good pace
- Practice your transitions between arguments
- Make sure you can present everything within your time limit
""")
elif presentation_option == "2. Present 1 argument you think is the best and explain why":
st.markdown("""
**Option 2: Best Argument Focus**
**Instructions:** Choose the strongest argument from your case and present it in detail. Explain why you think this argument is particularly effective and how it supports your position.
**Tips:**
- Clearly identify which argument you're presenting
- Explain why this argument is your strongest
- Connect it to your overall case strategy
""")
elif presentation_option == "3. Talk about what you think is a good strategy":
st.markdown("""
**Option 3: Strategy Discussion**
**Instructions:** Discuss your overall debate strategy. Explain your approach to the topic, how your arguments work together, and what you think makes for effective debate strategy.
**Tips:**
- Explain your overall approach to the topic
- Discuss how your arguments complement each other
- Share insights about effective debate strategy
""")
st.markdown("---")
st.markdown("### **๐ŸŽฏ Ready to Practice!**")
st.markdown("""
**Instructions:**
1. Review your Week 3 case above
2. Choose your presentation option
3. Practice presenting your case out loud
4. Use the text areas above to take notes or plan your presentation
**Remember:** This is practice time! Focus on speaking clearly, managing your time, and delivering your arguments effectively.
""")
with tab2:
st.subheader("๐Ÿ“– Lecture Notes: Framework Fundamentals")
st.markdown("""
## **Introduction: The Strategist's Playbook**
Let's be real: debates can get confusingโ€”fast.
When you're in the middle of an LD round, throwing out arguments and responding to your opponent, it's easy to lose track of **what really matters**. More importantly, your **judge** might be lost too.
That's where the **framework** comes in.
""")
st.markdown("### **๐ŸŽฏ The framework is your *strategy*.**")
st.markdown("""
It tells the judge:
* What this debate is really about
* How to decide who wins
* What counts as a good or bad argument
If you don't set the rules, your opponent will. And if neither of you do, the judge is left guessingโ€”which usually hurts your chances of winning.
Imagine trying to play a game with no goal and no rules. That's what a debate without a framework feels like.
""")
st.markdown("### **Why The Framework Is a Game-Changer:**")
st.markdown("""
* **It gives you control.** You shape the way the judge looks at the debate.
* **It makes your case clearer.** The judge knows what your goal is and how your arguments help you reach it.
* **It helps you win.** Judges almost always vote for the debater who has the better framework and connects their arguments to it.
""")
st.markdown("---")
st.markdown("## **๐Ÿงฑ The Four Parts of a Framework**")
st.markdown("""
We use a framework to break down the debate into clear, important parts. A good framework has four main pieces.
And we will use this resolution as an example:
**"The public's right to know ought to be valued above the individual's right to privacy."**
""")
# Framework components
col1, col2 = st.columns(2)
with col1:
st.markdown("### **1. Definitions**")
st.markdown("""
You explain what the unclear terms in the resolution mean.
๐Ÿ“Œ **In this topic, we might define:**
* **"Public's right to know"** โ€“ What information are we talking about? From the government? About celebrities?
* **"Ought"** โ€“ This means we're talking about moral obligation. What *should* be done, not what *is* done.
* **"Individual's right to privacy"** โ€“ Does this include personal data, medical records, phone calls?
""")
st.markdown("### **2. Observations**")
st.markdown("""
These are short comments that help the judge understand the debate better.
๐Ÿ“Œ **Examples:**
* "This debate is about moral obligations, not what's most popular."
* "We're comparing two conflicting rights and deciding which one should be prioritized."
""")
with col2:
st.markdown("### **3. Value**")
st.markdown("""
This is your goal in the roundโ€”the big idea you're trying to achieve.
๐Ÿ“Œ **Common values for LD:**
* **Morality** - a set of personal or social standards for good or bad behavior and character
* **Justice** - Give each their due
* **Human Dignity** - the unearned worth or status that all humans share equally
""")
st.markdown("### **4. Criterion**")
st.markdown("""
This is how you measure or reach your value. It's the rule or test the judge should use.
๐Ÿ“Œ **Examples:**
* If your value is **Democracy**, your criterion might be **Promoting a Healthy Democracy**.
* If your value is **Freedom**, your criterion might be **Protecting Individual Rights**.
* If your value is **Morality**, your criterion might be **Treating People with Dignity**.
""")
st.markdown("---")
st.markdown("## **๐Ÿ”„ Understanding How the Negative Side Can Create a Different Framework**")
st.markdown("""
In LD debate, **both the affirmative (AF)** and the **negative (NEG)** get to propose their **own framework**.
That means:
โœ… You're not stuck using the same value and criterion as your opponent.
โœ… In fact, choosing a different framework can give you a strategic advantage.
""")
st.markdown("### **๐Ÿ’ฅ Why Would the Negative Use a Different Framework?**")
st.markdown("""
The affirmative speaks first and usually sets the tone with a framework. But that doesn't mean the NEG has to accept it. The NEG can challenge it by:
* Offering **different definitions**
* Choosing a **different value** that better supports the negative position
* Using a **different criterion** to measure success
This forces the judge to compare **two different frameworks** and decide which one makes more sense.
""")
st.markdown("### **๐Ÿง  Example**")
st.markdown("""
**Resolution:** *"The United States ought to guarantee universal basic income."*
* **Affirmative Framework:**
* **Value:** Justice
* **Criterion:** Providing equal economic opportunity
* **Negative Framework:**
* **Value:** Societal Welfare
* **Criterion:** Maximizing long-term economic stability
Both sides are trying to win, but they're asking the judge to care about **different things**.
""")
st.markdown("### **๐Ÿค” So What Happens?**")
st.markdown("""
Now the debate isn't just about who made better argumentsโ€”it's also about **which framework is better.**
Judges will:
* Compare the two frameworks
* Decide which value/criterion combo is more appropriate for the topic
* Use that winning framework to evaluate the rest of the round
If you're NEG and the AFF's framework hurts your side:
* Don't panicโ€”**pivot!**
* Build a **new framework** that favors your arguments
* Explain why your framework is a better way to view the topic
""")
with tab3:
st.subheader("๐Ÿ“ Your Debate Case: Framework Construction")
st.markdown("---")
st.markdown("""
### ๐Ÿ“„ Example Debate Case
**Before starting the activities, please review this example debate case:**
""")
# Add download button
download_url = "https://docs.google.com/document/d/1J8Unkklwhk778jcARshISK0AdBZ34XikQpeBDAWAxY0/edit?tab=t.3t21ivxifp52#heading=h.vsxctn9u5gyw"
st.markdown(f"[๐Ÿ“ฅ Download as Word Document]({download_url})")
# Embed the Google Document
google_doc_url = "https://docs.google.com/document/d/1J8Unkklwhk778jcARshISK0AdBZ34XikQpeBDAWAxY0/edit?tab=t.3t21ivxifp52#heading=h.vsxctn9u5gyw"
embed_url = google_doc_url.replace("edit", "preview")
st.markdown(f"""
<iframe
src="{embed_url}"
width="100%"
height="600"
frameborder="0"
style="border: 1px solid #ddd; border-radius:5px;">
</iframe>
""", unsafe_allow_html=True)
st.markdown("---")
st.markdown("""
## **๐ŸŽฏ Homework: Start your debate case**
Start writing your framework on the assigned resolution. Write a full framework that includes:
* Definitions
* Observations
* Value
* Criterion
""")
# Check for student's debate case Google Doc
student_case = get_student_debate_case(username)
if student_case:
st.success("โœ… Found your debate case Google Doc!")
st.markdown("### **๐Ÿ“„ Your Debate Case Document**")
# Convert Google Doc URL to embed URL (allow editing)
google_doc_url = student_case['google_doc_link']
embed_url = google_doc_url # Keep as edit mode to allow editing
# Display the Google Doc in an iframe
st.markdown(f"""
<iframe
src="{embed_url}"
width="100%"
height="600"
frameborder="0"
style="border: 1px solid #ddd; border-radius:5px;">
</iframe>
""", unsafe_allow_html=True)
# Add download button
st.markdown(f"[๐Ÿ“ฅ Download as Word Document]({embed_url})")
if student_case.get('description'):
st.markdown(f"**Description:** {student_case['description']}")
st.markdown("---")