import streamlit as st import json def create_pdf(structure): pdf = FPDF() pdf.add_page() # Title pdf.set_font('Arial', 'B', 16) pdf.cell(0, 10, 'Informative Speech Structure', ln=True, align='C') pdf.ln(10) # Introduction pdf.set_font('Arial', 'B', 14) pdf.cell(0, 10, 'Introduction', ln=True) pdf.set_font('Arial', '', 12) intro_points = [ '- Attention Getter', '- Topic Introduction', '- Credibility Statement', '- Preview of Main Points' ] for point in intro_points: pdf.cell(0, 10, point, ln=True) pdf.ln(5) # Main Points pdf.set_font('Arial', 'B', 14) pdf.cell(0, 10, 'Body', ln=True) for i, point in enumerate(structure['main_points'], 1): pdf.set_font('Arial', 'B', 12) pdf.cell(0, 10, f'Main Point {i}: {point["category"]}', ln=True) pdf.set_font('Arial', '', 12) for item in point['items']: pdf.cell(0, 10, f'- {item}', ln=True) pdf.ln(5) # Conclusion pdf.set_font('Arial', 'B', 14) pdf.cell(0, 10, 'Conclusion', ln=True) pdf.set_font('Arial', '', 12) conclusion_points = [ '- Signal the End', '- Review Main Points', '- Memorable Closing' ] for point in conclusion_points: pdf.cell(0, 10, point, ln=True) return pdf def show(): # Add custom CSS for the download button and new sections st.markdown(""" """, unsafe_allow_html=True) st.title("Module 1: Informative Speech Structure") # Introduction st.markdown(""" Welcome to the National Speech & Debate Association's approach to informative speaking. This module will guide you through creating an effective informative speech that educates, engages, and enlightens your audience. """) # Learning Objectives st.subheader("Learning Objectives") st.markdown(""" - Master the NSDA's three-point structure for informative speaking - Learn how to effectively use references to support your points - Create a well-organized speech that builds audience understanding - Develop engaging content that educates your audience """) # The Three-Point Structure st.subheader("The Three-Point Structure") st.markdown(""" The foundation of an effective informative speech lies in its structure. Every great informative speech follows a clear three-point structure that helps your audience understand and remember your message. """) col1, col2, col3 = st.columns(3) with col1: st.markdown("""

🔍 Point 1: Foundation

Start with the basics:

This builds your audience's understanding

""", unsafe_allow_html=True) with col2: st.markdown("""

💡 Point 2: Development

Build on the foundation:

This adds depth to their knowledge

""", unsafe_allow_html=True) with col3: st.markdown("""

🌍 Point 3: Implications

Connect to bigger picture:

This shows why it's important

""", unsafe_allow_html=True) # Reference Section st.markdown("""

📚 The Power of References

References are crucial in informative speaking because they:

Remember: Every key fact, statistic, or quote in your speech should be traceable to a reliable source.

