cyclecad 3.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/BILLING-IMPLEMENTATION-SUMMARY.md +425 -0
  2. package/BILLING-INDEX.md +293 -0
  3. package/BILLING-INTEGRATION-GUIDE.md +414 -0
  4. package/COLLABORATION-INDEX.md +440 -0
  5. package/COLLABORATION-SYSTEM-SUMMARY.md +548 -0
  6. package/DOCKER-BUILD-MANIFEST.txt +483 -0
  7. package/DOCKER-FILES-REFERENCE.md +440 -0
  8. package/DOCKER-INFRASTRUCTURE.md +475 -0
  9. package/DOCKER-README.md +435 -0
  10. package/Dockerfile +33 -55
  11. package/PWA-FILES-CREATED.txt +350 -0
  12. package/QUICK-START-TESTING.md +126 -0
  13. package/STEP-IMPORT-QUICKSTART.md +347 -0
  14. package/STEP-IMPORT-SYSTEM-SUMMARY.md +502 -0
  15. package/app/css/mobile.css +1074 -0
  16. package/app/icons/generate-icons.js +203 -0
  17. package/app/js/billing-ui.js +990 -0
  18. package/app/js/brep-kernel.js +933 -981
  19. package/app/js/collab-client.js +750 -0
  20. package/app/js/mobile-nav.js +623 -0
  21. package/app/js/mobile-toolbar.js +476 -0
  22. package/app/js/modules/billing-module.js +724 -0
  23. package/app/js/modules/step-module-enhanced.js +938 -0
  24. package/app/js/offline-manager.js +705 -0
  25. package/app/js/responsive-init.js +360 -0
  26. package/app/js/touch-handler.js +429 -0
  27. package/app/manifest.json +211 -0
  28. package/app/offline.html +508 -0
  29. package/app/sw.js +571 -0
  30. package/app/tests/billing-tests.html +779 -0
  31. package/app/tests/brep-tests.html +980 -0
  32. package/app/tests/collab-tests.html +743 -0
  33. package/app/tests/mobile-tests.html +1299 -0
  34. package/app/tests/pwa-tests.html +1134 -0
  35. package/app/tests/step-tests.html +1042 -0
  36. package/app/tests/test-agent-v3.html +719 -0
  37. package/docker-compose.yml +225 -0
  38. package/docs/BILLING-HELP.json +260 -0
  39. package/docs/BILLING-README.md +639 -0
  40. package/docs/BILLING-TUTORIAL.md +736 -0
  41. package/docs/BREP-HELP.json +326 -0
  42. package/docs/BREP-TUTORIAL.md +802 -0
  43. package/docs/COLLABORATION-HELP.json +228 -0
  44. package/docs/COLLABORATION-TUTORIAL.md +818 -0
  45. package/docs/DOCKER-HELP.json +224 -0
  46. package/docs/DOCKER-TUTORIAL.md +974 -0
  47. package/docs/MOBILE-HELP.json +243 -0
  48. package/docs/MOBILE-RESPONSIVE-README.md +378 -0
  49. package/docs/MOBILE-TUTORIAL.md +747 -0
  50. package/docs/PWA-HELP.json +228 -0
  51. package/docs/PWA-README.md +662 -0
  52. package/docs/PWA-TUTORIAL.md +757 -0
  53. package/docs/STEP-HELP.json +481 -0
  54. package/docs/STEP-IMPORT-TUTORIAL.md +824 -0
  55. package/docs/TESTING-GUIDE.md +528 -0
  56. package/docs/TESTING-HELP.json +182 -0
  57. package/fusion-vs-cyclecad.html +1771 -0
  58. package/nginx.conf +237 -0
  59. package/package.json +1 -1
  60. package/server/Dockerfile.converter +51 -0
  61. package/server/Dockerfile.signaling +28 -0
  62. package/server/billing-server.js +487 -0
  63. package/server/converter-enhanced.py +528 -0
  64. package/server/requirements-converter.txt +29 -0
  65. package/server/signaling-server.js +801 -0
  66. package/tests/docker-tests.sh +389 -0
