An offline coding platform built for low-resource areas with no internet reliability
# Sudopy
A desktop app for practicing Python without an internet connection. Built for Junub Code, a program that teaches programming to kids in South Sudan.
## Why it exists
Most "learn to code" tools assume a reliable internet connection: a browser-based IDE, a cloud grader, or an account to sign into. That doesn't work well in South Sudan, where students may have internet access sometimes but can't reliably depend on it during class.
Sudopy is a single downloadable application with a Python interpreter, practice problems, and an auto-grader built in. The problems currently cover the topics we teach at Junub Code, with more to be added as the curriculum grows.
## How it works
A student picks a problem from the sidebar, writes Python in the editor, and clicks Run. Sudopy runs their code against the problem's test cases and checks the result.
Everything happens on the student's computer. There is no account, server, or internet connection needed to solve and grade a problem.
If a student gets stuck, Show Solution reveals a working solution after they have attempted the problem.
## Repository structure
```text
app/
├── main.py entry point
├── core/ running submissions, loading problems, and grading
├── gui/ the Tkinter interface
├── huffman/ Huffman compression for bundled content
├── content/ Python practice problems
├── content_authoring.py tools for creating problem content
├── validate_content.py checks problem content
├── verify_all_solvable.py checks that problems have working solutions
├── compress_content.py compresses content for the packaged build
├── tests/ pytest suite
└── packaging/build.spec PyInstaller configuration
website/ download page
.github/workflows/ automated tests and deployment
```
## Design decisions
### Tkinter
Sudopy uses Tkinter for the desktop interface because it comes with Python …