@turnipxenon/pineapple 2.4.71 → 2.4.73

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 (264) hide show
  1. package/.gitignore +5 -1
  2. package/.idea/shelf/Fix_attempt_for_slug/shelved.patch +63 -0
  3. package/.idea/shelf/Fix_attempt_for_slug.xml +4 -0
  4. package/.idea/workspace.xml +106 -89
  5. package/.svelte-kit/__package__/.gitignore +1 -1
  6. package/.svelte-kit/__package__/template/seaweed/ChumBucket.svelte +60 -60
  7. package/.svelte-kit/__package__/template/seaweed/SeaweedTemplate.svelte +36 -158
  8. package/.svelte-kit/__package__/template/seaweed/SeaweedTemplate.svelte.d.ts +6 -0
  9. package/.svelte-kit/__package__/template/seaweed/SeaweedTemplateData.js +3 -9
  10. package/.svelte-kit/__package__/template/seaweed/entries/EntryProps.d.ts +6 -0
  11. package/.svelte-kit/__package__/template/seaweed/entries/WorkExperience.svelte +143 -0
  12. package/.svelte-kit/__package__/template/seaweed/entries/WorkExperience.svelte.d.ts +18 -0
  13. package/.svelte-kit/__package__/template/seaweed/entry_order_config/EntryOrderConfig.svelte +2 -2
  14. package/.svelte-kit/__package__/template/seaweed/entry_order_config/EntryOrderConfig.svelte.d.ts +1 -0
  15. package/.svelte-kit/ambient.d.ts +1 -12
  16. package/.svelte-kit/generated/client/app.js +1 -1
  17. package/.svelte-kit/generated/client-optimized/app.js +47 -0
  18. package/.svelte-kit/generated/client-optimized/matchers.js +1 -0
  19. package/.svelte-kit/generated/client-optimized/nodes/0.js +1 -0
  20. package/.svelte-kit/generated/client-optimized/nodes/1.js +1 -0
  21. package/.svelte-kit/generated/client-optimized/nodes/10.js +1 -0
  22. package/.svelte-kit/generated/client-optimized/nodes/11.js +1 -0
  23. package/.svelte-kit/generated/client-optimized/nodes/12.js +1 -0
  24. package/.svelte-kit/generated/client-optimized/nodes/13.js +3 -0
  25. package/.svelte-kit/generated/client-optimized/nodes/14.js +3 -0
  26. package/.svelte-kit/generated/client-optimized/nodes/15.js +3 -0
  27. package/.svelte-kit/generated/client-optimized/nodes/16.js +1 -0
  28. package/.svelte-kit/generated/client-optimized/nodes/2.js +1 -0
  29. package/.svelte-kit/generated/client-optimized/nodes/3.js +1 -0
  30. package/.svelte-kit/generated/client-optimized/nodes/4.js +1 -0
  31. package/.svelte-kit/generated/client-optimized/nodes/5.js +1 -0
  32. package/.svelte-kit/generated/client-optimized/nodes/6.js +1 -0
  33. package/.svelte-kit/generated/client-optimized/nodes/7.js +1 -0
  34. package/.svelte-kit/generated/client-optimized/nodes/8.js +1 -0
  35. package/.svelte-kit/generated/client-optimized/nodes/9.js +1 -0
  36. package/.svelte-kit/generated/server/internal.js +1 -1
  37. package/.svelte-kit/output/client/.vite/manifest.json +694 -0
  38. package/.svelte-kit/output/client/_app/immutable/assets/0.BZfguPbX.css +10 -0
  39. package/.svelte-kit/output/client/_app/immutable/assets/13.BIMIBpeM.css +1 -0
  40. package/.svelte-kit/output/client/_app/immutable/assets/4.ClTmhFiH.css +1 -0
  41. package/.svelte-kit/output/client/_app/immutable/assets/NavigationComponent.DcXBcmND.css +1 -0
  42. package/.svelte-kit/output/client/_app/immutable/assets/PineappleBaseLayout.BJNkM2lS.css +1 -0
  43. package/.svelte-kit/output/client/_app/immutable/assets/ProgressBar.Cirlo5Z8.css +1 -0
  44. package/.svelte-kit/output/client/_app/immutable/assets/_layout.BgClWDWR.css +10 -0
  45. package/.svelte-kit/output/client/_app/immutable/assets/_page.BIMIBpeM.css +1 -0
  46. package/.svelte-kit/output/client/_app/immutable/assets/_page.ClTmhFiH.css +1 -0
  47. package/.svelte-kit/output/client/_app/immutable/assets/ares_blushing.B6Q0SsBp.webp +0 -0
  48. package/.svelte-kit/output/client/_app/immutable/assets/ares_disappointed.LOpkh7Q7.webp +0 -0
  49. package/.svelte-kit/output/client/_app/immutable/assets/ares_happy.Cz9WhdwO.webp +0 -0
  50. package/.svelte-kit/output/client/_app/immutable/assets/ares_lets_go.BxjJjKUv.webp +0 -0
  51. package/.svelte-kit/output/client/_app/immutable/assets/ares_logo.C_a3ZQAP.webp +0 -0
  52. package/.svelte-kit/output/client/_app/immutable/assets/ares_mad.DofDLDmM.webp +0 -0
  53. package/.svelte-kit/output/client/_app/immutable/assets/ares_neutral.Hp923t8N.webp +0 -0
  54. package/.svelte-kit/output/client/_app/immutable/assets/ares_slightly_mad.DdwOp6J5.webp +0 -0
  55. package/.svelte-kit/output/client/_app/immutable/assets/ares_surprised.BxbNH_w8.webp +0 -0
  56. package/.svelte-kit/output/client/_app/immutable/assets/ares_yay.EM2SNr0e.webp +0 -0
  57. package/.svelte-kit/output/client/_app/immutable/assets/bg_tiled_ares.DTcFskeK.png +0 -0
  58. package/.svelte-kit/output/client/_app/immutable/assets/bg_tiled_corn.D22ZwTZ0.png +0 -0
  59. package/.svelte-kit/output/client/_app/immutable/assets/bg_tiled_pineapple.D28N65_A.png +0 -0
  60. package/.svelte-kit/output/client/_app/immutable/assets/bg_tiled_reinhard.D22NV0xw.png +0 -0
  61. package/.svelte-kit/output/client/_app/immutable/assets/bg_tiled_tomato.O9Z7_E07.png +0 -0
  62. package/.svelte-kit/output/client/_app/immutable/assets/bg_tiled_turnip.DMU0uHH4.png +0 -0
  63. package/.svelte-kit/output/client/_app/immutable/assets/footage-chef-wings.dVBm8Uit.gif +0 -0
  64. package/.svelte-kit/output/client/_app/immutable/assets/header-hep-cat.DcyPS3Oy.mp4 +0 -0
  65. package/.svelte-kit/output/client/_app/immutable/assets/header-pengi.DWAOeO4q.mp4 +0 -0
  66. package/.svelte-kit/output/client/_app/immutable/assets/header-soulwork.BQRWmhTu.mp4 +0 -0
  67. package/.svelte-kit/output/client/_app/immutable/assets/placeholder_circle.Ij3bN7bI.png +0 -0
  68. package/.svelte-kit/output/client/_app/immutable/assets/seaweed-showcase.TTVTTC5m.mp4 +0 -0
  69. package/.svelte-kit/output/client/_app/immutable/assets/weaver-footage.sjDEbkrX.gif +0 -0
  70. package/.svelte-kit/output/client/_app/immutable/assets/window-set.IpgsYUna.png +0 -0
  71. package/.svelte-kit/output/client/_app/immutable/chunks/DialogManagerStore.uKBS8wDS.js +7 -0
  72. package/.svelte-kit/output/client/_app/immutable/chunks/NavigationComponent.svelte_svelte_type_style_lang.DfEIDspS.js +33 -0
  73. package/.svelte-kit/output/client/_app/immutable/chunks/PineappleBaseLayout.svelte_svelte_type_style_lang.DYXCZxRe.js +5 -0
  74. package/.svelte-kit/output/client/_app/immutable/chunks/PineappleSlideToggle.Cpnzq8nG.js +1 -0
  75. package/.svelte-kit/output/client/_app/immutable/chunks/ProgressBar.svelte_svelte_type_style_lang.gYVkR-Pp.js +1 -0
  76. package/.svelte-kit/output/client/_app/immutable/chunks/SeaweedTemplate.D8BMpFyR.js +42 -0
  77. package/.svelte-kit/output/client/_app/immutable/chunks/Toast.CfxCQiZJ.js +1 -0
  78. package/.svelte-kit/output/client/_app/immutable/chunks/_page.BCsXwAds.js +8 -0
  79. package/.svelte-kit/output/client/_app/immutable/chunks/_page.CER3LJw4.js +8 -0
  80. package/.svelte-kit/output/client/_app/immutable/chunks/_page.CJqYI1vC.js +7 -0
  81. package/.svelte-kit/output/client/_app/immutable/chunks/_page.CRke_Vt-.js +8 -0
  82. package/.svelte-kit/output/client/_app/immutable/chunks/_page.CdlE3ZqM.js +8 -0
  83. package/.svelte-kit/output/client/_app/immutable/chunks/_page.D8F_fKwN.js +8 -0
  84. package/.svelte-kit/output/client/_app/immutable/chunks/_page.DOjmKWLN.js +8 -0
  85. package/.svelte-kit/output/client/_app/immutable/chunks/_page.UybeXHGE.js +8 -0
  86. package/.svelte-kit/output/client/_app/immutable/chunks/close.BSBWitOq.js +1 -0
  87. package/.svelte-kit/output/client/_app/immutable/chunks/each.SQ7NrLlo.js +1 -0
  88. package/.svelte-kit/output/client/_app/immutable/chunks/entry.B9Zoh-6L.js +3 -0
  89. package/.svelte-kit/output/client/_app/immutable/chunks/index.BID2VU8k.js +4 -0
  90. package/.svelte-kit/output/client/_app/immutable/chunks/index.D_vqlE3X.js +1 -0
  91. package/.svelte-kit/output/client/_app/immutable/chunks/index.DbwYs1Xx.js +1 -0
  92. package/.svelte-kit/output/client/_app/immutable/chunks/index.lAcdadTB.js +1 -0
  93. package/.svelte-kit/output/client/_app/immutable/chunks/index.qztrOHW4.js +6 -0
  94. package/.svelte-kit/output/client/_app/immutable/chunks/preload-helper.BQ24v_F8.js +1 -0
  95. package/.svelte-kit/output/client/_app/immutable/chunks/scheduler.DsUDfRdB.js +1 -0
  96. package/.svelte-kit/output/client/_app/immutable/chunks/spread.CgU5AtxT.js +1 -0
  97. package/.svelte-kit/output/client/_app/immutable/chunks/store.yyGEKEAe.js +1 -0
  98. package/.svelte-kit/output/client/_app/immutable/chunks/stores.BVA7LtvQ.js +1 -0
  99. package/.svelte-kit/output/client/_app/immutable/chunks/stores.CYFggfyT.js +1 -0
  100. package/.svelte-kit/output/client/_app/immutable/chunks/stores.DEMC0xoI.js +1 -0
  101. package/.svelte-kit/output/client/_app/immutable/chunks/stores.UNf3hc21.js +1 -0
  102. package/.svelte-kit/output/client/_app/immutable/chunks/transitions.FXurGCgU.js +1 -0
  103. package/.svelte-kit/output/client/_app/immutable/chunks/util.CpV-3U2s.js +1 -0
  104. package/.svelte-kit/output/client/_app/immutable/entry/app.CsPg_tSG.js +7 -0
  105. package/.svelte-kit/output/client/_app/immutable/entry/start.BK4UymrI.js +1 -0
  106. package/.svelte-kit/output/client/_app/immutable/nodes/0.DpxE_iuA.js +2 -0
  107. package/.svelte-kit/output/client/_app/immutable/nodes/1.CfFtBDAU.js +4 -0
  108. package/.svelte-kit/output/client/_app/immutable/nodes/10.B_ssKps0.js +1 -0
  109. package/.svelte-kit/output/client/_app/immutable/nodes/11.B_ssKps0.js +1 -0
  110. package/.svelte-kit/output/client/_app/immutable/nodes/12.CnXaShb6.js +1 -0
  111. package/.svelte-kit/output/client/_app/immutable/nodes/13.D6l5S0uo.js +61 -0
  112. package/.svelte-kit/output/client/_app/immutable/nodes/14.D-06Eivu.js +1 -0
  113. package/.svelte-kit/output/client/_app/immutable/nodes/15.UZK1S76t.js +1 -0
  114. package/.svelte-kit/output/client/_app/immutable/nodes/16.C52UdDDz.js +1 -0
  115. package/.svelte-kit/output/client/_app/immutable/nodes/2.C_PeLfm6.js +5 -0
  116. package/.svelte-kit/output/client/_app/immutable/nodes/3.DRZNxJIx.js +1 -0
  117. package/.svelte-kit/output/client/_app/immutable/nodes/4.7r5Yp15Y.js +1 -0
  118. package/.svelte-kit/output/client/_app/immutable/nodes/5.B_ssKps0.js +1 -0
  119. package/.svelte-kit/output/client/_app/immutable/nodes/6.B_ssKps0.js +1 -0
  120. package/.svelte-kit/output/client/_app/immutable/nodes/7.B_ssKps0.js +1 -0
  121. package/.svelte-kit/output/client/_app/immutable/nodes/8.B_ssKps0.js +1 -0
  122. package/.svelte-kit/output/client/_app/immutable/nodes/9.B_ssKps0.js +1 -0
  123. package/.svelte-kit/output/client/_app/version.json +1 -0
  124. package/.svelte-kit/output/client/default-card.png +0 -0
  125. package/.svelte-kit/output/client/favicon.png +0 -0
  126. package/.svelte-kit/output/client/robots.txt +5 -0
  127. package/.svelte-kit/output/server/.vite/manifest.json +617 -0
  128. package/.svelte-kit/output/server/_app/immutable/assets/NavigationComponent.DcXBcmND.css +1 -0
  129. package/.svelte-kit/output/server/_app/immutable/assets/PineappleBaseLayout.BJNkM2lS.css +1 -0
  130. package/.svelte-kit/output/server/_app/immutable/assets/ProgressBar.Cirlo5Z8.css +1 -0
  131. package/.svelte-kit/output/server/_app/immutable/assets/_layout.BgClWDWR.css +10 -0
  132. package/.svelte-kit/output/server/_app/immutable/assets/_page.BIMIBpeM.css +1 -0
  133. package/.svelte-kit/output/server/_app/immutable/assets/_page.ClTmhFiH.css +1 -0
  134. package/.svelte-kit/output/server/_app/immutable/assets/ares_blushing.B6Q0SsBp.webp +0 -0
  135. package/.svelte-kit/output/server/_app/immutable/assets/ares_disappointed.LOpkh7Q7.webp +0 -0
  136. package/.svelte-kit/output/server/_app/immutable/assets/ares_happy.Cz9WhdwO.webp +0 -0
  137. package/.svelte-kit/output/server/_app/immutable/assets/ares_lets_go.BxjJjKUv.webp +0 -0
  138. package/.svelte-kit/output/server/_app/immutable/assets/ares_logo.C_a3ZQAP.webp +0 -0
  139. package/.svelte-kit/output/server/_app/immutable/assets/ares_mad.DofDLDmM.webp +0 -0
  140. package/.svelte-kit/output/server/_app/immutable/assets/ares_neutral.Hp923t8N.webp +0 -0
  141. package/.svelte-kit/output/server/_app/immutable/assets/ares_slightly_mad.DdwOp6J5.webp +0 -0
  142. package/.svelte-kit/output/server/_app/immutable/assets/ares_surprised.BxbNH_w8.webp +0 -0
  143. package/.svelte-kit/output/server/_app/immutable/assets/ares_yay.EM2SNr0e.webp +0 -0
  144. package/.svelte-kit/output/server/_app/immutable/assets/bg_tiled_ares.DTcFskeK.png +0 -0
  145. package/.svelte-kit/output/server/_app/immutable/assets/bg_tiled_corn.D22ZwTZ0.png +0 -0
  146. package/.svelte-kit/output/server/_app/immutable/assets/bg_tiled_pineapple.D28N65_A.png +0 -0
  147. package/.svelte-kit/output/server/_app/immutable/assets/bg_tiled_reinhard.D22NV0xw.png +0 -0
  148. package/.svelte-kit/output/server/_app/immutable/assets/bg_tiled_tomato.O9Z7_E07.png +0 -0
  149. package/.svelte-kit/output/server/_app/immutable/assets/bg_tiled_turnip.DMU0uHH4.png +0 -0
  150. package/.svelte-kit/output/server/_app/immutable/assets/footage-chef-wings.dVBm8Uit.gif +0 -0
  151. package/.svelte-kit/output/server/_app/immutable/assets/header-hep-cat.DcyPS3Oy.mp4 +0 -0
  152. package/.svelte-kit/output/server/_app/immutable/assets/header-pengi.DWAOeO4q.mp4 +0 -0
  153. package/.svelte-kit/output/server/_app/immutable/assets/header-soulwork.BQRWmhTu.mp4 +0 -0
  154. package/.svelte-kit/output/server/_app/immutable/assets/placeholder_circle.Ij3bN7bI.png +0 -0
  155. package/.svelte-kit/output/server/_app/immutable/assets/seaweed-showcase.TTVTTC5m.mp4 +0 -0
  156. package/.svelte-kit/output/server/_app/immutable/assets/weaver-footage.sjDEbkrX.gif +0 -0
  157. package/.svelte-kit/output/server/_app/immutable/assets/window-set.IpgsYUna.png +0 -0
  158. package/.svelte-kit/output/server/chunks/CreateUrl.js +17 -0
  159. package/.svelte-kit/output/server/chunks/DialogManagerStore.js +1412 -0
  160. package/.svelte-kit/output/server/chunks/NavigationComponent.svelte_svelte_type_style_lang.js +272 -0
  161. package/.svelte-kit/output/server/chunks/PineappleBaseLayout.svelte_svelte_type_style_lang.js +50 -0
  162. package/.svelte-kit/output/server/chunks/PineappleSlideToggle.js +120 -0
  163. package/.svelte-kit/output/server/chunks/ProgressBar.svelte_svelte_type_style_lang.js +60 -0
  164. package/.svelte-kit/output/server/chunks/SeaweedTemplate.js +786 -0
  165. package/.svelte-kit/output/server/chunks/_page.js +4 -0
  166. package/.svelte-kit/output/server/chunks/_page2.js +4 -0
  167. package/.svelte-kit/output/server/chunks/_page3.js +4 -0
  168. package/.svelte-kit/output/server/chunks/_page4.js +4 -0
  169. package/.svelte-kit/output/server/chunks/_page5.js +4 -0
  170. package/.svelte-kit/output/server/chunks/_page6.js +4 -0
  171. package/.svelte-kit/output/server/chunks/_page7.js +4 -0
  172. package/.svelte-kit/output/server/chunks/_page8.js +4 -0
  173. package/.svelte-kit/output/server/chunks/client.js +12 -0
  174. package/.svelte-kit/output/server/chunks/close.js +262 -0
  175. package/.svelte-kit/output/server/chunks/exports.js +200 -0
  176. package/.svelte-kit/output/server/chunks/index.js +52 -0
  177. package/.svelte-kit/output/server/chunks/index2.js +34 -0
  178. package/.svelte-kit/output/server/chunks/index3.js +48 -0
  179. package/.svelte-kit/output/server/chunks/index4.js +12 -0
  180. package/.svelte-kit/output/server/chunks/internal.js +247 -0
  181. package/.svelte-kit/output/server/chunks/prod-ssr.js +6 -0
  182. package/.svelte-kit/output/server/chunks/ssr.js +322 -0
  183. package/.svelte-kit/output/server/chunks/stores.js +5 -0
  184. package/.svelte-kit/output/server/chunks/stores2.js +26 -0
  185. package/.svelte-kit/output/server/chunks/stores3.js +38 -0
  186. package/.svelte-kit/output/server/chunks/stores4.js +79 -0
  187. package/.svelte-kit/output/server/entries/endpoints/api/create-url/_server.ts.js +21 -0
  188. package/.svelte-kit/output/server/entries/endpoints/api/get-latest-blogs/_server.ts.js +11 -0
  189. package/.svelte-kit/output/server/entries/pages/(pineapple)/_layout.svelte.js +291 -0
  190. package/.svelte-kit/output/server/entries/pages/(pineapple)/_page.svelte.js +21 -0
  191. package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(extra-pages)/page1/_page.svelte.js +20 -0
  192. package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(extra-pages)/page2/_page.svelte.js +20 -0
  193. package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(extra-pages)/page3/_page.svelte.js +20 -0
  194. package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(extra-pages)/page3/page5/_page.svelte.js +20 -0
  195. package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(extra-pages)/page3/page6/_page.svelte.js +20 -0
  196. package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(extra-pages)/page3/page7/(test_layout)/page8/_page.svelte.js +20 -0
  197. package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(extra-pages)/page3/page7/_page.svelte.js +20 -0
  198. package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(extra-pages)/page4/_page.svelte.js +16 -0
  199. package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(pineapple)/_page.svelte.js +333 -0
  200. package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(pineapple)/_page.ts.js +9 -0
  201. package/.svelte-kit/output/server/entries/pages/(seaweed)/_layout.svelte.js +301 -0
  202. package/.svelte-kit/output/server/entries/pages/(seaweed)/portfolio/_page.svelte.js +19 -0
  203. package/.svelte-kit/output/server/entries/pages/(seaweed)/portfolio/_page.ts.js +9 -0
  204. package/.svelte-kit/output/server/entries/pages/(seaweed)/portfolio/actual/_page.svelte.js +23 -0
  205. package/.svelte-kit/output/server/entries/pages/(seaweed)/portfolio/actual/_page.ts.js +9 -0
  206. package/.svelte-kit/output/server/entries/pages/(seaweed)/portfolio/actual/_slug_/_page.server.ts.js +32 -0
  207. package/.svelte-kit/output/server/entries/pages/(seaweed)/portfolio/actual/_slug_/_page.svelte.js +39 -0
  208. package/.svelte-kit/output/server/entries/pages/_error.svelte.js +29 -0
  209. package/.svelte-kit/output/server/entries/pages/_layout.svelte.js +58 -0
  210. package/.svelte-kit/output/server/index.js +2955 -0
  211. package/.svelte-kit/output/server/internal.js +13 -0
  212. package/.svelte-kit/output/server/manifest-full.js +147 -0
  213. package/.svelte-kit/output/server/manifest.js +147 -0
  214. package/.svelte-kit/output/server/nodes/0.js +8 -0
  215. package/.svelte-kit/output/server/nodes/1.js +8 -0
  216. package/.svelte-kit/output/server/nodes/10.js +8 -0
  217. package/.svelte-kit/output/server/nodes/11.js +8 -0
  218. package/.svelte-kit/output/server/nodes/12.js +8 -0
  219. package/.svelte-kit/output/server/nodes/13.js +10 -0
  220. package/.svelte-kit/output/server/nodes/14.js +10 -0
  221. package/.svelte-kit/output/server/nodes/15.js +10 -0
  222. package/.svelte-kit/output/server/nodes/16.js +10 -0
  223. package/.svelte-kit/output/server/nodes/2.js +8 -0
  224. package/.svelte-kit/output/server/nodes/3.js +8 -0
  225. package/.svelte-kit/output/server/nodes/4.js +8 -0
  226. package/.svelte-kit/output/server/nodes/5.js +8 -0
  227. package/.svelte-kit/output/server/nodes/6.js +8 -0
  228. package/.svelte-kit/output/server/nodes/7.js +8 -0
  229. package/.svelte-kit/output/server/nodes/8.js +8 -0
  230. package/.svelte-kit/output/server/nodes/9.js +8 -0
  231. package/.svelte-kit/types/route_meta_data.json +1 -2
  232. package/.svelte-kit/types/src/routes/(seaweed)/portfolio/$types.d.ts +2 -9
  233. package/dist/.gitignore +1 -1
  234. package/dist/template/seaweed/ChumBucket.svelte +60 -60
  235. package/dist/template/seaweed/SeaweedTemplate.svelte +36 -158
  236. package/dist/template/seaweed/SeaweedTemplate.svelte.d.ts +6 -0
  237. package/dist/template/seaweed/SeaweedTemplateData.js +3 -9
  238. package/dist/template/seaweed/entries/EntryProps.d.ts +6 -0
  239. package/dist/template/seaweed/entries/WorkExperience.svelte +143 -0
  240. package/dist/template/seaweed/entries/WorkExperience.svelte.d.ts +18 -0
  241. package/dist/template/seaweed/entry_order_config/EntryOrderConfig.svelte +2 -2
  242. package/dist/template/seaweed/entry_order_config/EntryOrderConfig.svelte.d.ts +1 -0
  243. package/package.json +1 -2
  244. package/src/lib/.gitignore +1 -1
  245. package/src/lib/api/GetLatestBlogs.ts +7 -7
  246. package/src/lib/api/index.ts +3 -3
  247. package/src/lib/template/seaweed/ChumBucket.svelte +75 -75
  248. package/src/lib/template/seaweed/SeaweedTemplate.svelte +41 -161
  249. package/src/lib/template/seaweed/SeaweedTemplateData.ts +3 -9
  250. package/src/lib/template/seaweed/entries/EntryProps.ts +7 -0
  251. package/src/lib/template/seaweed/entries/WorkExperience.svelte +146 -0
  252. package/src/lib/template/seaweed/entry_order_config/EntryOrderConfig.svelte +1 -2
  253. package/src/routes/(seaweed)/portfolio/+page.svelte +12 -1
  254. package/src/routes/(seaweed)/portfolio/actual/+page.svelte +9 -0
  255. package/src/routes/(seaweed)/portfolio/actual/[slug]/+page.svelte +8 -0
  256. package/src/routes/api/get-latest-blogs/+server.ts +4 -4
  257. package/.env +0 -5
  258. package/.svelte-kit/__package__/scripts/SetDefaultEnvironment.d.ts +0 -1
  259. package/.svelte-kit/__package__/scripts/SetDefaultEnvironment.js +0 -41
  260. package/.svelte-kit/types/src/routes/(seaweed)/portfolio/proxy+page.server.ts +0 -46
  261. package/dist/scripts/SetDefaultEnvironment.d.ts +0 -1
  262. package/dist/scripts/SetDefaultEnvironment.js +0 -41
  263. package/src/lib/scripts/SetDefaultEnvironment.ts +0 -45
  264. package/src/routes/(seaweed)/portfolio/+page.server.ts +0 -44
