@pinkpixel/sugarstitch 1.0.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 (38) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/LICENSE +21 -0
  3. package/OVERVIEW.md +306 -0
  4. package/README.md +462 -0
  5. package/assets/banner_dark.png +0 -0
  6. package/assets/banner_light.png +0 -0
  7. package/assets/logo.png +0 -0
  8. package/assets/screenshot_cli.png +0 -0
  9. package/assets/screenshot_completed.png +0 -0
  10. package/assets/screenshot_homepage.png +0 -0
  11. package/assets/screenshot_scraping.png +0 -0
  12. package/dist/index.js +216 -0
  13. package/dist/scraper.js +719 -0
  14. package/dist/server.js +1272 -0
  15. package/package.json +26 -0
  16. package/public/favicon.png +0 -0
  17. package/scripts/add-shebang.js +11 -0
  18. package/src/index.ts +217 -0
  19. package/src/scraper.ts +903 -0
  20. package/src/server.ts +1319 -0
  21. package/tsconfig.json +12 -0
  22. package/website/astro.config.mjs +5 -0
  23. package/website/package-lock.json +6358 -0
  24. package/website/package.json +18 -0
  25. package/website/public/banner_dark.png +0 -0
  26. package/website/public/banner_light.png +0 -0
  27. package/website/public/favicon.png +0 -0
  28. package/website/public/screenshot_cli.png +0 -0
  29. package/website/public/screenshot_completed.png +0 -0
  30. package/website/public/screenshot_homepage.png +0 -0
  31. package/website/public/screenshot_scraping.png +0 -0
  32. package/website/src/layouts/DocsLayout.astro +142 -0
  33. package/website/src/pages/docs/install.astro +96 -0
  34. package/website/src/pages/docs/use-the-app.astro +131 -0
  35. package/website/src/pages/index.astro +94 -0
  36. package/website/src/styles/site.css +611 -0
  37. package/website/tsconfig.json +3 -0
  38. package/website/wrangler.toml +6 -0
