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.
- package/BILLING-IMPLEMENTATION-SUMMARY.md +425 -0
- package/BILLING-INDEX.md +293 -0
- package/BILLING-INTEGRATION-GUIDE.md +414 -0
- package/COLLABORATION-INDEX.md +440 -0
- package/COLLABORATION-SYSTEM-SUMMARY.md +548 -0
- package/DOCKER-BUILD-MANIFEST.txt +483 -0
- package/DOCKER-FILES-REFERENCE.md +440 -0
- package/DOCKER-INFRASTRUCTURE.md +475 -0
- package/DOCKER-README.md +435 -0
- package/Dockerfile +33 -55
- package/PWA-FILES-CREATED.txt +350 -0
- package/QUICK-START-TESTING.md +126 -0
- package/STEP-IMPORT-QUICKSTART.md +347 -0
- package/STEP-IMPORT-SYSTEM-SUMMARY.md +502 -0
- package/app/css/mobile.css +1074 -0
- package/app/icons/generate-icons.js +203 -0
- package/app/js/billing-ui.js +990 -0
- package/app/js/brep-kernel.js +933 -981
- package/app/js/collab-client.js +750 -0
- package/app/js/mobile-nav.js +623 -0
- package/app/js/mobile-toolbar.js +476 -0
- package/app/js/modules/billing-module.js +724 -0
- package/app/js/modules/step-module-enhanced.js +938 -0
- package/app/js/offline-manager.js +705 -0
- package/app/js/responsive-init.js +360 -0
- package/app/js/touch-handler.js +429 -0
- package/app/manifest.json +211 -0
- package/app/offline.html +508 -0
- package/app/sw.js +571 -0
- package/app/tests/billing-tests.html +779 -0
- package/app/tests/brep-tests.html +980 -0
- package/app/tests/collab-tests.html +743 -0
- package/app/tests/mobile-tests.html +1299 -0
- package/app/tests/pwa-tests.html +1134 -0
- package/app/tests/step-tests.html +1042 -0
- package/app/tests/test-agent-v3.html +719 -0
- package/docker-compose.yml +225 -0
- package/docs/BILLING-HELP.json +260 -0
- package/docs/BILLING-README.md +639 -0
- package/docs/BILLING-TUTORIAL.md +736 -0
- package/docs/BREP-HELP.json +326 -0
- package/docs/BREP-TUTORIAL.md +802 -0
- package/docs/COLLABORATION-HELP.json +228 -0
- package/docs/COLLABORATION-TUTORIAL.md +818 -0
- package/docs/DOCKER-HELP.json +224 -0
- package/docs/DOCKER-TUTORIAL.md +974 -0
- package/docs/MOBILE-HELP.json +243 -0
- package/docs/MOBILE-RESPONSIVE-README.md +378 -0
- package/docs/MOBILE-TUTORIAL.md +747 -0
- package/docs/PWA-HELP.json +228 -0
- package/docs/PWA-README.md +662 -0
- package/docs/PWA-TUTORIAL.md +757 -0
- package/docs/STEP-HELP.json +481 -0
- package/docs/STEP-IMPORT-TUTORIAL.md +824 -0
- package/docs/TESTING-GUIDE.md +528 -0
- package/docs/TESTING-HELP.json +182 -0
- package/fusion-vs-cyclecad.html +1771 -0
- package/nginx.conf +237 -0
- package/package.json +1 -1
- package/server/Dockerfile.converter +51 -0
- package/server/Dockerfile.signaling +28 -0
- package/server/billing-server.js +487 -0
- package/server/converter-enhanced.py +528 -0
- package/server/requirements-converter.txt +29 -0
- package/server/signaling-server.js +801 -0
- 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
|
+
}
|