website-xp-phone 2.2.1 → 2.2.11

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 (69) hide show
  1. package/.github/workflows/ci.yml +8 -0
  2. package/Makefile +5 -1
  3. package/README.md +9 -0
  4. package/build/routes.ts +27 -10
  5. package/package.json +2 -1
  6. package/public/Click.ogg +0 -0
  7. package/public/addons/rage-volley.txt +1 -1
  8. package/public/addons/rueg-wa-druid.txt +1 -1
  9. package/public/addons/rueg-wa-mage.txt +1 -1
  10. package/public/addons/rueg-wa-paladin.txt +1 -0
  11. package/public/addons/rueg-wa-priest.txt +1 -1
  12. package/public/addons/rueg-wa-rueg.txt +1 -1
  13. package/public/addons/rueg-wa-shaman.txt +1 -1
  14. package/public/blog/random/branch.md +29 -0
  15. package/public/blog/random/google.md +25 -0
  16. package/public/checksums.txt +70 -47
  17. package/public/documents/drift-report.json +46 -148
  18. package/public/loading.css +7 -0
  19. package/scripts/asset-reference.mjs +37 -0
  20. package/scripts/mutable-assets.mjs +46 -39
  21. package/scripts/refresh-soundcloud.mjs +152 -414
  22. package/scripts/verify-policy.mjs +206 -0
  23. package/scripts/write-dist-checksums.mjs +251 -135
  24. package/src/content/addons.json +13 -17
  25. package/src/content/blog.json +5 -26
  26. package/src/content/characters.json +6 -6
  27. package/src/content/configs.json +6 -2
  28. package/src/content/index.ts +105 -12
  29. package/src/content/pages.json +10 -1
  30. package/src/content/projects/development.json +9 -1
  31. package/src/content/projects/doftiles.json +9 -1
  32. package/src/content/projects/frontend.json +9 -1
  33. package/src/content/projects/graphbrowser.json +9 -1
  34. package/src/content/projects/herbstutil.json +93 -4
  35. package/src/content/projects/lightdni-jssas-toggle.json +9 -1
  36. package/src/content/projects/pagerts.json +13 -2
  37. package/src/content/projects/rarebert.json +12 -2
  38. package/src/content/projects/webuser.json +9 -1
  39. package/src/content/schema.ts +10 -1
  40. package/src/content/sections.json +2 -3
  41. package/src/content/soundcloud.json +204 -72
  42. package/src/lib/audio.ts +14 -0
  43. package/src/lib/clippy.ts +1 -7
  44. package/src/lib/embeds.ts +1 -1
  45. package/src/lib/musicSchema.ts +1 -0
  46. package/src/main.tsx +8 -0
  47. package/src/pages/MusicPage.tsx +0 -1
  48. package/src/pages/SitemapPage.tsx +1 -1
  49. package/src/pages/WowPage.tsx +1 -1
  50. package/src/shell/App.tsx +4 -1
  51. package/src/styles/extras.css +85 -30
  52. package/src/styles/layout.css +27 -18
  53. package/src/styles/window.css +53 -50
  54. package/src/themes/pageSlide/index.ts +115 -13
  55. package/src/themes/pageSlide/pageSlide.css +99 -6
  56. package/src/window/Embed.tsx +3 -1
  57. package/src/window/MaximizedWindow.tsx +250 -0
  58. package/src/window/OkButton.tsx +6 -1
  59. package/src/window/PageWindows.tsx +3 -9
  60. package/src/window/Window.tsx +129 -53
  61. package/src/window/model.ts +22 -0
  62. package/src/window/state.tsx +54 -30
  63. package/test/asset-reference.test.js +53 -0
  64. package/test/content.test.js +60 -6
  65. package/test/mutable-assets.test.js +27 -0
  66. package/test/verify-policy.test.js +92 -0
  67. package/tsconfig.node.tsbuildinfo +1 -1
  68. package/tsconfig.tsbuildinfo +1 -1
  69. package/xp.css/README.md +10 -0
@@ -2,9 +2,8 @@
2
2
  "heading": "Welcome to kine's website!",
