Skip to main content
You’ve learned how to display content, collect user input, and work with data in Streamlit. Now it’s time to put everything together. In this capstone project, you’ll build a Student Performance Analytics Dashboard — a complete, production-style Streamlit application that accepts a CSV upload, applies sidebar filters, shows summary metrics, organizes output into tabs, renders Matplotlib charts, and lets users download a filtered report. Follow each step in order, running the app after adding each section to see it grow incrementally.

Project Setup

Sample Dataset

Save this as students.csv to use while developing:

Building the App Step by Step

Step 1 — App Configuration and Title

st.set_page_config must be the first Streamlit call in your script. Setting layout="wide" makes the app span the full browser width.

Step 2 — File Upload

st.stop() prevents the rest of the script from running when no file has been uploaded, keeping the app clean for first-time visitors.

Step 3 — Top-Level Metrics

Step 4 — Sidebar Filters

Wrapping filters in st.form means the app only reruns when the user clicks Apply Filters, not on every keystroke. This is much more efficient for expensive operations.

Step 5 — Apply Filters to the Data

Step 6 — Session State for a Visit Counter

st.session_state persists values across reruns within the same browser session. Without it, the counter would reset to 0 on every rerun.

Step 7 — Tabbed Layout

Step 8 — Dataset Tab

Step 9 — Reports Tab

Step 10 — Charts Tab

Step 11 — Progress Indicator and Download

Complete App at a Glance

After completing all steps, your app.py produces this layout:

Concepts Demonstrated

Once your single-page app is working well, consider splitting it into a multipage app. Create a pages/ folder and add separate .py files for each page — Streamlit automatically adds them to the sidebar navigation with no additional routing code.