@turnipxenon/pineapple 2.4.72 → 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.
- package/.idea/shelf/Fix_attempt_for_slug/shelved.patch +63 -0
- package/.idea/shelf/Fix_attempt_for_slug.xml +4 -0
- package/.idea/workspace.xml +61 -45
- package/.svelte-kit/__package__/template/seaweed/SeaweedTemplate.svelte +36 -158
- package/.svelte-kit/__package__/template/seaweed/SeaweedTemplate.svelte.d.ts +6 -0
- package/.svelte-kit/__package__/template/seaweed/SeaweedTemplateData.js +3 -9
- package/.svelte-kit/__package__/template/seaweed/entries/EntryProps.d.ts +6 -0
- package/.svelte-kit/__package__/template/seaweed/entries/WorkExperience.svelte +143 -0
- package/.svelte-kit/__package__/template/seaweed/entries/WorkExperience.svelte.d.ts +18 -0
- package/.svelte-kit/__package__/template/seaweed/entry_order_config/EntryOrderConfig.svelte +2 -2
- package/.svelte-kit/__package__/template/seaweed/entry_order_config/EntryOrderConfig.svelte.d.ts +1 -0
- package/.svelte-kit/ambient.d.ts +1 -12
- package/.svelte-kit/generated/client/app.js +1 -1
- package/.svelte-kit/generated/client-optimized/app.js +47 -0
- package/.svelte-kit/generated/client-optimized/matchers.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/0.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/1.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/10.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/11.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/12.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/13.js +3 -0
- package/.svelte-kit/generated/client-optimized/nodes/14.js +3 -0
- package/.svelte-kit/generated/client-optimized/nodes/15.js +3 -0
- package/.svelte-kit/generated/client-optimized/nodes/16.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/2.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/3.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/4.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/5.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/6.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/7.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/8.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/9.js +1 -0
- package/.svelte-kit/generated/server/internal.js +1 -1
- package/.svelte-kit/output/client/.vite/manifest.json +694 -0
- package/.svelte-kit/output/client/_app/immutable/assets/0.BZfguPbX.css +10 -0
- package/.svelte-kit/output/client/_app/immutable/assets/13.BIMIBpeM.css +1 -0
- package/.svelte-kit/output/client/_app/immutable/assets/4.ClTmhFiH.css +1 -0
- package/.svelte-kit/output/client/_app/immutable/assets/NavigationComponent.DcXBcmND.css +1 -0
- package/.svelte-kit/output/client/_app/immutable/assets/PineappleBaseLayout.BJNkM2lS.css +1 -0
- package/.svelte-kit/output/client/_app/immutable/assets/ProgressBar.Cirlo5Z8.css +1 -0
- package/.svelte-kit/output/client/_app/immutable/assets/_layout.BgClWDWR.css +10 -0
- package/.svelte-kit/output/client/_app/immutable/assets/_page.BIMIBpeM.css +1 -0
- package/.svelte-kit/output/client/_app/immutable/assets/_page.ClTmhFiH.css +1 -0
- package/.svelte-kit/output/client/_app/immutable/assets/ares_blushing.B6Q0SsBp.webp +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/ares_disappointed.LOpkh7Q7.webp +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/ares_happy.Cz9WhdwO.webp +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/ares_lets_go.BxjJjKUv.webp +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/ares_logo.C_a3ZQAP.webp +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/ares_mad.DofDLDmM.webp +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/ares_neutral.Hp923t8N.webp +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/ares_slightly_mad.DdwOp6J5.webp +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/ares_surprised.BxbNH_w8.webp +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/ares_yay.EM2SNr0e.webp +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/bg_tiled_ares.DTcFskeK.png +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/bg_tiled_corn.D22ZwTZ0.png +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/bg_tiled_pineapple.D28N65_A.png +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/bg_tiled_reinhard.D22NV0xw.png +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/bg_tiled_tomato.O9Z7_E07.png +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/bg_tiled_turnip.DMU0uHH4.png +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/footage-chef-wings.dVBm8Uit.gif +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/header-hep-cat.DcyPS3Oy.mp4 +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/header-pengi.DWAOeO4q.mp4 +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/header-soulwork.BQRWmhTu.mp4 +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/placeholder_circle.Ij3bN7bI.png +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/seaweed-showcase.TTVTTC5m.mp4 +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/weaver-footage.sjDEbkrX.gif +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/window-set.IpgsYUna.png +0 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/DialogManagerStore.uKBS8wDS.js +7 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/NavigationComponent.svelte_svelte_type_style_lang.DfEIDspS.js +33 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/PineappleBaseLayout.svelte_svelte_type_style_lang.DYXCZxRe.js +5 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/PineappleSlideToggle.Cpnzq8nG.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/ProgressBar.svelte_svelte_type_style_lang.gYVkR-Pp.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/SeaweedTemplate.D8BMpFyR.js +42 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/Toast.CfxCQiZJ.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/_page.BCsXwAds.js +8 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/_page.CER3LJw4.js +8 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/_page.CJqYI1vC.js +7 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/_page.CRke_Vt-.js +8 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/_page.CdlE3ZqM.js +8 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/_page.D8F_fKwN.js +8 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/_page.DOjmKWLN.js +8 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/_page.UybeXHGE.js +8 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/close.BSBWitOq.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/each.SQ7NrLlo.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/entry.B9Zoh-6L.js +3 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/index.BID2VU8k.js +4 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/index.D_vqlE3X.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/index.DbwYs1Xx.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/index.lAcdadTB.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/index.qztrOHW4.js +6 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/preload-helper.BQ24v_F8.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/scheduler.DsUDfRdB.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/spread.CgU5AtxT.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/store.yyGEKEAe.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/stores.BVA7LtvQ.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/stores.CYFggfyT.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/stores.DEMC0xoI.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/stores.UNf3hc21.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/transitions.FXurGCgU.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/util.CpV-3U2s.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/entry/app.CsPg_tSG.js +7 -0
- package/.svelte-kit/output/client/_app/immutable/entry/start.BK4UymrI.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/0.DpxE_iuA.js +2 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/1.CfFtBDAU.js +4 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/10.B_ssKps0.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/11.B_ssKps0.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/12.CnXaShb6.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/13.D6l5S0uo.js +61 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/14.D-06Eivu.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/15.UZK1S76t.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/16.C52UdDDz.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/2.C_PeLfm6.js +5 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/3.DRZNxJIx.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/4.7r5Yp15Y.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/5.B_ssKps0.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/6.B_ssKps0.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/7.B_ssKps0.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/8.B_ssKps0.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/9.B_ssKps0.js +1 -0
- package/.svelte-kit/output/client/_app/version.json +1 -0
- package/.svelte-kit/output/client/default-card.png +0 -0
- package/.svelte-kit/output/client/favicon.png +0 -0
- package/.svelte-kit/output/client/robots.txt +5 -0
- package/.svelte-kit/output/server/.vite/manifest.json +617 -0
- package/.svelte-kit/output/server/_app/immutable/assets/NavigationComponent.DcXBcmND.css +1 -0
- package/.svelte-kit/output/server/_app/immutable/assets/PineappleBaseLayout.BJNkM2lS.css +1 -0
- package/.svelte-kit/output/server/_app/immutable/assets/ProgressBar.Cirlo5Z8.css +1 -0
- package/.svelte-kit/output/server/_app/immutable/assets/_layout.BgClWDWR.css +10 -0
- package/.svelte-kit/output/server/_app/immutable/assets/_page.BIMIBpeM.css +1 -0
- package/.svelte-kit/output/server/_app/immutable/assets/_page.ClTmhFiH.css +1 -0
- package/.svelte-kit/output/server/_app/immutable/assets/ares_blushing.B6Q0SsBp.webp +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/ares_disappointed.LOpkh7Q7.webp +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/ares_happy.Cz9WhdwO.webp +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/ares_lets_go.BxjJjKUv.webp +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/ares_logo.C_a3ZQAP.webp +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/ares_mad.DofDLDmM.webp +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/ares_neutral.Hp923t8N.webp +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/ares_slightly_mad.DdwOp6J5.webp +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/ares_surprised.BxbNH_w8.webp +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/ares_yay.EM2SNr0e.webp +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/bg_tiled_ares.DTcFskeK.png +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/bg_tiled_corn.D22ZwTZ0.png +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/bg_tiled_pineapple.D28N65_A.png +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/bg_tiled_reinhard.D22NV0xw.png +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/bg_tiled_tomato.O9Z7_E07.png +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/bg_tiled_turnip.DMU0uHH4.png +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/footage-chef-wings.dVBm8Uit.gif +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/header-hep-cat.DcyPS3Oy.mp4 +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/header-pengi.DWAOeO4q.mp4 +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/header-soulwork.BQRWmhTu.mp4 +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/placeholder_circle.Ij3bN7bI.png +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/seaweed-showcase.TTVTTC5m.mp4 +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/weaver-footage.sjDEbkrX.gif +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/window-set.IpgsYUna.png +0 -0
- package/.svelte-kit/output/server/chunks/CreateUrl.js +17 -0
- package/.svelte-kit/output/server/chunks/DialogManagerStore.js +1412 -0
- package/.svelte-kit/output/server/chunks/NavigationComponent.svelte_svelte_type_style_lang.js +272 -0
- package/.svelte-kit/output/server/chunks/PineappleBaseLayout.svelte_svelte_type_style_lang.js +50 -0
- package/.svelte-kit/output/server/chunks/PineappleSlideToggle.js +120 -0
- package/.svelte-kit/output/server/chunks/ProgressBar.svelte_svelte_type_style_lang.js +60 -0
- package/.svelte-kit/output/server/chunks/SeaweedTemplate.js +786 -0
- package/.svelte-kit/output/server/chunks/_page.js +4 -0
- package/.svelte-kit/output/server/chunks/_page2.js +4 -0
- package/.svelte-kit/output/server/chunks/_page3.js +4 -0
- package/.svelte-kit/output/server/chunks/_page4.js +4 -0
- package/.svelte-kit/output/server/chunks/_page5.js +4 -0
- package/.svelte-kit/output/server/chunks/_page6.js +4 -0
- package/.svelte-kit/output/server/chunks/_page7.js +4 -0
- package/.svelte-kit/output/server/chunks/_page8.js +4 -0
- package/.svelte-kit/output/server/chunks/client.js +12 -0
- package/.svelte-kit/output/server/chunks/close.js +262 -0
- package/.svelte-kit/output/server/chunks/exports.js +200 -0
- package/.svelte-kit/output/server/chunks/index.js +52 -0
- package/.svelte-kit/output/server/chunks/index2.js +34 -0
- package/.svelte-kit/output/server/chunks/index3.js +48 -0
- package/.svelte-kit/output/server/chunks/index4.js +12 -0
- package/.svelte-kit/output/server/chunks/internal.js +247 -0
- package/.svelte-kit/output/server/chunks/prod-ssr.js +6 -0
- package/.svelte-kit/output/server/chunks/ssr.js +322 -0
- package/.svelte-kit/output/server/chunks/stores.js +5 -0
- package/.svelte-kit/output/server/chunks/stores2.js +26 -0
- package/.svelte-kit/output/server/chunks/stores3.js +38 -0
- package/.svelte-kit/output/server/chunks/stores4.js +79 -0
- package/.svelte-kit/output/server/entries/endpoints/api/create-url/_server.ts.js +21 -0
- package/.svelte-kit/output/server/entries/endpoints/api/get-latest-blogs/_server.ts.js +11 -0
- package/.svelte-kit/output/server/entries/pages/(pineapple)/_layout.svelte.js +291 -0
- package/.svelte-kit/output/server/entries/pages/(pineapple)/_page.svelte.js +21 -0
- package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(extra-pages)/page1/_page.svelte.js +20 -0
- package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(extra-pages)/page2/_page.svelte.js +20 -0
- package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(extra-pages)/page3/_page.svelte.js +20 -0
- package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(extra-pages)/page3/page5/_page.svelte.js +20 -0
- package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(extra-pages)/page3/page6/_page.svelte.js +20 -0
- package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(extra-pages)/page3/page7/(test_layout)/page8/_page.svelte.js +20 -0
- package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(extra-pages)/page3/page7/_page.svelte.js +20 -0
- package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(extra-pages)/page4/_page.svelte.js +16 -0
- package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(pineapple)/_page.svelte.js +333 -0
- package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(pineapple)/_page.ts.js +9 -0
- package/.svelte-kit/output/server/entries/pages/(seaweed)/_layout.svelte.js +301 -0
- package/.svelte-kit/output/server/entries/pages/(seaweed)/portfolio/_page.svelte.js +19 -0
- package/.svelte-kit/output/server/entries/pages/(seaweed)/portfolio/_page.ts.js +9 -0
- package/.svelte-kit/output/server/entries/pages/(seaweed)/portfolio/actual/_page.svelte.js +23 -0
- package/.svelte-kit/output/server/entries/pages/(seaweed)/portfolio/actual/_page.ts.js +9 -0
- package/.svelte-kit/output/server/entries/pages/(seaweed)/portfolio/actual/_slug_/_page.server.ts.js +32 -0
- package/.svelte-kit/output/server/entries/pages/(seaweed)/portfolio/actual/_slug_/_page.svelte.js +39 -0
- package/.svelte-kit/output/server/entries/pages/_error.svelte.js +29 -0
- package/.svelte-kit/output/server/entries/pages/_layout.svelte.js +58 -0
- package/.svelte-kit/output/server/index.js +2955 -0
- package/.svelte-kit/output/server/internal.js +13 -0
- package/.svelte-kit/output/server/manifest-full.js +147 -0
- package/.svelte-kit/output/server/manifest.js +147 -0
- package/.svelte-kit/output/server/nodes/0.js +8 -0
- package/.svelte-kit/output/server/nodes/1.js +8 -0
- package/.svelte-kit/output/server/nodes/10.js +8 -0
- package/.svelte-kit/output/server/nodes/11.js +8 -0
- package/.svelte-kit/output/server/nodes/12.js +8 -0
- package/.svelte-kit/output/server/nodes/13.js +10 -0
- package/.svelte-kit/output/server/nodes/14.js +10 -0
- package/.svelte-kit/output/server/nodes/15.js +10 -0
- package/.svelte-kit/output/server/nodes/16.js +10 -0
- package/.svelte-kit/output/server/nodes/2.js +8 -0
- package/.svelte-kit/output/server/nodes/3.js +8 -0
- package/.svelte-kit/output/server/nodes/4.js +8 -0
- package/.svelte-kit/output/server/nodes/5.js +8 -0
- package/.svelte-kit/output/server/nodes/6.js +8 -0
- package/.svelte-kit/output/server/nodes/7.js +8 -0
- package/.svelte-kit/output/server/nodes/8.js +8 -0
- package/.svelte-kit/output/server/nodes/9.js +8 -0
- package/.svelte-kit/types/route_meta_data.json +1 -2
- package/.svelte-kit/types/src/routes/(seaweed)/portfolio/$types.d.ts +2 -9
- package/dist/template/seaweed/SeaweedTemplate.svelte +36 -158
- package/dist/template/seaweed/SeaweedTemplate.svelte.d.ts +6 -0
- package/dist/template/seaweed/SeaweedTemplateData.js +3 -9
- package/dist/template/seaweed/entries/EntryProps.d.ts +6 -0
- package/dist/template/seaweed/entries/WorkExperience.svelte +143 -0
- package/dist/template/seaweed/entries/WorkExperience.svelte.d.ts +18 -0
- package/dist/template/seaweed/entry_order_config/EntryOrderConfig.svelte +2 -2
- package/dist/template/seaweed/entry_order_config/EntryOrderConfig.svelte.d.ts +1 -0
- package/package.json +1 -2
- package/src/lib/template/seaweed/SeaweedTemplate.svelte +41 -161
- package/src/lib/template/seaweed/SeaweedTemplateData.ts +3 -9
- package/src/lib/template/seaweed/entries/EntryProps.ts +7 -0
- package/src/lib/template/seaweed/entries/WorkExperience.svelte +146 -0
- package/src/lib/template/seaweed/entry_order_config/EntryOrderConfig.svelte +1 -2
- package/src/routes/(seaweed)/portfolio/+page.svelte +12 -1
- package/src/routes/(seaweed)/portfolio/actual/+page.svelte +9 -0
- package/src/routes/(seaweed)/portfolio/actual/[slug]/+page.svelte +8 -0
- package/.env +0 -5
- package/.svelte-kit/__package__/scripts/SetDefaultEnvironment.d.ts +0 -1
- package/.svelte-kit/__package__/scripts/SetDefaultEnvironment.js +0 -41
- package/.svelte-kit/types/src/routes/(seaweed)/portfolio/proxy+page.server.ts +0 -46
- package/dist/scripts/SetDefaultEnvironment.d.ts +0 -1
- package/dist/scripts/SetDefaultEnvironment.js +0 -41
- package/src/lib/scripts/SetDefaultEnvironment.ts +0 -45
- package/src/routes/(seaweed)/portfolio/+page.server.ts +0 -44
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
Index: src/lib/template/seaweed/SeaweedTemplate.svelte
|
|
2
|
+
IDEA additional info:
|
|
3
|
+
Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
|
|
4
|
+
<+><script lang=\"ts\">\n\timport { afterUpdate, onMount } from \"svelte\";\n\timport EntryOrderConfig from \"$pkg/template/seaweed/entry_order_config/EntryOrderConfig.svelte\";\n\timport { runChaos } from \"$pkg/template/seaweed/RunChaos\";\n\timport SocialSection from \"$pkg/components/SocialSection.svelte\";\n\timport \"./seaweed.postcss\";\n\timport SeaweedBaseLayout from \"$pkg/components/layouts/SeaweedBaseLayout.svelte\";\n\timport { Accordion, AccordionItem, CodeBlock } from \"@skeletonlabs/skeleton\";\n\timport { page } from \"$app/stores\";\n\timport Card from \"$pkg/components/Card.svelte\";\n\timport ElementVisbilityDetector from \"$pkg/components/ElementVisbilityDetector.svelte\";\n\timport {\n\t\ttype EntryGroup,\n\t\ttype SeaweedTemplateData,\n\t\tTurnGroupEntriesMutable, type ComponentMeta\n\t} from \"./SeaweedTemplateData\";\n\timport type { EntryProps } from \"$pkg/template/seaweed/entries/EntryProps\";\n\timport { parseQueryTerms } from \"$pkg/template/seaweed/ParseQueryTerms\";\n\timport UrlShortenerForm from \"$pkg/template/seaweed/CreateUrlForm.svelte\";\n\timport PineappleSlideToggle from \"$pkg/components/PineappleSlideToggle.svelte\";\n\timport { Chip } from \"$pkg/index\";\n\timport ChumBucket from \"$pkg/template/seaweed/ChumBucket.svelte\";\n\n\texport let seaweedTemplateData: SeaweedTemplateData;\n\texport let projectFirstGroupedEntries: ReadonlyArray<EntryGroup>;\n\texport let getEntryFromGlobal: (name: string) => undefined | ComponentMeta;\n\texport let letChaos = true;\n\texport let name = \"Turnip\";\n\texport let email = \"turnipxenon@gmail.com\";\n\texport let linkedinSlug = \"turnip-xenon\";\n\texport let domain = \"http://localhost:5173/portfolio/actual/\";\n\texport let serverSideQueryParams = \"\";\n\n\t// region query params\n\tconst entryProps: EntryProps = {\n\t\temail\n\t};\n\n\tconst paramQTSet = new Set<string>();\n\n\tlet isVisible = true;\n\tlet isAdvanceSettingOn = false;\n\t$: isSocialsGone = !isVisible;\n\n\tlet qtfontWeight = \"normal\";\n\tlet additionalFontWeight = \"\";\n\n\tlet chaosDone = false;\n\tlet mainVisibility = \"visible\";\n\t$: mainVisibility = letChaos && !chaosDone ? \"hidden\" : \"visible\";\n\n\tconst syncQT = () => {\n\t\tif (seaweedTemplateData.queryTermMap.size === 0 || paramQTSet.size === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tseaweedTemplateData.queryTermMap.forEach((_, k) => {\n\t\t\tseaweedTemplateData.queryTermMap.set(k, paramQTSet.has(k));\n\t\t});\n\n\t\t// force svelte refresh\n\t\tseaweedTemplateData.queryTermMap = seaweedTemplateData.queryTermMap;\n\t};\n\n\tconst parseQueryTermsLocal = async () => {\n\t\tconst qtSet = new Set<string>();\n\t\tparseQueryTerms(document.body, qtSet);\n\t\tqtSet.forEach(t => seaweedTemplateData.queryTermMap.set(t, true));\n\t\t// force svelte update\n\t\tseaweedTemplateData.queryTermMap = seaweedTemplateData.queryTermMap;\n\t\tsyncQT();\n\t};\n\n\t/** qt values and what they mean:\n\t * undefined: set all qt terms to font-weight: bold\n\t * todo: implement clear\n\t * clear: unset all terms to font-weight: normal\n\t * <term>: only set qt-<term> to bold\n\t * <term1>,<term2>: only set qt-<term1> and qt-<term2> to bold,\n\t *\n\t * ONLY CALL INSIDE onMount()\n\t **/\n\tconst filterSearchParams = (searchParams: URLSearchParams) => {\n\t\tconst isFunOn = searchParams.get(\"fun\")?.trim();\n\t\tif (isFunOn === \"true\") {\n\t\t\tseaweedTemplateData.shouldAddFunNote = true;\n\t\t}\n\n\t\t// region Order\n\t\tconst gameSectionFirstParam = searchParams.get(\"game-section-first\")?.trim();\n\t\tconst orderParam = searchParams.get(\"order\")?.trim();\n\t\tif (orderParam) {\n\t\t\tseaweedTemplateData.groupedEntries = [];\n\n\t\t\torderParam.split(\",\").forEach(groupDefinition => {\n\t\t\t\tconst pair = groupDefinition.split(\":\");\n\t\t\t\tconsole.log(pair);\n\t\t\t\tif (pair.length >= 2) {\n\t\t\t\t\tconst group: EntryGroup = {\n\t\t\t\t\t\tname: pair[0],\n\t\t\t\t\t\titems: [],\n\t\t\t\t\t\tgridClass: pair[2]\n\t\t\t\t\t};\n\n\t\t\t\t\tpair[1].split(\"|\").forEach(e => {\n\t\t\t\t\t\tconst component = getEntryFromGlobal(e);\n\t\t\t\t\t\tif (component) {\n\t\t\t\t\t\t\tgroup.items.push(component);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tseaweedTemplateData.groupedEntries.push(group);\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\tseaweedTemplateData.groupedEntries = seaweedTemplateData.groupedEntries;\n\t\t} else if (gameSectionFirstParam === \"false\") {\n\t\t\tseaweedTemplateData.groupedEntries = TurnGroupEntriesMutable(projectFirstGroupedEntries);\n\t\t}\n\t\t// endregion\n\n\t\t// region Bold terms\n\t\tconst qtValue = searchParams.get(\"qt\")?.trim();\n\t\tif (qtValue !== undefined) {\n\t\t\tqtfontWeight = \"normal\";\n\t\t\tconst dynamicStyle = qtValue.split(\",\").map((term) => {\n\t\t\t\t// side-effect\n\t\t\t\tparamQTSet.add(`qt-${term}`);\n\n\t\t\t\t// main effect\n\t\t\t\treturn `span.qt-${term} { font-weight: bold !important; }`;\n\t\t\t}).join(\"\\n\");\n\n\t\t\t// https://stackoverflow.com/a/24285947/17836168\n\t\t\tconst style = document.createElement(\"style\");\n\t\t\t// noinspection JSDeprecatedSymbols\n\t\t\tstyle.type = \"text/css\";\n\t\t\tstyle.innerText = dynamicStyle;\n\t\t\tdocument.head.appendChild(style);\n\t\t\tsyncQT();\n\t\t} else {\n\t\t\tqtfontWeight = \"bold\";\n\t\t}\n\t\t// endregion Bold terms\n\t};\n\t// endregion query params\n\n\t/* region chaos scripts */\n\t/* endregion chaos scripts */\n\n\tonMount(async () => {\n\t\tif (!letChaos && serverSideQueryParams) {\n\t\t\tfilterSearchParams(new URLSearchParams(serverSideQueryParams));\n\t\t} else if (!letChaos && $page.url.searchParams) {\n\t\t\tfilterSearchParams($page.url.searchParams);\n\t\t}\n\n\t\tif (letChaos) {\n\t\t\trunChaos(document.body);\n\t\t\tchaosDone = true;\n\t\t}\n\t});\n\n\tlet isParsed = false;\n\tafterUpdate(async () => {\n\t\tif (!letChaos && !isParsed) {\n\t\t\tisParsed = true;\n\t\t\tawait parseQueryTermsLocal();\n\t\t}\n\t});\n\n\tconst toggleTerm = (term: string) => {\n\t\tseaweedTemplateData.queryTermMap.set(term, !seaweedTemplateData.queryTermMap.get(term));\n\t\tseaweedTemplateData.queryTermMap = seaweedTemplateData.queryTermMap;\n\t};\n\n\t// when either gameSectionFirst or the queryTerms are updated, update advancedUrl\n\tlet orderUrl = \"\";\n\tlet advancedUrl = domain;\n\tlet advancedQuery = \"\";\n\tconst updateUrl = (seaweedTemplateData: SeaweedTemplateData) => {\n\t\tif (seaweedTemplateData === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst queryParams: string[] = [];\n\n\t\tif (orderUrl) {\n\t\t\tqueryParams.push(orderUrl);\n\t\t}\n\n\t\tconst qtList: string[] = [];\n\t\tseaweedTemplateData.queryTermMap.forEach((shouldBold, term) => {\n\t\t\tif (shouldBold) {\n\t\t\t\tqtList.push(term);\n\t\t\t}\n\t\t});\n\n\t\tif (qtList.length === 0) {\n\t\t\tqueryParams.push(\"qt=clear\");\n\t\t} else if (seaweedTemplateData.queryTermMap.size !== qtList.length) {\n\t\t\t// we'll only add if the lengths are not equal\n\t\t\t// dont need to add query if all terms in qtMap is true\n\t\t\tqueryParams.push(`qt=${qtList.map(t => t.slice(3, t.length)).join(\",\")}`);\n\t\t}\n\n\t\tif (seaweedTemplateData.shouldAddFunNote) {\n\t\t\tqueryParams.push(\"fun=true\");\n\t\t}\n\n\t\tif (!seaweedTemplateData.gameSectionFirst) {\n\t\t\tqueryParams.push(\"game-section-first=false\");\n\t\t}\n\n\t\tif (queryParams.length > 0) {\n\t\t\tadvancedQuery = queryParams.join(\"&\");\n\t\t\tadvancedUrl = `${domain}?${advancedQuery}`;\n\t\t} else {\n\t\t\tadvancedUrl = domain;\n\t\t}\n\t};\n\t$: updateUrl(seaweedTemplateData);\n\n</script>\n\n<SeaweedBaseLayout bind:shouldDisplayLeadingIcons={isSocialsGone}>\n\t<!-- todo: limit main size to 1080 px? -->\n\t<main style={`\n\t--qt-font-weight: ${qtfontWeight};${additionalFontWeight};\n\tvisibility: ${mainVisibility};\n\t`}>\n\n\t\t<div class=\"experience-and-about-div\">\n\n\t\t\t<div class=\"greater-about-div\">\n\n\t\t\t\t<Card includeDataNoSnippet={false}>\n\t\t\t\t\t<section class=\"section-card\" slot=\"content\">\n\n\t\t\t\t\t\t<h1>About</h1>\n\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\tHi! My name is {name}! I work as a software developer. Outside of that, I like making games, and\n\t\t\t\t\t\t\ttrying to do everything in between required to make one. I have some showcased below, our visit\n\t\t\t\t\t\t\tmy itch.io page for more of them.\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<!-- todo: link the degree details idk -->\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\tI also graduated with BS Computing Science, Specializing in Software Practice, and a\n\t\t\t\t\t\t\tcertificate in Computer Game Development at University of Alberta.\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t{#if seaweedTemplateData?.shouldAddFunNote}\n\t\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t\tI'm inspired by games like Harvest Moon: Friends of Mineral Town, Rune Factory 4, Theatrhythm,\n\t\t\t\t\t\t\t\tBravely Default: Flying Fairy, Boku no Natsuyasumi 2, and A Short Hike.\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t{/if}\n\n\t\t\t\t\t\t<!-- todo: maybe put cute stuff here -->\n\t\t\t\t\t\t<!--\t\t\t\t\t\t</ToggleableContent>-->\n\t\t\t\t\t</section>\n\t\t\t\t</Card>\n\n\t\t\t\t<Card>\n\t\t\t\t\t<section class=\"section-card\" slot=\"content\">\n\t\t\t\t\t\t<SocialSection email={email} linkedinSlug={linkedinSlug}></SocialSection>\n\t\t\t\t\t\t<ElementVisbilityDetector bind:isVisible={isVisible}>\n\t\t\t\t\t\t</ElementVisbilityDetector>\n\t\t\t\t\t</section>\n\t\t\t\t</Card>\n\n\t\t\t</div>\n\n\t\t\t<Card>\n\t\t\t\t<section class=\"section-card\" slot=\"content\">\n\t\t\t\t\t<h1>Experience</h1>\n\n\t\t\t\t\t<h2>Highlight</h2>\n\t\t\t\t\t<p>Worked on Go backend microservices and Typescript React frontend app, serving <b>over 30 million daily\n\t\t\t\t\t\tactive users</b> at Twitch (an Amazon Web Services subsidiary)</p>\n\n\t\t\t\t\t<h2>Software Engineer</h2>\n\t\t\t\t\t<div class=\"two-column-separated\">\n\t\t\t\t\t\t<div>July 2023 – January 2024</div>\n\t\t\t\t\t\t<div style=\"text-align: end\">Twitch (Amazon Web Services), Remote</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\tContributed to\n\t\t\t\t\t\t\t<span class=\"qt-go\">Golang</span>\n\t\t\t\t\t\t\tmicroservices and\n\t\t\t\t\t\t\t<span class=\"qt-ts\">Typescript</span>\n\t\t\t\t\t\t\t<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\n\t\t\t\t\t\t\t<a href=\"https://safety.twitch.tv/s/article/Digital-Services-Act-Information?language=en_US\">30.5 million users</a>\n\t\t\t\t\t\t\t. Work includes feature flags, alarms, unit tests, end-to-end testing, and documentation.\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\tImproved 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\n\t\t\t\t\t\t\t<span class=\"qt-aws qt-observability\">Cloudwatch</span>,\n\t\t\t\t\t\t\t<span class=\"qt-aws qt-observability\">Grafana</span>,\n\t\t\t\t\t\t\t<span class=\"qt-aws\">Kinesis Data Stream</span>,\n\t\t\t\t\t\t\t<span class=\"qt-aws qt-infra\">AWS CDK (infrastructure as code)</span>, and\n\t\t\t\t\t\t\t<span class=\"qt-aws qt-cicd\">CodePipeline (CI/CD)</span>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t\t<br>\n\n\t\t\t\t\t<h2>Software Engineer Intern</h2>\n\t\t\t\t\t<div class=\"two-column-separated\">\n\t\t\t\t\t\t<div>May 2022 – Aug 2022</div>\n\t\t\t\t\t\t<div style=\"text-align: end\">Twitch (Amazon Web Services), San Francisco</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\tBuilt a <span class=\"qt-infra\">load testing service</span> that can be configured to generate different\n\t\t\t\t\t\t\tmessage types at different volumes that can be easily extended to target different chat services\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\tUsed Twitch’s set of custom tools, including Twitch’s custom RPC protocol, to create a backend\n\t\t\t\t\t\t\tservice with business logic written in <span class=\"qt-go\">Go</span> and cloud infrastructure utilizing\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"qt-infra qt-aws\">ECS on Fargate, Cloudwatch, and DynamoDB</span>\n\t\t\t\t\t\t\t, defined in <span class=\"qt-ts\">Typescript</span>-flavored CDK\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\tWrote a technical specification document for the service’s MVP and possible future features, and\n\t\t\t\t\t\t\tadditional documentation on how to use the service and how to extend the load testing service to include\n\t\t\t\t\t\t\tnew services to test\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t\t<br>\n\t\t\t\t\t<!-- todo: turn off flashing when accordion is expanded -->\n\t\t\t\t\t<Accordion>\n\t\t\t\t\t\t<AccordionItem>\n\t\t\t\t\t\t\t<div slot=\"summary\">\n\t\t\t\t\t\t\t\t<h2 class=\"accordion-header\">More experience</h2>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<svelte:fragment slot=\"content\">\n\t\t\t\t\t\t\t\t<section class=\"more-section\">\n\t\t\t\t\t\t\t\t\t{#if (!letChaos)}\n\t\t\t\t\t\t\t\t\t\t<h2>Software Engineer Intern</h2>\n\t\t\t\t\t\t\t\t\t\t<div class=\"two-column-separated\">\n\t\t\t\t\t\t\t\t\t\t\t<div>May 2021 – Dec 2021</div>\n\t\t\t\t\t\t\t\t\t\t\t<div style=\"text-align: end\">Twitch (Amazon Web Services), Remote</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t\t\t\t\tImplemented and wrote tests for a feature in Twitch’s\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"qt-go\">Golang</span> backend authentication microservices and\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"qt-ts\">Typescript</span>\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"qt-react\">React</span> frontend web app that will help suggest security improvements to\n\t\t\t\t\t\t\t\t\t\t\t\t<b>over 100k+ users daily</b>\n\t\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t\t\tniko baikal seal from toba aquarium\n\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t<br>\n\t\t\t\t\t\t\t\t</section>\n\t\t\t\t\t\t\t</svelte:fragment>\n\t\t\t\t\t\t</AccordionItem>\n\t\t\t\t\t</Accordion>\n\t\t\t\t</section>\n\t\t\t</Card>\n\n\t\t</div>\n\n\t\t{#if seaweedTemplateData}\n\t\t\t{#each seaweedTemplateData.groupedEntries as group}\n\t\t\t\t{#if group.items.length > 0}\n\t\t\t\t\t<Card>\n\t\t\t\t\t\t<section class=\"section-card title-card\" slot=\"content\">\n\t\t\t\t\t\t\t<h1 class=\"text-center\">{group.name}</h1>\n\t\t\t\t\t\t</section>\n\t\t\t\t\t</Card>\n\n\t\t\t\t\t<section class={group.gridClass}>\n\t\t\t\t\t\t{#each group.items as entry}\n\t\t\t\t\t\t\t<svelte:component this={entry.component} props={entryProps}></svelte:component>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</section>\n\t\t\t\t{/if}\n\t\t\t{/each}\n\t\t{/if}\n\n\t\t<ChumBucket></ChumBucket>\n\n\t\t{#if (!letChaos)}\n\t\t\t<div aria-hidden=\"true\" style=\"height: 3lh\" />\n\n\t\t\t<Card>\n\t\t\t\t<div slot=\"content\" class=\"default-card advanced-setting\">\n\t\t\t\t\t<h1>Advanced settings</h1>\n\t\t\t\t\t<p>This one is for those curious how I customize this page.</p>\n\n\t\t\t\t\t<PineappleSlideToggle name=\"advanced-setting-slider\"\n\t\t\t\t\t bind:checked={isAdvanceSettingOn}>\n\t\t\t\t\t\tAdvanced settings: {isAdvanceSettingOn ? \"On\" : \"Off\"}\n\t\t\t\t\t</PineappleSlideToggle>\n\n\t\t\t\t\t{#if (isAdvanceSettingOn)}\n\t\t\t\t\t\t<PineappleSlideToggle name=\"game-section-slider\"\n\t\t\t\t\t\t bind:checked={seaweedTemplateData.gameSectionFirst}>\n\t\t\t\t\t\t\tShould game section appear first over projects: {seaweedTemplateData.gameSectionFirst ? \"On\" : \"Off\"}\n\t\t\t\t\t\t</PineappleSlideToggle>\n\t\t\t\t\t\t<p>Note: the above configuration was made before the dynamic entry list and to support links sent with that params, we will act like it only swaps the two groups, and nothing more dynamic if order query param does not exist. The configuration only happens during page load with query param, and it does not apply when changed here.</p>\n\t\t\t\t\t\t<PineappleSlideToggle name=\"fun-note-slider\"\n\t\t\t\t\t\t bind:checked={seaweedTemplateData.shouldAddFunNote}>\n\t\t\t\t\t\t\tShould add fun note in description: {seaweedTemplateData.shouldAddFunNote ? \"On\" : \"Off\"}\n\t\t\t\t\t\t</PineappleSlideToggle>\n\n\t\t\t\t\t\t<h3>Query terms to bold</h3>\n\t\t\t\t\t\t<div class=\"query-term-grid\">\n\t\t\t\t\t\t\t{#each seaweedTemplateData.queryTermMap.entries() as [term, shouldBold]}\n\t\t\t\t\t\t\t\t<!--{@const shouldBold = false}-->\n\t\t\t\t\t\t\t\t<Chip onClick={() => {toggleTerm(term)}}\n\t\t\t\t\t\t\t\t checked={shouldBold}>\n\t\t\t\t\t\t\t\t\t<!-- todo: change shouldBold -->\n\t\t\t\t\t\t\t\t\t<span style={`font-weight: ${shouldBold ? \"bold\" : \"normal\"}`}>\n\t\t\t\t\t\t\t\t\t\t{#if (shouldBold)}✓{/if}\n\t\t\t\t\t\t\t\t\t\t{term}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</Chip>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<EntryOrderConfig bind:seaweedEntries={seaweedTemplateData.groupedEntries}\n\t\t\t\t\t\t seaweedTemplateData={seaweedTemplateData}\n\t\t\t\t\t\t bind:orderUrl={orderUrl}\n\t\t\t\t\t\t updateUrl={updateUrl}></EntryOrderConfig>\n\n\t\t\t\t\t\t<br>\n\t\t\t\t\t\t<p>Copy the url below and open a new page with it</p>\n\t\t\t\t\t\t<CodeBlock language=\"url\" code={advancedUrl}></CodeBlock>\n\n\t\t\t\t\t\t<UrlShortenerForm queryParams={advancedQuery}></UrlShortenerForm>\n\t\t\t\t\t{/if}\n\t\t\t\t</div>\n\t\t\t</Card>\n\t\t{/if}\n\t</main>\n\n\t<SocialSection slot=\"extraLeadingIcons\"\n\t isSlot={true}\n\t email={email}\n\t linkedinSlug={linkedinSlug}\n\t isSmallVersion={true}></SocialSection>\n</SeaweedBaseLayout>\n\n<style lang=\"postcss\">\n .advanced-setting {\n display: flex;\n flex-direction: column;\n gap: 0.5lh;\n }\n\n h3 {\n font-size: 1.5em;\n line-height: 1.5lh;\n }\n\n .query-term-grid {\n display: flex;\n gap: 0.25em;\n flex-wrap: wrap;\n }\n</style>\n
|
|
5
|
+
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
|
|
6
|
+
<+>UTF-8
|
|
7
|
+
===================================================================
|
|
8
|
+
diff --git a/src/lib/template/seaweed/SeaweedTemplate.svelte b/src/lib/template/seaweed/SeaweedTemplate.svelte
|
|
9
|
+
--- a/src/lib/template/seaweed/SeaweedTemplate.svelte (revision c86762330fb18825026ac30db8f62d304e74b645)
|
|
10
|
+
+++ b/src/lib/template/seaweed/SeaweedTemplate.svelte (date 1713045306792)
|
|
11
|
+
@@ -38,6 +38,7 @@
|
|
12
|
+
|
|
13
|
+
const paramQTSet = new Set<string>();
|
|
14
|
+
|
|
15
|
+
+ let _queryParams: undefined | URLSearchParams = undefined;
|
|
16
|
+
let isVisible = true;
|
|
17
|
+
let isAdvanceSettingOn = false;
|
|
18
|
+
$: isSocialsGone = !isVisible;
|
|
19
|
+
@@ -80,7 +81,13 @@
|
|
20
|
+
*
|
|
21
|
+
* ONLY CALL INSIDE onMount()
|
|
22
|
+
**/
|
|
23
|
+
- const filterSearchParams = (searchParams: URLSearchParams) => {
|
|
24
|
+
+ const filterSearchParams = (searchParams: URLSearchParams | undefined,
|
|
25
|
+
+ seaweedTemplateData: SeaweedTemplateData | undefined) => {
|
|
26
|
+
+ if (seaweedTemplateData === undefined || searchParams === undefined) {
|
|
27
|
+
+ console.log(seaweedTemplateData, searchParams);
|
|
28
|
+
+ return;
|
|
29
|
+
+ }
|
|
30
|
+
+
|
|
31
|
+
const isFunOn = searchParams.get("fun")?.trim();
|
|
32
|
+
if (isFunOn === "true") {
|
|
33
|
+
seaweedTemplateData.shouldAddFunNote = true;
|
|
34
|
+
@@ -151,9 +158,9 @@
|
|
35
|
+
|
|
36
|
+
onMount(async () => {
|
|
37
|
+
if (!letChaos && serverSideQueryParams) {
|
|
38
|
+
- filterSearchParams(new URLSearchParams(serverSideQueryParams));
|
|
39
|
+
+ _queryParams = new URLSearchParams(serverSideQueryParams);
|
|
40
|
+
} else if (!letChaos && $page.url.searchParams) {
|
|
41
|
+
- filterSearchParams($page.url.searchParams);
|
|
42
|
+
+ _queryParams = $page.url.searchParams;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (letChaos) {
|
|
46
|
+
@@ -179,7 +186,7 @@
|
|
47
|
+
let orderUrl = "";
|
|
48
|
+
let advancedUrl = domain;
|
|
49
|
+
let advancedQuery = "";
|
|
50
|
+
- const updateUrl = (seaweedTemplateData: SeaweedTemplateData) => {
|
|
51
|
+
+ const updateUrl = (seaweedTemplateData: SeaweedTemplateData | undefined) => {
|
|
52
|
+
if (seaweedTemplateData === undefined) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
@@ -221,7 +228,7 @@
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
$: updateUrl(seaweedTemplateData);
|
|
59
|
+
-
|
|
60
|
+
+ $: filterSearchParams(_queryParams, seaweedTemplateData);
|
|
61
|
+
</script>
|
|
62
|
+
|
|
63
|
+
<SeaweedBaseLayout bind:shouldDisplayLeadingIcons={isSocialsGone}>
|
package/.idea/workspace.xml
CHANGED
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
<option name="autoReloadType" value="SELECTIVE" />
|
|
5
5
|
</component>
|
|
6
6
|
<component name="ChangeListManager">
|
|
7
|
-
<list default="true" id="accb6ba2-c343-4f84-ad30-6e2d71eceee5" name="
|
|
8
|
-
|
|
7
|
+
<list default="true" id="accb6ba2-c343-4f84-ad30-6e2d71eceee5" name="Changes" comment="Extract experience">
|
|
8
|
+
<change beforePath="$PROJECT_DIR$/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/package.json" afterDir="false" />
|
|
9
|
+
</list>
|
|
9
10
|
<option name="SHOW_DIALOG" value="false" />
|
|
10
11
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
|
11
12
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
|
@@ -56,6 +57,7 @@
|
|
|
56
57
|
<option value="CSS File" />
|
|
57
58
|
<option value="ChumBucket" />
|
|
58
59
|
<option value="TypeScript File" />
|
|
60
|
+
<option value="WorkExperience" />
|
|
59
61
|
</list>
|
|
60
62
|
</option>
|
|
61
63
|
</component>
|
|
@@ -98,7 +100,7 @@
|
|
|
98
100
|
<dismissed value="$PROJECT_DIR$/../speenus/package.json" />
|
|
99
101
|
</component>
|
|
100
102
|
<component name="ProblemsViewState">
|
|
101
|
-
<option name="selectedTabId" value="
|
|
103
|
+
<option name="selectedTabId" value="CurrentFile" />
|
|
102
104
|
</component>
|
|
103
105
|
<component name="ProjectColorInfo">{
|
|
104
106
|
"customColor": "",
|
|
@@ -158,7 +160,7 @@
|
|
|
158
160
|
<recent name="C:\Users\Pumpkin\Projects\Web\pineapple\src\lib\util\util.ts" />
|
|
159
161
|
</key>
|
|
160
162
|
</component>
|
|
161
|
-
<component name="RunManager" selected="npm.
|
|
163
|
+
<component name="RunManager" selected="npm.dev --open">
|
|
162
164
|
<configuration name="dev --open" type="js.build_tools.npm" temporary="true" nameIsGenerated="true">
|
|
163
165
|
<package-json value="$PROJECT_DIR$/package.json" />
|
|
164
166
|
<command value="run" />
|
|
@@ -199,19 +201,25 @@
|
|
|
199
201
|
</list>
|
|
200
202
|
<recent_temporary>
|
|
201
203
|
<list>
|
|
202
|
-
<item itemvalue="npm.to-dev" />
|
|
203
204
|
<item itemvalue="npm.dev --open" />
|
|
205
|
+
<item itemvalue="npm.to-dev" />
|
|
204
206
|
<item itemvalue="npm.dev-offline" />
|
|
205
207
|
<item itemvalue="npm.dev --open" />
|
|
206
208
|
<item itemvalue="npm.to-dev" />
|
|
207
209
|
</list>
|
|
208
210
|
</recent_temporary>
|
|
209
211
|
</component>
|
|
212
|
+
<component name="SharedIndexes">
|
|
213
|
+
<attachedChunks>
|
|
214
|
+
<set>
|
|
215
|
+
<option value="bundled-js-predefined-1d06a55b98c1-74d2a5396914-JavaScript-WS-241.14494.235" />
|
|
216
|
+
</set>
|
|
217
|
+
</attachedChunks>
|
|
218
|
+
</component>
|
|
210
219
|
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
|
211
220
|
<component name="TaskManager">
|
|
212
221
|
<task active="true" id="Default" summary="Default task">
|
|
213
222
|
<changelist id="accb6ba2-c343-4f84-ad30-6e2d71eceee5" name="Changes" comment="" />
|
|
214
|
-
<changelist id="a5282f93-c2bb-4265-921e-8b484677dd29" name="prisma" comment="" />
|
|
215
223
|
<created>1695180599963</created>
|
|
216
224
|
<option name="number" value="Default" />
|
|
217
225
|
<option name="presentableId" value="Default" />
|
|
@@ -363,38 +371,14 @@
|
|
|
363
371
|
<workItem from="1712790206684" duration="453000" />
|
|
364
372
|
<workItem from="1712941939083" duration="1372000" />
|
|
365
373
|
<workItem from="1712943458951" duration="763000" />
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
<
|
|
369
|
-
<
|
|
370
|
-
<
|
|
371
|
-
<
|
|
372
|
-
<
|
|
373
|
-
<
|
|
374
|
-
</task>
|
|
375
|
-
<task id="LOCAL-00144" summary="Revert "Correct app_build_command in Azure SWA GithubActions" Revert b34caf17">
|
|
376
|
-
<option name="closed" value="true" />
|
|
377
|
-
<created>1712403833041</created>
|
|
378
|
-
<option name="number" value="00144" />
|
|
379
|
-
<option name="presentableId" value="LOCAL-00144" />
|
|
380
|
-
<option name="project" value="LOCAL" />
|
|
381
|
-
<updated>1712403833041</updated>
|
|
382
|
-
</task>
|
|
383
|
-
<task id="LOCAL-00145" summary="Temporarily delete workflow to let Azure auto-generate secrets">
|
|
384
|
-
<option name="closed" value="true" />
|
|
385
|
-
<created>1712404703660</created>
|
|
386
|
-
<option name="number" value="00145" />
|
|
387
|
-
<option name="presentableId" value="LOCAL-00145" />
|
|
388
|
-
<option name="project" value="LOCAL" />
|
|
389
|
-
<updated>1712404703660</updated>
|
|
390
|
-
</task>
|
|
391
|
-
<task id="LOCAL-00146" summary="Change npm to yarn in GithubActions">
|
|
392
|
-
<option name="closed" value="true" />
|
|
393
|
-
<created>1712404994671</created>
|
|
394
|
-
<option name="number" value="00146" />
|
|
395
|
-
<option name="presentableId" value="LOCAL-00146" />
|
|
396
|
-
<option name="project" value="LOCAL" />
|
|
397
|
-
<updated>1712404994671</updated>
|
|
374
|
+
<workItem from="1712962590223" duration="138000" />
|
|
375
|
+
<workItem from="1712962843869" duration="49000" />
|
|
376
|
+
<workItem from="1712962907212" duration="15000" />
|
|
377
|
+
<workItem from="1713005313088" duration="3000" />
|
|
378
|
+
<workItem from="1713006345640" duration="336000" />
|
|
379
|
+
<workItem from="1713035287499" duration="708000" />
|
|
380
|
+
<workItem from="1713041187248" duration="6432000" />
|
|
381
|
+
<workItem from="1713055651151" duration="489000" />
|
|
398
382
|
</task>
|
|
399
383
|
<task id="LOCAL-00147" summary="Cancel migration to Azure">
|
|
400
384
|
<option name="closed" value="true" />
|
|
@@ -756,7 +740,39 @@
|
|
|
756
740
|
<option name="project" value="LOCAL" />
|
|
757
741
|
<updated>1712944115604</updated>
|
|
758
742
|
</task>
|
|
759
|
-
<
|
|
743
|
+
<task id="LOCAL-00192" summary="Fix experience">
|
|
744
|
+
<option name="closed" value="true" />
|
|
745
|
+
<created>1712962657404</created>
|
|
746
|
+
<option name="number" value="00192" />
|
|
747
|
+
<option name="presentableId" value="LOCAL-00192" />
|
|
748
|
+
<option name="project" value="LOCAL" />
|
|
749
|
+
<updated>1712962657404</updated>
|
|
750
|
+
</task>
|
|
751
|
+
<task id="LOCAL-00193" summary="Extract data WIP: does not work for server side query param props">
|
|
752
|
+
<option name="closed" value="true" />
|
|
753
|
+
<created>1713044681292</created>
|
|
754
|
+
<option name="number" value="00193" />
|
|
755
|
+
<option name="presentableId" value="LOCAL-00193" />
|
|
756
|
+
<option name="project" value="LOCAL" />
|
|
757
|
+
<updated>1713044681292</updated>
|
|
758
|
+
</task>
|
|
759
|
+
<task id="LOCAL-00194" summary="Extract data out of SeaweedTemplate">
|
|
760
|
+
<option name="closed" value="true" />
|
|
761
|
+
<created>1713045502211</created>
|
|
762
|
+
<option name="number" value="00194" />
|
|
763
|
+
<option name="presentableId" value="LOCAL-00194" />
|
|
764
|
+
<option name="project" value="LOCAL" />
|
|
765
|
+
<updated>1713045502211</updated>
|
|
766
|
+
</task>
|
|
767
|
+
<task id="LOCAL-00195" summary="Extract experience">
|
|
768
|
+
<option name="closed" value="true" />
|
|
769
|
+
<created>1713055753053</created>
|
|
770
|
+
<option name="number" value="00195" />
|
|
771
|
+
<option name="presentableId" value="LOCAL-00195" />
|
|
772
|
+
<option name="project" value="LOCAL" />
|
|
773
|
+
<updated>1713055753053</updated>
|
|
774
|
+
</task>
|
|
775
|
+
<option name="localTasksCounter" value="196" />
|
|
760
776
|
<servers />
|
|
761
777
|
</component>
|
|
762
778
|
<component name="TypeScriptGeneratedFilesManager">
|
|
@@ -814,11 +830,6 @@
|
|
|
814
830
|
</option>
|
|
815
831
|
</component>
|
|
816
832
|
<component name="VcsManagerConfiguration">
|
|
817
|
-
<MESSAGE value="Change parseQueryTerm to parse during runtime on the DOM instead of on the raw svelte text" />
|
|
818
|
-
<MESSAGE value="Add dynamic url adder UI" />
|
|
819
|
-
<MESSAGE value="Add CreateUrl UI" />
|
|
820
|
-
<MESSAGE value="Fix component names being deprettified" />
|
|
821
|
-
<MESSAGE value="Fix Advanced Settings layout in dark more" />
|
|
822
833
|
<MESSAGE value="Fix Advanced Settings layout in dark mode" />
|
|
823
834
|
<MESSAGE value="Fix light mode contrast issues" />
|
|
824
835
|
<MESSAGE value="Attempt to fix Chip styling" />
|
|
@@ -839,6 +850,11 @@
|
|
|
839
850
|
<MESSAGE value="Fix bug with query params" />
|
|
840
851
|
<MESSAGE value="Pineapple v2.4.71" />
|
|
841
852
|
<MESSAGE value="Fix .gitignore" />
|
|
842
|
-
<
|
|
853
|
+
<MESSAGE value="Fix experience" />
|
|
854
|
+
<MESSAGE value="Extract data WIP: does not work for server side query param props" />
|
|
855
|
+
<MESSAGE value="Fix attempt for slug" />
|
|
856
|
+
<MESSAGE value="Extract data out of SeaweedTemplate" />
|
|
857
|
+
<MESSAGE value="Extract experience" />
|
|
858
|
+
<option name="LAST_COMMIT_MESSAGE" value="Extract experience" />
|
|
843
859
|
</component>
|
|
844
860
|
</project>
|
|
@@ -4,14 +4,10 @@ import { runChaos } from "./RunChaos";
|
|
|
4
4
|
import SocialSection from "../../components/SocialSection.svelte";
|
|
5
5
|
import "./seaweed.postcss";
|
|
6
6
|
import SeaweedBaseLayout from "../../components/layouts/SeaweedBaseLayout.svelte";
|
|
7
|
-
import {
|
|
7
|
+
import { CodeBlock } from "@skeletonlabs/skeleton";
|
|
8
8
|
import { page } from "$app/stores";
|
|
9
9
|
import Card from "../../components/Card.svelte";
|
|
10
|
-
import ElementVisbilityDetector from "../../components/ElementVisbilityDetector.svelte";
|
|
11
10
|
import {
|
|
12
|
-
AllGroupedEntriesProjectFirst,
|
|
13
|
-
GetEntryFromGlobal,
|
|
14
|
-
seaweedTemplateData,
|
|
15
11
|
TurnGroupEntriesMutable
|
|
16
12
|
} from "./SeaweedTemplateData";
|
|
17
13
|
import { parseQueryTerms } from "./ParseQueryTerms";
|
|
@@ -19,17 +15,25 @@ import UrlShortenerForm from "./CreateUrlForm.svelte";
|
|
|
19
15
|
import PineappleSlideToggle from "../../components/PineappleSlideToggle.svelte";
|
|
20
16
|
import { Chip } from "../../index";
|
|
21
17
|
import ChumBucket from "./ChumBucket.svelte";
|
|
18
|
+
export let seaweedTemplateData;
|
|
19
|
+
export let projectFirstGroupedEntries;
|
|
20
|
+
export let getEntryFromGlobal;
|
|
22
21
|
export let letChaos = true;
|
|
23
22
|
export let name = "Turnip";
|
|
24
23
|
export let email = "turnipxenon@gmail.com";
|
|
25
24
|
export let linkedinSlug = "turnip-xenon";
|
|
26
25
|
export let domain = "http://localhost:5173/portfolio/actual/";
|
|
27
26
|
export let serverSideQueryParams = "";
|
|
27
|
+
export let experienceSection;
|
|
28
28
|
const entryProps = {
|
|
29
|
-
email
|
|
29
|
+
email,
|
|
30
|
+
letChaos,
|
|
31
|
+
linkedinSlug,
|
|
32
|
+
name,
|
|
33
|
+
seaweedTemplateData
|
|
30
34
|
};
|
|
31
|
-
const paramQTSet = /* @__PURE__ */ new Set();
|
|
32
35
|
let isVisible = true;
|
|
36
|
+
const paramQTSet = /* @__PURE__ */ new Set();
|
|
33
37
|
let isAdvanceSettingOn = false;
|
|
34
38
|
$:
|
|
35
39
|
isSocialsGone = !isVisible;
|
|
@@ -66,7 +70,6 @@ const filterSearchParams = (searchParams) => {
|
|
|
66
70
|
seaweedTemplateData.groupedEntries = [];
|
|
67
71
|
orderParam.split(",").forEach((groupDefinition) => {
|
|
68
72
|
const pair = groupDefinition.split(":");
|
|
69
|
-
console.log(pair);
|
|
70
73
|
if (pair.length >= 2) {
|
|
71
74
|
const group = {
|
|
72
75
|
name: pair[0],
|
|
@@ -74,7 +77,7 @@ const filterSearchParams = (searchParams) => {
|
|
|
74
77
|
gridClass: pair[2]
|
|
75
78
|
};
|
|
76
79
|
pair[1].split("|").forEach((e) => {
|
|
77
|
-
const component =
|
|
80
|
+
const component = getEntryFromGlobal(e);
|
|
78
81
|
if (component) {
|
|
79
82
|
group.items.push(component);
|
|
80
83
|
}
|
|
@@ -84,7 +87,7 @@ const filterSearchParams = (searchParams) => {
|
|
|
84
87
|
});
|
|
85
88
|
seaweedTemplateData.groupedEntries = seaweedTemplateData.groupedEntries;
|
|
86
89
|
} else if (gameSectionFirstParam === "false") {
|
|
87
|
-
seaweedTemplateData.groupedEntries = TurnGroupEntriesMutable(
|
|
90
|
+
seaweedTemplateData.groupedEntries = TurnGroupEntriesMutable(projectFirstGroupedEntries);
|
|
88
91
|
}
|
|
89
92
|
const qtValue = searchParams.get("qt")?.trim();
|
|
90
93
|
if (qtValue !== void 0) {
|
|
@@ -128,6 +131,9 @@ let orderUrl = "";
|
|
|
128
131
|
let advancedUrl = domain;
|
|
129
132
|
let advancedQuery = "";
|
|
130
133
|
const updateUrl = (seaweedTemplateData2) => {
|
|
134
|
+
if (seaweedTemplateData2 === void 0) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
131
137
|
const queryParams = [];
|
|
132
138
|
if (orderUrl) {
|
|
133
139
|
queryParams.push(orderUrl);
|
|
@@ -166,157 +172,28 @@ $:
|
|
|
166
172
|
--qt-font-weight: ${qtfontWeight};${additionalFontWeight};
|
|
167
173
|
visibility: ${mainVisibility};
|
|
168
174
|
`}>
|
|
175
|
+
<svelte:component this={experienceSection}
|
|
176
|
+
entryProps={entryProps}
|
|
177
|
+
bind:isVisible={isVisible}
|
|
178
|
+
></svelte:component>
|
|
169
179
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
<p>
|
|
180
|
-
Hi! My name is {name}! I work as a software developer. Outside of that, I like making games, and
|
|
181
|
-
trying to do everything in between required to make one. I have some showcased below, our visit
|
|
182
|
-
my itch.io page for more of them.
|
|
183
|
-
</p>
|
|
184
|
-
<!-- todo: link the degree details idk -->
|
|
185
|
-
<p>
|
|
186
|
-
I also graduated with BS Computing Science, Specializing in Software Practice, and a
|
|
187
|
-
certificate in Computer Game Development at University of Alberta.
|
|
188
|
-
</p>
|
|
189
|
-
{#if seaweedTemplateData.shouldAddFunNote}
|
|
190
|
-
<p>
|
|
191
|
-
I'm inspired by games like Harvest Moon: Friends of Mineral Town, Rune Factory 4, Theatrhythm,
|
|
192
|
-
Bravely Default: Flying Fairy, Boku no Natsuyasumi 2, and A Short Hike.
|
|
193
|
-
</p>
|
|
194
|
-
{/if}
|
|
195
|
-
|
|
196
|
-
<!-- todo: maybe put cute stuff here -->
|
|
197
|
-
<!-- </ToggleableContent>-->
|
|
198
|
-
</section>
|
|
199
|
-
</Card>
|
|
200
|
-
|
|
201
|
-
<Card>
|
|
202
|
-
<section class="section-card" slot="content">
|
|
203
|
-
<SocialSection email={email} linkedinSlug={linkedinSlug}></SocialSection>
|
|
204
|
-
<ElementVisbilityDetector bind:isVisible={isVisible}>
|
|
205
|
-
</ElementVisbilityDetector>
|
|
206
|
-
</section>
|
|
207
|
-
</Card>
|
|
208
|
-
|
|
209
|
-
</div>
|
|
210
|
-
|
|
211
|
-
<Card>
|
|
212
|
-
<section class="section-card" slot="content">
|
|
213
|
-
<h1>Experience</h1>
|
|
214
|
-
|
|
215
|
-
<h2>Highlight</h2>
|
|
216
|
-
<p>Worked on Go backend microservices and Typescript React frontend app, serving <b>over 30 million daily
|
|
217
|
-
active users</b> at Twitch (an Amazon Web Services subsidiary)</p>
|
|
218
|
-
|
|
219
|
-
<h2>Software Engineer</h2>
|
|
220
|
-
<div class="two-column-separated">
|
|
221
|
-
<div>July 2023 – January 2024</div>
|
|
222
|
-
<div style="text-align: end">Twitch (Amazon Web Services), Remote</div>
|
|
223
|
-
</div>
|
|
224
|
-
<ul>
|
|
225
|
-
<li>
|
|
226
|
-
Contributed to
|
|
227
|
-
<span class="qt-go">Golang</span>
|
|
228
|
-
microservices and
|
|
229
|
-
<span class="qt-ts">Typescript</span>
|
|
230
|
-
<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
|
|
231
|
-
<a href="https://safety.twitch.tv/s/article/Digital-Services-Act-Information?language=en_US">30.5 million users</a>
|
|
232
|
-
. Work includes feature flags, alarms, unit tests, end-to-end testing, and documentation.
|
|
233
|
-
</li>
|
|
234
|
-
<li>
|
|
235
|
-
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
|
|
236
|
-
<span class="qt-aws qt-observability">Cloudwatch</span>,
|
|
237
|
-
<span class="qt-aws qt-observability">Grafana</span>,
|
|
238
|
-
<span class="qt-aws">Kinesis Data Stream</span>,
|
|
239
|
-
<span class="qt-aws qt-infra">AWS CDK (infrastructure as code)</span>, and
|
|
240
|
-
<span class="qt-aws qt-cicd">CodePipeline (CI/CD)</span>
|
|
241
|
-
</li>
|
|
242
|
-
</ul>
|
|
243
|
-
<br>
|
|
180
|
+
{#if seaweedTemplateData}
|
|
181
|
+
{#each seaweedTemplateData.groupedEntries as group}
|
|
182
|
+
{#if group.items.length > 0}
|
|
183
|
+
<Card>
|
|
184
|
+
<section class="section-card title-card" slot="content">
|
|
185
|
+
<h1 class="text-center">{group.name}</h1>
|
|
186
|
+
</section>
|
|
187
|
+
</Card>
|
|
244
188
|
|
|
245
|
-
<
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
</div>
|
|
250
|
-
<ul>
|
|
251
|
-
<li>
|
|
252
|
-
Built a <span class="qt-infra">load testing service</span> that can be configured to generate different
|
|
253
|
-
message types at different volumes that can be easily extended to target different chat services
|
|
254
|
-
</li>
|
|
255
|
-
<li>
|
|
256
|
-
Used Twitch’s set of custom tools, including Twitch’s custom RPC protocol, to create a backend
|
|
257
|
-
service with business logic written in <span class="qt-go">Go</span> and cloud infrastructure utilizing
|
|
258
|
-
<span
|
|
259
|
-
class="qt-infra qt-aws">ECS on Fargate, Cloudwatch, and DynamoDB</span>
|
|
260
|
-
, defined in <span class="qt-ts">Typescript</span>-flavored CDK
|
|
261
|
-
</li>
|
|
262
|
-
<li>
|
|
263
|
-
Wrote a technical specification document for the service’s MVP and possible future features, and
|
|
264
|
-
additional documentation on how to use the service and how to extend the load testing service to include
|
|
265
|
-
new services to test
|
|
266
|
-
</li>
|
|
267
|
-
</ul>
|
|
268
|
-
<br>
|
|
269
|
-
<!-- todo: turn off flashing when accordion is expanded -->
|
|
270
|
-
<Accordion>
|
|
271
|
-
<AccordionItem>
|
|
272
|
-
<div slot="summary">
|
|
273
|
-
<h2 class="accordion-header">More experience</h2>
|
|
274
|
-
</div>
|
|
275
|
-
<svelte:fragment slot="content">
|
|
276
|
-
<section class="more-section">
|
|
277
|
-
{#if (!letChaos)}
|
|
278
|
-
<h2>Software Engineer Intern</h2>
|
|
279
|
-
<div class="two-column-separated">
|
|
280
|
-
<div>May 2021 – Dec 2021</div>
|
|
281
|
-
<div style="text-align: end">Twitch (Amazon Web Services), Remote</div>
|
|
282
|
-
</div>
|
|
283
|
-
<ul>
|
|
284
|
-
<li>
|
|
285
|
-
Implemented and wrote tests for a feature in Twitch’s
|
|
286
|
-
<span class="qt-go">Golang</span> backend authentication microservices and
|
|
287
|
-
<span class="qt-ts">Typescript</span>
|
|
288
|
-
<span class="qt-react">React</span> frontend web app that will help suggest security improvements to
|
|
289
|
-
<b>over 100k+ users daily</b>
|
|
290
|
-
</li>
|
|
291
|
-
</ul>
|
|
292
|
-
{:else}
|
|
293
|
-
niko baikal seal from toba aquarium
|
|
294
|
-
{/if}
|
|
295
|
-
<br>
|
|
296
|
-
</section>
|
|
297
|
-
</svelte:fragment>
|
|
298
|
-
</AccordionItem>
|
|
299
|
-
</Accordion>
|
|
300
|
-
</section>
|
|
301
|
-
</Card>
|
|
302
|
-
|
|
303
|
-
</div>
|
|
304
|
-
|
|
305
|
-
{#each seaweedTemplateData.groupedEntries as group}
|
|
306
|
-
{#if group.items.length > 0}
|
|
307
|
-
<Card>
|
|
308
|
-
<section class="section-card title-card" slot="content">
|
|
309
|
-
<h1 class="text-center">{group.name}</h1>
|
|
189
|
+
<section class={group.gridClass}>
|
|
190
|
+
{#each group.items as entry}
|
|
191
|
+
<svelte:component this={entry.component} props={entryProps}></svelte:component>
|
|
192
|
+
{/each}
|
|
310
193
|
</section>
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
{#each group.items as entry}
|
|
315
|
-
<svelte:component this={entry.component} props={entryProps}></svelte:component>
|
|
316
|
-
{/each}
|
|
317
|
-
</section>
|
|
318
|
-
{/if}
|
|
319
|
-
{/each}
|
|
194
|
+
{/if}
|
|
195
|
+
{/each}
|
|
196
|
+
{/if}
|
|
320
197
|
|
|
321
198
|
<ChumBucket></ChumBucket>
|
|
322
199
|
|
|
@@ -360,6 +237,7 @@ $:
|
|
|
360
237
|
</div>
|
|
361
238
|
|
|
362
239
|
<EntryOrderConfig bind:seaweedEntries={seaweedTemplateData.groupedEntries}
|
|
240
|
+
seaweedTemplateData={seaweedTemplateData}
|
|
363
241
|
bind:orderUrl={orderUrl}
|
|
364
242
|
updateUrl={updateUrl}></EntryOrderConfig>
|
|
365
243
|
|
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
import { SvelteComponent } from "svelte";
|
|
2
|
+
import { type ComponentType } from "svelte";
|
|
2
3
|
import "./seaweed.postcss";
|
|
4
|
+
import { type ComponentMeta, type EntryGroup, type SeaweedTemplateData } from "./SeaweedTemplateData";
|
|
3
5
|
declare const __propDef: {
|
|
4
6
|
props: {
|
|
7
|
+
seaweedTemplateData: SeaweedTemplateData;
|
|
8
|
+
projectFirstGroupedEntries: ReadonlyArray<EntryGroup>;
|
|
9
|
+
getEntryFromGlobal: (name: string) => undefined | ComponentMeta;
|
|
5
10
|
letChaos?: boolean | undefined;
|
|
6
11
|
name?: string | undefined;
|
|
7
12
|
email?: string | undefined;
|
|
8
13
|
linkedinSlug?: string | undefined;
|
|
9
14
|
domain?: string | undefined;
|
|
10
15
|
serverSideQueryParams?: string | undefined;
|
|
16
|
+
experienceSection: ComponentType;
|
|
11
17
|
};
|
|
12
18
|
events: {
|
|
13
19
|
[evt: string]: CustomEvent<any>;
|
|
@@ -22,22 +22,16 @@ export const GameEntries = {
|
|
|
22
22
|
items: [
|
|
23
23
|
{ name: "Pengi", component: Pengi },
|
|
24
24
|
{ name: "Hepcat", component: Hepcat },
|
|
25
|
-
{ name: "Chef Wings", component: ChefWings }
|
|
26
|
-
{ name: "Soulwork", component: Soulwork },
|
|
27
|
-
{ name: "Itch Promo", component: ItchPromo }
|
|
25
|
+
{ name: "Chef Wings", component: ChefWings }
|
|
28
26
|
],
|
|
29
27
|
gridClass: GroupGridClass.Games.toString()
|
|
30
28
|
};
|
|
31
29
|
export const ProjectEntries = {
|
|
32
30
|
name: DefaultHeader.Projects.toString(),
|
|
33
31
|
items: [
|
|
34
|
-
{ name: "
|
|
35
|
-
{ name: "Decentralized Social Media", component: DecentralizedSocialMedia },
|
|
32
|
+
{ name: "Soulwork", component: Soulwork },
|
|
36
33
|
{ name: "Customized YarnSpinner", component: CustomizedYarnspinner },
|
|
37
|
-
{ name: "
|
|
38
|
-
{ name: "Workset", component: Workset },
|
|
39
|
-
{ name: "This Webpage", component: ThisWebpage },
|
|
40
|
-
{ name: "Mock Uber App", component: MockUberApp }
|
|
34
|
+
{ name: "This Webpage", component: ThisWebpage }
|
|
41
35
|
],
|
|
42
36
|
gridClass: GroupGridClass.Projects.toString()
|
|
43
37
|
};
|
|
@@ -1,9 +1,15 @@
|
|
|
1
|
+
import type { SeaweedTemplateData } from "../SeaweedTemplateData";
|
|
1
2
|
export declare enum DefaultHeader {
|
|
2
3
|
Games = "Games",
|
|
3
4
|
Projects = "Projects"
|
|
4
5
|
}
|
|
5
6
|
export interface EntryProps {
|
|
6
7
|
email: string;
|
|
8
|
+
letChaos: boolean;
|
|
9
|
+
linkedinSlug: string;
|
|
10
|
+
name: string;
|
|
11
|
+
seaweedTemplateData: SeaweedTemplateData;
|
|
12
|
+
isVisible: boolean;
|
|
7
13
|
}
|
|
8
14
|
export interface GroupedEntry {
|
|
9
15
|
header: string;
|