This is my personal website

Initial Commit

+239
+3
.vscode/settings.json
··· 1 + { 2 + "deno.enable": true 3 + }
+5
deno.json
··· 1 + { 2 + "tasks": { 3 + "dev": "deno run --watch -A main.tsx" 4 + } 5 + }
+31
deno.lock
··· 1 + { 2 + "version": "3", 3 + "packages": { 4 + "specifiers": { 5 + "npm:dayjs": "npm:dayjs@1.11.10" 6 + }, 7 + "npm": { 8 + "dayjs@1.11.10": { 9 + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==", 10 + "dependencies": {} 11 + } 12 + } 13 + }, 14 + "remote": { 15 + "https://deno.land/std@0.190.0/_util/asserts.ts": "178dfc49a464aee693a7e285567b3d0b555dc805ff490505a8aae34f9cfb1462", 16 + "https://deno.land/std@0.190.0/async/abortable.ts": "fd682fa46f3b7b16b4606a5ab52a7ce309434b76f820d3221bdfb862719a15d7", 17 + "https://deno.land/std@0.190.0/async/deadline.ts": "58f72a3cc0fcb731b2cc055ba046f4b5be3349ff6bf98f2e793c3b969354aab2", 18 + "https://deno.land/std@0.190.0/async/debounce.ts": "adab11d04ca38d699444ac8a9d9856b4155e8dda2afd07ce78276c01ea5a4332", 19 + "https://deno.land/std@0.190.0/async/deferred.ts": "42790112f36a75a57db4a96d33974a936deb7b04d25c6084a9fa8a49f135def8", 20 + "https://deno.land/std@0.190.0/async/delay.ts": "73aa04cec034c84fc748c7be49bb15cac3dd43a57174bfdb7a4aec22c248f0dd", 21 + "https://deno.land/std@0.190.0/async/mod.ts": "f04344fa21738e5ad6bea37a6bfffd57c617c2d372bb9f9dcfd118a1b622e576", 22 + "https://deno.land/std@0.190.0/async/mux_async_iterator.ts": "70c7f2ee4e9466161350473ad61cac0b9f115cff4c552eaa7ef9d50c4cbb4cc9", 23 + "https://deno.land/std@0.190.0/async/pool.ts": "f1b8d3df4d7fd3c73f8cbc91cc2e8b8e950910f1eab94230b443944d7584c657", 24 + "https://deno.land/std@0.190.0/async/retry.ts": "c9248325ec08cc2cceb7618472e77589a51a25cee460e07b6096be34966c2ead", 25 + "https://deno.land/std@0.190.0/async/tee.ts": "47e42d35f622650b02234d43803d0383a89eb4387e1b83b5a40106d18ae36757", 26 + "https://deno.land/std@0.190.0/http/server.ts": "1b23463b5b36e4eebc495417f6af47a6f7d52e3294827a1226d2a1aab23d9d20", 27 + "https://deno.land/x/htm@0.2.1/html.tsx": "afcf0500d9199e8efe6877d9e7bf4f7907d0bba09906b6036cfe5e90458083b3", 28 + "https://deno.land/x/htm@0.2.1/jsx.ts": "2dfbc2b208981b9348aee02494ba064eac72f686d2e5ecc19d7f3fcdb9734e3d", 29 + "https://deno.land/x/htm@0.2.1/mod.ts": "d930056a7c8c645bea5f9c116d65bc309d12cfebafa8db98f7c406e1984caaec" 30 + } 31 + }
+5
deps.ts
··· 1 + export { serve } from "https://deno.land/std@0.190.0/http/server.ts"; 2 + import html, { h } from "https://deno.land/x/htm@0.2.1/mod.ts"; 3 + export { html, h }; 4 + import dayjs from "npm:dayjs"; 5 + export { dayjs };
+103
main.tsx
··· 1 + /** @jsx h */ 2 + import { serve, html, h, dayjs } from "./deps.ts"; 3 + import { github } from "./src/github.tsx"; 4 + import { linkedin } from "./src/linkedin.tsx"; 5 + import { twitter } from "./src/twitter.tsx"; 6 + 7 + const handler = (req: Request) => 8 + html({ 9 + title: "Tsiry Sandratraina", 10 + links: [ 11 + { 12 + rel: "preconnect", 13 + href: "https://fonts.googleapis.com", 14 + }, 15 + { 16 + rel: "preconnect", 17 + href: "https://fonts.gstatic.com", 18 + }, 19 + { 20 + rel: "stylesheet", 21 + href: "https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap", 22 + }, 23 + ], 24 + styles: [ 25 + "html, body { margin: 0; height: 100%; }", 26 + `body { 27 + font-family: "Outfit", sans-serif; 28 + background: #040435; 29 + color: #fff; 30 + display: flex; 31 + flex-direction: column; 32 + font-size: 19px; 33 + }`, 34 + `a { 35 + color: #12ff7d; 36 + text-decoration: none; 37 + }`, 38 + ` 39 + .social { 40 + color: rgb(109, 109, 156); 41 + } 42 + 43 + .social:hover { 44 + color: #ffffffec; 45 + } 46 + `, 47 + ], 48 + body: ( 49 + <body> 50 + <div style="width: 704px; margin: 0 auto;"> 51 + <h2 style="font-weight: 500;margin-bottom: 0">Hello, I'm</h2> 52 + <h1 style="font-size: 2rem; font-weight: 600; margin-top: 0"> 53 + Tsiry Sandratraina 54 + </h1> 55 + <div style="line-height: 1.6"> 56 + I'm a developer and{" "} 57 + <a href="https://github.com/tsirysndr" target="_blank"> 58 + open source enthusiast 59 + </a>{" "} 60 + with over{" "} 61 + <b>{dayjs().diff(dayjs("2015"), "year")} years of experience</b> in{" "} 62 + <b>software engineering</b> living in Antananarivo, Madagascar. I 63 + like Rust, Deno, Bun, Gleam, TypeScript, ReScript and PureScript. I 64 + build{" "} 65 + <a href="https://github.com/fluentci-io/fluentci" target="_blank"> 66 + Fluent CI 67 + </a> 68 + ,{" "} 69 + <a href="https://github.com/pocketenv-io/pocketenv" target="_blank"> 70 + Pocketenv 71 + </a> 72 + ,{" "} 73 + <a href="https://github.com/tsirysndr/envhub" target="_blank"> 74 + Envhub 75 + </a> 76 + ,{" "} 77 + <a href="https://github.com/tsirysndr/tunein-cli" target="_blank"> 78 + TuneIn CLI 79 + </a>{" "} 80 + and few other open source projects. <br /> 81 + <br /> 82 + Wanna to talk about something? Send me a message on{" "} 83 + <a href="https://keybase.io/tsiry/chat">Keybase</a> or email me at{" "} 84 + <a href="mailto:tsiry.sndr@fluentci.io">tsiry.sndr@fluentci.io</a>. 85 + </div> 86 + <br /> 87 + <br /> 88 + <div style="display: flex; flex-direction: row; justify-content: space-between;"> 89 + <div style="color: rgb(109, 109, 156); font-size: 17px;"> 90 + © {dayjs().format("YYYY")} Tsiry Sandratraina. 91 + </div> 92 + <div style="display: flex; flex-direction: row; justify-content: space-around; width: 100px;"> 93 + {github()} 94 + {twitter()} 95 + {linkedin()} 96 + </div> 97 + </div> 98 + </div> 99 + </body> 100 + ), 101 + }); 102 + 103 + serve(handler);
+21
src/discord.tsx
··· 1 + /** @jsx h */ 2 + import { h } from "../deps.ts"; 3 + 4 + export function discord() { 5 + return ( 6 + <a href="https://discord.com" target="_blank" class="social"> 7 + <svg 8 + viewBox="0 0 16 16" 9 + height="21" 10 + width="21" 11 + aria-hidden="true" 12 + focusable="false" 13 + fill="currentColor" 14 + xmlns="http://www.w3.org/2000/svg" 15 + class="StyledIconBase-sc-ea9ulj-0 hFaFXW" 16 + > 17 + <path d="M13.545 2.907a13.227 13.227 0 0 0-3.257-1.011.05.05 0 0 0-.052.025c-.141.25-.297.577-.406.833a12.19 12.19 0 0 0-3.658 0 8.258 8.258 0 0 0-.412-.833.051.051 0 0 0-.052-.025c-1.125.194-2.22.534-3.257 1.011a.041.041 0 0 0-.021.018C.356 6.024-.213 9.047.066 12.032c.001.014.01.028.021.037a13.276 13.276 0 0 0 3.995 2.02.05.05 0 0 0 .056-.019c.308-.42.582-.863.818-1.329a.05.05 0 0 0-.01-.059.051.051 0 0 0-.018-.011 8.875 8.875 0 0 1-1.248-.595.05.05 0 0 1-.02-.066.051.051 0 0 1 .015-.019c.084-.063.168-.129.248-.195a.05.05 0 0 1 .051-.007c2.619 1.196 5.454 1.196 8.041 0a.052.052 0 0 1 .053.007c.08.066.164.132.248.195a.051.051 0 0 1-.004.085 8.254 8.254 0 0 1-1.249.594.05.05 0 0 0-.03.03.052.052 0 0 0 .003.041c.24.465.515.909.817 1.329a.05.05 0 0 0 .056.019 13.235 13.235 0 0 0 4.001-2.02.049.049 0 0 0 .021-.037c.334-3.451-.559-6.449-2.366-9.106a.034.034 0 0 0-.02-.019Zm-8.198 7.307c-.789 0-1.438-.724-1.438-1.612 0-.889.637-1.613 1.438-1.613.807 0 1.45.73 1.438 1.613 0 .888-.637 1.612-1.438 1.612Zm5.316 0c-.788 0-1.438-.724-1.438-1.612 0-.889.637-1.613 1.438-1.613.807 0 1.451.73 1.438 1.613 0 .888-.631 1.612-1.438 1.612Z"></path> 18 + </svg> 19 + </a> 20 + ); 21 + }
+21
src/github.tsx
··· 1 + /** @jsx h */ 2 + import { h } from "../deps.ts"; 3 + 4 + export function github() { 5 + return ( 6 + <a href="https://github.com/tsirysndr" target="_blank" class="social"> 7 + <svg 8 + viewBox="0 0 16 16" 9 + height="20" 10 + width="20" 11 + aria-hidden="true" 12 + focusable="false" 13 + fill="currentColor" 14 + xmlns="http://www.w3.org/2000/svg" 15 + class="StyledIconBase-sc-ea9ulj-0 hFaFXW" 16 + > 17 + <path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"></path> 18 + </svg> 19 + </a> 20 + ); 21 + }
+29
src/linkedin.tsx
··· 1 + /** @jsx h */ 2 + import { h } from "../deps.ts"; 3 + 4 + export function linkedin() { 5 + return ( 6 + <a 7 + href="https://www.linkedin.com/in/tsiry-sandratraina" 8 + class="social" 9 + target="_blank" 10 + > 11 + <svg 12 + viewBox="0 0 448 512" 13 + height="20" 14 + width="20" 15 + focusable="false" 16 + role="img" 17 + fill="currentColor" 18 + xmlns="http://www.w3.org/2000/svg" 19 + class="StyledIconBase-sc-ea9ulj-0 hRnJPC" 20 + > 21 + <title>LinkedinIn icon</title> 22 + <path 23 + fill="currentColor" 24 + d="M100.3 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.6 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.3 61.9 111.3 142.3V448z" 25 + ></path> 26 + </svg> 27 + </a> 28 + ); 29 + }
+21
src/twitter.tsx
··· 1 + /** @jsx h */ 2 + import { h } from "../deps.ts"; 3 + 4 + export function twitter() { 5 + return ( 6 + <a href="https://twitter.com/tsiry_sndr" target="_blank" class="social"> 7 + <svg 8 + viewBox="0 0 16 16" 9 + height="21" 10 + width="21" 11 + aria-hidden="true" 12 + focusable="false" 13 + fill="currentColor" 14 + xmlns="http://www.w3.org/2000/svg" 15 + class="StyledIconBase-sc-ea9ulj-0 hFaFXW" 16 + > 17 + <path d="M5.026 15c6.038 0 9.341-5.003 9.341-9.334 0-.14 0-.282-.006-.422A6.685 6.685 0 0 0 16 3.542a6.658 6.658 0 0 1-1.889.518 3.301 3.301 0 0 0 1.447-1.817 6.533 6.533 0 0 1-2.087.793A3.286 3.286 0 0 0 7.875 6.03a9.325 9.325 0 0 1-6.767-3.429 3.289 3.289 0 0 0 1.018 4.382A3.323 3.323 0 0 1 .64 6.575v.045a3.288 3.288 0 0 0 2.632 3.218 3.203 3.203 0 0 1-.865.115 3.23 3.23 0 0 1-.614-.057 3.283 3.283 0 0 0 3.067 2.277A6.588 6.588 0 0 1 .78 13.58a6.32 6.32 0 0 1-.78-.045A9.344 9.344 0 0 0 5.026 15z"></path> 18 + </svg> 19 + </a> 20 + ); 21 + }