@@ -1,7 +1,7 @@
1
- export const GetLatestBlogs = async () => {
2
- const resp = await fetch("http://turnipxenon.com/api/get-latest-blogs");
3
- if (!resp.ok) {
4
- return new Response(JSON.stringify([]));
5
- }
6
- return new Response(JSON.stringify(await resp.json()));
7
- };
1
+ export const GetLatestBlogs = async () => {
2
+ const resp = await fetch("http://turnipxenon.com/api/get-latest-blogs");
3
+ if (!resp.ok) {
4
+ return new Response(JSON.stringify([]));
5
+ }
6
+ return new Response(JSON.stringify(await resp.json()));
7
+ };
@@ -1,3 +1,3 @@
1
- // noinspection JSUnusedGlobalSymbols
2
-
3
- export * from "./GetLatestBlogs";
1
+ // noinspection JSUnusedGlobalSymbols
2
+
3
+ export * from "./GetLatestBlogs";
@@ -1,75 +1,75 @@
1
- <script lang="ts">
2
- import Card from "$pkg/components/Card.svelte";
3
- import { type PageMeta } from "$pkg";
4
- import { onMount } from "svelte";
5
-
6
- let pageMetaList: PageMeta[] = [];
7
- const loadPageMeta = async () => {
8
- fetch("/api/get-latest-blogs").then(resp => resp.json()).then(json => {
9
- pageMetaList = json as PageMeta[];
10
- });
11
- };
12
-
13
- onMount(() => {
14
- loadPageMeta();
15
- });
16
- </script>
17
-
18
- <Card>
19
- <div slot="content" class="chum-bucket">
20
- <h2>More about me...</h2>
21
- <p>Check out the latest things I've been rambling about at
22
- <a href="https://turnipxenon.com" target="_blank">turnipxenon.com</a> or at
23
- <a href="https://turnipxenon.com/blogs/coding-chagrin" target="_blank">turnipxenon.com/blogs/coding-chagrin.</a>
24
- </p>
25
-
26
- {#if pageMetaList.length > 0}
27
- <h3><b>My latest blogs (sounds too fancy)</b></h3>
28
- {/if}
29
-
30
- <div class="chum-bucket-grid">
31
- {#each pageMetaList as pageMeta}
32
- <div class="chum-bucket-item">
33
- {#if pageMeta.imageUrl}
34
- <img src={`https://turnipxenon.com${pageMeta.imageUrl}`}
35
- class="chum-bucket-image"
36
- alt={pageMeta.imageAlt}>
37
- {/if}
38
- <div>
39
- <h3><a href={`https://turnipxenon.com/${pageMeta.relativeLink}`}>{pageMeta.title}</a></h3>
40
- <p>{pageMeta.description}</p>
41
- </div>
42
- </div>
43
- {/each}
44
- </div>
45
- </div>
46
- </Card>
47
-
48
- <style lang="postcss">
49
- .chum-bucket-item {
50
- width: 100%;
51
- display: flex;
52
- flex-direction: row;
53
- align-items: flex-start;
54
- }
55
-
56
- .chum-bucket-image {
57
- max-width: 10em;
58
- height: auto;
59
- margin-top: 0.5em;
60
- margin-inline-end: 1em;
61
- }
62
-
63
-
64
- .chum-bucket {
65
- padding: 1.5lh 2em;
66
- max-width: 600px;
67
- }
68
-
69
- .chum-bucket-grid {
70
- display: flex;
71
- flex-direction: column;
72
- margin-top: 0.5lh;
73
- gap: 0.5lh;
74
- }
75
- </style>
1
+ <script lang="ts">
2
+ import Card from "$pkg/components/Card.svelte";
3
+ import { type PageMeta } from "$pkg";
4
+ import { onMount } from "svelte";
5
+
6
+ let pageMetaList: PageMeta[] = [];
7
+ const loadPageMeta = async () => {
8
+ fetch("/api/get-latest-blogs").then(resp => resp.json()).then(json => {
9
+ pageMetaList = json as PageMeta[];
10
+ });
11
+ };
12
+
13
+ onMount(() => {
14
+ loadPageMeta();
15
+ });
16
+ </script>
17
+
18
+ <Card>
19
+ <div slot="content" class="chum-bucket">
20
+ <h2>More about me...</h2>
21
+ <p>Check out the latest things I've been rambling about at
22
+ <a href="https://turnipxenon.com" target="_blank">turnipxenon.com</a> or at
23
+ <a href="https://turnipxenon.com/blogs/coding-chagrin" target="_blank">turnipxenon.com/blogs/coding-chagrin.</a>
24
+ </p>
25
+
26
+ {#if pageMetaList.length > 0}
27
+ <h3><b>My latest blogs (sounds too fancy)</b></h3>
28
+ {/if}
29
+
30
+ <div class="chum-bucket-grid">
31
+ {#each pageMetaList as pageMeta}
32
+ <div class="chum-bucket-item">
33
+ {#if pageMeta.imageUrl}
34
+ <img src={`https://turnipxenon.com${pageMeta.imageUrl}`}
35
+ class="chum-bucket-image"
36
+ alt={pageMeta.imageAlt}>
37
+ {/if}
38
+ <div>
39
+ <h3><a href={`https://turnipxenon.com/${pageMeta.relativeLink}`}>{pageMeta.title}</a></h3>
40
+ <p>{pageMeta.description}</p>
41
+ </div>
42
+ </div>
43
+ {/each}
44
+ </div>
45
+ </div>
46
+ </Card>
47
+
48
+ <style lang="postcss">
49
+ .chum-bucket-item {
50
+ width: 100%;
51
+ display: flex;
52
+ flex-direction: row;
53
+ align-items: flex-start;
54
+ }
55
+
56
+ .chum-bucket-image {
57
+ max-width: 10em;
58
+ height: auto;
59
+ margin-top: 0.5em;
60
+ margin-inline-end: 1em;
61
+ }
62
+
63
+
64
+ .chum-bucket {
65
+ padding: 1.5lh 2em;
66
+ max-width: 600px;
67
+ }
68
+
69
+ .chum-bucket-grid {
70
+ display: flex;
71
+ flex-direction: column;
72
+ margin-top: 0.5lh;
73
+ gap: 0.5lh;
74
+ }
75
+ </style>
@@ -1,20 +1,17 @@
1
1
  <script lang="ts">
2
- import { afterUpdate, onMount } from "svelte";
2
+ import { afterUpdate, type ComponentType, onMount } from "svelte";
3
3
  import EntryOrderConfig from "$pkg/template/seaweed/entry_order_config/EntryOrderConfig.svelte";
4
4
  import { runChaos } from "$pkg/template/seaweed/RunChaos";
5
5
  import SocialSection from "$pkg/components/SocialSection.svelte";
6
6
  import "./seaweed.postcss";
7
7
  import SeaweedBaseLayout from "$pkg/components/layouts/SeaweedBaseLayout.svelte";
8
- import { Accordion, AccordionItem, CodeBlock } from "@skeletonlabs/skeleton";
8
+ import { CodeBlock } from "@skeletonlabs/skeleton";
9
9
  import { page } from "$app/stores";
10
10
  import Card from "$pkg/components/Card.svelte";
11
- import ElementVisbilityDetector from "$pkg/components/ElementVisbilityDetector.svelte";
12
11
  import {
13
- AllGroupedEntriesProjectFirst,
12
+ type ComponentMeta,
14
13
  type EntryGroup,
15
- GetEntryFromGlobal,
16
14
  type SeaweedTemplateData,
17
- seaweedTemplateData,
18
15
  TurnGroupEntriesMutable
19
16
  } from "./SeaweedTemplateData";
20
17
  import type { EntryProps } from "$pkg/template/seaweed/entries/EntryProps";
@@ -24,21 +21,29 @@
24
21
  import { Chip } from "$pkg/index";
25
22
  import ChumBucket from "$pkg/template/seaweed/ChumBucket.svelte";
26
23
 
24
+ export let seaweedTemplateData: SeaweedTemplateData;
25
+ export let projectFirstGroupedEntries: ReadonlyArray<EntryGroup>;
26
+ export let getEntryFromGlobal: (name: string) => undefined | ComponentMeta;
27
27
  export let letChaos = true;
28
28
  export let name = "Turnip";
29
29
  export let email = "turnipxenon@gmail.com";
30
30
  export let linkedinSlug = "turnip-xenon";
31
31
  export let domain = "http://localhost:5173/portfolio/actual/";
32
32
  export let serverSideQueryParams = "";
33
+ export let experienceSection: ComponentType;
33
34
 
34
35
  // region query params
35
36
  const entryProps: EntryProps = {
36
- email
37
+ email,
38
+ letChaos,
39
+ linkedinSlug,
40
+ name,
41
+ seaweedTemplateData
37
42
  };
38
43
 
44
+ let isVisible = true;
39
45
  const paramQTSet = new Set<string>();
40
46
 
41
- let isVisible = true;
42
47
  let isAdvanceSettingOn = false;
43
48
  $: isSocialsGone = !isVisible;
44
49
 
@@ -94,7 +99,6 @@
94
99
 
95
100
  orderParam.split(",").forEach(groupDefinition => {
96
101
  const pair = groupDefinition.split(":");
97
- console.log(pair);
98
102
  if (pair.length >= 2) {
99
103
  const group: EntryGroup = {
100
104
  name: pair[0],
@@ -103,7 +107,7 @@
103
107
  };
104
108
 
105
109
  pair[1].split("|").forEach(e => {
106
- const component = GetEntryFromGlobal(e);
110
+ const component = getEntryFromGlobal(e);
107
111
  if (component) {
108
112
  group.items.push(component);
109
113
  }
@@ -116,7 +120,7 @@
116
120
 
117
121
  seaweedTemplateData.groupedEntries = seaweedTemplateData.groupedEntries;
118
122
  } else if (gameSectionFirstParam === "false") {
119
- seaweedTemplateData.groupedEntries = TurnGroupEntriesMutable(AllGroupedEntriesProjectFirst);
123
+ seaweedTemplateData.groupedEntries = TurnGroupEntriesMutable(projectFirstGroupedEntries);
120
124
  }
121
125
  // endregion
122
126
 
@@ -180,6 +184,10 @@
180
184
  let advancedUrl = domain;
181
185
  let advancedQuery = "";
182
186
  const updateUrl = (seaweedTemplateData: SeaweedTemplateData) => {
187
+ if (seaweedTemplateData === undefined) {
188
+ return;
189
+ }
190
+
183
191
  const queryParams: string[] = [];
184
192
 
185
193
  if (orderUrl) {
@@ -226,157 +234,28 @@
226
234
  --qt-font-weight: ${qtfontWeight};${additionalFontWeight};
227
235
  visibility: ${mainVisibility};
228
236
  `}>
229
-
230
- <div class="experience-and-about-div">
231
-
232
- <div class="greater-about-div">
233
-
234
- <Card includeDataNoSnippet={false}>
235
- <section class="section-card" slot="content">
236
-
237
- <h1>About</h1>
238
-
239
- <p>
240
- Hi! My name is {name}! I work as a software developer. Outside of that, I like making games, and
241
- trying to do everything in between required to make one. I have some showcased below, our visit
242
- my itch.io page for more of them.
243
- </p>
244
- <!-- todo: link the degree details idk -->
245
- <p>
246
- I also graduated with BS Computing Science, Specializing in Software Practice, and a
247
- certificate in Computer Game Development at University of Alberta.
248
- </p>
249
- {#if seaweedTemplateData.shouldAddFunNote}
250
- <p>
251
- I'm inspired by games like Harvest Moon: Friends of Mineral Town, Rune Factory 4, Theatrhythm,
252
- Bravely Default: Flying Fairy, Boku no Natsuyasumi 2, and A Short Hike.
253
- </p>
254
- {/if}
255
-
256
- <!-- todo: maybe put cute stuff here -->
257
- <!-- </ToggleableContent>-->
258
- </section>
259
- </Card>
260
-
261
- <Card>
262
- <section class="section-card" slot="content">
263
- <SocialSection email={email} linkedinSlug={linkedinSlug}></SocialSection>
264
- <ElementVisbilityDetector bind:isVisible={isVisible}>
265
- </ElementVisbilityDetector>
237
+ <svelte:component this={experienceSection}
238
+ entryProps={entryProps}
239
+ bind:isVisible={isVisible}
240
+ ></svelte:component>
241
+
242
+ {#if seaweedTemplateData}
243
+ {#each seaweedTemplateData.groupedEntries as group}
244
+ {#if group.items.length > 0}
245
+ <Card>
246
+ <section class="section-card title-card" slot="content">
247
+ <h1 class="text-center">{group.name}</h1>
248
+ </section>
249
+ </Card>
250
+
251
+ <section class={group.gridClass}>
252
+ {#each group.items as entry}
253
+ <svelte:component this={entry.component} props={entryProps}></svelte:component>
254
+ {/each}
266
255
  </section>
267
- </Card>
268
-
269
- </div>
270
-
271
- <Card>
272
- <section class="section-card" slot="content">
273
- <h1>Experience</h1>
274
-
275
- <h2>Highlight</h2>
276
- <p>Worked on Go backend microservices and Typescript React frontend app, serving <b>over 30 million daily
277
- active users</b> at Twitch</p>
278
-
279
- <h2>Software Engineer</h2>
280
- <div class="two-column-separated">
281
- <div>July 2023 – January 2024</div>
282
- <div style="text-align: end">Twitch, Remote</div>
283
- </div>
284
- <ul>
285
- <li>
286
- Contributed to
287
- <span class="qt-go">Golang</span>
288
- microservices and
289
- <span class="qt-ts">Typescript</span>
290
- <span class="qt-react">React</span> codebases, across several teams, to accommodate public-facing user safety features to better comply with EU’s Digital Services Act, which applies to no more than
291
- <a href="https://safety.twitch.tv/s/article/Digital-Services-Act-Information?language=en_US">30.5 million users</a>
292
- . Work includes feature flags, alarms, unit tests, end-to-end testing, and documentation.
293
- </li>
294
- <li>
295
- Improved observability for upcoming features by setting up new AWS resources to integrate internal data platform tools with existing alarms in our team’s microservice, utilizing
296
- <span class="qt-aws qt-observability">Cloudwatch</span>,
297
- <span class="qt-aws qt-observability">Grafana</span>,
298
- <span class="qt-aws">Kinesis Data Stream</span>,
299
- <span class="qt-aws qt-infra">AWS CDK (infrastructure as code)</span>, and
300
- <span class="qt-aws qt-cicd">CodePipeline (CI/CD)</span>
301
- </li>
302
- </ul>
303
- <br>
304
-
305
- <h2>Software Engineer Intern</h2>
306
- <div class="two-column-separated">
307
- <div>May 2022 – Aug 2022</div>
308
- <div style="text-align: end">Twitch, San Francisco</div>
309
- </div>
310
- <ul>
311
- <li>
312
- Built a <span class="qt-infra">load testing service</span> that can be configured to generate different
313
- message types at different volumes that can be easily extended to target different chat services
314
- </li>
315
- <li>
316
- Used Twitch’s set of custom tools, including Twitch’s custom RPC protocol, to create a backend
317
- service with business logic written in <span class="qt-go">Go</span> and cloud infrastructure utilizing
318
- <span
319
- class="qt-infra qt-aws">ECS on Fargate, Cloudwatch, and DynamoDB</span>
320
- , defined in <span class="qt-ts">Typescript</span>-flavored CDK
321
- </li>
322
- <li>
323
- Wrote a technical specification document for the service’s MVP and possible future features, and
324
- additional documentation on how to use the service and how to extend the load testing service to include
325
- new services to test
326
- </li>
327
- </ul>
328
- <br>
329
- <!-- todo: turn off flashing when accordion is expanded -->
330
- <Accordion>
331
- <AccordionItem>
332
- <div slot="summary">
333
- <h2 class="accordion-header">More experience</h2>
334
- </div>
335
- <svelte:fragment slot="content">
336
- <section class="more-section">
337
- {#if (!letChaos)}
338
- <h2>Software Engineer Intern</h2>
339
- <div class="two-column-separated">
340
- <div>May 2021 – Dec 2021</div>
341
- <div style="text-align: end">Twitch / Amazon Web Services Canada, Remote</div>
342
- </div>
343
- <ul>
344
- <li>
345
- Implemented and wrote tests for a feature in Twitch’s
346
- <span class="qt-go">Golang</span> backend authentication microservices and
347
- <span class="qt-ts">Typescript</span>
348
- <span class="qt-react">React</span> frontend web app that will help suggest security improvements to
349
- <b>over 100k+ users daily</b>
350
- </li>
351
- </ul>
352
- {:else}
353
- niko baikal seal from toba aquarium
354
- {/if}
355
- <br>
356
- </section>
357
- </svelte:fragment>
358
- </AccordionItem>
359
- </Accordion>
360
- </section>
361
- </Card>
362
-
363
- </div>
364
-
365
- {#each seaweedTemplateData.groupedEntries as group}
366
- {#if group.items.length > 0}
367
- <Card>
368
- <section class="section-card title-card" slot="content">
369
- <h1 class="text-center">{group.name}</h1>
370
- </section>
371
- </Card>
372
-
373
- <section class={group.gridClass}>
374
- {#each group.items as entry}
375
- <svelte:component this={entry.component} props={entryProps}></svelte:component>
376
- {/each}
377
- </section>
378
- {/if}
379
- {/each}
256
+ {/if}
257
+ {/each}
258
+ {/if}
380
259
 
381
260
  <ChumBucket></ChumBucket>
382
261
 
@@ -420,6 +299,7 @@
420
299
  </div>
421
300
 
422
301
  <EntryOrderConfig bind:seaweedEntries={seaweedTemplateData.groupedEntries}
302
+ seaweedTemplateData={seaweedTemplateData}
423
303
  bind:orderUrl={orderUrl}
424
304
  updateUrl={updateUrl}></EntryOrderConfig>
425
305
 
@@ -35,9 +35,7 @@ export const GameEntries: Readonly<EntryGroup> = {
35
35
  items: [
36
36
  { name: "Pengi", component: Pengi },
37
37
  { name: "Hepcat", component: Hepcat },
38
- { name: "Chef Wings", component: ChefWings },
39
- { name: "Soulwork", component: Soulwork },
40
- { name: "Itch Promo", component: ItchPromo }
38
+ { name: "Chef Wings", component: ChefWings }
41
39
  ],
42
40
  gridClass: GroupGridClass.Games.toString()
43
41
  };
@@ -45,13 +43,9 @@ export const GameEntries: Readonly<EntryGroup> = {
45
43
  export const ProjectEntries: Readonly<EntryGroup> = {
46
44
  name: DefaultHeader.Projects.toString(),
47
45
  items: [
48
- { name: "Migrante Alberta", component: MigranteAlberta },
49
- { name: "Decentralized Social Media", component: DecentralizedSocialMedia },
46
+ { name: "Soulwork", component: Soulwork },
50
47
  { name: "Customized YarnSpinner", component: CustomizedYarnspinner },
51
- { name: "Full Stack C", component: FullStackC },
52
- { name: "Workset", component: Workset },
53
- { name: "This Webpage", component: ThisWebpage },
54
- { name: "Mock Uber App", component: MockUberApp }
48
+ { name: "This Webpage", component: ThisWebpage }
55
49
  ],
56
50
  gridClass: GroupGridClass.Projects.toString()
57
51
  };
@@ -1,3 +1,5 @@
1
+ import type { SeaweedTemplateData } from "$pkg/template/seaweed/SeaweedTemplateData";
2
+
1
3
  export enum DefaultHeader {
2
4
  Games = "Games",
3
5
  Projects = "Projects"
@@ -5,6 +7,11 @@ export enum DefaultHeader {
5
7
 
6
8
  export interface EntryProps {
7
9
  email: string;
10
+ letChaos: boolean;
11
+ linkedinSlug: string;
12
+ name: string;
13
+ seaweedTemplateData: SeaweedTemplateData;
14
+ isVisible: boolean;
8
15
  }
9
16
 
10
17
  export interface GroupedEntry {
@@ -0,0 +1,146 @@
1
+ <script lang="ts">
2
+ import SocialSection from "$pkg/components/SocialSection.svelte";
3
+ import Card from "$pkg/components/Card.svelte";
4
+ import { Accordion, AccordionItem } from "@skeletonlabs/skeleton";
5
+ import ElementVisbilityDetector from "$pkg/components/ElementVisbilityDetector.svelte";
6
+ import type { EntryProps } from "$pkg/template/seaweed/entries/EntryProps";
7
+
8
+ export let entryProps: EntryProps;
9
+ export let isVisible: boolean;
10
+ let { email, letChaos, linkedinSlug, name, seaweedTemplateData } = entryProps;
11
+ </script>
12
+
13
+ <div class="experience-and-about-div">
14
+
15
+ <div class="greater-about-div">
16
+
17
+ <Card includeDataNoSnippet={false}>
18
+ <section class="section-card" slot="content">
19
+
20
+ <h1>About</h1>
21
+
22
+ <p>
23
+ Hi! My name is {name}! I work as a software developer. Outside of that, I like making games, and
24
+ trying to do everything in between required to make one. I have some showcased below, our visit
25
+ my itch.io page for more of them.
26
+ </p>
27
+ <!-- todo: link the degree details idk -->
28
+ <p>
29
+ I also graduated with BS Computing Science, Specializing in Software Practice, and a
30
+ certificate in Computer Game Development at University of Alberta.
31
+ </p>
32
+ {#if seaweedTemplateData?.shouldAddFunNote}
33
+ <p>
34
+ I'm inspired by games like Harvest Moon: Friends of Mineral Town, Rune Factory 4, Theatrhythm,
35
+ Bravely Default: Flying Fairy, Boku no Natsuyasumi 2, and A Short Hike.
36
+ </p>
37
+ {/if}
38
+
39
+ <!-- todo: maybe put cute stuff here -->
40
+ <!-- </ToggleableContent>-->
41
+ </section>
42
+ </Card>
43
+
44
+ <Card>
45
+ <section class="section-card" slot="content">
46
+ <SocialSection email={email} linkedinSlug={linkedinSlug}></SocialSection>
47
+ <ElementVisbilityDetector bind:isVisible={isVisible}>
48
+ </ElementVisbilityDetector>
49
+ </section>
50
+ </Card>
51
+
52
+ </div>
53
+
54
+ <Card>
55
+ <section class="section-card" slot="content">
56
+ <h1>Experience</h1>
57
+
58
+ <h2>Highlight</h2>
59
+ <p>Worked on Go backend microservices and Typescript React frontend app, serving <b>over 30 million daily
60
+ active users</b> at Twitch (an Amazon Web Services subsidiary)</p>
61
+
62
+ <h2>Software Engineer</h2>
63
+ <div class="two-column-separated">
64
+ <div>July 2023 – January 2024</div>
65
+ <div style="text-align: end">Twitch (Amazon Web Services), Remote</div>
66
+ </div>
67
+ <ul>
68
+ <li>
69
+ Contributed to
70
+ <span class="qt-go">Golang</span>
71
+ microservices and
72
+ <span class="qt-ts">Typescript</span>
73
+ <span class="qt-react">React</span> codebases, across several teams, to accommodate public-facing user safety features to better comply with EU’s Digital Services Act, which applies to no more than
74
+ <a href="https://safety.twitch.tv/s/article/Digital-Services-Act-Information?language=en_US">30.5 million users</a>
75
+ . Work includes feature flags, alarms, unit tests, end-to-end testing, and documentation.
76
+ </li>
77
+ <li>
78
+ Improved observability for upcoming features by setting up new AWS resources to integrate internal data platform tools with existing alarms in our team’s microservice, utilizing
79
+ <span class="qt-aws qt-observability">Cloudwatch</span>,
80
+ <span class="qt-aws qt-observability">Grafana</span>,
81
+ <span class="qt-aws">Kinesis Data Stream</span>,
82
+ <span class="qt-aws qt-infra">AWS CDK (infrastructure as code)</span>, and
83
+ <span class="qt-aws qt-cicd">CodePipeline (CI/CD)</span>
84
+ </li>
85
+ </ul>
86
+ <br>
87
+
88
+ <h2>Software Engineer Intern</h2>
89
+ <div class="two-column-separated">
90
+ <div>May 2022 – Aug 2022</div>
91
+ <div style="text-align: end">Twitch (Amazon Web Services), San Francisco</div>
92
+ </div>
93
+ <ul>
94
+ <li>
95
+ Built a <span class="qt-infra">load testing service</span> that can be configured to generate different
96
+ message types at different volumes that can be easily extended to target different chat services
97
+ </li>
98
+ <li>
99
+ Used Twitch’s set of custom tools, including Twitch’s custom RPC protocol, to create a backend
100
+ service with business logic written in <span class="qt-go">Go</span> and cloud infrastructure utilizing
101
+ <span
102
+ class="qt-infra qt-aws">ECS on Fargate, Cloudwatch, and DynamoDB</span>
103
+ , defined in <span class="qt-ts">Typescript</span>-flavored CDK
104
+ </li>
105
+ <li>
106
+ Wrote a technical specification document for the service’s MVP and possible future features, and
107
+ additional documentation on how to use the service and how to extend the load testing service to include
108
+ new services to test
109
+ </li>
110
+ </ul>
111
+ <br>
112
+ <!-- todo: turn off flashing when accordion is expanded -->
113
+ <Accordion>
114
+ <AccordionItem>
115
+ <div slot="summary">
116
+ <h2 class="accordion-header">More experience</h2>
117
+ </div>
118
+ <svelte:fragment slot="content">
119
+ <section class="more-section">
120
+ {#if (!letChaos)}
121
+ <h2>Software Engineer Intern</h2>
122
+ <div class="two-column-separated">
123
+ <div>May 2021 – Dec 2021</div>
124
+ <div style="text-align: end">Twitch (Amazon Web Services), Remote</div>
125
+ </div>
126
+ <ul>
127
+ <li>
128
+ Implemented and wrote tests for a feature in Twitch’s
129
+ <span class="qt-go">Golang</span> backend authentication microservices and
130
+ <span class="qt-ts">Typescript</span>
131
+ <span class="qt-react">React</span> frontend web app that will help suggest security improvements to
132
+ <b>over 100k+ users daily</b>
133
+ </li>
134
+ </ul>
135
+ {:else}
136
+ niko baikal seal from toba aquarium
137
+ {/if}
138
+ <br>
139
+ </section>
140
+ </svelte:fragment>
141
+ </AccordionItem>
142
+ </Accordion>
143
+ </section>
144
+ </Card>
145
+
146
+ </div>
@@ -5,15 +5,14 @@
5
5
  GetAllEntryFromGlobal,
6
6
  GetEntryFromGlobal,
7
7
  type SeaweedTemplateData,
8
- seaweedTemplateData
9
8
  } from "$pkg/template/seaweed/SeaweedTemplateData";
10
- import type { ComponentType } from "svelte";
11
9
  import { removeProxyWrapperOnString } from "./EntryOrderConfig";
12
10
  import ComboBoxWithButton from "$pkg/components/combo_box/ComboBoxWithButton.svelte";
13
11
  import CloseIcon from "$pkg/assets/icons/close.svg";
14
12
  import UpwardIcon from "$pkg/assets/icons/arrow-upward.svg";
15
13
  import "./entry-order-config.postcss";
16
14
 
15
+ export let seaweedTemplateData: SeaweedTemplateData;
17
16
  export let seaweedEntries: EntryGroup[];
18
17
  export let orderUrl: string;
19
18
  export let updateUrl: (data: SeaweedTemplateData) => void;