Thank you for wanting to improve coding education for students. Please read this entire document before contributing. Safety requirements are non-negotiable.
Every contribution must be appropriate for a 11-year-old student to see, use, and learn from on a school computer with a teacher and parent watching.
If you're not sure whether something meets this bar, it doesn't. Ask first.
- New lessons and skills — Expanding the curriculum
- Accessibility improvements — Better screen reader support, keyboard navigation
- Content filter improvements — Better evasion detection, fewer false positives
- Teacher guides — Clearer instructions, better common-question answers
- Translations (for future versions) — WITH matching safety/filter systems
- Typo fixes
- Clearer explanations in existing skills
- Better code comments in examples
- Bug fixes in scripts
- External dependencies (npm packages, CDNs, etc.)
- Features that require internet access during lessons
- User account or login systems
- Real-time collaboration features
- Features requiring admin privileges to install
- External URLs or hyperlinks (all content is self-contained)
- References to specific real people, celebrities, or public figures
- Brand names beyond development tools (VS Code, Chrome, etc.)
- Political, religious, or controversial content
- Violence, weapons, or conflict of any kind
- Drug, alcohol, or substance references
- Sexual or romantic content of any kind
- Profanity or crude language (including in code comments and variable names)
- Personally identifiable information (real names, emails, addresses)
- Images that haven't been approved (see Image Policy below)
- Code that makes network requests
- Code that accesses the filesystem outside the project
- Code that uses
eval(),innerHTMLwith user input, ordocument.write()
- Work without internet access (after initial clone)
- Work without installation (no npm, no pip, no build step)
- Work in all major browsers (Chrome, Firefox, Edge, Safari)
- Include comments explaining every significant line
- Use descriptive variable names (not single letters except loop counters)
- Pass the automated safety check
- All images must be created specifically for EduStack (no stock photos)
- Images must be reviewed and approved by a maintainer
- No photographs of real people
- No copyrighted characters or logos
- Images should be simple diagrams, screenshots of code, or abstract illustrations
- Maximum file size: 200KB (keeps clone fast on slow school networks)
- Fork the repository
- Make your change
- Submit a pull request with a clear description
- Open an issue first describing what you want to add
- Wait for maintainer feedback (we may have suggestions or concerns)
- Fork the repository
- Follow the skill format in ARCHITECTURE.md
- Run the safety check locally:
./scripts/safety-check.sh - Submit a pull request
- Be prepared for a thorough safety review
- I have read CONTRIBUTING.md (this file)
- My changes contain no external URLs
- My changes contain no personally identifiable information
- My changes contain no age-inappropriate content
- I have run
./scripts/safety-check.shand it passes - My commit messages are professional and descriptive
- If I added images, they are original and under 200KB
Every PR goes through:
- Automated safety check — Must pass before any human review
- Content review — A maintainer reads every word for appropriateness
- Technical review — Code quality, browser compatibility, accessibility
- Education review — Is this actually good pedagogy? Clear explanations? Appropriate difficulty?
This process takes time. Thank you for your patience. We'd rather be thorough than fast.
<!-- Use semantic HTML elements -->
<header>
<h1>My Page Title</h1>
</header>
<main>
<!-- Clear comments explaining what sections do -->
<section>
<p>Use paragraphs for text, not divs.</p>
</section>
</main>/* Use descriptive class names */
.page-header {
/* Group related properties */
background-color: #3498db;
color: white;
/* Comment on non-obvious values */
padding: 20px; /* Comfortable spacing for readability */
}// Use descriptive variable names
let studentScore = 0;
// Comment every function
// This function adds one point to the student's score
function addPoint() {
studentScore = studentScore + 1;
// Update the display
document.getElementById("score-display").textContent = studentScore;
}- Use ATX headers (
#,##,###) - Use fenced code blocks with language tags
- Keep lines under 100 characters when practical
- Use blank lines between sections
Good:
Add CSS colors explanation to Skill-02
Added a step explaining how hex colors work with a visual example.
Includes both hex (#ff0000) and named colors (red) for clarity.
Bad:
update stuff
fix lol
Open an issue with the question label. We're happy to help you contribute.
Thank you for helping make coding education accessible, safe, and fun for students.