@@ -0,0 +1,611 @@
1
+ :root {
2
+ color-scheme: light;
3
+ --bg: #fbf3ea;
4
+ --bg-accent: rgba(255, 195, 143, 0.34);
5
+ --bg-accent-2: rgba(246, 153, 122, 0.18);
6
+ --panel: rgba(255, 251, 247, 0.84);
7
+ --panel-strong: #fffdf9;
8
+ --panel-soft: rgba(255, 244, 236, 0.82);
9
+ --text: #3a241f;
10
+ --text-soft: #7e625b;
11
+ --heading: #4c2f29;
12
+ --line: rgba(98, 58, 48, 0.12);
13
+ --line-strong: rgba(98, 58, 48, 0.18);
14
+ --accent: #f37a4d;
15
+ --accent-strong: #e15f33;
16
+ --accent-mist: rgba(243, 122, 77, 0.16);
17
+ --accent-gold: #f4c485;
18
+ --mint: #d9f0d3;
19
+ --mint-text: #5e7c4f;
20
+ --shadow: 0 22px 60px rgba(119, 78, 57, 0.13);
21
+ --shadow-soft: 0 16px 40px rgba(119, 78, 57, 0.1);
22
+ --radius-xl: 30px;
23
+ --radius-lg: 24px;
24
+ --radius-md: 18px;
25
+ --radius-sm: 14px;
26
+ --content-width: 1200px;
27
+ --body-font: "Avenir Next", "Segoe UI", sans-serif;
28
+ --heading-font: "Palatino", "Book Antiqua", "Georgia", serif;
29
+ --mono-font: "IBM Plex Mono", "SFMono-Regular", "Consolas", monospace;
30
+ }
31
+
32
+ :root[data-theme="dark"] {
33
+ color-scheme: dark;
34
+ --bg: #181214;
35
+ --bg-accent: rgba(255, 164, 124, 0.12);
36
+ --bg-accent-2: rgba(118, 195, 255, 0.09);
37
+ --panel: rgba(38, 29, 34, 0.82);
38
+ --panel-strong: #251d22;
39
+ --panel-soft: rgba(53, 40, 47, 0.8);
40
+ --text: #f6e8df;
41
+ --text-soft: #d2b7ab;
42
+ --heading: #fff4ee;
43
+ --line: rgba(255, 223, 210, 0.11);
44
+ --line-strong: rgba(255, 223, 210, 0.18);
45
+ --accent: #ff9b72;
46
+ --accent-strong: #ff7844;
47
+ --accent-mist: rgba(255, 155, 114, 0.14);
48
+ --accent-gold: #f4c485;
49
+ --mint: rgba(148, 204, 151, 0.16);
50
+ --mint-text: #d9f0d3;
51
+ --shadow: 0 28px 80px rgba(0, 0, 0, 0.36);
52
+ --shadow-soft: 0 20px 48px rgba(0, 0, 0, 0.3);
53
+ }
54
+
55
+ * {
56
+ box-sizing: border-box;
57
+ }
58
+
59
+ html {
60
+ scroll-behavior: smooth;
61
+ }
62
+
63
+ body {
64
+ margin: 0;
65
+ min-height: 100vh;
66
+ font-family: var(--body-font);
67
+ color: var(--text);
68
+ background:
69
+ radial-gradient(circle at top left, var(--bg-accent), transparent 28%),
70
+ radial-gradient(circle at top right, var(--bg-accent-2), transparent 24%),
71
+ linear-gradient(180deg, var(--bg) 0%, color-mix(in srgb, var(--bg) 84%, white 16%) 48%, var(--bg) 100%);
72
+ line-height: 1.65;
73
+ }
74
+
75
+ a {
76
+ color: inherit;
77
+ text-decoration: none;
78
+ }
79
+
80
+ img {
81
+ max-width: 100%;
82
+ display: block;
83
+ }
84
+
85
+ code,
86
+ pre {
87
+ font-family: var(--mono-font);
88
+ }
89
+
90
+ .page-shell {
91
+ width: min(var(--content-width), calc(100% - 32px));
92
+ margin: 24px auto 40px;
93
+ }
94
+
95
+ .topbar {
96
+ display: flex;
97
+ justify-content: space-between;
98
+ align-items: center;
99
+ gap: 16px;
100
+ margin-bottom: 18px;
101
+ }
102
+
103
+ .brand-link {
104
+ display: inline-flex;
105
+ align-items: center;
106
+ gap: 12px;
107
+ font-weight: 700;
108
+ color: var(--heading);
109
+ }
110
+
111
+ .brand-link img {
112
+ width: 42px;
113
+ height: 42px;
114
+ border-radius: 14px;
115
+ box-shadow: var(--shadow-soft);
116
+ }
117
+
118
+ .brand-link span {
119
+ font-size: 1rem;
120
+ letter-spacing: 0.02em;
121
+ }
122
+
123
+ .topbar-actions {
124
+ display: flex;
125
+ align-items: center;
126
+ gap: 12px;
127
+ }
128
+
129
+ .theme-toggle,
130
+ .pill-link {
131
+ display: inline-flex;
132
+ align-items: center;
133
+ justify-content: center;
134
+ gap: 10px;
135
+ min-height: 44px;
136
+ padding: 0 16px;
137
+ border-radius: 999px;
138
+ border: 1px solid var(--line);
139
+ background: var(--panel);
140
+ box-shadow: var(--shadow-soft);
141
+ color: var(--text);
142
+ backdrop-filter: blur(10px);
143
+ }
144
+
145
+ .theme-toggle {
146
+ cursor: pointer;
147
+ }
148
+
149
+ .theme-toggle:hover,
150
+ .pill-link:hover,
151
+ .nav-link:hover,
152
+ .cta:hover,
153
+ .card:hover {
154
+ transform: translateY(-1px);
155
+ }
156
+
157
+ .theme-toggle,
158
+ .pill-link,
159
+ .nav-link,
160
+ .cta,
161
+ .card,
162
+ .screenshot-card,
163
+ .feature-card,
164
+ .toc,
165
+ .sidebar,
166
+ .hero-banner,
167
+ .hero-panel,
168
+ .content-panel {
169
+ transition:
170
+ transform 160ms ease,
171
+ border-color 160ms ease,
172
+ background 160ms ease,
173
+ box-shadow 160ms ease;
174
+ }
175
+
176
+ .main-grid {
177
+ display: grid;
178
+ grid-template-columns: 280px minmax(0, 1fr);
179
+ gap: 20px;
180
+ align-items: start;
181
+ }
182
+
183
+ .sidebar,
184
+ .content-panel,
185
+ .hero-panel,
186
+ .toc,
187
+ .feature-card,
188
+ .screenshot-card,
189
+ .card {
190
+ border: 1px solid var(--line);
191
+ background: var(--panel);
192
+ box-shadow: var(--shadow);
193
+ backdrop-filter: blur(12px);
194
+ }
195
+
196
+ .sidebar {
197
+ position: sticky;
198
+ top: 16px;
199
+ border-radius: var(--radius-xl);
200
+ padding: 22px;
201
+ }
202
+
203
+ .sidebar .eyebrow,
204
+ .hero-eyebrow,
205
+ .section-label {
206
+ display: inline-flex;
207
+ align-items: center;
208
+ gap: 8px;
209
+ min-height: 32px;
210
+ padding: 0 12px;
211
+ border-radius: 999px;
212
+ border: 1px solid var(--line);
213
+ background: color-mix(in srgb, var(--panel-soft) 72%, white 28%);
214
+ color: var(--text-soft);
215
+ font-size: 0.78rem;
216
+ letter-spacing: 0.08em;
217
+ text-transform: uppercase;
218
+ }
219
+
220
+ .sidebar nav {
221
+ display: grid;
222
+ gap: 10px;
223
+ margin-top: 18px;
224
+ }
225
+
226
+ .nav-group-title {
227
+ margin: 18px 0 8px;
228
+ color: var(--heading);
229
+ font-size: 0.96rem;
230
+ font-weight: 700;
231
+ }
232
+
233
+ .nav-link {
234
+ display: block;
235
+ padding: 12px 14px;
236
+ border-radius: 16px;
237
+ color: var(--text-soft);
238
+ border: 1px solid transparent;
239
+ }
240
+
241
+ .nav-link.active {
242
+ background: var(--panel-strong);
243
+ color: var(--heading);
244
+ border-color: var(--line);
245
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.12);
246
+ }
247
+
248
+ .sidebar-note {
249
+ margin-top: 18px;
250
+ padding: 14px;
251
+ border-radius: 18px;
252
+ background: var(--panel-soft);
253
+ color: var(--text-soft);
254
+ font-size: 0.94rem;
255
+ }
256
+
257
+ .content-column {
258
+ display: grid;
259
+ gap: 20px;
260
+ }
261
+
262
+ .hero-panel {
263
+ position: relative;
264
+ overflow: hidden;
265
+ border-radius: 36px;
266
+ padding: 30px;
267
+ }
268
+
269
+ .hero-panel::after {
270
+ content: "";
271
+ position: absolute;
272
+ right: -34px;
273
+ bottom: -56px;
274
+ width: 220px;
275
+ height: 220px;
276
+ border-radius: 50%;
277
+ background: linear-gradient(135deg, rgba(244, 196, 133, 0.46), rgba(243, 122, 77, 0.18));
278
+ filter: blur(8px);
279
+ pointer-events: none;
280
+ }
281
+
282
+ .hero-grid {
283
+ position: relative;
284
+ z-index: 1;
285
+ display: grid;
286
+ grid-template-columns: 1.15fr 0.85fr;
287
+ gap: 24px;
288
+ align-items: center;
289
+ }
290
+
291
+ .hero-copy h1,
292
+ .page-heading h1 {
293
+ margin: 16px 0 10px;
294
+ color: var(--heading);
295
+ font-family: var(--heading-font);
296
+ font-size: clamp(2.6rem, 5vw, 4.5rem);
297
+ line-height: 0.95;
298
+ letter-spacing: -0.04em;
299
+ }
300
+
301
+ .hero-copy p,
302
+ .page-heading p {
303
+ max-width: 680px;
304
+ margin: 0;
305
+ color: var(--text-soft);
306
+ font-size: 1.05rem;
307
+ }
308
+
309
+ .hero-actions {
310
+ display: flex;
311
+ flex-wrap: wrap;
312
+ gap: 12px;
313
+ margin-top: 24px;
314
+ }
315
+
316
+ .cta {
317
+ display: inline-flex;
318
+ align-items: center;
319
+ justify-content: center;
320
+ min-height: 48px;
321
+ padding: 0 18px;
322
+ border-radius: 999px;
323
+ border: 1px solid transparent;
324
+ font-weight: 700;
325
+ }
326
+
327
+ .cta-primary {
328
+ background: linear-gradient(135deg, var(--accent), var(--accent-strong));
329
+ color: #fff9f5;
330
+ box-shadow: 0 16px 34px rgba(227, 104, 62, 0.24);
331
+ }
332
+
333
+ .cta-secondary {
334
+ background: var(--panel-strong);
335
+ color: var(--heading);
336
+ border-color: var(--line);
337
+ }
338
+
339
+ .hero-banner {
340
+ border-radius: 28px;
341
+ overflow: hidden;
342
+ padding: 16px;
343
+ background: color-mix(in srgb, var(--panel-strong) 72%, transparent);
344
+ }
345
+
346
+ .hero-banner img {
347
+ width: 100%;
348
+ height: auto;
349
+ border-radius: 20px;
350
+ }
351
+
352
+ .banner-dark {
353
+ display: none;
354
+ }
355
+
356
+ :root[data-theme="dark"] .banner-light {
357
+ display: none;
358
+ }
359
+
360
+ :root[data-theme="dark"] .banner-dark {
361
+ display: block;
362
+ }
363
+
364
+ .hero-stats,
365
+ .feature-grid,
366
+ .card-grid,
367
+ .screenshot-grid,
368
+ .two-up {
369
+ display: grid;
370
+ gap: 18px;
371
+ }
372
+
373
+ .hero-stats {
374
+ grid-template-columns: repeat(3, minmax(0, 1fr));
375
+ }
376
+
377
+ .stat-card,
378
+ .feature-card,
379
+ .card,
380
+ .screenshot-card {
381
+ border-radius: var(--radius-lg);
382
+ padding: 20px;
383
+ }
384
+
385
+ .stat-card {
386
+ background: var(--panel);
387
+ border: 1px solid var(--line);
388
+ box-shadow: var(--shadow-soft);
389
+ }
390
+
391
+ .stat-card strong {
392
+ display: block;
393
+ margin-bottom: 8px;
394
+ color: var(--heading);
395
+ font-size: 1.35rem;
396
+ font-family: var(--heading-font);
397
+ }
398
+
399
+ .stat-card span,
400
+ .feature-card p,
401
+ .card p,
402
+ .card li,
403
+ .content-panel p,
404
+ .content-panel li,
405
+ .toc a,
406
+ .caption {
407
+ color: var(--text-soft);
408
+ }
409
+
410
+ .feature-grid {
411
+ grid-template-columns: repeat(3, minmax(0, 1fr));
412
+ }
413
+
414
+ .feature-card h3,
415
+ .card h3,
416
+ .content-panel h2,
417
+ .content-panel h3,
418
+ .toc-title,
419
+ .page-heading h2 {
420
+ color: var(--heading);
421
+ font-family: var(--heading-font);
422
+ }
423
+
424
+ .feature-card h3,
425
+ .card h3 {
426
+ margin: 0 0 10px;
427
+ font-size: 1.25rem;
428
+ }
429
+
430
+ .card-grid {
431
+ grid-template-columns: repeat(2, minmax(0, 1fr));
432
+ }
433
+
434
+ .two-up {
435
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
436
+ }
437
+
438
+ .content-panel {
439
+ border-radius: 32px;
440
+ padding: 28px;
441
+ }
442
+
443
+ .page-heading {
444
+ margin-bottom: 8px;
445
+ }
446
+
447
+ .toc {
448
+ border-radius: 24px;
449
+ padding: 20px;
450
+ }
451
+
452
+ .toc-title {
453
+ margin: 0 0 12px;
454
+ font-size: 1.05rem;
455
+ }
456
+
457
+ .toc nav {
458
+ display: grid;
459
+ gap: 10px;
460
+ }
461
+
462
+ .toc a {
463
+ padding: 10px 12px;
464
+ border-radius: 14px;
465
+ border: 1px solid transparent;
466
+ }
467
+
468
+ .toc a:hover {
469
+ border-color: var(--line);
470
+ background: var(--panel-soft);
471
+ }
472
+
473
+ .content-panel h2 {
474
+ margin: 0 0 12px;
475
+ font-size: 2rem;
476
+ }
477
+
478
+ .content-panel h3 {
479
+ margin: 26px 0 10px;
480
+ font-size: 1.35rem;
481
+ }
482
+
483
+ .content-panel ul,
484
+ .content-panel ol {
485
+ padding-left: 1.15rem;
486
+ }
487
+
488
+ .content-panel li + li {
489
+ margin-top: 6px;
490
+ }
491
+
492
+ .callout {
493
+ margin: 20px 0;
494
+ padding: 16px 18px;
495
+ border-radius: 20px;
496
+ background: var(--panel-soft);
497
+ border: 1px solid var(--line);
498
+ }
499
+
500
+ .callout strong {
501
+ color: var(--heading);
502
+ }
503
+
504
+ .code-block {
505
+ overflow-x: auto;
506
+ margin: 18px 0;
507
+ padding: 18px;
508
+ border-radius: 22px;
509
+ background: #2d211f;
510
+ color: #ffe6d6;
511
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.06);
512
+ }
513
+
514
+ :root[data-theme="dark"] .code-block {
515
+ background: #1f171a;
516
+ color: #ffeade;
517
+ }
518
+
519
+ .inline-code {
520
+ padding: 0.12rem 0.42rem;
521
+ border-radius: 8px;
522
+ background: var(--panel-soft);
523
+ border: 1px solid var(--line);
524
+ font-size: 0.94em;
525
+ }
526
+
527
+ .screenshot-grid {
528
+ grid-template-columns: repeat(2, minmax(0, 1fr));
529
+ }
530
+
531
+ .screenshot-card {
532
+ background: color-mix(in srgb, var(--panel-strong) 76%, transparent);
533
+ }
534
+
535
+ .screenshot-card img {
536
+ width: 100%;
537
+ border-radius: 18px;
538
+ border: 1px solid var(--line);
539
+ box-shadow: var(--shadow-soft);
540
+ }
541
+
542
+ .screenshot-card h3 {
543
+ margin: 0 0 12px;
544
+ }
545
+
546
+ .caption {
547
+ margin: 12px 0 0;
548
+ font-size: 0.96rem;
549
+ }
550
+
551
+ .footer {
552
+ margin-top: 22px;
553
+ padding: 18px 22px;
554
+ border-radius: 24px;
555
+ border: 1px solid var(--line);
556
+ background: var(--panel);
557
+ box-shadow: var(--shadow-soft);
558
+ color: var(--text-soft);
559
+ text-align: center;
560
+ }
561
+
562
+ @media (max-width: 980px) {
563
+ .main-grid,
564
+ .hero-grid,
565
+ .feature-grid,
566
+ .hero-stats,
567
+ .card-grid,
568
+ .screenshot-grid,
569
+ .two-up {
570
+ grid-template-columns: 1fr;
571
+ }
572
+
573
+ .sidebar {
574
+ position: static;
575
+ }
576
+ }
577
+
578
+ @media (max-width: 720px) {
579
+ .page-shell {
580
+ width: min(100% - 20px, var(--content-width));
581
+ margin-top: 12px;
582
+ }
583
+
584
+ .topbar {
585
+ align-items: flex-start;
586
+ flex-direction: column;
587
+ }
588
+
589
+ .topbar-actions {
590
+ width: 100%;
591
+ justify-content: space-between;
592
+ }
593
+
594
+ .theme-toggle,
595
+ .pill-link,
596
+ .cta {
597
+ min-height: 42px;
598
+ }
599
+
600
+ .hero-panel,
601
+ .content-panel,
602
+ .sidebar {
603
+ padding: 22px;
604
+ border-radius: 24px;
605
+ }
606
+
607
+ .hero-copy h1,
608
+ .page-heading h1 {
609
+ font-size: clamp(2.2rem, 12vw, 3.2rem);
610
+ }
611
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "extends": "astro/tsconfigs/strict"
3
+ }
@@ -0,0 +1,6 @@
1
+ name = "sugarstitch-docs"
2
+ pages_build_output_dir = "./dist"
3
+ compatibility_date = "2026-03-25"
4
+
5
+ [vars]
6
+ SITE_NAME = "SugarStitch Docs"