data endpoint for entity 90008 (aka. a website)
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: add resume page

dusk 2cb1fc50 9aa1e9d9

+110 -20
+10 -1
src/routes/+layout.svelte
··· 30 30 31 31 let routeComponents = $derived(data.route.split('/')); 32 32 let doAddPostItem = $derived(routeComponents.length > 3 && routeComponents[1] === 'entries'); 33 + let doAddResumeItem = $derived(routeComponents[1] === 'resume'); 33 34 let isRoute = $derived((_route: string) => { 34 35 if (doAddPostItem) { 35 36 if (_route === 'entries') { ··· 172 173 {#each menuItems as item, menuIdx} 173 174 {@const highlight = isRoute(item.href)} 174 175 <NavButton {highlight} {...item} /> 175 - {#if doAddPostItem && menuIdx == 1} 176 + {#if doAddPostItem && menuIdx === 1} 176 177 <NavButton 177 178 highlight 178 179 name={routeComponents[2]} 179 180 href={data.route.slice(1)} 180 181 iconUri="/icons/entry.webp" 182 + /> 183 + {/if} 184 + {#if doAddResumeItem && menuIdx === 2} 185 + <NavButton 186 + highlight 187 + name={routeComponents[1]} 188 + href="/resume" 189 + iconUri="/icons/about.webp" 181 190 /> 182 191 {/if} 183 192 {/each}
+4 -1
src/routes/+page.svelte
··· 327 327 angelrobotpuppydollthing<br /><br /> 328 328 it/its, 3pp preferred 329 329 {/snippet} 330 - is a <i>thing</i> (it/they) 330 + is a <i class="motion-safe:hover:animate-squiggle">thing</i> (it/they) 331 331 </Tooltip> 332 332 </li> 333 333 <li class="[list-style-type:'->']"> 334 334 <span class="p-category">software engineer</span>, 335 335 <span class="p-category">indie game dev</span> 336 + </li> 337 + <li class="[list-style-type:'->']"> 338 + for resume, click <a href="/resume">here</a> 336 339 </li> 337 340 <li class="[list-style-type:'->']"> 338 341 in <span class="p-country-name">turkey</span>
+1
src/routes/about/stuff.md
··· 3 3 layout = "simple" 4 4 +++ 5 5 6 + *for resume, see [here](/resume)*<br/> 6 7 *for professional / job related stuff, see its [linkedin](https://www.linkedin.com/in/yusuf-bera-ertan/)* 7 8 8 9 - it develops games
+62
src/routes/resume/+page.md
··· 1 + +++ 2 + title = "resume" 3 + date = "2025-06-23" 4 + layout = "resume" 5 + +++ 6 + 7 + Yusuf Bera Ertan 8 + ---------------- 9 + - My e-mail is [90008@gaze.systems](mailto:90008@gaze.systems) 10 + - I'm currently residing in Turkiye (Turkey) (looking for / available to relocate with sponsorship, will do remote) 11 + - My GitHub is at https://github.com/90-008 12 + - My LinkedIn is at https://www.linkedin.com/in/yusuf-bera-ertan/ 13 + 14 + Work Experience 15 + ---------------- 16 + 17 + ### Platonic.Systems (May 2022 - Jun 2023) 18 + - Platonic.Systems is a software consultancy that specializes in providing machine learning, frontend development, etc. solutions using functional programming languages and paradigms. 19 + - Worked on building and packaging for various projects; did provisioning of systems; helped open-source Nix ecosystem. 20 + 21 + ### Ardana (Jun 2022 - Sep 2022) 22 + - Ardana was a company developing a stablecoin on Cardano. 23 + - Improved developer and user tooling; maintained servers and CI/CD pipeline; provided developer assistance; all using Nix. 24 + 25 + Projects I worked on 26 + ---------------- 27 + 28 + ### Harmony, a federated chat protocol 29 + - Participated in designing the protocol and writing the Rust ecosystem around it: a [library](https://github.com/harmony-development/hrpc-rs) for our own protobuf-based RPC system ([because we weren't happy with gRPC](https://dev.to/harmonydevelopment/introducing-hrpc-a-simple-rpc-system-for-user-facing-apis-16ge)), [the SDK](https://github.com/harmony-development/harmony_rust_sdk/tree/refactored) for interacting with servers. 30 + Also wrote integration tests and benchmarking code. 31 + - Wrote a [server](https://github.com/harmony-development/scherzo/tree/refactoed) for it in Rust. It was mainly inspired by conduit (a Matrix server written in Rust also) because I felt the need to write one that is lightweight for smaller instances (resource constrained devices). 32 + - Wrote a GUI [client](https://github.com/harmony-development/Loqui/tree/refactored), also in Rust (the first iteration of this was written in iced, but I swapped to egui because I wanted to run it on web). 33 + 34 + ### dream2nix 35 + - [dream2nix](https://github.com/nix-community/dream2nix) provides simplified Nix packaging for various programming language ecosystems. 36 + - I implemented the Rust ecosystem; did large refactoring work; a ton of various other bug fixing (Rust, NodeJS, common logic), writing other related code (eg. autogenerated package sets for various package registries like crates.io, npm). 37 + - Other than open-source unpaid work, I worked on it as Project Lead for Summer of Nix 2022 (July 2022 - Sep 2022), packaging various Rust software and improving dream2nix for Rust. And also as part of an [NLNet grant](https://nlnet.nl/project/Dream2nix/). 38 + 39 + ### nix-cargo-integration 40 + - [A Nix library / flake-parts module](https://github.com/90-008/nix-cargo-integration) based on dream2nix that makes packaging / developing Rust projects using Cargo a breeze using Nix. 41 + - I wrote this because I wasn't happy with how Cargo projects were handled in Nix usually, and overtime it evolved a lot and it's being used somewhat often. 42 + 43 + ### PluralKit 44 + - Rewriting [PluralKit's](https://github.com/PluralKit/PluralKit) command parser in Rust [here](https://github.com/90-008/PluralKit/tree/rust-command-parser/crates). 45 + 46 + ### Others 47 + - A multithreaded [boids](https://github.com/90-008/godot_boids) (flocking) extension for the Godot Engine, written in Rust (and targetting all platforms). 48 + - Wrote [musikquadrupled](https://github.com/90-008/musikquadrupled) which is a proxy server for [musikcube](https://github.com/clangen/musikcube) because I wanted to make a [web client](https://github.com/90-008/musikspider) for it and their server implementation did not support the necessary features for web. 49 + - Wrote a small [BlueSky Jetstream consuming server](https://tangled.sh/@poor.dog/bsky-repost-likes) in Go that lets a user listen to if any of their reposts got liked. 50 + - [My personal website](https://git.gaze.systems/90008/website) written using SvelteKit + Typescript, which I'm quite proud of! 51 + - [A GUI application for organizing / tagging media](https://github.com/90-008/levent) like how boorus do it, written in Zig. 52 + 53 + Technologies 54 + ---------------- 55 + - Languages: Rust, Go, TypeScript, Svelte, Nix, Zig, GDScript 56 + - Software: Linux; NixOS, Nix; Docker; GitHub, GitLab CI/CD; OpenTelemetry, Jaeger, Prometheus, VictoriaMetrics & VictoriaLogs, Perses 57 + 58 + Interests 59 + ---------------- 60 + - Making (mainly using Godot Engine) and playing video games 61 + - 3D art - mostly characters (Blender) 62 + - Analyzing and thinking about fiction
+19
src/routes/resume/_layout.svelte
··· 1 + <script lang="ts"> 2 + import Window from '../../components/window.svelte'; 3 + import '../../styles/app.css'; 4 + 5 + interface Props { 6 + title: string; 7 + children?: import('svelte').Snippet; 8 + } 9 + 10 + let { title, children }: Props = $props(); 11 + </script> 12 + 13 + <Window {title} style="mx-auto"> 14 + <div 15 + class="prose prose-ralsei leading-6 prose-ul:leading-5 prose-headings:leading-none prose-ul:px-4 max-w-[120ch]" 16 + > 17 + {@render children?.()} 18 + </div> 19 + </Window>
+14 -18
svelte.config.js
··· 1 1 import adapter from 'svelte-adapter-bun'; 2 2 import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; 3 3 4 - import { mdsvex } from 'mdsvex' 4 + import { mdsvex } from 'mdsvex'; 5 5 6 - import * as toml from "@std/toml"; 6 + import * as toml from '@std/toml'; 7 7 8 8 /** @type {import('@sveltejs/kit').Config} */ 9 9 const config = { ··· 14 14 mdsvex({ 15 15 extensions: ['.md', '.svx'], 16 16 frontmatter: { 17 - type: "toml", 18 - marker: "+", 17 + type: 'toml', 18 + marker: '+', 19 19 parse(frontmatter, messages) { 20 20 try { 21 21 return toml.parse(frontmatter); 22 22 } catch (e) { 23 23 messages.push( 24 - "Parsing error on line " + 25 - e.line + 26 - ", column " + 27 - e.column + 28 - ": " + 29 - e.message 24 + 'Parsing error on line ' + e.line + ', column ' + e.column + ': ' + e.message 30 25 ); 31 26 } 32 - }, 27 + } 33 28 }, 34 29 smartypants: { 35 30 dashes: 'oldschool', 36 31 quotes: true, 37 32 ellipses: true, 38 - backticks: false, 33 + backticks: false 39 34 }, 40 35 layout: { 41 36 about: './src/routes/about/_layout.svelte', 42 37 blogpost: './src/routes/entries/_layout.svelte', 43 38 simple: './src/components/_window_layout.svelte', 44 - }, 45 - }), 39 + resume: './src/routes/resume/_layout.svelte' 40 + } 41 + }) 46 42 ], 47 43 48 44 kit: { 49 45 csrf: { 50 - checkOrigin: false, 46 + checkOrigin: false 51 47 }, 52 48 prerender: { 53 - handleHttpError: 'warn', 49 + handleHttpError: 'warn' 54 50 }, 55 51 adapter: adapter({ 56 - precompress: true, 57 - }), 52 + precompress: true 53 + }) 58 54 } 59 55 }; 60 56