3
3
  "theme": "open",
4
4
  "content": [
5
- "err, there's lots of bugs on the internet like there's lots of bugs under a rock:",
6
- "there are some on the bottom, and some on the top, but on the bottom",
7
- "they're digesting most of the bottom-of-rock POLP",
5
+ "I sometimes change the blurb on the front page here,",
6
+ "Enjoy your visit!",
8
7
  {
9
8
  "heading": "for guru wisdom, there's tao of vim",
10
9
  "link": "https://mkaz.blog/working-with-vim/the-tao-of-vim/",
@@ -1,9 +1,15 @@
1
1
  {
2
2
  "source": "https://soundcloud.com/akinevz",
3
- "generatedAt": "2026-10-20T14:00:22.386Z",
4
- "asOfUploadingTrackCount": 80,
5
- "trackCount": 80,
3
+ "generatedAt": "2026-10-23T21:05:10.086Z",
4
+ "asOfUploadingTrackCount": 91,
5
+ "trackCount": 91,
6
6
  "tracks": [
7
+ {
8
+ "owner": "akinevz",
9
+ "path": "/akinevz/outer",
10
+ "title": "Outer",
11
+ "url": "https://soundcloud.com/akinevz/outer"
12
+ },
7
13
  {
8
14
  "owner": "akinevz",
9
15
  "path": "/akinevz/in-hell",
@@ -55,7 +61,7 @@
55
61
  {
56
62
  "owner": "akinevz",
57
63
  "path": "/akinevz/256a1",
58
- "title": "256v2EQ",
64
+ "title": "256-v EQ",
59
65
  "url": "https://soundcloud.com/akinevz/256a1"
60
66
  },
61
67
  {
@@ -64,66 +70,6 @@
64
70
  "title": "Atrophy Cultism",
65
71
  "url": "https://soundcloud.com/akinevz/atrophy-cultism"
66
72
  },
67
- {
68
- "owner": "akinevz2",
69
- "path": "/akinevz2/wat",
70
- "title": "Er",
71
- "url": "https://soundcloud.com/akinevz2/wat"
72
- },
73
- {
74
- "owner": "akinevz2",
75
- "path": "/akinevz2/somewhat-ebrsting",
76
- "title": "Somewhat Ebrsting",
77
- "url": "https://soundcloud.com/akinevz2/somewhat-ebrsting"
78
- },
79
- {
80
- "owner": "akinevz2",
81
- "path": "/akinevz2/has",
82
- "title": "has",
83
- "url": "https://soundcloud.com/akinevz2/has"
84
- },
85
- {
86
- "owner": "akinevz2",
87
- "path": "/akinevz2/got",
88
- "title": "got",
89
- "url": "https://soundcloud.com/akinevz2/got"
90
- },
91
- {
92
- "owner": "akinevz2",
93
- "path": "/akinevz2/glitch-boxers2",
94
- "title": "OKAY WHAT COLOUR??? UH HQ+",
95
- "url": "https://soundcloud.com/akinevz2/glitch-boxers2"
96
- },
97
- {
98
- "owner": "akinevz2",
99
- "path": "/akinevz2/glitch-boxers",
100
- "title": "YOU KNOW WHAT'S? PANTS HQ+",
101
- "url": "https://soundcloud.com/akinevz2/glitch-boxers"
102
- },
103
- {
104
- "owner": "akinevz2",
105
- "path": "/akinevz2/paladins-oath",
106
- "title": "Paladin's Oath",
107
- "url": "https://soundcloud.com/akinevz2/paladins-oath"
108
- },
109
- {
110
- "owner": "akinevz2",
111
- "path": "/akinevz2/happy-new-year-in-a-cozy",
112
- "title": "Logogram",
113
- "url": "https://soundcloud.com/akinevz2/happy-new-year-in-a-cozy"
114
- },
115
- {
116
- "owner": "akinevz2",
117
- "path": "/akinevz2/zero-zero-yay-wip",
118
- "title": "Zero Zero VIP",
119
- "url": "https://soundcloud.com/akinevz2/zero-zero-yay-wip"
120
- },
121
- {
122
- "owner": "akinevz2",
123
- "path": "/akinevz2/noodle-shop-courier",
124
- "title": "Noodle Shop Courier EQ",
125
- "url": "https://soundcloud.com/akinevz2/noodle-shop-courier"
126
- },
127
73
  {
128
74
  "owner": "akinevz",
129
75
  "path": "/akinevz/xen",
@@ -136,6 +82,12 @@
136
82
  "title": "Zone12",
137
83
  "url": "https://soundcloud.com/akinevz/zone12"
138
84
  },
85
+ {
86
+ "owner": "akinevz",
87
+ "path": "/akinevz/diagonal",
88
+ "title": "Diagonal Constant",
89
+ "url": "https://soundcloud.com/akinevz/diagonal"
90
+ },
139
91
  {
140
92
  "owner": "akinevz",
141
93
  "path": "/akinevz/bloody-bits",
@@ -148,6 +100,18 @@
148
100
  "title": "[MAN GO, ENGINE (VRUM)*] HQ+",
149
101
  "url": "https://soundcloud.com/akinevz/man-go-engine-vrum"
150
102
  },
103
+ {
104
+ "owner": "akinevz",
105
+ "path": "/akinevz/spellhound",
106
+ "title": "SPELLHOUND",
107
+ "url": "https://soundcloud.com/akinevz/spellhound"
108
+ },
109
+ {
110
+ "owner": "akinevz",
111
+ "path": "/akinevz/calculus",
112
+ "title": "Reticulated Contraventions",
113
+ "url": "https://soundcloud.com/akinevz/calculus"
114
+ },
151
115
  {
152
116
  "owner": "akinevz",
153
117
  "path": "/akinevz/out-of-breath",
@@ -160,6 +124,12 @@
160
124
  "title": "TRY TRY TRY",
161
125
  "url": "https://soundcloud.com/akinevz/try-try-try"
162
126
  },
127
+ {
128
+ "owner": "akinevz",
129
+ "path": "/akinevz/frozen-glove",
130
+ "title": "Freezing Point",
131
+ "url": "https://soundcloud.com/akinevz/frozen-glove"
132
+ },
163
133
  {
164
134
  "owner": "akinevz",
165
135
  "path": "/akinevz/late-late-late",
@@ -184,6 +154,18 @@
184
154
  "title": "CHECKPOINT MARKER",
185
155
  "url": "https://soundcloud.com/akinevz/resummoning-fried-beans"
186
156
  },
157
+ {
158
+ "owner": "akinevz",
159
+ "path": "/akinevz/spiritual-overload",
160
+ "title": "Exhausted Spirit",
161
+ "url": "https://soundcloud.com/akinevz/spiritual-overload"
162
+ },
163
+ {
164
+ "owner": "akinevz",
165
+ "path": "/akinevz/letdown",
166
+ "title": "Open Door (Letdown)",
167
+ "url": "https://soundcloud.com/akinevz/letdown"
168
+ },
187
169
  {
188
170
  "owner": "akinevz",
189
171
  "path": "/akinevz/project-vox",
@@ -208,6 +190,12 @@
208
190
  "title": "Marrowful Fragments",
209
191
  "url": "https://soundcloud.com/akinevz/marrowful-fragments"
210
192
  },
193
+ {
194
+ "owner": "akinevz",
195
+ "path": "/akinevz/microtonal-vudoo",
196
+ "title": "Microtonal Vudoo",
197
+ "url": "https://soundcloud.com/akinevz/microtonal-vudoo"
198
+ },
211
199
  {
212
200
  "owner": "akinevz",
213
201
  "path": "/akinevz/important-cheese",
@@ -220,6 +208,12 @@
220
208
  "title": "Ivory Guardians",
221
209
  "url": "https://soundcloud.com/akinevz/ivory-guardians"
222
210
  },
211
+ {
212
+ "owner": "akinevz",
213
+ "path": "/akinevz/careful-offer",
214
+ "title": "Careful Offer",
215
+ "url": "https://soundcloud.com/akinevz/careful-offer"
216
+ },
223
217
  {
224
218
  "owner": "akinevz",
225
219
  "path": "/akinevz/radio-contact",
@@ -250,6 +244,12 @@
250
244
  "title": "Blank Note",
251
245
  "url": "https://soundcloud.com/akinevz/blank-note"
252
246
  },
247
+ {
248
+ "owner": "akinevz",
249
+ "path": "/akinevz/compact_disc",
250
+ "title": "Compact Disc",
251
+ "url": "https://soundcloud.com/akinevz/compact_disc"
252
+ },
253
253
  {
254
254
  "owner": "akinevz",
255
255
  "path": "/akinevz/a_break_in_space",
@@ -262,6 +262,12 @@
262
262
  "title": "Good Night",
263
263
  "url": "https://soundcloud.com/akinevz/good-night"
264
264
  },
265
+ {
266
+ "owner": "akinevz",
267
+ "path": "/akinevz/open-door",
268
+ "title": "Open Door",
269
+ "url": "https://soundcloud.com/akinevz/open-door"
270
+ },
265
271
  {
266
272
  "owner": "akinevz",
267
273
  "path": "/akinevz/wat",
@@ -282,9 +288,9 @@
282
288
  },
283
289
  {
284
290
  "owner": "akinevz",
285
- "path": "/akinevz/corrupted-moonwell",
286
- "title": "Exhausted Spirit",
287
- "url": "https://soundcloud.com/akinevz/corrupted-moonwell"
291
+ "path": "/akinevz/fingerless-glove",
292
+ "title": "2.22am",
293
+ "url": "https://soundcloud.com/akinevz/fingerless-glove"
288
294
  },
289
295
  {
290
296
  "owner": "akinevz",
@@ -346,6 +352,66 @@
346
352
  "title": "They Were Laid to Rest Cont.",
347
353
  "url": "https://soundcloud.com/akinevz/u-dont-know-gabber"
348
354
  },
355
+ {
356
+ "owner": "akinevz2",
357
+ "path": "/akinevz2/wat",
358
+ "title": "Er",
359
+ "url": "https://soundcloud.com/akinevz2/wat"
360
+ },
361
+ {
362
+ "owner": "akinevz2",
363
+ "path": "/akinevz2/somewhat-ebrsting",
364
+ "title": "Somewhat Ebrsting",
365
+ "url": "https://soundcloud.com/akinevz2/somewhat-ebrsting"
366
+ },
367
+ {
368
+ "owner": "akinevz2",
369
+ "path": "/akinevz2/has",
370
+ "title": "has",
371
+ "url": "https://soundcloud.com/akinevz2/has"
372
+ },
373
+ {
374
+ "owner": "akinevz2",
375
+ "path": "/akinevz2/got",
376
+ "title": "got",
377
+ "url": "https://soundcloud.com/akinevz2/got"
378
+ },
379
+ {
380
+ "owner": "akinevz2",
381
+ "path": "/akinevz2/glitch-boxers2",
382
+ "title": "OKAY WHAT COLOUR??? UH HQ+",
383
+ "url": "https://soundcloud.com/akinevz2/glitch-boxers2"
384
+ },
385
+ {
386
+ "owner": "akinevz2",
387
+ "path": "/akinevz2/glitch-boxers",
388
+ "title": "YOU KNOW WHAT'S? PANTS HQ+",
389
+ "url": "https://soundcloud.com/akinevz2/glitch-boxers"
390
+ },
391
+ {
392
+ "owner": "akinevz2",
393
+ "path": "/akinevz2/paladins-oath",
394
+ "title": "Paladin's Oath",
395
+ "url": "https://soundcloud.com/akinevz2/paladins-oath"
396
+ },
397
+ {
398
+ "owner": "akinevz2",
399
+ "path": "/akinevz2/happy-new-year-in-a-cozy",
400
+ "title": "Logogram",
401
+ "url": "https://soundcloud.com/akinevz2/happy-new-year-in-a-cozy"
402
+ },
403
+ {
404
+ "owner": "akinevz2",
405
+ "path": "/akinevz2/zero-zero-yay-wip",
406
+ "title": "Zero Zero VIP",
407
+ "url": "https://soundcloud.com/akinevz2/zero-zero-yay-wip"
408
+ },
409
+ {
410
+ "owner": "akinevz2",
411
+ "path": "/akinevz2/noodle-shop-courier",
412
+ "title": "Noodle Shop Courier EQ",
413
+ "url": "https://soundcloud.com/akinevz2/noodle-shop-courier"
414
+ },
349
415
  {
350
416
  "owner": "akinevz2",
351
417
  "path": "/akinevz2/blank-note",
@@ -490,8 +556,14 @@
490
556
  "owner": "akinevz",
491
557
  "source": "https://soundcloud.com/akinevz",
492
558
  "profileImageUrl": null,
493
- "trackCount": 47,
559
+ "trackCount": 58,
494
560
  "tracks": [
561
+ {
562
+ "owner": "akinevz",
563
+ "path": "/akinevz/outer",
564
+ "title": "Outer",
565
+ "url": "https://soundcloud.com/akinevz/outer"
566
+ },
495
567
  {
496
568
  "owner": "akinevz",
497
569
  "path": "/akinevz/in-hell",
@@ -543,7 +615,7 @@
543
615
  {
544
616
  "owner": "akinevz",
545
617
  "path": "/akinevz/256a1",
546
- "title": "256v2EQ",
618
+ "title": "256-v EQ",
547
619
  "url": "https://soundcloud.com/akinevz/256a1"
548
620
  },
549
621
  {
@@ -564,6 +636,12 @@
564
636
  "title": "Zone12",
565
637
  "url": "https://soundcloud.com/akinevz/zone12"
566
638
  },
639
+ {
640
+ "owner": "akinevz",
641
+ "path": "/akinevz/diagonal",
642
+ "title": "Diagonal Constant",
643
+ "url": "https://soundcloud.com/akinevz/diagonal"
644
+ },
567
645
  {
568
646
  "owner": "akinevz",
569
647
  "path": "/akinevz/bloody-bits",
@@ -576,6 +654,18 @@
576
654
  "title": "[MAN GO, ENGINE (VRUM)*] HQ+",
577
655
  "url": "https://soundcloud.com/akinevz/man-go-engine-vrum"
578
656
  },
657
+ {
658
+ "owner": "akinevz",
659
+ "path": "/akinevz/spellhound",
660
+ "title": "SPELLHOUND",
661
+ "url": "https://soundcloud.com/akinevz/spellhound"
662
+ },
663
+ {
664
+ "owner": "akinevz",
665
+ "path": "/akinevz/calculus",
666
+ "title": "Reticulated Contraventions",
667
+ "url": "https://soundcloud.com/akinevz/calculus"
668
+ },
579
669
  {
580
670
  "owner": "akinevz",
581
671
  "path": "/akinevz/out-of-breath",
@@ -588,6 +678,12 @@
588
678
  "title": "TRY TRY TRY",
589
679
  "url": "https://soundcloud.com/akinevz/try-try-try"
590
680
  },
681
+ {
682
+ "owner": "akinevz",
683
+ "path": "/akinevz/frozen-glove",
684
+ "title": "Freezing Point",
685
+ "url": "https://soundcloud.com/akinevz/frozen-glove"
686
+ },
591
687
  {
592
688
  "owner": "akinevz",
593
689
  "path": "/akinevz/late-late-late",
@@ -612,6 +708,18 @@
612
708
  "title": "CHECKPOINT MARKER",
613
709
  "url": "https://soundcloud.com/akinevz/resummoning-fried-beans"
614
710
  },
711
+ {
712
+ "owner": "akinevz",
713
+ "path": "/akinevz/spiritual-overload",
714
+ "title": "Exhausted Spirit",
715
+ "url": "https://soundcloud.com/akinevz/spiritual-overload"
716
+ },
717
+ {
718
+ "owner": "akinevz",
719
+ "path": "/akinevz/letdown",
720
+ "title": "Open Door (Letdown)",
721
+ "url": "https://soundcloud.com/akinevz/letdown"
722
+ },
615
723
  {
616
724
  "owner": "akinevz",
617
725
  "path": "/akinevz/project-vox",
@@ -636,6 +744,12 @@
636
744
  "title": "Marrowful Fragments",
637
745
  "url": "https://soundcloud.com/akinevz/marrowful-fragments"
638
746
  },
747
+ {
748
+ "owner": "akinevz",
749
+ "path": "/akinevz/microtonal-vudoo",
750
+ "title": "Microtonal Vudoo",
751
+ "url": "https://soundcloud.com/akinevz/microtonal-vudoo"
752
+ },
639
753
  {
640
754
  "owner": "akinevz",
641
755
  "path": "/akinevz/important-cheese",
@@ -648,6 +762,12 @@
648
762
  "title": "Ivory Guardians",
649
763
  "url": "https://soundcloud.com/akinevz/ivory-guardians"
650
764
  },
765
+ {
766
+ "owner": "akinevz",
767
+ "path": "/akinevz/careful-offer",
768
+ "title": "Careful Offer",
769
+ "url": "https://soundcloud.com/akinevz/careful-offer"
770
+ },
651
771
  {
652
772
  "owner": "akinevz",
653
773
  "path": "/akinevz/radio-contact",
@@ -678,6 +798,12 @@
678
798
  "title": "Blank Note",
679
799
  "url": "https://soundcloud.com/akinevz/blank-note"
680
800
  },
801
+ {
802
+ "owner": "akinevz",
803
+ "path": "/akinevz/compact_disc",
804
+ "title": "Compact Disc",
805
+ "url": "https://soundcloud.com/akinevz/compact_disc"
806
+ },
681
807
  {
682
808
  "owner": "akinevz",
683
809
  "path": "/akinevz/a_break_in_space",
@@ -690,6 +816,12 @@
690
816
  "title": "Good Night",
691
817
  "url": "https://soundcloud.com/akinevz/good-night"
692
818
  },
819
+ {
820
+ "owner": "akinevz",
821
+ "path": "/akinevz/open-door",
822
+ "title": "Open Door",
823
+ "url": "https://soundcloud.com/akinevz/open-door"
824
+ },
693
825
  {
694
826
  "owner": "akinevz",
695
827
  "path": "/akinevz/wat",
@@ -710,9 +842,9 @@
710
842
  },
711
843
  {
712
844
  "owner": "akinevz",
713
- "path": "/akinevz/corrupted-moonwell",
714
- "title": "Exhausted Spirit",
715
- "url": "https://soundcloud.com/akinevz/corrupted-moonwell"
845
+ "path": "/akinevz/fingerless-glove",
846
+ "title": "2.22am",
847
+ "url": "https://soundcloud.com/akinevz/fingerless-glove"
716
848
  },
717
849
  {
718
850
  "owner": "akinevz",
package/src/lib/audio.ts CHANGED
@@ -97,3 +97,17 @@ export const playLayeredAudio = (src: string) => {
97
97
  releaseToPool(src, audio);
98
98
  });
99
99
  };
100
+
101
+ let lastClickAt = 0;
102
+
103
+ /** The Click.ogg minimize click, deduped: dismissal paths can stack
104
+ * within one gesture (a navigation that also folds windows) and the
105
+ * layered arena would happily overlap them — one click per burst. */
106
+ export const playMinimizeClick = () => {
107
+ const now = performance.now();
108
+ if (now - lastClickAt < 180) {
109
+ return;
110
+ }
111
+ lastClickAt = now;
112
+ playLayeredAudio("/Click.ogg");
113
+ };
package/src/lib/clippy.ts CHANGED
@@ -25,18 +25,12 @@ export type ClippyState = {
25
25
  listOpen: boolean;
26
26
  };
27
27
 
28
- const isPhone = () =>
29
- typeof navigator !== "undefined" &&
30
- /(iphone|ipod|android.*mobile|windows phone|blackberry|iemobile|opera mini)/i.test(
31
- navigator.userAgent,
32
- );
33
-
34
28
  const storedVisible = () =>
35
29
  typeof sessionStorage !== "undefined" &&
36
30
  sessionStorage.getItem(SESSION_KEY) === "1";
37
31
 
38
32
  let state: ClippyState = {
39
- visible: storedVisible() || isPhone(),
33
+ visible: storedVisible(),
40
34
  bubble: false,
41
35
  saysNo: false,
42
36
  listOpen: false,
package/src/lib/embeds.ts CHANGED
@@ -102,7 +102,7 @@ export function youTubeThumbnail(url: string): string | null {
102
102
  const id =
103
103
  host === "youtu.be"
104
104
  ? parsed.pathname.slice(1)
105
- : host.endsWith("youtube.com")
105
+ : host === "youtube.com" || host === "www.youtube.com"
106
106
  ? parsed.searchParams.get("v")
107
107
  : null;
108
108
  return id ? `https://i.ytimg.com/vi/${id}/maxresdefault.jpg` : null;
@@ -43,6 +43,7 @@ const MUSIC_GROUP_GENRES = [
43
43
  "Glitch",
44
44
  ];
45
45
  const MUSIC_GROUP_SAME_AS = [
46
+ "https://soundcloud.com/akinevz",
46
47
  "https://soundcloud.com/akinevz2",
47
48
  "https://youtube.com/@akinevz",
48
49
  "https://x.com/akinevz",
package/src/main.tsx CHANGED
@@ -8,6 +8,14 @@ import { App } from "./shell/App";
8
8
  import { enablePageSlide } from "./themes/pageSlide";
9
9
 
10
10
  document.body.classList.add("styles-loaded");
11
+ // Always install the page-slide theme: its hooks drive window
12
+ // minimisation, navigation choreography and sounds. When the page is
13
+ // loaded directly ONTO a hyperlinked window target (a #hash or ?post=
14
+ // the route maximizes), the theme starts "parked" — zero slide distance
15
+ // — so the entrance slide plays from nowhere and disturbs nothing while
16
+ // the maximized overlay is the only visible paint. Page loads without a
17
+ // hyperlink target slide in from the top as usual; later navigations
18
+ // apply a real direction and slide as usual.
11
19
  enablePageSlide();
12
20
 
13
21
  createRoot(document.getElementById("root")!).render(
@@ -94,7 +94,6 @@ const buildMusic = (): Section[] => {
94
94
  theme: "open",
95
95
  content: [
96
96
  `Generated: ${new Date(soundcloud.generatedAt).toLocaleString()}`,
97
- "Replaced a few weak mixes and removed a duplicate.",
98
97
  "This total measures main and alt profiles as of uploading.",
99
98
  tracksTotal(total),
100
99
  ],
@@ -15,7 +15,7 @@ const GROUPS: Array<{ heading: string; summary: string; routes: Route[] }> = [
15
15
  summary: "The utility pages that support downloads, contact, and tooling.",
16
16
  routes: routes.filter(
17
17
  (route) =>
18
- route.page === "ProjectPage" ||
18
+ (route.page === "ProjectPage" && !route.alias) ||
19
19
  ["/addons", "/configs", "/contact", "/resume", "/projects"].includes(
20
20
  route.path,
21
21
  ),
@@ -102,7 +102,7 @@ function DownloadForm() {
102
102
 
103
103
  export const WowPage = () => (
104
104
  <>
105
+ <PageWindows content={[addons, characters]} />
105
106
  <DownloadForm />
106
- <PageWindows content={[characters, addons]} />
107
107
  </>
108
108
  );
package/src/shell/App.tsx CHANGED
@@ -35,7 +35,10 @@ export function App() {
35
35
  <>
36
36
  <MenuBar />
37
37
  <main>
38
- <section className="page" key={route.path}>
38
+ <section
39
+ className={`page${route.path === "/configs" ? " page-configs" : ""}`}
40
+ key={route.path}
41
+ >
39
42
  <Page />
40
43
  </section>
41
44
  </main>