Privacy Policy
Last updated: November 5, 2026
Overview
ML Grind is committed to protecting your privacy. This Privacy Policy explains how we collect, use, and protect information when you use our Service.
The short version: Python execution happens in your browser. Optional sign-in syncs your progress, optional AI feedback sends the code you submit for review, and usage analytics can be disabled below. We do not sell your data.
Information We Collect
Data Stored Locally (Your Browser)
By default, the following data is saved in your browser's localStorage:
- Progress data: Which problems you've completed
- Saved code: Your code solutions for each problem
- Scratchpad code: Code you've written in the Python scratchpad
Saved progress and solutions are synced to Firestore if you sign in. Requesting AI feedback sends the current submission for review. Without those actions, your saved code stays in your browser.
Feedback Submissions
When you submit feedback through our feedback form, we collect:
- Your email address (optional, only if you provide it)
- The feedback message you write
This information is sent via Formspree and is used solely to respond to your feedback and improve the Service.
Google Sign-In (Optional)
If you choose to sign in with Google, we collect and store the following information in Google Cloud Firestore to sync your progress across devices:
- Google profile information: Your name, email address, and profile photo URL
- Progress data: Problem completion status, saved code, and timestamps
This data is stored securely in Firestore and is only accessible by you (authenticated via your Google account). You can continue using ML Grind without signing in — all features work with local storage only.
Analytics and Hosting
Optional usage analytics help us understand which exercises work well. We respect your browser’s Do Not Track preference.
Usage events include opening exercises and learning paths, running code, passing tests, first runs and passes, and returning on another day. These events contain exercise identifiers, not your code, test inputs, or results. Browser storage remembers first-use milestones and the last visit date. Google Analytics may use cookies and referral information for usage measurement. Signed-in analytics may be associated with a pseudonymous account identifier.
We use Google Analytics 4 to understand how the Service is used and to improve the user experience. Google Analytics collects usage data including approximate geographic location, browser type, device type, and page views. This data is processed by Google under their data processing terms. No personally identifiable information is shared with analytics beyond what Google automatically collects from standard web interactions.
If you sign in with Google, sign-in events are logged with timestamps for security and service improvement purposes.
ML Grind is hosted on GitHub Pages. GitHub may collect standard server logs including IP addresses and page requests. Please refer to GitHub's Privacy Statement for more information.
Information We Do NOT Collect
- We do not require account registration
- Google Analytics may use cookies for usage measurement; you can disable it above
- We use Google Analytics for usage insights (see above)
- We do not collect personal information beyond what you voluntarily provide
- We do not sell or share your data with third parties
Lecture Videos
Section pages offer an optional video lecture hosted on YouTube. Nothing is loaded from YouTube until you press play; the player then uses YouTube's privacy-enhanced (youtube-nocookie.com) mode, and Google's privacy policy applies to the video.
AI Feedback (Optional)
When you request AI feedback, your current code, the exercise title and description, and test-result summaries are sent to our Cloudflare Worker and Anthropic to generate a response. This is separate from running Python locally. Data processing by those services is subject to their respective policies. Code is not included in our usage analytics.
Code Execution
All Python code execution happens entirely in your browser using Pyodide (WebAssembly). Your code is never sent to any external server for execution. This means:
- Running Python and tests does not send your code to a server for execution
- Optional cloud sync and AI feedback transmit the data described in this policy
- Execution results stay in your browser
Data Retention
Local data: Data stored in your browser persists until you clear your browser's localStorage or use a browser cleaning tool.
Feedback: Feedback submissions are retained only as long as necessary to respond to your inquiry and improve the Service.
Your Rights
You have the right to:
- Clear your local data at any time through your browser settings
- Use the Service without providing any personal information
- Request deletion of any feedback you've submitted
Children's Privacy
The Service is intended for general audiences interested in learning machine learning. We do not knowingly collect personal information from children under 13. Since we don't require registration and store data locally, children can use the Service without providing any personal information.
Changes to This Policy
We may update this Privacy Policy from time to time. We will notify users of any material changes by updating the "Last updated" date at the top of this policy.
Contact
For questions about this Privacy Policy, email sid@mlgrind.dev or open an issue on our GitHub repository.