""", unsafe_allow_html=True) # Example Section st.markdown("### 📱 Real-World Example") # Create three columns for the structure col1, col2, col3 = st.columns(3) with col1: st.info(""" **Foundation** What is Fairphone? - Company history - Basic features - Availability """) with col2: st.info(""" **Development** What makes it unique? - Modular design - Ethical manufacturing - Supply chain """) with col3: st.info(""" **Implications** Why does it matter? - E-waste impact - Industry standards - Future technology """) # Add a visual separator st.markdown("---") # Add a note about references st.markdown(""" > 💡 **Pro Tip**: Each point should be supported by at least one credible source. For example, when discussing e-waste impact, cite specific statistics or research studies. """) # Interactive Outline Builder st.subheader("Create Your Speech Structure") st.markdown(""" Now it's your turn! Use the interactive builder below to create your own speech structure. Remember to: - Start with a strong foundation - Build on your first point - Connect to bigger implications - Include references for each key point """) # Outline Creation Process st.subheader("Outline Creation Process") # Create Your Outline Structure st.markdown("### Create Your Outline Structure") st.markdown(""" Create your final structure with: - Introduction - Three main points - Conclusion """) # Interactive Speech Outlining Activity st.markdown("### 🎯 Create Your Speech Outline") # Add custom CSS for the blocks st.markdown(""" """, unsafe_allow_html=True) # Initialize session state if 'speech_outline' not in st.session_state: st.session_state.speech_outline = { 'foundation': {'main': '', 'points': []}, 'development': {'main': '', 'points': []}, 'implications': {'main': '', 'points': []} } # Create three columns for the main points col1, col2, col3 = st.columns(3) with col1: st.markdown("##### 🔍 Foundation") st.markdown("What is the basic information your audience needs to know?") foundation_main = st.text_input( "Main Point:", value=st.session_state.speech_outline['foundation']['main'], help="The main idea about the basics of your topic" ) if foundation_main: st.session_state.speech_outline['foundation']['main'] = foundation_main foundation_points = st.text_area( "Supporting Points (one per line):", value='\n'.join(st.session_state.speech_outline['foundation']['points']), help="List the key points that support your foundation" ) if foundation_points: st.session_state.speech_outline['foundation']['points'] = [p.strip() for p in foundation_points.split('\n') if p.strip()] with col2: st.markdown("##### 💡 Development") st.markdown("What makes your topic unique or special?") development_main = st.text_input( "Main Point:", value=st.session_state.speech_outline['development']['main'], help="The main idea about what makes your topic unique" ) if development_main: st.session_state.speech_outline['development']['main'] = development_main development_points = st.text_area( "Supporting Points (one per line):", value='\n'.join(st.session_state.speech_outline['development']['points']), help="List the key points that support your development" ) if development_points: st.session_state.speech_outline['development']['points'] = [p.strip() for p in development_points.split('\n') if p.strip()] with col3: st.markdown("##### 🌍 Implications") st.markdown("Why does your topic matter to society?") implications_main = st.text_input( "Main Point:", value=st.session_state.speech_outline['implications']['main'], help="The main idea about why your topic matters" ) if implications_main: st.session_state.speech_outline['implications']['main'] = implications_main implications_points = st.text_area( "Supporting Points (one per line):", value='\n'.join(st.session_state.speech_outline['implications']['points']), help="List the key points that support your implications" ) if implications_points: st.session_state.speech_outline['implications']['points'] = [p.strip() for p in implications_points.split('\n') if p.strip()] # Generate Outline if st.button("📝 Generate Speech Outline"): st.markdown("### Your Speech Outline") # Create a single markdown box for the entire outline outline_content = f""" **Introduction** \n - Attention Getter \n - Topic Introduction \n - Credibility Statement \n - Preview of Main Points **Foundation** Main Point: {st.session_state.speech_outline['foundation']['main']} Supporting Points: {chr(10).join([f"• {point}" for point in st.session_state.speech_outline['foundation']['points']])} **Development** Main Point: {st.session_state.speech_outline['development']['main']} Supporting Points: {chr(10).join([f"• {point}" for point in st.session_state.speech_outline['development']['points']])} **Implications** Main Point: {st.session_state.speech_outline['implications']['main']} Supporting Points: {chr(10).join([f"• {point}" for point in st.session_state.speech_outline['implications']['points']])} \n**Conclusion** \n - Signal the End \n - Review Main Points \n - Memorable Closing """ # Display the outline in a clean format st.markdown(outline_content) # Download Button outline_json = json.dumps(st.session_state.speech_outline, indent=2) st.download_button( label="📥 Download Your Outline", data=outline_json, file_name="speech_outline.json", mime="application/json" ) # NSDA Tips st.subheader("NSDA Tips for Success") with st.expander("📚 Key Tips"): st.markdown(""" - Don't expect a perfect outline on your first try - Your outline will evolve as you research and practice - Look for gaps in your information - Consider if visual aids would help explain complex concepts - Keep track of your time - staying within limits is crucial - Save all feedback and use it to improve """) # Next Steps st.info(""" ### Next Steps After creating your structure: 1. Begin researching your main points in detail 2. Consider if visual aids would enhance your speech 3. Practice your timing 4. Move on to Module 2: Developing Your Speech Content """)