-
1. Commission Structure
-
Alpha One Labs operates on a revenue-sharing model where:
-
- - Teachers receive 90% of the course and session fees
- - Alpha One Labs retains a 10% commission to cover platform maintenance, payment processing, and support services
- - Payments are processed automatically through Stripe and distributed to teachers' connected accounts
-
-
2. Teacher Payments
-
To receive payments, teachers must:
-
- - Create and connect a Stripe account
- - Provide necessary tax information and banking details
- - Maintain compliance with Stripe's terms of service
- - Keep their payment information up to date
-
-
3. Platform Rules
-
All users must adhere to the following rules:
-
- - Provide accurate and truthful information
- - Respect intellectual property rights
- - Maintain professional conduct
- - Follow content guidelines
-
-
4. Course Content
-
Teachers are responsible for:
-
- - Creating and maintaining high-quality course content
- - Ensuring content accuracy and relevance
- - Responding to student inquiries in a timely manner
- - Updating course materials as needed
-
-
5. Refund Policy
-
Our refund policy includes:
-
- - 30-day money-back guarantee for course purchases
- - Pro-rated refunds for subscription-based courses
- - No refunds for completed individual sessions
- - Case-by-case evaluation for special circumstances
-
-
6. Privacy and Data Protection
-
We are committed to:
-
- - Protecting user data and privacy
- - Complying with relevant data protection regulations
- - Securing payment information
- - Maintaining transparent data practices
-
-
6.1 IP Address Collection and Usage
-
For certain features on our platform, we collect and store IP addresses. This includes:
-
- - Feature voting system, where IP addresses are used to prevent duplicate votes from anonymous users
- - Security monitoring to detect and prevent abuse or unauthorized access
- - Analytics to understand geographical distribution of our users in aggregated form only
-
-
6.2 IP Address Data Processing
-
When we process IP address data, we adhere to the following practices:
-
- - IP addresses are stored securely in our database with appropriate access controls
- - For feature voting, IP addresses are stored only when a user is not logged in
- - IP addresses for feature votes are never used for marketing purposes
- - We do not share IP addresses with third parties except when required by law
-
-
6.4 Your Rights Regarding IP Address Data
-
You have the following rights regarding the IP address data we collect:
-
- - Right to access: You can request information about what IP address data we store
- - Right to deletion: You can request deletion of your IP address data
- - Right to opt-out: You can choose not to participate in features that collect IP addresses by creating an account and logging in
- - To exercise these rights, please contact our support team with your request
-
-
7. Platform Changes
-
Alpha One Labs reserves the right to:
-
- - Modify these terms with notice to users
- - Update platform features and functionality
- - Adjust commission rates with advance notice
- - Change payment processing methods if necessary
-
-
-
Last Updated: July 6, 2026
-
For questions about these terms or privacy policy, please contact our support team.
+
+
+
+
+
+ Please read these terms carefully before using the Alpha One Labs platform.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
1. Commission Structure
+
+
+ Alpha One Labs operates on a revenue-sharing model where:
+
+
+ -
+
+
+
+ Teachers receive 90% of the course and session fees
+
+ -
+
+
+
+ Alpha One Labs retains a 10% commission to cover platform maintenance, payment processing, and support services
+
+ -
+
+
+
+ Payments are processed automatically through Stripe and distributed to teachers' connected accounts
+
+
+
+
+
+
+
+
+
+
+
2. Teacher Payments
+
+ To receive payments, teachers must:
+
+ -
+ 1
+ Create and connect a Stripe account
+
+ -
+ 2
+ Provide necessary tax information and banking details
+
+ -
+ 3
+ Maintain compliance with Stripe's terms of service
+
+ -
+ 4
+ Keep their payment information up to date
+
+
+
+
+
+
+
+
+
+
+
3. Platform Rules
+
+ All users must adhere to the following rules:
+
+
+
+ Provide accurate and truthful information
+
+
+
+ Respect intellectual property rights
+
+
+
+ Maintain professional conduct
+
+
+
+ Follow content guidelines
+
+
+
+
+
+
+
+
+
+
+
4. Course Content
+
+ Teachers are responsible for:
+
+ -
+
+ Creating and maintaining high-quality course content
+
+ -
+
+ Ensuring content accuracy and relevance
+
+ -
+
+ Responding to student inquiries in a timely manner
+
+ -
+
+ Updating course materials as needed
+
+
+
+
+
+
+
+
+
+
+
5. Refund Policy
+
+ Our refund policy includes:
+
+
+
+ 30-day money-back guarantee for course purchases
+
+
+
+ Pro-rated refunds for subscription-based courses
+
+
+
+ No refunds for completed individual sessions
+
+
+
+ Case-by-case evaluation for special circumstances
+
+
+
+
+
+
+
+
+
+
+
6. Privacy and Data Protection
+
+ We are committed to:
+
+ -
+
+ Protecting user data and privacy
+
+ -
+
+ Complying with relevant data protection regulations
+
+ -
+
+ Securing payment information
+
+ -
+
+ Maintaining transparent data practices
+
+
+
+
+
+
6.1 IP Address Collection and Usage
+
For certain features on our platform, we collect and store IP addresses. This includes:
+
+ - Feature voting system, where IP addresses are used to prevent duplicate votes from anonymous users
+ - Security monitoring to detect and prevent abuse or unauthorized access
+ - Analytics to understand geographical distribution of our users (in aggregated form only)
+
+
+
+
+
+
6.2 IP Address Data Processing
+
When we process IP address data, we adhere to the following practices:
+
+ - IP addresses are stored securely in our database with appropriate access controls
+ - For feature voting, IP addresses are stored only when a user is not logged in
+ - IP addresses for feature votes are never used for marketing purposes
+ - We do not share IP addresses with third parties except when required by law
+
+
+
+
+
+
6.3 Your Rights Regarding IP Address Data
+
You have the following rights regarding the IP address data we collect:
+
+
+
+
+
Right to access
+
You can request information about what IP address data we store
+
+
+
+
+
+
Right to deletion
+
You can request deletion of your IP address data
+
+
+
+
+
+
Right to opt-out
+
You can choose not to participate in features that collect IP addresses by creating an account and logging in
+
+
+
+
To exercise these rights, please contact our support team with your request.
+
+
+
+
+
+
+
+
+
+
7. Platform Changes
+
+ Alpha One Labs reserves the right to:
+
+ -
+
+ Modify these terms with notice to users
+
+ -
+
+ Update platform features and functionality
+
+ -
+
+ Adjust commission rates with advance notice
+
+ -
+
+ Change payment processing methods if necessary
+
+
+
+
+
+
+
+
Questions About These Terms?
+
+ For questions about these terms or privacy policy, please contact our support team.
+
+
+ Contact Support
+
+
+
+
+
-
-{% endblock %}
+{% endblock %}
\ No newline at end of file
diff --git a/src/worker.py b/src/worker.py
index 1b58009..6f7a9cc 100644
--- a/src/worker.py
+++ b/src/worker.py
@@ -33,6 +33,7 @@
"""
import base64
+import html as _html
import datetime
import hashlib
import hmac as _hmac
@@ -6298,11 +6299,75 @@ async def _dispatch(request, env):
if path == "/api/notification-preferences" and method == "PATCH":
return await api_patch_notification_preferences(request, env)
+ # Feedback
+ if path == "/api/feedback" and method == "POST":
+ return await api_submit_feedback(request, env)
+
return err("API endpoint not found", 404)
return await serve_static(path, env, request)
+# Feedback API
+
+async def api_submit_feedback(request, env):
+ try:
+ body = json.loads(await request.text())
+ except (json.JSONDecodeError, ValueError):
+ return err("Invalid JSON", 400)
+
+ if not isinstance(body, dict):
+ return err("Invalid JSON", 400)
+
+ description = (body.get("description") or "").strip()
+ if not description:
+ return err("Feedback description is required", 400)
+ if len(description) > 5000:
+ return err("Feedback too long (max 5000 characters)", 400)
+
+ name = (body.get("name") or "Anonymous").strip() or "Anonymous"
+ email = (body.get("email") or "Not provided").strip() or "Not provided"
+
+ # Send via Mailgun to admin email
+ admin_email = (getattr(env, "ADMIN_EMAIL", "") or getattr(env, "EMAIL_FROM", "") or "").strip()
+ if admin_email:
+ subject = f"[Alpha One Labs] New Feedback from {name}"
+ safe_name = _html.escape(name)
+ safe_email = _html.escape(email)
+ safe_description = _html.escape(description)
+ html = f"""
+
New Feedback Received
+
+ | From | {safe_name} |
+ | Email | {safe_email} |
+ | Feedback |
+ {safe_description} |
+
+ """
+ await _send_email_via_mailgun(admin_email, subject, html, env)
+
+ # Post to Slack if webhook is configured
+ slack_url = (getattr(env, "SLACK_WEBHOOK_URL", "") or "").strip()
+ if slack_url:
+ message = f"*New Feedback*\nFrom: {name}\nEmail: {email}\n\n{description}"
+ try:
+ options = to_js(
+ {
+ "method": "POST",
+ "headers": {"Content-Type": "application/json"},
+ "body": json.dumps({"text": message}),
+ },
+ dict_converter=js.Object.fromEntries,
+ )
+ resp = await js.fetch(slack_url, options)
+ if not resp.ok:
+ print(f"[feedback] Slack webhook returned {resp.status}")
+ except Exception as e:
+ print(f"[feedback] Slack webhook delivery failed: {e}")
+
+ return ok({"message": "Thank you for your feedback! We appreciate your input."})
+
+
async def on_fetch(request, env):
try:
init_sentry(env)