diff --git a/astro.config.ts b/astro.config.ts index 1587d70..fd5688a 100644 --- a/astro.config.ts +++ b/astro.config.ts @@ -8,5 +8,8 @@ export default defineConfig({ }), integrations: [konamiEmojiBlast()], output: "server", + redirects: { + "/talks": "/sessions", + }, site: "https://2024.squiggleconf.com", }); diff --git a/cspell.json b/cspell.json index 4eaa1f0..8e04515 100644 --- a/cspell.json +++ b/cspell.json @@ -8,52 +8,82 @@ "*.svg" ], "words": [ + "_epichunter", + "aakansha", "Afficianado", "allowfullscreen", + "anonrig", "astro", "astrojs", "astropub", + "Autometics", + "Axosoft", "blackgirlbytes", "bluesky", "bootcamp", "bostonts", "cernicova", "Cernicova", + "codesandbox", "danvdk", "danvk", + "devrel", "devs", "dimitri", "dimitropoulos", + "doshi", "dragomir", "dragomirtitian", + "Excalidraw", + "Extism", + "FAANG", "Faneuil", + "Fiberplane", "fontsource", + "FOSS", "fosstodon", + "griffing", "Harborside", "inngest", + "Instabase", "josefin", "joshuakgoldberg", + "Katerina", + "keturakis", + "kless", "knip", "konami", "konamimojisplosion", + "laurynas", + "Livecoder", + "MBTA", "michigantypescript", "mitropoulos", + "murg", + "nabors", "neaq", + "nizipli", "noreferrer", "nowrap", "openjs", "packagejson", + "Pinterest", "plone", "referrerpolicy", "rizel", "Rizèl", "scarlett", "Simons", + "Skroumpelou", "squiggleconf", "SQUOCT", + "sugaroverflow", + "sylwia", "titiancernicova", "tseslint", "vanderkam", - "xlink" + "viscomi", + "xlink", + "yagiz" ] } diff --git a/package.json b/package.json index ca58ae0..3e85817 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ }, "devDependencies": { "@astrojs/check": "0.8.1", - "@astropub/md": "0.4.0", + "@astropub/md": "1.0.0", "@eslint-community/eslint-plugin-eslint-comments": "4.3.0", "@eslint/js": "9.7.0", "@fontsource-variable/josefin-sans": "5.0.21", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6c4892f..60f5c94 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,8 +25,8 @@ importers: specifier: 0.8.1 version: 0.8.1(prettier-plugin-astro@0.14.0)(prettier@3.3.3)(typescript@5.5.3) '@astropub/md': - specifier: 0.4.0 - version: 0.4.0(@astrojs/markdown-remark@5.1.1) + specifier: 1.0.0 + version: 1.0.0(@astrojs/markdown-remark@5.1.1) '@eslint-community/eslint-plugin-eslint-comments': specifier: 4.3.0 version: 4.3.0(eslint@8.57.0) @@ -173,10 +173,10 @@ packages: peerDependencies: astro: ^4.2.0 - '@astropub/md@0.4.0': - resolution: {integrity: sha512-f0kJIfywRKLcVqlizqUPModBBuJ7WwBEIWJEt1Eq/ksSYixtOl8HQWMZKJhv9Xtc9OKHhkQf0AQc56EV1xNUnw==} + '@astropub/md@1.0.0': + resolution: {integrity: sha512-++urcyulQogbLAF0VC2rEp6qLUfnRX9iaDREAkN1su9fF8V84DVaMHbQXn7qqQ27wYT5AVVeoK+4+vggYYVbQg==} peerDependencies: - '@astrojs/markdown-remark': ^4 + '@astrojs/markdown-remark': ^5 '@babel/code-frame@7.24.7': resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} @@ -4459,7 +4459,7 @@ snapshots: - react - supports-color - '@astropub/md@0.4.0(@astrojs/markdown-remark@5.1.1)': + '@astropub/md@1.0.0(@astrojs/markdown-remark@5.1.1)': dependencies: '@astrojs/markdown-remark': 5.1.1 diff --git a/src/assets/.DS_Store b/src/assets/.DS_Store new file mode 100644 index 0000000..e1cfda1 Binary files /dev/null and b/src/assets/.DS_Store differ diff --git a/src/assets/astro-logo.svg b/src/assets/astro-logo.svg deleted file mode 100644 index e521181..0000000 --- a/src/assets/astro-logo.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/assets/avatars/aakansha-doshi.jpg b/src/assets/avatars/aakansha-doshi.jpg new file mode 100644 index 0000000..cea7fa9 Binary files /dev/null and b/src/assets/avatars/aakansha-doshi.jpg differ diff --git a/src/assets/avatars/chris-griffing.jpg b/src/assets/avatars/chris-griffing.jpg new file mode 100644 index 0000000..72d7552 Binary files /dev/null and b/src/assets/avatars/chris-griffing.jpg differ diff --git a/src/assets/avatars/corina-murg.jpg b/src/assets/avatars/corina-murg.jpg new file mode 100644 index 0000000..0ac7344 Binary files /dev/null and b/src/assets/avatars/corina-murg.jpg differ diff --git a/src/assets/avatars/dan-vanderkam.jpg b/src/assets/avatars/dan-vanderkam.jpg new file mode 100644 index 0000000..4d1b94d Binary files /dev/null and b/src/assets/avatars/dan-vanderkam.jpg differ diff --git a/src/assets/avatars/don-isaac.jpg b/src/assets/avatars/don-isaac.jpg new file mode 100644 index 0000000..01506cd Binary files /dev/null and b/src/assets/avatars/don-isaac.jpg differ diff --git a/src/assets/avatars/fatima-sarah-khalid.jpg b/src/assets/avatars/fatima-sarah-khalid.jpg new file mode 100644 index 0000000..f74041b Binary files /dev/null and b/src/assets/avatars/fatima-sarah-khalid.jpg differ diff --git a/src/assets/avatars/jess-lin.jpg b/src/assets/avatars/jess-lin.jpg new file mode 100644 index 0000000..f659763 Binary files /dev/null and b/src/assets/avatars/jess-lin.jpg differ diff --git a/src/assets/avatars/katerina-skroumpelou.jpg b/src/assets/avatars/katerina-skroumpelou.jpg new file mode 100644 index 0000000..ebff125 Binary files /dev/null and b/src/assets/avatars/katerina-skroumpelou.jpg differ diff --git a/src/assets/avatars/laurynas-keturakis.jpg b/src/assets/avatars/laurynas-keturakis.jpg new file mode 100644 index 0000000..886a315 Binary files /dev/null and b/src/assets/avatars/laurynas-keturakis.jpg differ diff --git a/src/assets/avatars/loris-cro.jpg b/src/assets/avatars/loris-cro.jpg new file mode 100644 index 0000000..672c5e9 Binary files /dev/null and b/src/assets/avatars/loris-cro.jpg differ diff --git a/src/assets/avatars/max-kless.jpg b/src/assets/avatars/max-kless.jpg new file mode 100644 index 0000000..651e219 Binary files /dev/null and b/src/assets/avatars/max-kless.jpg differ diff --git a/src/assets/avatars/nick-nisi.jpg b/src/assets/avatars/nick-nisi.jpg new file mode 100644 index 0000000..f3c93be Binary files /dev/null and b/src/assets/avatars/nick-nisi.jpg differ diff --git a/src/assets/avatars/rachel-nabors.jpg b/src/assets/avatars/rachel-nabors.jpg new file mode 100644 index 0000000..527437d Binary files /dev/null and b/src/assets/avatars/rachel-nabors.jpg differ diff --git a/src/assets/avatars/rick-viscomi.jpg b/src/assets/avatars/rick-viscomi.jpg new file mode 100644 index 0000000..dd60a99 Binary files /dev/null and b/src/assets/avatars/rick-viscomi.jpg differ diff --git a/src/assets/avatars/rizel-scarlett.jpg b/src/assets/avatars/rizel-scarlett.jpg new file mode 100644 index 0000000..0524bb8 Binary files /dev/null and b/src/assets/avatars/rizel-scarlett.jpg differ diff --git a/src/assets/avatars/robby-russell.jpg b/src/assets/avatars/robby-russell.jpg new file mode 100644 index 0000000..54210ce Binary files /dev/null and b/src/assets/avatars/robby-russell.jpg differ diff --git a/src/assets/avatars/sylwia-vargas.jpg b/src/assets/avatars/sylwia-vargas.jpg new file mode 100644 index 0000000..f7efec3 Binary files /dev/null and b/src/assets/avatars/sylwia-vargas.jpg differ diff --git a/src/assets/avatars/titian-cernicova-dragomir.jpg b/src/assets/avatars/titian-cernicova-dragomir.jpg new file mode 100644 index 0000000..f8542a8 Binary files /dev/null and b/src/assets/avatars/titian-cernicova-dragomir.jpg differ diff --git a/src/assets/avatars/yagiz-nizipli.jpg b/src/assets/avatars/yagiz-nizipli.jpg new file mode 100644 index 0000000..e8f347f Binary files /dev/null and b/src/assets/avatars/yagiz-nizipli.jpg differ diff --git a/src/assets/dan-vanderkam.jpg b/src/assets/dan-vanderkam.jpg deleted file mode 100644 index 4f941bd..0000000 Binary files a/src/assets/dan-vanderkam.jpg and /dev/null differ diff --git a/src/assets/eslint-logo.svg b/src/assets/eslint-logo.svg deleted file mode 100644 index 64d7b53..0000000 --- a/src/assets/eslint-logo.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/src/assets/dropdown.svg b/src/assets/glyphs/dropdown.svg similarity index 100% rename from src/assets/dropdown.svg rename to src/assets/glyphs/dropdown.svg diff --git a/src/assets/glyphs/link-out.svg b/src/assets/glyphs/link-out.svg new file mode 100644 index 0000000..b6500d0 --- /dev/null +++ b/src/assets/glyphs/link-out.svg @@ -0,0 +1,12 @@ + + + diff --git a/src/assets/golang-logo.svg b/src/assets/golang-logo.svg deleted file mode 100644 index 666408b..0000000 --- a/src/assets/golang-logo.svg +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/assets/logos/C.png b/src/assets/logos/C.png new file mode 100644 index 0000000..dc7dbd7 Binary files /dev/null and b/src/assets/logos/C.png differ diff --git a/src/assets/logos/ChromeDevTools.svg b/src/assets/logos/ChromeDevTools.svg new file mode 100644 index 0000000..cae8001 --- /dev/null +++ b/src/assets/logos/ChromeDevTools.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/Cpp.png b/src/assets/logos/Cpp.png new file mode 100644 index 0000000..432d4eb Binary files /dev/null and b/src/assets/logos/Cpp.png differ diff --git a/src/assets/logos/Discord.png b/src/assets/logos/Discord.png new file mode 100644 index 0000000..e9dc50d Binary files /dev/null and b/src/assets/logos/Discord.png differ diff --git a/src/assets/logos/DotNet.svg b/src/assets/logos/DotNet.svg new file mode 100644 index 0000000..0367488 --- /dev/null +++ b/src/assets/logos/DotNet.svg @@ -0,0 +1,84 @@ + + + + + + + diff --git a/src/assets/logos/Elixir.svg b/src/assets/logos/Elixir.svg new file mode 100644 index 0000000..038f2b4 --- /dev/null +++ b/src/assets/logos/Elixir.svg @@ -0,0 +1,209 @@ + + + + + + + diff --git a/src/assets/logos/GitLab.svg b/src/assets/logos/GitLab.svg new file mode 100644 index 0000000..05a5002 --- /dev/null +++ b/src/assets/logos/GitLab.svg @@ -0,0 +1,19 @@ + + + + + + + diff --git a/src/assets/logos/Go.svg b/src/assets/logos/Go.svg new file mode 100644 index 0000000..8164d55 --- /dev/null +++ b/src/assets/logos/Go.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/logos/Haskell.svg b/src/assets/logos/Haskell.svg new file mode 100644 index 0000000..9fa7928 --- /dev/null +++ b/src/assets/logos/Haskell.svg @@ -0,0 +1,182 @@ + + + + + + + diff --git a/src/assets/logos/Java.svg b/src/assets/logos/Java.svg new file mode 100644 index 0000000..b2afff4 --- /dev/null +++ b/src/assets/logos/Java.svg @@ -0,0 +1,91 @@ + + diff --git a/src/assets/logos/JavaScript.png b/src/assets/logos/JavaScript.png new file mode 100644 index 0000000..7b5ffab Binary files /dev/null and b/src/assets/logos/JavaScript.png differ diff --git a/src/assets/logos/Kotlin.png b/src/assets/logos/Kotlin.png new file mode 100644 index 0000000..b5515c3 Binary files /dev/null and b/src/assets/logos/Kotlin.png differ diff --git a/src/assets/logos/Medium.svg b/src/assets/logos/Medium.svg new file mode 100755 index 0000000..9f239f8 --- /dev/null +++ b/src/assets/logos/Medium.svg @@ -0,0 +1,18 @@ + + + + + + + + + diff --git a/src/assets/logos/NodeJS.svg b/src/assets/logos/NodeJS.svg new file mode 100644 index 0000000..4d140b2 --- /dev/null +++ b/src/assets/logos/NodeJS.svg @@ -0,0 +1 @@ + diff --git a/src/assets/logos/OCaml.svg b/src/assets/logos/OCaml.svg new file mode 100644 index 0000000..934da7c --- /dev/null +++ b/src/assets/logos/OCaml.svg @@ -0,0 +1,374 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/logos/OpenTelemetry.png b/src/assets/logos/OpenTelemetry.png new file mode 100644 index 0000000..93481de Binary files /dev/null and b/src/assets/logos/OpenTelemetry.png differ diff --git a/src/assets/logos/PHP.svg b/src/assets/logos/PHP.svg new file mode 100644 index 0000000..e9ac184 --- /dev/null +++ b/src/assets/logos/PHP.svg @@ -0,0 +1,367 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/logos/Perl.svg b/src/assets/logos/Perl.svg new file mode 100644 index 0000000..d006697 --- /dev/null +++ b/src/assets/logos/Perl.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/assets/logos/Python.svg b/src/assets/logos/Python.svg new file mode 100644 index 0000000..c403c09 --- /dev/null +++ b/src/assets/logos/Python.svg @@ -0,0 +1,390 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/logos/Ruby.svg b/src/assets/logos/Ruby.svg new file mode 100644 index 0000000..0ec0c15 --- /dev/null +++ b/src/assets/logos/Ruby.svg @@ -0,0 +1,788 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/assets/logos/Rust.svg b/src/assets/logos/Rust.svg new file mode 100644 index 0000000..b87a16d --- /dev/null +++ b/src/assets/logos/Rust.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + diff --git a/src/assets/logos/SVG.svg b/src/assets/logos/SVG.svg new file mode 100644 index 0000000..a9ccbf6 --- /dev/null +++ b/src/assets/logos/SVG.svg @@ -0,0 +1,56 @@ + + + SVG Logo + Designed for the SVG Logo Contest in 2006 by Harvey Rayner, and adopted by W3C in 2009. It is available under the Creative Commons license for those who have an SVG product or who are using SVG on their site. + + + + + SVG Logo + 14-08-2009 + + W3C + Harvey Rayner, designer + + See document description + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/typescript-logo.svg b/src/assets/logos/TypeScript.svg similarity index 100% rename from src/assets/typescript-logo.svg rename to src/assets/logos/TypeScript.svg diff --git a/src/assets/logos/VSCode.png b/src/assets/logos/VSCode.png new file mode 100644 index 0000000..37a0847 Binary files /dev/null and b/src/assets/logos/VSCode.png differ diff --git a/src/assets/logos/WebAssembly.svg b/src/assets/logos/WebAssembly.svg new file mode 100644 index 0000000..3e3c80a --- /dev/null +++ b/src/assets/logos/WebAssembly.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/YouTube.svg b/src/assets/logos/YouTube.svg new file mode 100644 index 0000000..fdac6d1 --- /dev/null +++ b/src/assets/logos/YouTube.svg @@ -0,0 +1,37 @@ + + + + + + + + + diff --git a/src/assets/logos/Zig.svg b/src/assets/logos/Zig.svg new file mode 100644 index 0000000..ea2073d --- /dev/null +++ b/src/assets/logos/Zig.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/bluesky.svg b/src/assets/logos/bluesky.svg similarity index 100% rename from src/assets/bluesky.svg rename to src/assets/logos/bluesky.svg diff --git a/src/assets/discord.svg b/src/assets/logos/discord.svg similarity index 100% rename from src/assets/discord.svg rename to src/assets/logos/discord.svg diff --git a/src/assets/github.svg b/src/assets/logos/github.svg similarity index 100% rename from src/assets/github.svg rename to src/assets/logos/github.svg diff --git a/src/assets/logos/icon-accessibility.svg b/src/assets/logos/icon-accessibility.svg new file mode 100644 index 0000000..63a4483 --- /dev/null +++ b/src/assets/logos/icon-accessibility.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-account.svg b/src/assets/logos/icon-account.svg new file mode 100644 index 0000000..0f54255 --- /dev/null +++ b/src/assets/logos/icon-account.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-animation.svg b/src/assets/logos/icon-animation.svg new file mode 100644 index 0000000..b429daf --- /dev/null +++ b/src/assets/logos/icon-animation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-ast.svg b/src/assets/logos/icon-ast.svg new file mode 100644 index 0000000..ceff11f --- /dev/null +++ b/src/assets/logos/icon-ast.svg @@ -0,0 +1 @@ + diff --git a/src/assets/logos/icon-autoplay.svg b/src/assets/logos/icon-autoplay.svg new file mode 100644 index 0000000..859e2be --- /dev/null +++ b/src/assets/logos/icon-autoplay.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-bug.svg b/src/assets/logos/icon-bug.svg new file mode 100644 index 0000000..d279fc6 --- /dev/null +++ b/src/assets/logos/icon-bug.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-calculate.svg b/src/assets/logos/icon-calculate.svg new file mode 100644 index 0000000..04c8591 --- /dev/null +++ b/src/assets/logos/icon-calculate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-code.svg b/src/assets/logos/icon-code.svg new file mode 100644 index 0000000..8a2611a --- /dev/null +++ b/src/assets/logos/icon-code.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-crowdsource.svg b/src/assets/logos/icon-crowdsource.svg new file mode 100644 index 0000000..2f11161 --- /dev/null +++ b/src/assets/logos/icon-crowdsource.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-diversity.svg b/src/assets/logos/icon-diversity.svg new file mode 100644 index 0000000..6423058 --- /dev/null +++ b/src/assets/logos/icon-diversity.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-dock.svg b/src/assets/logos/icon-dock.svg new file mode 100644 index 0000000..eaef69a --- /dev/null +++ b/src/assets/logos/icon-dock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-docs.svg b/src/assets/logos/icon-docs.svg new file mode 100644 index 0000000..43fc0ed --- /dev/null +++ b/src/assets/logos/icon-docs.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-edit.svg b/src/assets/logos/icon-edit.svg new file mode 100644 index 0000000..17ed47d --- /dev/null +++ b/src/assets/logos/icon-edit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-footprint.svg b/src/assets/logos/icon-footprint.svg new file mode 100644 index 0000000..2077ce4 --- /dev/null +++ b/src/assets/logos/icon-footprint.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-forrest.svg b/src/assets/logos/icon-forrest.svg new file mode 100644 index 0000000..f0f7317 --- /dev/null +++ b/src/assets/logos/icon-forrest.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-handyman.svg b/src/assets/logos/icon-handyman.svg new file mode 100644 index 0000000..a219606 --- /dev/null +++ b/src/assets/logos/icon-handyman.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-headset.svg b/src/assets/logos/icon-headset.svg new file mode 100644 index 0000000..96555ac --- /dev/null +++ b/src/assets/logos/icon-headset.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-hub.svg b/src/assets/logos/icon-hub.svg new file mode 100644 index 0000000..111fade --- /dev/null +++ b/src/assets/logos/icon-hub.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-inclusive.svg b/src/assets/logos/icon-inclusive.svg new file mode 100644 index 0000000..b752acc --- /dev/null +++ b/src/assets/logos/icon-inclusive.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-lightning.svg b/src/assets/logos/icon-lightning.svg new file mode 100644 index 0000000..158c444 --- /dev/null +++ b/src/assets/logos/icon-lightning.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-link.svg b/src/assets/logos/icon-link.svg new file mode 100644 index 0000000..37c1a6a --- /dev/null +++ b/src/assets/logos/icon-link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-mediation.svg b/src/assets/logos/icon-mediation.svg new file mode 100644 index 0000000..7c5dccb --- /dev/null +++ b/src/assets/logos/icon-mediation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-monorepo.svg b/src/assets/logos/icon-monorepo.svg new file mode 100644 index 0000000..0706502 --- /dev/null +++ b/src/assets/logos/icon-monorepo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-palette.svg b/src/assets/logos/icon-palette.svg new file mode 100644 index 0000000..1f6d1cb --- /dev/null +++ b/src/assets/logos/icon-palette.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-protocol.svg b/src/assets/logos/icon-protocol.svg new file mode 100644 index 0000000..702f484 --- /dev/null +++ b/src/assets/logos/icon-protocol.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-rocket.svg b/src/assets/logos/icon-rocket.svg new file mode 100644 index 0000000..23dfc4d --- /dev/null +++ b/src/assets/logos/icon-rocket.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-stylus.svg b/src/assets/logos/icon-stylus.svg new file mode 100644 index 0000000..cebbf61 --- /dev/null +++ b/src/assets/logos/icon-stylus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-terminal.svg b/src/assets/logos/icon-terminal.svg new file mode 100644 index 0000000..6c23702 --- /dev/null +++ b/src/assets/logos/icon-terminal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/icon-vitals.svg b/src/assets/logos/icon-vitals.svg new file mode 100644 index 0000000..982239a --- /dev/null +++ b/src/assets/logos/icon-vitals.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/linkedin.svg b/src/assets/logos/linkedin.svg similarity index 100% rename from src/assets/linkedin.svg rename to src/assets/logos/linkedin.svg diff --git a/src/assets/mastodon.svg b/src/assets/logos/mastodon.svg similarity index 100% rename from src/assets/mastodon.svg rename to src/assets/logos/mastodon.svg diff --git a/src/assets/rust-logo.svg b/src/assets/logos/rust-logo.svg similarity index 100% rename from src/assets/rust-logo.svg rename to src/assets/logos/rust-logo.svg diff --git a/src/assets/logos/twitch.svg b/src/assets/logos/twitch.svg new file mode 100644 index 0000000..c266edb --- /dev/null +++ b/src/assets/logos/twitch.svg @@ -0,0 +1,12 @@ + + + diff --git a/src/assets/twitter.svg b/src/assets/logos/twitter.svg similarity index 100% rename from src/assets/twitter.svg rename to src/assets/logos/twitter.svg diff --git a/src/assets/website.svg b/src/assets/logos/website.svg similarity index 100% rename from src/assets/website.svg rename to src/assets/logos/website.svg diff --git a/src/assets/partners/js-party.png b/src/assets/partners/js-party.png new file mode 100644 index 0000000..073a878 Binary files /dev/null and b/src/assets/partners/js-party.png differ diff --git a/src/assets/partners/this-week-in-react-dark-mode.png b/src/assets/partners/this-week-in-react-dark-mode.png new file mode 100644 index 0000000..cad4d5a Binary files /dev/null and b/src/assets/partners/this-week-in-react-dark-mode.png differ diff --git a/src/assets/partners/this-week-in-react.png b/src/assets/partners/this-week-in-react-light-mode.png similarity index 100% rename from src/assets/partners/this-week-in-react.png rename to src/assets/partners/this-week-in-react-light-mode.png diff --git a/src/assets/rizel-scarlett.png b/src/assets/rizel-scarlett.png deleted file mode 100644 index 831352e..0000000 Binary files a/src/assets/rizel-scarlett.png and /dev/null differ diff --git a/src/assets/squiggle-long.svg b/src/assets/squiggle-long.svg index 56bf90c..ed16790 100644 --- a/src/assets/squiggle-long.svg +++ b/src/assets/squiggle-long.svg @@ -19,7 +19,7 @@ diff --git a/src/assets/titian-cernicova-dragomir.jpg b/src/assets/titian-cernicova-dragomir.jpg deleted file mode 100644 index 0e24ff6..0000000 Binary files a/src/assets/titian-cernicova-dragomir.jpg and /dev/null differ diff --git a/src/assets/typescript-eslint-logo.svg b/src/assets/typescript-eslint-logo.svg deleted file mode 100644 index bfe61ae..0000000 --- a/src/assets/typescript-eslint-logo.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - diff --git a/src/assets/youtube.svg b/src/assets/youtube.svg deleted file mode 100644 index 9d17cf4..0000000 --- a/src/assets/youtube.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - diff --git a/src/components/BioLinks.astro b/src/components/BioLinks.astro index 7584a95..af633bc 100644 --- a/src/components/BioLinks.astro +++ b/src/components/BioLinks.astro @@ -1,52 +1,66 @@ --- import { Image } from "astro:assets"; -import bluesky from "~/assets/bluesky.svg"; -import github from "~/assets/github.svg"; -import linkedin from "~/assets/linkedin.svg"; -import mastodon from "~/assets/mastodon.svg"; -import twitter from "~/assets/twitter.svg"; -import website from "~/assets/website.svg"; -import youtube from "~/assets/youtube.svg"; +import bluesky from "~/assets/logos/bluesky.svg"; +import github from "~/assets/logos/github.svg"; +import linkedin from "~/assets/logos/linkedin.svg"; +import mastodon from "~/assets/logos/mastodon.svg"; +import twitch from "~/assets/logos/twitch.svg"; +import twitter from "~/assets/logos/twitter.svg"; +import website from "~/assets/logos/website.svg"; +import youtube from "~/assets/logos/YouTube.svg"; +import gitlab from "~/assets/logos/GitLab.svg"; +import medium from "~/assets/logos/Medium.svg"; interface Props { + class?: string; links: BioLinksPlatforms; name: string; + size?: "normal" | "large"; } export interface BioLinksPlatforms { - bluesky?: string; - github?: string; - linkedin?: string; - mastodon?: string; - twitter?: string; - website?: string; - youtube?: string; + bluesky?: string | null; + github?: string | null; + gitlab?: string | null; + linkedin?: string | null; + mastodon?: string | null; + twitch?: string | null; + twitter?: string | null; + website?: string | null; + youtube?: string | null; + medium?: string | null; } -const { links, name } = Astro.props; +const { class: className, links, name, size, ...rest } = Astro.props; --- - diff --git a/src/components/Heading.astro b/src/components/Heading.astro index 7319444..6c05e3b 100644 --- a/src/components/Heading.astro +++ b/src/components/Heading.astro @@ -3,16 +3,16 @@ interface Props { class?: string; id?: string; level: "h1" | "h2" | "h3"; - link?: boolean; + link?: boolean | string; } -const { level: As, ...rest } = Astro.props; +const { level: As, link, ...rest } = Astro.props; --- { - Astro.props.link ? ( - + link ? ( + ) : ( diff --git a/src/components/HeadingFlanked.astro b/src/components/HeadingFlanked.astro new file mode 100644 index 0000000..63996b0 --- /dev/null +++ b/src/components/HeadingFlanked.astro @@ -0,0 +1,31 @@ +--- +import Heading from "./Heading.astro"; +import SquiggleFlanked from "./SquiggleFlanked.astro"; + +interface Props { + class?: string; + id: string; +} + +const { class: className, id, ...rest } = Astro.props; +--- + + + + + + + + diff --git a/src/components/Hero.astro b/src/components/Hero.astro index dd28659..775cf6a 100644 --- a/src/components/Hero.astro +++ b/src/components/Hero.astro @@ -36,8 +36,7 @@ import DeepBlueSea from "./DeepBlueSea.astro"; } html.dark .wave-long { - /* border: 10px solid #11141b; */ - filter: invert(); + filter: invert() hue-rotate(180deg) brightness(0.8); } @media (min-width: 700px) { diff --git a/src/components/HeroForPage.astro b/src/components/HeroForPage.astro index c2393d9..7a5d7d6 100644 --- a/src/components/HeroForPage.astro +++ b/src/components/HeroForPage.astro @@ -2,6 +2,7 @@ import Arrow from "~/components/Arrow.astro"; import Heading from "~/components/Heading.astro"; import Hero from "./Hero.astro"; +import ThemeToggle from "./ThemeToggle.astro"; --- @@ -10,6 +11,7 @@ import Hero from "./Hero.astro"; SquiggleConf + diff --git a/src/components/LocationLink.astro b/src/components/LocationLink.astro index f140a95..29b2ea8 100644 --- a/src/components/LocationLink.astro +++ b/src/components/LocationLink.astro @@ -15,7 +15,7 @@ interface Props { href={Astro.props.href} target="_blank" > - {Astro.props.alt} + {Astro.props.alt} @@ -29,8 +29,20 @@ interface Props { text-decoration: none; } + .social-image { + height: 2rem; + width: 2rem; + } + html.dark img, .social-link-inverted img { filter: brightness(0.5) invert() hue-rotate(180deg); } + + @media (min-width: 819px) { + .social-image { + height: 2.5rem; + width: 2.5rem; + } + } diff --git a/src/components/MCs.astro b/src/components/MCs.astro new file mode 100644 index 0000000..bc35a49 --- /dev/null +++ b/src/components/MCs.astro @@ -0,0 +1,44 @@ +--- +import { peopleBySlug } from "~/data/notion-data"; + +import CardsList from "./CardsList.astro"; +import FullSection from "./FullSection.astro"; +import HeadingFlanked from "./HeadingFlanked.astro"; +import SpeakerSmall from "./SpeakerSmall.astro"; +import SubtleCard from "./SubtleCard.astro"; +import BodyText from "./BodyText.astro"; +--- + + + MCs + + + Our MCs are friendly web dev tooling connoisseurs who'll introduce the + sessions and other conference activities. + + + + { + (["nick-nisi", "fatima-sarah-khalid"] as const).map((person) => ( + + + + )) + } + + + + diff --git a/src/components/Newsletter.astro b/src/components/Newsletter.astro index 07c336c..4b30060 100644 --- a/src/components/Newsletter.astro +++ b/src/components/Newsletter.astro @@ -1,5 +1,6 @@ --- import BodyText from "./BodyText.astro"; +import HeadingFlanked from "./HeadingFlanked.astro"; interface Props { class?: string; @@ -8,22 +9,26 @@ interface Props { const { class: className, ...rest } = Astro.props; --- -
- - - -
- - +
+ Newsletter + +
+ + + +
+ + +
+ + diff --git a/src/data.ts b/src/data.ts deleted file mode 100644 index efb5ee4..0000000 --- a/src/data.ts +++ /dev/null @@ -1,73 +0,0 @@ -import bluesky from "./assets/bluesky.svg"; -import discord from "./assets/discord.svg"; -import github from "./assets/github.svg"; -import linkedin from "./assets/linkedin.svg"; -import mastodon from "./assets/mastodon.svg"; -import thisWeekInReact from "./assets/partners/this-week-in-react.png"; -import inngestBlack from "./assets/sponsors/inngest-black.svg"; -import openjsFoundationColor from "./assets/sponsors/openjs-foundation-color.svg"; -import twitter from "./assets/twitter.svg"; - -export const links = { - scholarship: "https://forms.gle/pnoAmVgijk3p4j5C7", - tickets: "https://buytickets.at/squiggleconf/1249793/r/website", - volunteer: "https://forms.gle/YfRvmSPBMpGe3T2g9", -}; - -export const partners = [ - { - href: "https://thisweekinreact.com?utm_source=squiggleconf", - logo: thisWeekInReact, - title: "This Week In React", - }, -]; - -export const sponsors = [ - { - href: "https://inngest.com?utm_source=squiggleconf", - logo: inngestBlack, - title: "Inngest", - }, - { - href: "https://openjsf.org?utm_source=squiggleconf", - logo: openjsFoundationColor, - title: "OpenJS Foundation", - }, -]; - -const socials = [ - { - alt: "Bluesky", - href: "https://bsky.app/profile/squiggleconf.com", - src: bluesky, - }, - { - alt: "LinkedIn", - href: "https://www.linkedin.com/company/squiggleconf", - src: linkedin, - }, - { - alt: "Mastodon", - href: "https://fosstodon.org/@SquiggleConf", - src: mastodon, - }, - { - alt: "Twitter", - href: "https://twitter.com/SquiggleConf", - src: twitter, - }, -]; - -export const locations = [ - ...socials, - { - alt: "GitHub", - href: "https://www.github.com/SquiggleTools/SquiggleConf", - src: github, - }, - { - alt: "Discord", - href: "https://discord.squiggleconf.com", - src: discord, - }, -].sort((a, b) => a.alt.localeCompare(b.alt)); diff --git a/src/data/index.ts b/src/data/index.ts new file mode 100644 index 0000000..5ff410d --- /dev/null +++ b/src/data/index.ts @@ -0,0 +1,137 @@ +import youtube from "../assets/logos/YouTube.svg"; +import bluesky from "../assets/logos/bluesky.svg"; +import discord from "../assets/logos/discord.svg"; +import github from "../assets/logos/github.svg"; +import linkedin from "../assets/logos/linkedin.svg"; +import mastodon from "../assets/logos/mastodon.svg"; +import twitter from "../assets/logos/twitter.svg"; +import jsParty from "../assets/partners/js-party.png"; +import thisWeekInReactDarkMode from "../assets/partners/this-week-in-react-dark-mode.png"; +import thisWeekInReactLightMode from "../assets/partners/this-week-in-react-light-mode.png"; +import inngest from "../assets/sponsors/inngest.svg"; +import inngestBlack from "../assets/sponsors/inngest-black.svg"; +import openjsFoundationColor from "../assets/sponsors/openjs-foundation-color.svg"; +import openjsFoundationLight from "../assets/sponsors/openjs-foundation-light.svg"; + +export type { Person, TalkFormat, TalkInfo } from "./notion-data.js"; +import * as notionData from "./notion-data.js"; + +export const partners = [ + { + href: "https://changelog.com/jsparty?utm_source=squiggleconf", + logos: { + dark: jsParty, + light: jsParty, + }, + title: "JS Party", + }, + { + href: "https://thisweekinreact.com?utm_source=squiggleconf", + logos: { + dark: thisWeekInReactDarkMode, + light: thisWeekInReactLightMode, + }, + title: "This Week In React", + }, +]; + +export const links = { + scholarship: "https://forms.gle/pnoAmVgijk3p4j5C7", + tickets: "https://ticket.squiggleconf.com", + volunteer: "https://volunteer.squiggleconf.com", +}; + +export const sponsors = [ + { + href: "https://inngest.com?utm_source=squiggleconf", + logos: { + dark: inngest, + light: inngestBlack, + }, + title: "Inngest", + }, + { + href: "https://openjsf.org?utm_source=squiggleconf", + logos: { + dark: openjsFoundationLight, + light: openjsFoundationColor, + }, + title: "OpenJS Foundation", + }, +]; + +export const locations = [ + { + alt: "Bluesky", + href: "https://bsky.app/profile/squiggleconf.com", + src: bluesky, + }, + { + alt: "LinkedIn", + href: "https://www.linkedin.com/company/squiggleconf", + src: linkedin, + }, + { + alt: "Mastodon", + href: "https://fosstodon.org/@SquiggleConf", + src: mastodon, + }, + { + alt: "Twitter", + href: "https://twitter.com/SquiggleConf", + src: twitter, + }, + { + alt: "YouTube", + href: "https://www.youtube.com/@SquiggleConf", + src: youtube, + }, + { + alt: "GitHub", + href: "https://www.github.com/SquiggleTools/SquiggleConf", + src: github, + }, + { + alt: "Discord", + href: "https://discord.squiggleconf.com", + src: discord, + }, +].sort((a, b) => a.alt.localeCompare(b.alt)); + +type TalkSlug = keyof typeof notionData.talksBySlug; + +const talksToExclude: TalkSlug[] = [ + // (Sylwia might not be able to make it 😢) + "workshop-sylwia-vargas", +]; + +const sortOrder: TalkSlug[] = [ + // Full + "talk-robby-russell", + "talk-aakansha-doshi", + "talk-dan-vanderkam", + "talk-don-isaac", + "talk-jess-lin", + "talk-loris-cro", + "talk-rick-viscomi", + "talk-rizel-scarlett", + "talk-titian-cernicova-dragomir", + // Lightning + "talk-rachel-nabors", + "talk-chris-griffing", + "talk-laurynas-keturakis", + "talk-corina-murg", + "talk-yagiz-nizipli", + // Workshop + "workshop-katerina-and-max", + "workshop-sylwia-vargas", +]; + +// sort by sortOrder +export const talks = Object.values(notionData.talksBySlug) + .filter((t) => !talksToExclude.includes(t.slug)) + .sort((a, b) => { + const aIndex = sortOrder.indexOf(a.slug); + const bIndex = sortOrder.indexOf(b.slug); + return aIndex - bIndex; + }); diff --git a/src/data/notion-data.ts b/src/data/notion-data.ts new file mode 100644 index 0000000..9fdd128 --- /dev/null +++ b/src/data/notion-data.ts @@ -0,0 +1,570 @@ +export interface PersonLinks { + bluesky: null | string; + github: null | string; + gitlab: null | string; + linkedin: null | string; + mastodon: null | string; + medium: null | string; + twitch: null | string; + twitter: null | string; + website: null | string; + youtube: null | string; +} + +export interface Person { + bio: null | string; + links: PersonLinks; + name: string; + qualification: null | string; + role: null | string; + slug: string; +} + +export const peopleBySlug = { + "aakansha-doshi": { + bio: "Aakansha is passionate about Free and open-source software (FOSS) and loves deep diving into the internals of Web and Javascript. She is a core maintainer of excalidraw, react-tags, mermaid-to-excalidraw and more. She also leads the FOSS meetups in Bangalore, India. Beyond her tech interests, she is a big foodie, loves traveling, and spending quality time with her family.", + links: { + bluesky: null, + github: "https://github.com/ad1992", + gitlab: null, + linkedin: "https://www.linkedin.com/in/aa1992", + mastodon: null, + medium: null, + twitch: null, + twitter: "https://x.com/aakansha1216", + website: null, + youtube: null, + }, + name: "Aakansha Doshi", + qualification: "[Excalidraw](https://excalidraw.com/) Core Maintainer", + role: "Open Source", + slug: "aakansha-doshi", + }, + "chris-griffing": { + bio: "I love building things on my Twitch stream and some of those things have been CLI tools. When you are creating binaries, you sometimes want people to be able to extend your tools with their own functionality. The simplest path has traditionally been exposing a server API for someone to interact with but many security-minded users are averse to the idea of a tool they use running a local http server. You can give your users extensibility without the need for a local http server and at the same time allow them to use any of the languages supported by the Extism toolkit.", + links: { + bluesky: null, + github: "https://github.com/cmgriffing", + gitlab: null, + linkedin: "https://www.linkedin.com/in/cmgriffing", + mastodon: null, + medium: null, + twitch: "https://twitch.tv/cmgriffing", + twitter: "https://x.com/cmgriffing", + website: "https://chrisgriffing.com", + youtube: "https://youtube.com/@cmgriffing", + }, + name: "Chris Griffing", + qualification: "WASM Fanatic", + role: "[GitKraken](https://www.gitkraken.com/)", + slug: "chris-griffing", + }, + "corina-murg": { + bio: "I’m a certified accessibility engineer and founder of Web for Everyone, an initiative dedicated to introducing accessibility concepts to frontend developers. I’m also the accessibility specialist for Gridiron Survivor, an open source project building a SaaS application. In my previous career as a high school math teacher, I was regularly concerned with creating learning experiences that were accessible and welcoming to each and everyone of my students. Teaching a legally blind student first introduced me to the concept of digital accessibility. Through my work in frontend development, I want to make sure that everyone, including my former student and other people with disabilities, can easily navigate and understand the products and services we build. Outside coding, I love reading and memorizing poems, as well as taking walks with my cat.", + links: { + bluesky: null, + github: "https://github.com/CorinaMurg", + gitlab: null, + linkedin: "https://www.linkedin.com/in/corinamurg", + mastodon: null, + medium: null, + twitch: null, + twitter: "https://x.com/CorinaMurg", + website: "https://webforeveryone.us", + youtube: null, + }, + name: "Corina Murg", + qualification: "Accessibility Engineer", + role: "Founder, [Web for Everyone](https://webforeveryone.us/)", + slug: "corina-murg", + }, + "dan-vanderkam": { + bio: "", + links: { + bluesky: null, + github: "https://github.com/danvk", + gitlab: null, + linkedin: "https://www.linkedin.com/in/danvk", + mastodon: null, + medium: null, + twitch: null, + twitter: "https://x.com/danvdk", + website: null, + youtube: null, + }, + name: "Dan Vanderkam", + qualification: "TypeScript Compiler Contributor", + role: "[_Effective TypeScript_](https://effectivetypescript.com/) Author", + slug: "dan-vanderkam", + }, + "don-isaac": { + bio: "My name is Don, and I work on next-gen tooling for finding incorrect code both statically and dynamically. I currently work on both Oxc and an autonomous UI testing agent, and have been writing code for over 10 years.", + links: { + bluesky: null, + github: "https://github.com/DonIsaac", + gitlab: null, + linkedin: "https://www.linkedin.com/in/donaldisaac", + mastodon: null, + medium: null, + twitch: null, + twitter: "https://x.com/Don_dev_", + website: null, + youtube: null, + }, + name: "Don Isaac", + qualification: + "[JavaScript Oxidation Compiler](https://oxc.rs/) Maintainer", + role: "", + slug: "don-isaac", + }, + "fatima-sarah-khalid": { + bio: "As a Developer Evangelist at GitLab, Fatima specializes in CI/CD, community building, and evangelizing AI-powered workflows. She is deeply passionate about open source and is committed to building more inclusive tech communities. Better known as \"sugaroverflow\" on the internet, she's known for storytelling, simplifying technical concepts, and keynotes on inclusion & ally-ship. In recognition of her contributions to technology and advocacy, she received the WCT Rising Star award in 2018. When she's not playing board games with friends, you'll find her reading science fiction by the ocean.", + links: { + bluesky: "https://bsky.app/profile/sugaroverflow.bsky.social", + github: "https://github.com/sugaroverflow", + gitlab: "https://gitlab.com/sugaroverflow", + linkedin: "https://www.linkedin.com/in/sugaroverflow", + mastodon: "https://hachyderm.io/@sugaroverflow", + medium: null, + twitch: null, + twitter: "https://x.com/sugaroverflow", + website: null, + youtube: null, + }, + name: "Fatima Sarah Khalid", + qualification: "Developer Evangelist, [GitLab](https://gitlab.com/)", + role: "", + slug: "fatima-sarah-khalid", + }, + "jess-lin": { + bio: 'I\'ve been a software engineer for a decade. I first worked on an open source IDE at Facebook in 2013; then moved to ads at Pinterest, collaboration tools at Stripe, and absolutely everything at Instabase when it was only 5 people. In recent years, I\'ve enjoyed roles that bring me close to users, first as a deployed engineer at Retool and now as a devrel at Render.On software teams, I\'ve always found myself helping colleagues communicate their technical ideas. With my background, I can help engineers efficiently and with a lot of empathy. I’ve produced, written, and ghostwritten successful tech blog posts that have hit the front page of Hacker News and been featured in prominent newsletters.This talk came out of a colleague at Render asking me to explain all the edits I made to his posts \\(he could see the "what" but not the "why"\\)—and SquiggleConf is the perfect excuse to sit down and explain!', + links: { + bluesky: null, + github: "https://github.com/jssln", + gitlab: null, + linkedin: "https://www.linkedin.com/in/jessica-lin-17b0771b", + mastodon: null, + medium: null, + twitch: null, + twitter: "https://x.com/jesstyping", + website: "https://www.jssln.com", + youtube: null, + }, + name: "Jess Lin", + qualification: "Software Engineer & Technical Writer", + role: "DevRel, [Render](https://render.com/)", + slug: "jess-lin", + }, + "katerina-skroumpelou": { + bio: "", + links: { + bluesky: null, + github: "https://github.com/mandarini", + gitlab: null, + linkedin: null, + mastodon: "https://mas.to/@psybercity", + medium: "https://pakotinia.medium.com", + twitch: null, + twitter: "https://x.com/psybercity", + website: "https://psyber.city", + youtube: null, + }, + name: "Katerina Skroumpelou", + qualification: "Senior Engineer, [Nx](https://nx.dev/)", + role: "Google Developer Expert for Angular", + slug: "katerina-skroumpelou", + }, + "laurynas-keturakis": { + bio: "I'm a full-stack software engineer building API tools at Fiberplane. I care about open source observability tools and focus on making them more accessible for every day developers.", + links: { + bluesky: "https://bsky.app/profile/laurynas.cc", + github: "https://github.com/keturiosakys", + gitlab: null, + linkedin: "https://www.linkedin.com/in/lketurakis", + mastodon: "https://hachyderm.io/@laurynas", + medium: null, + twitch: null, + twitter: "https://x.com/_laurynas", + website: "https://laurynas.cc", + youtube: null, + }, + name: "Laurynas Keturakis", + qualification: "[fpx](https://github.com/fiberplane/fpx) Maintainer", + role: "Developer, [Fiberplane](https://fiberplane.com/)", + slug: "laurynas-keturakis", + }, + "loris-cro": { + bio: "Hi, I'm Loris. I work at the Zig Software Foundation, and my main job is to help Zig grow a vibrant community and ecosystem. While, like most people, I started with only high-level programming languages, Zig has introduced me to systems programming and shown me all the design choices that previous programming languages had precluded me from accessing. I now use my newfound superpowers to try to write performant and robust applications, and on occasion I even succeed :^\\)", + links: { + bluesky: "https://bsky.app/profile/kristoff.it", + github: "https://github.com/kristoff-it", + gitlab: null, + linkedin: "https://linkedin.com/in/kristoff-it", + mastodon: "https://hachyderm.io/@kristoff", + medium: null, + twitch: "https://www.twitch.tv/kristoff_it", + twitter: "https://x.com/croloris", + website: "https://kristoff.it", + youtube: "https://www.youtube.com/@ZigSHOWTIME", + }, + name: "Loris Cro", + qualification: "Zig Livecoder", + role: "VP Community, [Zig Software Foundation](https://ziglang.org/zsf/)", + slug: "loris-cro", + }, + "max-kless": { + bio: "", + links: { + bluesky: null, + github: "https://github.com/MaxKless", + gitlab: null, + linkedin: "https://www.linkedin.com/in/max-kless-398530216", + mastodon: null, + medium: null, + twitch: null, + twitter: "https://x.com/MaxKless", + website: null, + youtube: null, + }, + name: "Max Kless", + qualification: + "[Nx Console](https://github.com/nrwl/nx-console) VSCode Extension Maintainer", + role: "Senior Engineer, [Nx](https://nx.dev/)", + slug: "max-kless", + }, + "nick-nisi": { + bio: "I’ve been immersed in TypeScript for over a decade, bringing my experience and expertise to a variety of companies and contributing to significant projects like The Dojo Toolkit and Codesandbox. I’m a panelist on the popular JavaScript podcast, JS Party, where I have the pleasure of interviewing and learning from the best in the industry. Currently, I’m a software engineer at a leading tech company, and I actively engage with the tech community by speaking at conferences and sharing my passion for web development, TypeScript, and Vim. My goal is to foster a collaborative environment and inspire fellow developers. When I’m not coding or podcasting, I’m practicing my public speaking through the art of karaoke, or being kept on my toes by my two kids who ensure life is never dull!", + links: { + bluesky: "https://bsky.app/profile/nicknisi.com", + github: "https://github.com/nicknisi", + gitlab: null, + linkedin: "https://linkedin.com/in/nicknisi", + mastodon: "https://fediverse.nicknisi.com/@nicknisi", + medium: null, + twitch: null, + twitter: "https://x.com/nicknisi", + website: "https://nicknisi.com", + youtube: "https://www.youtube.com/nicknisi", + }, + name: "Nick Nisi", + qualification: "MC for [TS Conf](https://archive.tsconf.io/2021/)", + role: "Panelist of [JS Party](https://changelog.com/jsparty)", + slug: "nick-nisi", + }, + "rachel-nabors": { + bio: "Rachel Lee Nabors has led developer education at FAANG companies and startups. They've participated in browser development, web animation standards and open source with Mozilla, W3C, and Microsoft and wrote “Animation at Work.” Most recently, they built award-winning React and React Native dev portals at Meta. Currently, they live in London, writing a book on how to survive your tech career.", + links: { + bluesky: null, + github: "https://github.com/rachelnabors", + gitlab: null, + linkedin: "https://linkedin.com/in/rachelnabors", + mastodon: "https://toot.cafe/@rachelnabors", + medium: null, + twitch: "https://www.twitch.tv/nearestnabors", + twitter: "https://x.com/rachelnabors", + website: null, + youtube: null, + }, + name: "Rachel Nabors", + qualification: "Author, Cartoonist, and DevRel Extraordinaire", + role: "", + slug: "rachel-nabors", + }, + "rick-viscomi": { + bio: "I'm a web performance engineer working on the Chrome Web DevRel team at Google, where my mission is to make the web faster. My role is to promote web performance best practices to help developers succeed with Core Web Vitals, and a major part of that is giving developers the right tools to measure and debug slow user experiences. I'm currently working closely with the Chrome DevTools team on the next generation Performance panel, and since 2017 I've been working on the Chrome UX Report, a public dataset of real-world performance data from millions of websites. I've also built several tools including the Core Web Vitals Technology Report and the CrUX Dashboard to help developers track performance and discover opportunities for improvement, and I co-wrote Using WebPageTest, a book about the web performance testing tool.", + links: { + bluesky: null, + github: "https://github.com/rviscomi", + gitlab: null, + linkedin: null, + mastodon: null, + medium: null, + twitch: null, + twitter: "https://x.com/rick_viscomi", + website: "https://rviscomi.dev", + youtube: "https://www.youtube.com/@RickViscomi", + }, + name: "Rick Viscomi", + qualification: "[Chrome](https://www.google.com/chrome/) Team, Google", + role: "Web Performance DevRel", + slug: "rick-viscomi", + }, + "rizel-scarlett": { + bio: "I am a Staff Developer Advocate at TBD, Block's newest business unit. At TBD, we're shifting the paradigm by converting open standards into open source SDKs that make cross border payments and data ownership more accessible for users. I'm responsible for helping people understand how to use the SDKs through documentation, content creation, conference talks, and practical code examples. With a diverse background spanning GitHub, startups, and non-profit organizations, I have cultivated a passion for utilizing emerging technologies to champion equity within the tech industry. I moonlight as an Advisor at G{Code} House, an organization aimed at teaching women of color and non-binary people of color to code. I believe in leveraging vulnerability, honesty, and kindness as means to educate early-career developers.", + links: { + bluesky: null, + github: "https://github.com/blackgirlbytes", + gitlab: null, + linkedin: "https://linkedin.com/in/rizel-bobb-semple", + mastodon: "https://hachyderm.io/@blackgirlbytes", + medium: null, + twitch: null, + twitter: "https://x.com/blackgirlbytes", + website: null, + youtube: null, + }, + name: "Rizèl Scarlett", + qualification: "", + role: "Staff Developer Advocate, [TBD](https://developer.tbd.website/)", + slug: "rizel-scarlett", + }, + "robby-russell": { + bio: "Hi, I'm Robby Russell, the creator of Oh My Zsh, one of the most popular open-source projects on GitHub with nearly 2,400 contributors. As I reflect on the 15th anniversary of its release, I remember creating Oh My Zsh to scratch a selfish itch within my small team, never anticipating its widespread adoption. By attending my talk, you'll gain a deeper understanding of why it became successful, learn from the unexpected journey, and discover valuable lessons that can help you in your own projects.", + links: { + bluesky: null, + github: "https://github.com/robbyrussell", + gitlab: null, + linkedin: "http://www.linkedin.com/in/robbyrussell", + mastodon: "https://ruby.social/@robbyrussell", + medium: null, + twitch: null, + twitter: "https://x.com/robbyrussell", + website: null, + youtube: null, + }, + name: "Robby Russell", + qualification: "[Oh My Zsh](https://ohmyz.sh/) Creator", + role: "CEO, [Planet Argon](https://www.planetargon.com/)", + slug: "robby-russell", + }, + "sylwia-vargas": { + bio: "", + links: { + bluesky: null, + github: null, + gitlab: null, + linkedin: null, + mastodon: null, + medium: null, + twitch: null, + twitter: "https://x.com/SylwiaVargas", + website: null, + youtube: null, + }, + name: "Sylwia Vargas", + qualification: "", + role: "", + slug: "sylwia-vargas", + }, + "titian-cernicova-dragomir": { + bio: "Hi, I’m Titian! I’m a software engineer on the JavaScript Infrastructure team at Bloomberg, where I work on JavaScript and TypeScript tooling for the company’s internal developers. I am passionate about TypeScript and, together with my colleagues, have contributed to TypeScript features such as Private Methods in classes and Isolated Declarations. I also enjoy answering questions about TypeScript, so you might have come across one of my Stack Overflow answers. Feel free to ask me any questions! In my free time, I love spending time with my lovely wife, two kids, and my fully gray cat.", + links: { + bluesky: null, + github: "https://github.com/dragomirtitian", + gitlab: null, + linkedin: "https://uk.linkedin.com/in/titian-cernicova-dragomir-2b37457a", + mastodon: null, + medium: null, + twitch: null, + twitter: "https://x.com/TitianCernicova", + website: null, + youtube: null, + }, + name: "Titian Cernicova-Dragomir", + qualification: "TypeScript Compiler Contributor", + role: "Software Engineer, [Bloomberg](https://www.bloomberg.com/)", + slug: "titian-cernicova-dragomir", + }, + "yagiz-nizipli": { + bio: "I’m Yagiz Nizipli. I’m a Node.js Technical Steering committee member, and a Principal Systems Engineer at Cloudflare. With a deep passion for performance optimization, I’ve made significant improvements to Node.js performance by having more than 250+ contributions. I’ve written several tools such as “node —run” and “node —env-file”. I’m also the author of Ada URL Parser, the implementation used by Node.js and Cloudflare workers.", + links: { + bluesky: null, + github: "https://github.com/anonrig", + gitlab: null, + linkedin: null, + mastodon: null, + medium: null, + twitch: null, + twitter: "https://x.com/yagiznizipli", + website: "https://yagiz.co", + youtube: null, + }, + name: "Yagiz Nizipli", + qualification: + "[Node.JS TSC](https://github.com/nodejs/TSC) Member, a top Node.JS [Contributor](https://github.com/nodejs/node/commits?author=anonrig)", + role: "Principal Systems Engineer, [Cloudflare](https://www.cloudflare.com/)", + slug: "yagiz-nizipli", + }, +} satisfies Record; + +export type TalkFormat = "Full" | "Lightning" | "Workshop"; + +export interface TalkInfo { + description: string; + people: Person[]; + slug: string; + tags: string[]; + talkFormat: TalkFormat; + title: string; +} + +export const talksBySlug: Record = { + "talk-aakansha-doshi": { + description: + "How do we manipulate pixels in a DOM-oriented world? HTML \\! I recently built [Excalidraw](https://excalidraw.com/)’s ‘labeled arrows’ feature, which heavily utilizes all sorts of Canvas element JavaScript APIs for rich graphics and media display in web browsers. Let’s dig in to see how Canvas and Excalidraw work under the hood!\n\nI’ll cover with demos:\n- Why labeled arrows were built: including the ‘how’ and ‘why’ of design decisions\n- The architecture of how elements are structured and how text is tied to the arrow\n- Rendering arrows in canvas, including multi-point arrows and transparency effects\n- How Canvas and SVG compare & contrast with mask attributes, clipping, and clearRect\n- Performance optimizations such as caching labeled repeat computational and graphics work\n\nThe audience will come away understanding how Canvas APIs work together - along with how labeled arrows were implemented in Excalidraw.", + people: [peopleBySlug["aakansha-doshi"]], + slug: "talk-aakansha-doshi", + tags: ["Canvas", "SVG", "Performance"], + talkFormat: "Full", + title: "Excalidraw: Canvas All The Way Down", + }, + "talk-chris-griffing": { + description: + "How awesome would it be if anyone could write plugins in any languages that interop with your application regardless of your stack? Introducing [Extism](https://github.com/extism/extism): a powerful plugin system that allows you to integrate WASM code into your servers, the edge, CLIs, IoT, browsers and everything in between.\n\nThe talk will start out with a history of WASM and it's predecessor \\([asm.js](https://en.wikipedia.org/wiki/Asm.js)\\). We will even point out [Gary Bernhardt's ‘Birth and Death of JavaScript’ presentation](https://www.destroyallsoftware.com/talks/the-birth-and-death-of-javascript) and how it seems to have predicted where WASM could go. After understanding WASM and its history, we will outline what Extism is, how it can be used, as well as some real-world examples of its usage.", + people: [peopleBySlug["chris-griffing"]], + slug: "talk-chris-griffing", + tags: ["WebAssembly", "Cross-Language", "Open Source", "Language Soup"], + talkFormat: "Lightning", + title: "Creating a WASM-Powered Plugin System For Your App", + }, + "talk-corina-murg": { + description: + "Accessibility is a core component of the web — yet many web development teams treat it as an afterthought. Building with accessibility in mind involves understanding the rules of accessibility and how to use web dev tools to your advantage in designing and debugging it.\n\nLet’s go through the [Accessibility Tree](https://developer.chrome.com/blog/full-accessibility-tree): a hidden gem for understanding how a webpage will be presented through various accessibility lenses. We’ll explore how to access and use the accessibility tree through DevTools and discuss the slight differences in how different browsers render the tree. From there, we’ll delve into the structure of the tree and explore its relationship to the DOM. \n\nBy understanding and utilizing the Accessibility Tree, we can build digital products and services that are more inclusive and compliant.", + people: [peopleBySlug["corina-murg"]], + slug: "talk-corina-murg", + tags: [ + "Accessibility Tree", + "Debugging", + "Chrome DevTools", + "Inclusive Design", + ], + talkFormat: "Lightning", + title: "Harnessing the Accessibility Tree: Debugging with this Hidden Gem", + }, + "talk-dan-vanderkam": { + description: + "There’s nothing more devtool-y than how you store your code. Over the past 50 years, computers have grown dramatically more powerful, user interfaces have grown increasingly complex, and computer programs have grown orders of magnitude larger. But despite all this change, we still represent computer code the same way we did in 1970: as plain text files. Why is plain text so ubiquitous, and why do attempts to replace it always fail?\n\nThis talk will explore the different attempts and strategies at making something “better” than plain text for source formats — including defining what “better” might be in the first place. We’ll cover richer text formats, AST-oriented storage, and more explorations in the future.\n\nBenefits of this talk will include a renewed appreciation for how to share, store, and generally work with your computer code sources.", + people: [peopleBySlug["dan-vanderkam"]], + slug: "talk-dan-vanderkam", + tags: ["ASTs", "Parsing", "Source Code"], + talkFormat: "Full", + title: "The Battle for Source Code: Text, ASTs, or Other?", + }, + "talk-don-isaac": { + description: + "The [Oxc Project](https://oxc.rs/) is a collection of high-performance JavaScript/TypeScript tools written in Rust. It comes with a parser, a linter, and other build-time libraries and utilities. But didn’t these already exist? Why did we need to rewrite them in another language?\n\nGreat questions! This talk will walk through the incredible performance and interoperability opportunities of moving shared web dev tooling to a native-speed language like Rust. You’ll see both how to use these wonderfully fast new tools in your project to unlock speedy and reliable builds immediately.\n\nEven better, you’ll also get an insider’s view of how these projects are built. There’s all sorts of fantastic engineering at play, ranging from re-using test suites from Babel and TypeScript themselves to community-oriented integration tests to ensure compatibility. The end result is a rich set of community tooling for the Rust ecosystem that is a joy to work with.", + people: [peopleBySlug["don-isaac"]], + slug: "talk-don-isaac", + tags: ["Rust", "CLIs", "Performance", "TypeScript"], + talkFormat: "Full", + title: "Oxc: Pluggable Next-Gen Tooling At Rust Speed", + }, + "talk-jess-lin": { + description: + "Writing a technical blog post may sound like a solo task, but in reality it’s just like good software—best with a writer and reviewer/editor. But what does that process look like, and what’s the role of the editor?\n\nIn this talk, I’ll first show elements of a good versus great blog post, with examples. A good post gets the information across in an orderly fashion. A great blog post starts from great source material, and manages to be a page turner. Sometimes, good is all you need, but it’s useful to recognize when you have the potential for great.\n\nNext, I’ll show real examples of specific edits to blog posts I consider good and great. In general, you need to first edit at the macro level \\(e.g. throwing out an entire first draft and choosing a completely different angle\\) and then the micro level \\(e.g. restructuring sentences for clarity\\). The title and opening deserve special attention, and I’ll share tactics you can use to write and refine them.\n\nMarketing your software isn’t just for marketers. These techniques will help you in everything from pull request descriptions to release announcements. I’ll use real material from a series of blog posts we published in spring 2024 at [Render](https://render.com/) to show how much of a difference applying editing craft to communications can make.", + people: [peopleBySlug["jess-lin"]], + slug: "talk-jess-lin", + tags: [ + "Docs", + "Launching Software Products", + "Community Building", + "Technical Writing", + ], + talkFormat: "Full", + title: "How To Write About Software", + }, + "talk-laurynas-keturakis": { + description: + "Traces are an incredibly useful tool for understanding how your code actually runs function-by-function. With [OpenTelemetry](https://opentelemetry.io/) being accepted as standard by vendors and language platforms alike, there has never been a better time to start using it. Yet, many teams adopt traces late in the development cycle when code is hard to change and new tools always take time and money to learn.\n\nThis talk will show you how you can get started using tracing locally and what you can get out of it. It will discuss the benefits you get from well-traced applications and why it is so hard to get there. We’ll cover what makes tracing hard, how to smooth out those rough edges and get you debugging your code in no time!", + people: [peopleBySlug["laurynas-keturakis"]], + slug: "talk-laurynas-keturakis", + tags: ["Tracing", "Debugging", "Open Telemetry"], + talkFormat: "Lightning", + title: "Tracing: Start On Day Zero", + }, + "talk-loris-cro": { + description: + "Have you ever started a simple project, wanted something to exist, and ended up spending all your time building it yourself? I recently went from building static sites, to building my own static site generator, to writing a new HTML parser and then language server from scratch.\n\nThis talk will guide you through that process of how my yak-shaving stack evolved over time, staring with using TreeSitter as a parser, and culminating in the [Zine](https://zine-ssg.io/) static site generator and [SuperHTML](https://github.com/kristoff-it/superhtml) language server. We’ll cover both why those things are useful and how they actually work under the hood.\n\nBy the end of this talk, you will have concluded I’m a maniac, or you will have developed your own appreciation for occasionally building things from scratch. Likely both.", + people: [peopleBySlug["loris-cro"]], + slug: "talk-loris-cro", + tags: ["Zig", "Language Server Protocol", "TreeSitter", "Parsing"], + talkFormat: "Full", + title: "Building LSP Server from Scratch in Zig", + }, + "talk-rachel-nabors": { + description: + "Did you know web animations have their own dedicated browser dev tools? Come learn how to debug timeline based animations in the browser and share animation specs across teams!\n\nOften design happens in Figma and development happens in components. During that hand-off, motion and interaction design can fall through the cracks. But there are great tools and techniques that marry development and design, bringing life and personality to your UI.\n\nWe’ll start with the basics needed to add some visual interest to any project and escalate all the way to integrating complex, orchestrated animations from a motion design team into your workflow. We’ll also cover CSS animation utility libraries, easing tools for creating custom eases and springs, using the [Web Animations API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API/Using_the_Web_Animations_API) to react to and chain animation events.", + people: [peopleBySlug["rachel-nabors"]], + slug: "talk-rachel-nabors", + tags: [ + "Web Animations API", + "Debugging Tools", + "Design", + "CSS Animations Panel", + ], + talkFormat: "Lightning", + title: "Web Animations: Tools and Techniques", + }, + "talk-rick-viscomi": { + description: + "Excellent tools are at the heart of every performance optimization workflow. From synthetic testing, auditing, and diagnosing performance issues to collecting and analyzing performance data from real-world user experiences. A good performance workflow utilizes both real-world _and_ synthetic tooling to help you understand how fast your site is and how to make it faster.\n\nIn this talk, we'll explore Google's recommended web performance tooling workflow for fast [Core Web Vitals](https://web.dev/articles/vitals). We'll focus on Chrome DevTools and the powerful [Performance panel](https://developer.chrome.com/docs/devtools/performance) to get a better understanding of what's happening under the hood. We'll also look at a typical data pipeline for collecting and analyzing real-user data to get a better understanding of the top performance issues and opportunities. Finally, we'll look at a few techniques to significantly improve some of the most common and impactful issues with loading performance and interaction responsiveness.", + people: [peopleBySlug["rick-viscomi"]], + slug: "talk-rick-viscomi", + tags: ["Chrome DevTools", "Performance", "Core Web Vitals"], + talkFormat: "Full", + title: "Diving Into The Chrome DevTools Performance Panel", + }, + "talk-rizel-scarlett": { + description: + "Sigh, your docs are broken and outdated. But here's the good news: they don’t have to be!\n\nDocumentation is a reflection of the quality of your dev tooling, so if it's broken and outdated that sets the tone for your product's reputation. I empathize with you: as your tooling constantly evolves, keeping documentation up-to-date is challenging, especially when managing multiple programming languages. You already have so much going on. Docs are important, and your time is too.\n\nJoin Rizèl for a session on working smarter \\(and not harder\\) with practical techniques for integrating documentation into your development workflows. Rizèl will share how to efficiently treat your developer docs as code to ensure your documentation remains reliable and current.", + people: [peopleBySlug["rizel-scarlett"]], + slug: "talk-rizel-scarlett", + tags: ["Developer Relations", "Community Building", "Documentation"], + talkFormat: "Full", + title: "Escaping the Curse of Outdated Docs", + }, + "talk-robby-russell": { + description: + "Join Robby Russell, the creator of [Oh My Zsh](https://ohmyz.sh/), as he reflects on the remarkable journey of this CLI framework on its 15th anniversary. Robby will share his candid experiences and insights into how a project that started without a clear plan managed to gain widespread adoption across the software industry. \n\nWe’ll travel through the origins of Oh My Zsh, its surprising growth, and the valuable lessons he learned along the way. Robby will highlight the significance of creating user-friendly and practical tools, especially for new developers. He'll delve into the art of engaging with an open-source community and his mission to bring enjoyment to the command line. Robby's advice on developing a successful open-source project will resonate with web developers eager to improve their tools and contribute to community-driven innovation.\n\nThis talk aims to show that anyone can launch a successful software project with the right mindset and motivation. Robby's story demonstrates the power of solving problems for yourself and your peers. He will discuss building and sharing useful tools, showing that even small efforts can have a significant impact. This talk will give you a deeper understanding of the power of collaboration and how these principles can be applied to your work in and around developer tooling.", + people: [peopleBySlug["robby-russell"]], + slug: "talk-robby-russell", + tags: [ + "CLIs", + "Community Building", + "Launching Software Products", + "Open Source", + ], + talkFormat: "Full", + title: "Oh My Zsh: Learnings Over 15 years of CLI Innovation", + }, + "talk-titian-cernicova-dragomir": { + description: + "Isolated Declarations is a new feature in TypeScript 5.5 that is designed to help speed up build times in monorepos. In this talk, we'll discuss how Bloomberg, in collaboration with Google and Microsoft, helped develop this feature. You'll learn how Isolated Declarations can enable parallel builds for faster overall build times, and we'll also examine what this means for how you author your code.", + people: [peopleBySlug["titian-cernicova-dragomir"]], + slug: "talk-titian-cernicova-dragomir", + tags: ["TypeScript", "Monorepo Tooling", "Debugging", "Build Optimization"], + talkFormat: "Full", + title: "The Road to Faster Builds: Developing Isolated Declarations", + }, + "talk-yagiz-nizipli": { + description: + "Performance is important! So important, that performance engineers tend to have an “occupational hazard” of optimizing everything. Join Yagiz in diving into real-world examples of how a performance engineer optimizes Node.js core code — with techniques that’ll be useful to you for all your applications. Yagiz Nizipli will share technical and funny details about the dark side of optimizations and how to prioritize optimizing what needs it most.", + people: [peopleBySlug["yagiz-nizipli"]], + slug: "talk-yagiz-nizipli", + tags: ["Node.js", "Performance", "C++", "JavaScript"], + talkFormat: "Lightning", + title: "Node.js Core Performance Optimizations, Revealed", + }, + "workshop-katerina-and-max": { + description: + "You will leave this workshop having built and installed a custom VSCode _and_ JetBrains extension! Learn how to enchant your Editor in a \\(seasonally witch-themed!\\) deep dive into Editor plugins and what it takes to build one. You will gain hands-on experience with [Nx](https://nx.dev/) and how you can use it to compose a clean architecture in a complex repo.\n\nWe’ve learned a lot in the process of building and maintaining both [Nx](https://nx.dev/) and [Nx Console](https://marketplace.visualstudio.com/items?itemName=nrwl.angular-console), our editor extension - we’re ready to share our best tips and tricks!\n\nIf you want to learn more about Nx of if you’ve ever thought to yourself “I wish someone at my company could make an editor extension” then this workshop is for you! Come and see how easy it is to get started.", + people: [peopleBySlug["katerina-skroumpelou"], peopleBySlug["max-kless"]], + slug: "workshop-katerina-and-max", + tags: [ + "Editor Extensions", + "Language Server Protocol", + "TypeScript", + "Kotlin", + ], + talkFormat: "Workshop", + title: "Build Editor Extensions with the Makers of Nx Console", + }, + "workshop-sylwia-vargas": { + description: "", + people: [peopleBySlug["sylwia-vargas"]], + slug: "workshop-sylwia-vargas", + tags: [], + talkFormat: "Workshop", + title: "Inngest", + }, +}; diff --git a/src/layouts/ContentLayout.astro b/src/layouts/ContentLayout.astro index c385094..6765c92 100644 --- a/src/layouts/ContentLayout.astro +++ b/src/layouts/ContentLayout.astro @@ -20,8 +20,8 @@ import BaseLayout from "./BaseLayout.astro"; body { background: linear-gradient( 180deg, - var(--colorBackdropLight) 20%, - var(--colorBackdropDark) 100% + var(--colorBackdropDark) 20%, + var(--colorBackdropLight) 100% ); color: var(--colorForeground); diff --git a/src/layouts/base.css b/src/layouts/base.css index e57f7ca..5ef2bed 100644 --- a/src/layouts/base.css +++ b/src/layouts/base.css @@ -2,20 +2,29 @@ :root { color-scheme: light; - --colorBackdropDark: #c9e6f3; - --colorBackdropLight: #edebe4; + --colorCream: #edebe4; + --colorBlueLight: #c9e6f3; + --colorDull: #b6c1c6; + --colorOffWhite: #eaeaff; + --colorRedDark: #7f3a5c; + --colorRedLight: #ffbfc2; + --colorWhite: #ffffff; + + --colorBackdropDark: var(--colorBlueLight); + --colorBackdropLight: var(--colorCream); + --colorBackdropOff: var(--colorOffWhite); --colorEmphasized: #1b80a1; --colorEmphasizedBackground: #085e7a; - --colorInverted: #edebe4; + --colorInverted: var(--colorCream); --colorInvertedMild: #78c1d9; + --colorInvertedDull: rgb(165, 204, 218); --colorForeground: #1f3840; --colorForegroundBody: #203238; - --colorOffWhite: #eaeaff; --colorSubtleLight: #a5e2fc; --colorSubtle: var(--colorSubtleLight); --colorHeroShadow: #002547; --colorTextShadow: rgba(35, 49, 70, 0.75); - --colorUnhappy: #7f3a5c; + --colorUnhappy: var(--colorRedDark); --fontFamilyBody: "Urbanist"; --fontFamilyHeading: "Josefin Sans Variable"; @@ -53,11 +62,14 @@ --colorBackdropDark: var(--colorSubtle); --colorBackdropLight: var(--colorInverted); + --colorBackdropOff: var(--colorSubtle); --colorEmphasized: #0685af; - --colorForeground: rgb(188, 223, 233); - --colorForegroundBody: rgb(210, 235, 241); + --colorForeground: #bcdfe9; + --colorForegroundBody: #d2ebf1; --colorInverted: #10141b; --colorSubtle: #062430; + --colorTextShadow: var(--colorEmphasized); + --colorUnhappy: var(--colorRedLight); --lineHeightBody: 1.5; --lineHeightSecondary: 1.1; diff --git a/src/layouts/normalize.css b/src/layouts/normalize.css index d3b965b..4e8dfe7 100644 --- a/src/layouts/normalize.css +++ b/src/layouts/normalize.css @@ -1,31 +1,22 @@ -@layer normalize { - * { - box-sizing: border-box; - } - - body { - margin: 0; - } +* { + box-sizing: border-box; +} - a { - color: inherit; - text-decoration-thickness: 1px; - } +body { + margin: 0; +} - h1, - h2, - h3, - li, - ol, - p, - ul { - margin: 0; - padding: 0; - font-size: inherit; - } +a { + color: inherit; + text-decoration-thickness: 1px; +} - ol, - ul { - list-style: none; - } +h1, +h2, +h3, +ol, +p { + margin: 0; + padding: 0; + font-size: inherit; } diff --git a/src/pages/about.astro b/src/pages/about.astro index 1aa4784..064e1de 100644 --- a/src/pages/about.astro +++ b/src/pages/about.astro @@ -6,20 +6,19 @@ import michiganTypeScript from "~/assets/michigan-typescript.png"; import AnchorButton from "~/components/AnchorButton.astro"; import Bio, { Props as BioProps } from "~/components/Bio.astro"; import BodyText from "~/components/BodyText.astro"; -import Heading from "~/components/Heading.astro"; +import HeadingFlanked from "~/components/HeadingFlanked.astro"; import HeroForPage from "~/components/HeroForPage.astro"; import PrimaryContents from "~/components/PrimaryContents.astro"; -import SquiggleFlanked from "~/components/SquiggleFlanked.astro"; +import { links } from "~/data/index"; import ContentLayout from "~/layouts/ContentLayout.astro"; -import { links } from "~/data"; const bios: Omit[] = [ { links: { - bluesky: "bostonts.club", + bluesky: "https://bsky.app/profile/bostonts.club", linkedin: "https://www.linkedin.com/groups/13008308", mastodon: "https://mastodon.social/@BostonTS", - twitter: "BosTypeScript", + twitter: "https://x.com/BosTypeScript", website: "https://bostonts.club", }, name: "Boston TS Club", @@ -27,7 +26,7 @@ const bios: Omit[] = [ }, { links: { - github: "dimitropoulos", + github: "https://github.com/dimitropoulos", linkedin: "https://linkedin.com/in/dimitrimitropoulos", }, name: "Dimitri Mitropoulos", @@ -35,10 +34,10 @@ const bios: Omit[] = [ }, { links: { - bluesky: "joshuakgoldberg.com", - github: "JoshuaKGoldberg", - mastodon: "fosstodon.org/@JoshuaKGoldberg", - twitter: "JoshuaKGoldberg", + bluesky: "https://bsky.app/profile/joshuakgoldberg.com", + github: "https://github.com/JoshuaKGoldberg", + mastodon: "https://fosstodon.org/@JoshuaKGoldberg", + twitter: "https://x.com/JoshuaKGoldberg", website: "https://joshuakgoldberg.com", }, name: "Josh Goldberg", @@ -46,10 +45,10 @@ const bios: Omit[] = [ }, { links: { - bluesky: "michigantypescript.com", + bluesky: "https://bsky.app/profile/michigantypescript.com", mastodon: "https://fosstodon.org/@MichiganTypeScript", - twitter: "MiTypeScript", - youtube: "MichiganTypeScript", + twitter: "https://x.com/MiTypeScript", + youtube: "https://youtube.com/@MichiganTypeScript", }, name: "Michigan TypeScript", photo: michiganTypeScript, @@ -70,11 +69,7 @@ const bios: Omit[] = [
- - - DEI Scholarship - - + DEI Scholarship We believe that a thriving tech industry needs to be diverse, equitable, @@ -93,11 +88,7 @@ const bios: Omit[] = [ Apply for the DEI Scholarship - - - Volunteering - - + Volunteering Volunteering gives you an opportunity to get right in the thick of the @@ -117,11 +108,7 @@ const bios: Omit[] = [ Volunteer at SquiggleConf - - - Squiggle.Tools - - + Squiggle.Tools SquiggleConf is a production of Squiggle.Tools, a nonprofit organization @@ -137,19 +124,11 @@ const bios: Omit[] = [ diff --git a/src/pages/sessions.astro b/src/pages/sessions.astro new file mode 100644 index 0000000..7f288b8 --- /dev/null +++ b/src/pages/sessions.astro @@ -0,0 +1,104 @@ +--- +import BodyText from "~/components/BodyText.astro"; +import HeadingFlanked from "~/components/HeadingFlanked.astro"; +import HeroForPage from "~/components/HeroForPage.astro"; +import PrimaryContents from "~/components/PrimaryContents.astro"; +import Session from "~/components/Session.astro"; +import { talks } from "~/data/index.js"; +import ContentLayout from "~/layouts/ContentLayout.astro"; + +const sections = [ + { + talkFormat: "Full", + name: "Full-Length Talks", + description: + "30 minute talks with 5 minutes of live Q&A. These talks will dive into their subject area and show new ways of working with your tooling.", + date: "October 3rd", + }, + { + talkFormat: "Lightning", + name: "Lightning Talks", + description: + "10 minute talks with 3 minutes of live Q&A. These sessions show great tech that you can talk about with the speaker between sessions.", + date: "October 3rd", + }, + { + talkFormat: "Workshop", + name: "Workshops", + description: + "2 hour hands-on sessions with the makers of dev tools. These in-depth, interactive workshops will level up your dev tool crafting skills.", + date: "October 4th", + }, +] as const; +--- + + + Sessions + + + + SquiggleConf 2024 will consist of two days: +
    +
  • + Thursday, October 3rd: A full-day single-track series of full-length + and lightning talks +
  • +
  • Friday, October 4th: Free 1-2 hour morning workshops
  • +
+ See speaker details on Speakers. +
+ + { + sections.map(({ talkFormat, name, description }) => ( + <> + + {name} + + {description} +
    + {talks + .filter((t) => t.talkFormat === talkFormat) + .map((talk) => ( + + ))} +
+ + )) + } + + + More workshops to be announced soon. + + + + You’ll emerge with the best techniques to supercharge your projects — + whether you’re already a tooling wizard or trying to become one. + +
+
+ + diff --git a/src/pages/speakers.astro b/src/pages/speakers.astro index 364986b..1e71c93 100644 --- a/src/pages/speakers.astro +++ b/src/pages/speakers.astro @@ -1,36 +1,75 @@ --- -import ContentLayout from "~/layouts/ContentLayout.astro"; -import BodyText from "~/components/BodyText.astro"; import HeroForPage from "~/components/HeroForPage.astro"; import PrimaryContents from "~/components/PrimaryContents.astro"; -import SpeakersContent from "~/components/SpeakersContent.astro"; -import BioPlaceholder from "~/components/BioPlaceholder.astro"; -import SpeakersList from "~/components/SpeakersList.astro"; +import ContentLayout from "~/layouts/ContentLayout.astro"; +import { peopleBySlug, talksBySlug } from "~/data/notion-data"; +import Speaker from "~/components/Speaker.astro"; +import BodyText from "~/components/BodyText.astro"; + +const speakersToExclude = new Set([ + // Sylwia might not be able to make it 😢 + "sylwia-vargas", +]); --- Speakers - - - { - new Array(10) - .fill(null) - .map((_, index) => ) - } - - - Look forward to seeing speakers announced here, on social media, and - to our newsletter over the next few weeks. - - - + + Our speakers will all be in-person for SquiggleConf 2024. +
+ See talk and workshop details on Sessions. +
+ +
    + { + Object.values(peopleBySlug) + .filter((person) => !speakersToExclude.has(person.slug)) + .sort((a, b) => + !!a.bio === !!b.bio ? a.name.localeCompare(b.name) : a.bio ? -1 : 1, + ) + .map((person) => ( + + talk.people.includes(person), + )} + /> + )) + } +
+ + + Our speakers will all be in-person for SquiggleConf 2024. +
+ See talk and workshop details on Sessions. +
-
+; diff --git a/src/pages/travel.astro b/src/pages/travel.astro index b5e8028..255f4cb 100644 --- a/src/pages/travel.astro +++ b/src/pages/travel.astro @@ -1,9 +1,8 @@ --- import BodyText from "~/components/BodyText.astro"; -import Heading from "~/components/Heading.astro"; +import HeadingFlanked from "~/components/HeadingFlanked.astro"; import HeroForPage from "~/components/HeroForPage.astro"; import PrimaryContents from "~/components/PrimaryContents.astro"; -import SquiggleFlanked from "~/components/SquiggleFlanked.astro"; import ContentLayout from "~/layouts/ContentLayout.astro"; --- @@ -11,11 +10,7 @@ import ContentLayout from "~/layouts/ContentLayout.astro"; Travel - - - Accommodations - - + Hotel We recommend the @@ -27,9 +22,6 @@ import ContentLayout from "~/layouts/ContentLayout.astro"; SQUOCT24 — and let us know if not. -
-
- -
- - - Flights - + Flights is your best bet to get into Boston from out-of-town. -
+ Trains + + + The
MBTA South Station is a 15-20 minute walk from the conference center. +
+ Amtrak arrives there, including ~4 hour trains from New York City. +
- - - Local Directions - - + + Local Directions + - Once you're in Boston, see neaq.org/visit/directions-and-parking for directions to the New England Aquarium. The Simons Theater is in the - same address. + rel="noreferrer">neaq.org for New England Aquarium directions. The Simons Theater is in the same address. +
+ The Blue Line Aquarium subway stop and Atlantic Ave @ Milk St 4 Line Bus stop are next door.