Spaces:
Sleeping
Sleeping
| 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("---") | |