This is a Streamlit-based web application designed to help users learn Python programming from beginner to advanced levels. The app provides a structured learning path with curated resources, projects, progress tracking, and a community discussion feature. It's designed as a self-contained learning platform that guides users through their Python learning journey.
Preferred communication style: Simple, everyday language.
The application follows a simple monolithic architecture built with Streamlit. Key architectural decisions include:
-
Streamlit for UI/Frontend: The application uses Streamlit as both the frontend and backend framework, which simplifies development by allowing Python code to generate interactive web interfaces without needing separate frontend technologies.
-
File-based Storage: Data is stored in JSON files rather than a database. This approach was chosen for simplicity and portability, though it limits scalability for large user bases.
-
Page-based Navigation: The application uses Streamlit's multi-page app structure (via the
pages/directory) to organize different sections of the learning platform. -
Session-based User Management: User state is managed using Streamlit's session state functionality rather than a formal authentication system.
-
Main Application (
app.py):- Entry point for the application
- Handles user login/registration
- Provides basic navigation
-
Utility Module (
utils.py):- Contains shared functions for data loading/saving
- Manages resource and project data
- Handles user progress tracking
-
Page Modules (in the
pages/directory):beginner.py,intermediate.py,advanced.py: Resource pages for different skill levelsprojects.py: Project suggestions for hands-on learningprogress.py: User progress tracking and visualizationcommunity.py: Discussion forum for users
Data is stored in JSON files in the data/ directory:
resources.json: Curated learning resources categorized by skill levelprojects.json: Practice projects with descriptions and starter codeuser_progress.json: Tracks individual user progressdiscussions.json: Community discussions (created at runtime if not present)
-
User Authentication Flow:
- User enters username on the main page
- System either creates a new user profile or loads existing data
- User session is maintained via Streamlit's session state
-
Learning Resource Flow:
- Resources are loaded from JSON files
- Users can filter and browse resources by type or other attributes
- Completed resources are tracked in the user's progress data
-
Progress Tracking Flow:
- User interactions with resources/projects are recorded
- Progress visualizations are generated based on completion data
- Level advancement is suggested based on completion percentage
The application relies on the following key external libraries:
- Streamlit: Core framework for the web interface
- Matplotlib: Used for generating progress visualizations
- Pandas: Data manipulation for resources and progress tracking
The application is configured for deployment on Replit with:
- Streamlit Server: The main application is served via Streamlit on port 5000
- Python 3.11: The application targets Python 3.11 runtime
- Autoscaling: The deployment target is set to "autoscale" in the Replit configuration
- Required Packages: Dependencies are specified in
pyproject.toml
The repository is set up with a streamlined workflow:
- The "Project" workflow runs in parallel mode
- The "Streamlit Server" task launches the application on port 5000
- The server is configured to run in headless mode
-
Database Integration: Consider replacing file-based storage with a proper database (SQLite, PostgreSQL with Drizzle) for better scalability and concurrent user support.
-
Authentication System: Implement a more robust authentication system rather than simple username-based login.
-
Content Expansion: Add more resources, projects, and learning paths for specialized Python domains (data science, web development, etc.).
-
Interactive Coding Challenges: Integrate a Python code execution environment to allow users to practice directly in the application.