tangled
alpha
login
or
join now
tsiry-sandratraina.com
/
me
2
fork
atom
This is my personal website
2
fork
atom
overview
issues
pulls
pipelines
simplify project
fix import issues
tsiry-sandratraina.com
2 years ago
2b496a8b
829b08bf
+159
-120
10 changed files
expand all
collapse all
unified
split
main.tsx
src
bio.tsx
footer.tsx
header.tsx
links.ts
social
discord.tsx
github.tsx
linkedin.tsx
mod.tsx
styles.ts
+12
-117
main.tsx
···
1
1
/** @jsx h */
2
2
-
import { serve, html, h, dayjs, cyan } from "./deps.ts";
3
3
-
import { github } from "./src/github.tsx";
4
4
-
import { linkedin } from "./src/linkedin.tsx";
5
5
-
import { twitter } from "./src/twitter.tsx";
2
2
+
import { serve, html, h, cyan } from "./deps.ts";
3
3
+
import { styles } from "./src/styles.ts";
4
4
+
import { links } from "./src/links.ts";
5
5
+
import { footer } from "./src/footer.tsx";
6
6
+
import { bio } from "./src/bio.tsx";
7
7
+
import { header } from "./src/header.tsx";
6
8
7
7
-
const handler = (req: Request) =>
9
9
+
const handler = (_req: Request) =>
8
10
html({
9
11
title: "Tsiry Sandratraina",
10
10
-
links: [
11
11
-
{
12
12
-
rel: "preconnect",
13
13
-
href: "https://fonts.googleapis.com",
14
14
-
},
15
15
-
{
16
16
-
rel: "preconnect",
17
17
-
href: "https://fonts.gstatic.com",
18
18
-
},
19
19
-
{
20
20
-
rel: "stylesheet",
21
21
-
href: "https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap",
22
22
-
},
23
23
-
],
24
24
-
styles: [
25
25
-
"html, body { margin: 0; height: 100%; }",
26
26
-
`body {
27
27
-
font-family: "Outfit", sans-serif;
28
28
-
background: #040435;
29
29
-
color: #fff;
30
30
-
display: flex;
31
31
-
flex-direction: column;
32
32
-
font-size: 19px;
33
33
-
}`,
34
34
-
`a {
35
35
-
color: #12ff7d;
36
36
-
text-decoration: none;
37
37
-
}`,
38
38
-
`
39
39
-
.social {
40
40
-
color: rgb(109, 109, 156);
41
41
-
}
42
42
-
43
43
-
.social:hover {
44
44
-
color: #ffffffec;
45
45
-
}
46
46
-
`,
47
47
-
`
48
48
-
.wrapper {
49
49
-
width: 704px; margin: 0 auto;
50
50
-
}
51
51
-
@media (max-width: 768px) {
52
52
-
.wrapper {
53
53
-
width: 100%;
54
54
-
padding: 0 20px;
55
55
-
}
56
56
-
}
57
57
-
`,
58
58
-
`
59
59
-
.blinking_cursor {
60
60
-
margin-left: 5px;
61
61
-
-webkit-animation: blinker 1s none infinite;
62
62
-
animation: blinker 1s none infinite;
63
63
-
font-size: 28px;
64
64
-
}@-webkit-keyframes blinker {
65
65
-
50% {
66
66
-
opacity: 0;
67
67
-
}
68
68
-
}@keyframes blinker {
69
69
-
50% {
70
70
-
opacity: 0;
71
71
-
}
72
72
-
}
73
73
-
`,
74
74
-
],
12
12
+
links,
13
13
+
styles,
75
14
body: (
76
15
<body>
77
16
<div class="wrapper">
78
78
-
<h2 style="font-weight: 500;margin-bottom: 0">Hello, I'm</h2>
79
79
-
<h1 style="font-size: 2rem; font-weight: 600; margin-top: 0">
80
80
-
Tsiry Sandratraina
81
81
-
<b class="blinking_cursor">_</b>
82
82
-
</h1>
83
83
-
84
84
-
<div style="line-height: 1.6">
85
85
-
I'm a developer and{" "}
86
86
-
<a href="https://github.com/tsirysndr" target="_blank">
87
87
-
open source enthusiast
88
88
-
</a>{" "}
89
89
-
with over{" "}
90
90
-
<b>{dayjs().diff(dayjs("2015"), "year")} years of experience</b> in{" "}
91
91
-
<b>software engineering</b> living in Antananarivo, Madagascar. I
92
92
-
like Rust, Deno, Bun, Gleam, TypeScript, ReScript and PureScript. I
93
93
-
build{" "}
94
94
-
<a href="https://github.com/fluentci-io/fluentci" target="_blank">
95
95
-
Fluent CI
96
96
-
</a>
97
97
-
,{" "}
98
98
-
<a href="https://github.com/pocketenv-io/pocketenv" target="_blank">
99
99
-
Pocketenv
100
100
-
</a>
101
101
-
,{" "}
102
102
-
<a href="https://github.com/tsirysndr/envhub" target="_blank">
103
103
-
Envhub
104
104
-
</a>
105
105
-
,{" "}
106
106
-
<a href="https://github.com/tsirysndr/tunein-cli" target="_blank">
107
107
-
TuneIn CLI
108
108
-
</a>{" "}
109
109
-
and few other open source projects. <br />
110
110
-
<br />
111
111
-
Wanna talk about something? Send me a message on{" "}
112
112
-
<a href="https://keybase.io/tsiry/chat">Keybase</a> or email me at{" "}
113
113
-
<a href="mailto:tsiry.sndr@fluentci.io">tsiry.sndr@fluentci.io</a>.
114
114
-
</div>
17
17
+
{header()}
18
18
+
{bio()}
115
19
<br />
116
20
<br />
117
117
-
<div style="display: flex; flex-direction: row; justify-content: space-between;">
118
118
-
<div style="color: rgb(109, 109, 156); font-size: 17px;">
119
119
-
© {dayjs().format("YYYY")} Tsiry Sandratraina.
120
120
-
</div>
121
121
-
<div style="display: flex; flex-direction: row; justify-content: space-around; width: 100px;">
122
122
-
{github()}
123
123
-
{twitter()}
124
124
-
{linkedin()}
125
125
-
</div>
126
126
-
</div>
21
21
+
{footer()}
127
22
</div>
128
23
</body>
129
24
),
+36
src/bio.tsx
···
1
1
+
/** @jsx h */
2
2
+
import { dayjs, h } from "../deps.ts";
3
3
+
4
4
+
export function bio() {
5
5
+
return (
6
6
+
<div style="line-height: 1.6">
7
7
+
I'm a developer and{" "}
8
8
+
<a href="https://github.com/tsirysndr" target="_blank">
9
9
+
open source enthusiast
10
10
+
</a>{" "}
11
11
+
with over <b>{dayjs().diff(dayjs("2015"), "year")} years of experience</b>{" "}
12
12
+
in <b>software engineering</b> living in Antananarivo, Madagascar. I like
13
13
+
Rust, Deno, Bun, Gleam, TypeScript, ReScript and PureScript. I build{" "}
14
14
+
<a href="https://github.com/fluentci-io/fluentci" target="_blank">
15
15
+
Fluent CI
16
16
+
</a>
17
17
+
,{" "}
18
18
+
<a href="https://github.com/pocketenv-io/pocketenv" target="_blank">
19
19
+
Pocketenv
20
20
+
</a>
21
21
+
,{" "}
22
22
+
<a href="https://github.com/tsirysndr/envhub" target="_blank">
23
23
+
Envhub
24
24
+
</a>
25
25
+
,{" "}
26
26
+
<a href="https://github.com/tsirysndr/tunein-cli" target="_blank">
27
27
+
TuneIn CLI
28
28
+
</a>{" "}
29
29
+
and few other open source projects. <br />
30
30
+
<br />
31
31
+
Wanna talk about something? Send me a message on{" "}
32
32
+
<a href="https://keybase.io/tsiry/chat">Keybase</a> or email me at{" "}
33
33
+
<a href="mailto:tsiry.sndr@fluentci.io">tsiry.sndr@fluentci.io</a>.
34
34
+
</div>
35
35
+
);
36
36
+
}
+1
-1
src/discord.tsx
src/social/discord.tsx
···
1
1
/** @jsx h */
2
2
-
import { h } from "../deps.ts";
2
2
+
import { h } from "../../deps.ts";
3
3
4
4
export function discord() {
5
5
return (
+14
src/footer.tsx
···
1
1
+
/** @jsx h */
2
2
+
import { dayjs, h } from "../deps.ts";
3
3
+
import { social } from "./social/mod.tsx";
4
4
+
5
5
+
export function footer() {
6
6
+
return (
7
7
+
<div style="display: flex; flex-direction: row; justify-content: space-between;">
8
8
+
<div style="color: rgb(109, 109, 156); font-size: 17px;">
9
9
+
© {dayjs().format("YYYY")} Tsiry Sandratraina.
10
10
+
</div>
11
11
+
{social()}
12
12
+
</div>
13
13
+
);
14
14
+
}
+1
-1
src/github.tsx
src/social/github.tsx
···
1
1
/** @jsx h */
2
2
-
import { h } from "../deps.ts";
2
2
+
import { h } from "../../deps.ts";
3
3
4
4
export function github() {
5
5
return (
+14
src/header.tsx
···
1
1
+
/** @jsx h */
2
2
+
import { h } from "../deps.ts";
3
3
+
4
4
+
export function header() {
5
5
+
return (
6
6
+
<div>
7
7
+
<h2 style="font-weight: 500;margin-bottom: 0">Hello, I'm</h2>
8
8
+
<h1 style="font-size: 2rem; font-weight: 600; margin-top: 0">
9
9
+
Tsiry Sandratraina
10
10
+
<b class="blinking_cursor">_</b>
11
11
+
</h1>
12
12
+
</div>
13
13
+
);
14
14
+
}
+1
-1
src/linkedin.tsx
src/social/linkedin.tsx
···
1
1
/** @jsx h */
2
2
-
import { h } from "../deps.ts";
2
2
+
import { h } from "../../deps.ts";
3
3
4
4
export function linkedin() {
5
5
return (
+14
src/links.ts
···
1
1
+
export const links = [
2
2
+
{
3
3
+
rel: "preconnect",
4
4
+
href: "https://fonts.googleapis.com",
5
5
+
},
6
6
+
{
7
7
+
rel: "preconnect",
8
8
+
href: "https://fonts.gstatic.com",
9
9
+
},
10
10
+
{
11
11
+
rel: "stylesheet",
12
12
+
href: "https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap",
13
13
+
},
14
14
+
];
+15
src/social/mod.tsx
···
1
1
+
/** @jsx h */
2
2
+
import { h } from "../../deps.ts";
3
3
+
import { twitter } from "../twitter.tsx";
4
4
+
import { github } from "./github.tsx";
5
5
+
import { linkedin } from "./linkedin.tsx";
6
6
+
7
7
+
export function social() {
8
8
+
return (
9
9
+
<div style="display: flex; flex-direction: row; justify-content: space-around; width: 100px;">
10
10
+
{github()}
11
11
+
{twitter()}
12
12
+
{linkedin()}
13
13
+
</div>
14
14
+
);
15
15
+
}
+51
src/styles.ts
···
1
1
+
export const styles = [
2
2
+
"html, body { margin: 0; height: 100%; }",
3
3
+
`body {
4
4
+
font-family: "Outfit", sans-serif;
5
5
+
background: #040435;
6
6
+
color: #fff;
7
7
+
display: flex;
8
8
+
flex-direction: column;
9
9
+
font-size: 19px;
10
10
+
}`,
11
11
+
`a {
12
12
+
color: #12ff7d;
13
13
+
text-decoration: none;
14
14
+
}`,
15
15
+
`
16
16
+
.social {
17
17
+
color: rgb(109, 109, 156);
18
18
+
}
19
19
+
20
20
+
.social:hover {
21
21
+
color: #ffffffec;
22
22
+
}
23
23
+
`,
24
24
+
`
25
25
+
.wrapper {
26
26
+
width: 704px; margin: 0 auto;
27
27
+
}
28
28
+
@media (max-width: 768px) {
29
29
+
.wrapper {
30
30
+
width: 100%;
31
31
+
padding: 0 20px;
32
32
+
}
33
33
+
}
34
34
+
`,
35
35
+
`
36
36
+
.blinking_cursor {
37
37
+
margin-left: 5px;
38
38
+
-webkit-animation: blinker 1s none infinite;
39
39
+
animation: blinker 1s none infinite;
40
40
+
font-size: 28px;
41
41
+
}@-webkit-keyframes blinker {
42
42
+
50% {
43
43
+
opacity: 0;
44
44
+
}
45
45
+
}@keyframes blinker {
46
46
+
50% {
47
47
+
opacity: 0;
48
48
+
}
49
49
+
}
50
50
+
`,
51
51
+
];