@@ -0,0 +1,225 @@
1
+ # cycleCAD Complete Docker Infrastructure
2
+ # Production-ready multi-service setup with health checks, resource limits, and logging
3
+ #
4
+ # Services:
5
+ # - cyclecad (8080) — Main web app (nginx)
6
+ # - converter (8787) — STEP→GLB server (FastAPI)
7
+ # - signaling (8788) — WebSocket signaling (Node.js)
8
+ # - explodeview (3000) — 3D viewer app (nginx, optional)
9
+ #
10
+ # Usage:
11
+ # docker-compose up -d # Start all services
12
+ # docker-compose down # Stop all services
13
+ # docker-compose logs -f # View all logs
14
+ # docker-compose logs -f converter # View specific service logs
15
+ # docker-compose ps # Status of all services
16
+ # docker-compose exec cyclecad sh # Shell into service
17
+
18
+ version: '3.8'
19
+
20
+ services:
21
+ # Main cycleCAD web application
22
+ cyclecad:
23
+ build:
24
+ context: .
25
+ dockerfile: Dockerfile
26
+ container_name: cyclecad-app
27
+ ports:
28
+ - "8080:80"
29
+ depends_on:
30
+ converter:
31
+ condition: service_healthy
32
+ signaling:
33
+ condition: service_healthy
34
+ environment:
35
+ # Pass converter and signaling URLs to the app
36
+ - CONVERTER_URL=http://converter:8787
37
+ - SIGNALING_URL=ws://signaling:8788
38
+ - APP_VERSION=0.8.6
39
+ healthcheck:
40
+ test: ["CMD", "curl", "-f", "http://localhost/health"]
41
+ interval: 30s
42
+ timeout: 5s
43
+ retries: 3
44
+ start_period: 10s
45
+ restart: unless-stopped
46
+ networks:
47
+ - cyclecad-network
48
+ logging:
49
+ driver: "json-file"
50
+ options:
51
+ max-size: "10m"
52
+ max-file: "3"
53
+ # Resource limits for web server
54
+ deploy:
55
+ resources:
56
+ limits:
57
+ cpus: '2'
58
+ memory: 512M
59
+ reservations:
60
+ cpus: '0.5'
61
+ memory: 256M
62
+
63
+ # STEP/IGES → GLB converter service
64
+ converter:
65
+ build:
66
+ context: .
67
+ dockerfile: server/Dockerfile.converter
68
+ container_name: cyclecad-converter
69
+ ports:
70
+ - "8787:8787"
71
+ environment:
72
+ - WORKERS=2
73
+ - MAX_FILE_SIZE=500
74
+ - TIMEOUT=300
75
+ - LOG_LEVEL=info
76
+ healthcheck:
77
+ test: ["CMD", "curl", "-f", "http://localhost:8787/health"]
78
+ interval: 30s
79
+ timeout: 10s
80
+ retries: 3
81
+ start_period: 15s
82
+ restart: unless-stopped
83
+ networks:
84
+ - cyclecad-network
85
+ logging:
86
+ driver: "json-file"
87
+ options:
88
+ max-size: "50m"
89
+ max-file: "3"
90
+ # High memory for STEP file processing
91
+ deploy:
92
+ resources:
93
+ limits:
94
+ cpus: '4'
95
+ memory: 4G
96
+ reservations:
97
+ cpus: '2'
98
+ memory: 2G
99
+ # Increase timeouts for large file processing
100
+ # Use `ulimit` to allow large file handling
101
+ ulimits:
102
+ nofile:
103
+ soft: 65536
104
+ hard: 65536
105
+
106
+ # WebSocket signaling server for real-time collaboration
107
+ signaling:
108
+ build:
109
+ context: .
110
+ dockerfile: server/Dockerfile.signaling
111
+ container_name: cyclecad-signaling
112
+ ports:
113
+ - "8788:8788"
114
+ environment:
115
+ - NODE_ENV=production
116
+ - PORT=8788
117
+ - LOG_LEVEL=info
118
+ - MAX_CONNECTIONS=1000
119
+ healthcheck:
120
+ test: ["CMD", "curl", "-f", "http://localhost:8788/health"]
121
+ interval: 30s
122
+ timeout: 5s
123
+ retries: 3
124
+ start_period: 5s
125
+ restart: unless-stopped
126
+ networks:
127
+ - cyclecad-network
128
+ logging:
129
+ driver: "json-file"
130
+ options:
131
+ max-size: "20m"
132
+ max-file: "3"
133
+ # Moderate resources for signaling
134
+ deploy:
135
+ resources:
136
+ limits:
137
+ cpus: '1'
138
+ memory: 512M
139
+ reservations:
140
+ cpus: '0.25'
141
+ memory: 256M
142
+
143
+ # Optional: ExplodeView 3D viewer alongside cycleCAD
144
+ explodeview:
145
+ image: nginx:alpine
146
+ container_name: explodeview-viewer
147
+ ports:
148
+ - "3000:80"
149
+ volumes:
150
+ # Mount ExplodeView from local directory (adjust path as needed)
151
+ - ../explodeview/docs:/usr/share/nginx/html:ro
152
+ environment:
153
+ - TZ=UTC
154
+ healthcheck:
155
+ test: ["CMD", "wget", "-q", "--spider", "http://localhost/"]
156
+ interval: 30s
157
+ timeout: 5s
158
+ retries: 3
159
+ start_period: 5s
160
+ restart: unless-stopped
161
+ networks:
162
+ - cyclecad-network
163
+ logging:
164
+ driver: "json-file"
165
+ options:
166
+ max-size: "10m"
167
+ max-file: "3"
168
+ deploy:
169
+ resources:
170
+ limits:
171
+ cpus: '1'
172
+ memory: 256M
173
+ reservations:
174
+ cpus: '0.25'
175
+ memory: 128M
176
+ profiles:
177
+ - with-explodeview
178
+
179
+ # Named network for service communication
180
+ networks:
181
+ cyclecad-network:
182
+ driver: bridge
183
+ ipam:
184
+ config:
185
+ - subnet: 172.28.0.0/16
186
+
187
+ # Usage examples:
188
+ #
189
+ # 1. Start all services (without ExplodeView):
190
+ # docker-compose up -d
191
+ #
192
+ # 2. Start with ExplodeView:
193
+ # docker-compose --profile with-explodeview up -d
194
+ #
195
+ # 3. View real-time logs:
196
+ # docker-compose logs -f
197
+ #
198
+ # 4. Check service status:
199
+ # docker-compose ps
200
+ #
201
+ # 5. Execute command in service:
202
+ # docker-compose exec cyclecad curl http://localhost/health
203
+ #
204
+ # 6. Stop all services:
205
+ # docker-compose down
206
+ #
207
+ # 7. Stop and remove all volumes:
208
+ # docker-compose down -v
209
+ #
210
+ # 8. View health status:
211
+ # docker-compose ps # Shows (healthy) or (unhealthy)
212
+ #
213
+ # 9. Restart a specific service:
214
+ # docker-compose restart converter
215
+ #
216
+ # 10. View logs for specific service:
217
+ # docker-compose logs -f converter --tail 100
218
+ #
219
+ # Environment variables for customization:
220
+ # CONVERTER_URL — URL of converter service (default: http://converter:8787)
221
+ # SIGNALING_URL — URL of signaling service (default: ws://signaling:8788)
222
+ # LOG_LEVEL — Logging level: debug, info, warn, error (default: info)
223
+ # WORKERS — Number of converter workers (default: 2)
224
+ # MAX_FILE_SIZE — Max file size in MB (default: 500)
225
+ # TIMEOUT — Request timeout in seconds (default: 300)
@@ -0,0 +1,260 @@
1
+ {
2
+ "billing_help_entries": [
3
+ {
4
+ "id": "billing_pricing_overview",
5
+ "title": "Pricing Overview",
6
+ "category": "Billing",
7
+ "keywords": ["pricing", "tiers", "plans", "cost"],
8
+ "content": "cycleCAD offers three pricing tiers: Free (€0), Pro (€49/month), and Enterprise (€299/month). Free includes basic features and 3 projects. Pro adds unlimited projects, 50GB storage, and CAM operations. Enterprise adds unlimited everything, custom branding, SSO, and self-hosting.",
9
+ "learnMore": "docs/BILLING-TUTORIAL.md#pricing-overview"
10
+ },
11
+ {
12
+ "id": "billing_free_tier",
13
+ "title": "Free Tier",
14
+ "category": "Billing",
15
+ "keywords": ["free", "limits", "projects", "storage"],
16
+ "content": "Free tier is perfect for getting started. You get 3 projects, 100 parts per project, 1 GB storage, and 20 AI requests per day. When you hit a limit, an upgrade prompt appears.",
17
+ "learnMore": "docs/BILLING-TUTORIAL.md#free-tier"
18
+ },
19
+ {
20
+ "id": "billing_pro_upgrade",
21
+ "title": "Upgrading to Pro",
22
+ "category": "Billing",
23
+ "keywords": ["upgrade", "pro", "subscription", "payment"],
24
+ "content": "Click the Upgrade button, select Pro (€49/month or €468/year), and start your 14-day free trial. No credit card charged during trial. After 14 days, first charge of €49 is processed.",
25
+ "learnMore": "docs/BILLING-TUTORIAL.md#upgrading-to-pro"
26
+ },
27
+ {
28
+ "id": "billing_enterprise_upgrade",
29
+ "title": "Upgrading to Enterprise",
30
+ "category": "Billing",
31
+ "keywords": ["enterprise", "team", "upgrade", "sso"],
32
+ "content": "Enterprise tier (€299/month) includes unlimited collaborators, 500GB storage, custom branding, SSO, self-hosting, and 99.9% SLA. Perfect for teams and organizations. Contact sales for volume discounts.",
33
+ "learnMore": "docs/BILLING-TUTORIAL.md#upgrading-to-enterprise"
34
+ },
35
+ {
36
+ "id": "billing_trial_period",
37
+ "title": "Free Trial",
38
+ "category": "Billing",
39
+ "keywords": ["trial", "free", "14 days", "no credit card"],
40
+ "content": "New customers get a 14-day free trial of Pro features with no credit card required. Cancel anytime before day 15 with zero charges. If you don't cancel, first payment charged on day 15.",
41
+ "learnMore": "docs/BILLING-TUTORIAL.md#trial-period"
42
+ },
43
+ {
44
+ "id": "billing_managing_subscription",
45
+ "title": "Managing Your Subscription",
46
+ "category": "Billing",
47
+ "keywords": ["subscription", "manage", "cancel", "change"],
48
+ "content": "Access your subscription settings from Settings > Billing & Subscription. Here you can view usage, change billing cycle (monthly/yearly), download invoices, and manage your payment method.",
49
+ "learnMore": "docs/BILLING-TUTORIAL.md#managing-your-subscription"
50
+ },
51
+ {
52
+ "id": "billing_cancel_subscription",
53
+ "title": "Canceling Your Subscription",
54
+ "category": "Billing",
55
+ "keywords": ["cancel", "downgrade", "stop", "unsubscribe"],
56
+ "content": "To cancel, go to Settings > Billing & Subscription and click 'Cancel Subscription'. Your access continues until the end of your current billing period. You can resubscribe anytime without penalty.",
57
+ "learnMore": "docs/BILLING-TUTORIAL.md#managing-your-subscription"
58
+ },
59
+ {
60
+ "id": "billing_usage_limits",
61
+ "title": "Usage Limits",
62
+ "category": "Billing",
63
+ "keywords": ["limits", "usage", "quota", "storage"],
64
+ "content": "Each tier has different limits. Free: 3 projects, 100 parts, 1GB storage. Pro: unlimited projects/parts, 50GB storage. Enterprise: unlimited everything. View your usage anytime in Settings > Billing.",
65
+ "learnMore": "docs/BILLING-TUTORIAL.md#usage-limits"
66
+ },
67
+ {
68
+ "id": "billing_storage_limit",
69
+ "title": "Storage Limit Reached",
70
+ "category": "Billing",
71
+ "keywords": ["storage", "limit", "full", "space"],
72
+ "content": "When you reach your storage limit, you can't upload new files. Either delete existing files, or upgrade to a higher tier with more storage. Pro has 50GB, Enterprise has 500GB.",
73
+ "learnMore": "docs/BILLING-TUTORIAL.md#usage-limits"
74
+ },
75
+ {
76
+ "id": "billing_ai_requests_limit",
77
+ "title": "AI Requests Limit",
78
+ "category": "Billing",
79
+ "keywords": ["ai", "requests", "limit", "daily"],
80
+ "content": "Free tier: 20 AI requests per day. Pro: 500 per day. Enterprise: unlimited. Daily counter resets at midnight UTC. After reaching daily limit, requests are queued until tomorrow or upgrade to continue immediately.",
81
+ "learnMore": "docs/BILLING-TUTORIAL.md#usage-limits"
82
+ },
83
+ {
84
+ "id": "billing_step_import_limit",
85
+ "title": "STEP Import Size Limit",
86
+ "category": "Billing",
87
+ "keywords": ["step", "import", "file", "size", "limit"],
88
+ "content": "Free tier: max 30MB. Pro: max 500MB. Enterprise: unlimited. If file exceeds limit, import is rejected with message showing file size and upgrade suggestion.",
89
+ "learnMore": "docs/BILLING-TUTORIAL.md#usage-limits"
90
+ },
91
+ {
92
+ "id": "billing_payment_methods",
93
+ "title": "Payment Methods",
94
+ "category": "Billing",
95
+ "keywords": ["payment", "card", "credit", "method"],
96
+ "content": "We accept Visa, Mastercard, Amex, Discover, Apple Pay, Google Pay, and bank transfers. Add or update your payment method in Settings > Billing or via Stripe Customer Portal.",
97
+ "learnMore": "docs/BILLING-TUTORIAL.md#payment-methods"
98
+ },
99
+ {
100
+ "id": "billing_failed_payment",
101
+ "title": "Payment Failed",
102
+ "category": "Billing",
103
+ "keywords": ["failed", "payment", "error", "declined"],
104
+ "content": "If payment fails, you get a 7-day grace period to update your payment method. Reminder emails sent on days 1, 3, 5, 7. After 7 days, subscription is canceled if not resolved. Update payment in Settings > Billing.",
105
+ "learnMore": "docs/BILLING-TUTORIAL.md#payment-methods"
106
+ },
107
+ {
108
+ "id": "billing_invoices",
109
+ "title": "Invoices & Receipts",
110
+ "category": "Billing",
111
+ "keywords": ["invoice", "receipt", "download", "pdf"],
112
+ "content": "Download invoices from Settings > Billing > Recent Invoices, or via Stripe Customer Portal. Invoices are standard business format with itemized charges, dates, and payment info. Suitable for expense reports.",
113
+ "learnMore": "docs/BILLING-TUTORIAL.md#billing--invoices"
114
+ },
115
+ {
116
+ "id": "billing_tax",
117
+ "title": "Tax & VAT",
118
+ "category": "Billing",
119
+ "keywords": ["tax", "vat", "eu", "sales tax"],
120
+ "content": "Tax is applied based on your location. EU customers pay VAT. US customers in certain states pay sales tax. Tax is calculated and shown at checkout before final price.",
121
+ "learnMore": "docs/BILLING-TUTORIAL.md#billing--invoices"
122
+ },
123
+ {
124
+ "id": "billing_promo_codes",
125
+ "title": "Promo Codes & Discounts",
126
+ "category": "Billing",
127
+ "keywords": ["promo", "code", "discount", "coupon"],
128
+ "content": "Apply promo codes at checkout. Common codes: STUDENT20 (students), NONPROFIT30 (nonprofits), ANNUAL20 (yearly, auto-applied). Check email or Discord for exclusive codes.",
129
+ "learnMore": "docs/BILLING-TUTORIAL.md#promo-codes--discounts"
130
+ },
131
+ {
132
+ "id": "billing_annual_discount",
133
+ "title": "Annual Billing Discount",
134
+ "category": "Billing",
135
+ "keywords": ["yearly", "annual", "discount", "save"],
136
+ "content": "Choose yearly billing at checkout for 20% discount. Pro: €468/year (€39/month vs €49). Enterprise: €2,868/year (€239/month vs €299). Discount auto-applied, no code needed.",
137
+ "learnMore": "docs/BILLING-TUTORIAL.md#promo-codes--discounts"
138
+ },
139
+ {
140
+ "id": "billing_change_billing_cycle",
141
+ "title": "Change Billing Cycle",
142
+ "category": "Billing",
143
+ "keywords": ["monthly", "yearly", "cycle", "billing", "change"],
144
+ "content": "Change between monthly and yearly billing anytime via Stripe Customer Portal (Settings > Billing > Manage Subscription). Changes take effect on next billing date, no mid-cycle adjustments.",
145
+ "learnMore": "docs/BILLING-TUTORIAL.md#managing-your-subscription"
146
+ },
147
+ {
148
+ "id": "billing_export_usage",
149
+ "title": "Export Usage Report",
150
+ "category": "Billing",
151
+ "keywords": ["export", "usage", "report", "csv"],
152
+ "content": "Export your usage data as CSV from Settings > Billing > Export Usage Report. Includes all metrics, current usage, limits, and subscription status. Great for tracking or team reports.",
153
+ "learnMore": "docs/BILLING-TUTORIAL.md#managing-your-subscription"
154
+ },
155
+ {
156
+ "id": "billing_collaborators",
157
+ "title": "Collaborators & Team Access",
158
+ "category": "Billing",
159
+ "keywords": ["collaborators", "team", "invite", "access"],
160
+ "content": "Free: no collaborators. Pro: up to 10 collaborators. Enterprise: unlimited. Invite team members from Project > Collaborators. Each person needs their own account.",
161
+ "learnMore": "docs/BILLING-TUTORIAL.md#upgrading-to-pro"
162
+ },
163
+ {
164
+ "id": "billing_self_hosting",
165
+ "title": "Self-Hosting",
166
+ "category": "Billing",
167
+ "keywords": ["self-hosted", "enterprise", "docker", "private"],
168
+ "content": "Enterprise tier includes self-hosting option. Run cycleCAD on your own servers with Docker. Full data privacy, custom domain, and control. Contact sales@cyclecad.com for setup.",
169
+ "learnMore": "docs/BILLING-TUTORIAL.md#self-hosting-enterprise"
170
+ },
171
+ {
172
+ "id": "billing_sso",
173
+ "title": "Single Sign-On (SSO)",
174
+ "category": "Billing",
175
+ "keywords": ["sso", "enterprise", "auth", "identity"],
176
+ "content": "Enterprise tier includes SSO. Connect your company's identity provider (Microsoft, Google, Okta) so employees sign in with company credentials. Set up via Settings > Security > SSO.",
177
+ "learnMore": "docs/BILLING-TUTORIAL.md#enterprise-features"
178
+ },
179
+ {
180
+ "id": "billing_custom_branding",
181
+ "title": "Custom Branding",
182
+ "category": "Billing",
183
+ "keywords": ["branding", "logo", "domain", "white-label"],
184
+ "content": "Enterprise tier includes custom branding. Add your company logo, use custom domain (e.g., cad.yourcompany.com), and white-label deployment. Configure in Settings > Branding.",
185
+ "learnMore": "docs/BILLING-TUTORIAL.md#enterprise-features"
186
+ },
187
+ {
188
+ "id": "billing_sla",
189
+ "title": "Service Level Agreement (SLA)",
190
+ "category": "Billing",
191
+ "keywords": ["sla", "uptime", "support", "enterprise"],
192
+ "content": "Pro tier offers best-effort support. Enterprise tier includes 99.9% SLA with dedicated technical support, 4-hour response time, and quarterly check-ins.",
193
+ "learnMore": "docs/BILLING-TUTORIAL.md#enterprise-features"
194
+ },
195
+ {
196
+ "id": "billing_refund_policy",
197
+ "title": "Refund Policy",
198
+ "category": "Billing",
199
+ "keywords": ["refund", "money back", "policy"],
200
+ "content": "Pro tier includes 14-day free trial. After subscribing, subscriptions are non-refundable. You can cancel anytime to avoid future charges, but previous charges are not refunded.",
201
+ "learnMore": "docs/BILLING-TUTORIAL.md#faq"
202
+ },
203
+ {
204
+ "id": "billing_contact_support",
205
+ "title": "Contact Billing Support",
206
+ "category": "Billing",
207
+ "keywords": ["support", "contact", "help", "email"],
208
+ "content": "For billing questions: Free/Pro: support@cyclecad.com (24-48h response). Enterprise: dedicated support email (4h response). Also available on Discord at join.discord.gg/cyclecad.",
209
+ "learnMore": "docs/BILLING-TUTORIAL.md#contact-us"
210
+ },
211
+ {
212
+ "id": "billing_account_security",
213
+ "title": "Account Security",
214
+ "category": "Billing",
215
+ "keywords": ["security", "password", "2fa", "account"],
216
+ "content": "Keep your account secure. Use strong password, enable 2-factor authentication (Settings > Security), and never share billing info. Report suspicious activity to support immediately.",
217
+ "learnMore": "docs/BILLING-TUTORIAL.md#faq"
218
+ },
219
+ {
220
+ "id": "billing_student_discount",
221
+ "title": "Student Discount",
222
+ "category": "Billing",
223
+ "keywords": ["student", "discount", "education", "university"],
224
+ "content": "Students get 20% off Pro with valid .edu email. Use promo code STUDENT20 at checkout. Verify education status and code will be applied automatically.",
225
+ "learnMore": "docs/BILLING-TUTORIAL.md#promo-codes--discounts"
226
+ },
227
+ {
228
+ "id": "billing_nonprofit_discount",
229
+ "title": "Nonprofit Discount",
230
+ "category": "Billing",
231
+ "keywords": ["nonprofit", "discount", "ngo", "charity"],
232
+ "content": "Registered nonprofits get 30% off Pro. Use promo code NONPROFIT30 at checkout. Provide proof of 501(c)(3) status or equivalent.",
233
+ "learnMore": "docs/BILLING-TUTORIAL.md#promo-codes--discounts"
234
+ },
235
+ {
236
+ "id": "billing_referral_program",
237
+ "title": "Referral Program",
238
+ "category": "Billing",
239
+ "keywords": ["referral", "refer", "earn", "reward"],
240
+ "content": "Refer a friend and earn 25% credit. Share your referral link, when they subscribe, you both get €12 credit. Use code REFERRAL25 to share.",
241
+ "learnMore": "docs/BILLING-TUTORIAL.md#promo-codes--discounts"
242
+ },
243
+ {
244
+ "id": "billing_billing_email",
245
+ "title": "Change Billing Email",
246
+ "category": "Billing",
247
+ "keywords": ["email", "billing", "change", "update"],
248
+ "content": "Update billing email in Stripe Customer Portal (Settings > Billing > Manage Subscription > Update billing info). Future invoices sent to new address. Old invoices still available in portal.",
249
+ "learnMore": "docs/BILLING-TUTORIAL.md#billing--invoices"
250
+ },
251
+ {
252
+ "id": "billing_data_privacy",
253
+ "title": "Data Privacy & GDPR",
254
+ "category": "Billing",
255
+ "keywords": ["privacy", "gdpr", "data", "compliance"],
256
+ "content": "Your data is secure with us. We comply with GDPR and other privacy laws. For data requests or privacy concerns, contact privacy@cyclecad.com.",
257
+ "learnMore": "docs/BILLING-TUTORIAL.md#self-hosting-enterprise"
258
+ }
259
+ ]
260
+ }