website

#astro#js#html#css

git clone https://git.pyrossh.dev/website

木 Personal website of pyrossh. Built with astrojs, shiki, vite.


01f7be1pyrossh 2026-07-07T11:44:15+05:30
feat: add home page worker
packages/workers/home/package.json ADDED
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "@pyrossh/home",
3
+ "version": "0.0.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "main": "src/index.tsx",
7
+ "types": "src/index.tsx",
8
+ "dependencies": {
9
+ "@pyrossh/config": "workspace:*",
10
+ "@pyrossh/ui": "workspace:*"
11
+ }
12
+ }
packages/workers/home/src/index.tsx ADDED
@@ -0,0 +1,149 @@
1
+ import { Layout } from "@pyrossh/ui";
2
+ import { REPOS, TOOLS, SITE_TITLE } from "@pyrossh/config";
3
+
4
+ export default {
5
+ async fetch(request: Request): Promise<Response> {
6
+ return new Response(
7
+ <Layout
8
+ title={SITE_TITLE}
9
+ description="Tech Lead from Bangalore who likes to create frameworks and programming languages."
10
+ request={request}
11
+ >
12
+ <div style="margin-left:auto;margin-right:auto;margin-bottom:2.5rem">
13
+ <div>
14
+ <h1 style="font-size:1.875rem;font-weight:700;margin-bottom:1rem">Hello!</h1>
15
+ <p style="font-size:1.1rem">
16
+ <a
17
+ href="https://www.linkedin.com/in/pyrossh"
18
+ target="_blank"
19
+ rel="noopener noreferrer"
20
+ style="text-decoration:underline"
21
+ >
22
+ <strong>I'm</strong>
23
+ </a>
24
+ a tech lead based out of Bangalore, India and have worked for startups and enterprises
25
+ that focus on products in the healthcare and finance domains. I like to build
26
+ frameworks and automate common tasks to make it easier to develop applications.
27
+ </p>
28
+ <p style="font-size:1.1rem">
29
+ I enjoy working on open-source projects, and during the last decade, I've created a
30
+ number of projects that are widely used.
31
+ </p>
32
+ <div style="display:grid;grid-template-columns:repeat(1,minmax(0,1fr));gap:1rem">
33
+ <section style="display:flex;flex-direction:column;margin-top:1.5rem;margin-bottom:1rem">
34
+ <h2 style="font-size:1.4rem;font-weight:600">Interests</h2>
35
+ <ul style="display:grid;gap:0.5rem;grid-template-columns:auto auto auto;text-align:center;margin-top:0.5rem;font-size:1.1rem;list-style:none;padding:0">
36
+ {[
37
+ "HTML",
38
+ "CSS",
39
+ "Javascript",
40
+ "S3",
41
+ "SQL",
42
+ "Bun",
43
+ "Astro",
44
+ "Tauri",
45
+ "Remix",
46
+ "Zig",
47
+ "K8s",
48
+ "Iceberg",
49
+ ].map((i) => (
50
+ <li style="background-color:var(--color-box-bg);padding:0.25rem">{i}</li>
51
+ ))}
52
+ </ul>
53
+ </section>
54
+ <section style="display:flex;flex-direction:column;margin-top:1.5rem;margin-bottom:1rem">
55
+ <h2 style="font-size:1.4rem;font-weight:600">Contact</h2>
56
+ <ul style="display:grid;gap:0.5rem;grid-template-columns:auto;margin-top:0.5rem;list-style:none;padding:0">
57
+ <li style="display:flex;flex-direction:row;align-items:baseline;padding:0.25rem;background-color:var(--color-box-bg);font-size:1.1rem">
58
+ <strong style="font-weight:500;margin-left:0.25rem;margin-right:0.5rem">
59
+ email:
60
+ </strong>
61
+ <span>[email protected]</span>
62
+ </li>
63
+ <li style="display:flex;flex-direction:row;align-items:baseline;padding:0.25rem;background-color:var(--color-box-bg);font-size:1.1rem">
64
+ <strong style="font-weight:500;margin-left:0.25rem;margin-right:0.5rem">
65
+ crates:
66
+ </strong>
67
+ <a href="https://crates.io/users/pyrossh" style="color:var(--color-link)">
68
+ https://crates.io/users/pyrossh
69
+ </a>
70
+ </li>
71
+ <li style="display:flex;flex-direction:row;align-items:baseline;padding:0.25rem;background-color:var(--color-box-bg);font-size:1.1rem">
72
+ <strong style="font-weight:500;margin-left:0.25rem;margin-right:0.5rem">
73
+ npm:
74
+ </strong>
75
+ <a href="https://www.npmjs.com/~pyrossh" style="color:var(--color-link)">
76
+ https://www.npmjs.com/~pyrossh
77
+ </a>
78
+ </li>
79
+ <li style="display:flex;flex-direction:row;align-items:baseline;padding:0.25rem;background-color:var(--color-box-bg);font-size:1.1rem">
80
+ <strong style="font-weight:500;margin-left:0.25rem;margin-right:0.5rem">
81
+ linkedin:
82
+ </strong>
83
+ <a href="https://www.linkedin.com/in/pyrossh" style="color:var(--color-link)">
84
+ https://www.linkedin.com/in/pyrossh
85
+ </a>
86
+ </li>
87
+ <li style="display:flex;flex-direction:row;align-items:baseline;padding:0.25rem;background-color:var(--color-box-bg);font-size:1.1rem">
88
+ <strong style="font-weight:500;margin-left:0.25rem;margin-right:0.5rem">
89
+ google group:
90
+ </strong>
91
+ <a
92
+ href="https://groups.google.com/g/rust-embed-devs"
93
+ style="color:var(--color-link)"
94
+ >
95
+ rust-embed-devs
96
+ </a>
97
+ </li>
98
+ </ul>
99
+ </section>
100
+ </div>
101
+ <section style="display:flex;flex-direction:column;margin-top:1.5rem;margin-bottom:1rem">
102
+ <h2 style="font-size:1.4rem;font-weight:600">Tools</h2>
103
+ <ul style="display:grid;gap:0.5rem;grid-template-columns:auto auto auto auto;text-align:center;margin-top:0.5rem;list-style:none;padding:0">
104
+ {TOOLS.map((tool) => (
105
+ <li style="display:flex;align-items:center;background-color:var(--color-box-bg);padding:0.25rem;font-size:1rem">
106
+ <a
107
+ href={tool.link}
108
+ target="_blank"
109
+ rel="noopener noreferrer"
110
+ style="display:flex;flex:1;flex-direction:row;align-items:center;text-align:left;margin-left:0.25rem;margin-right:0.25rem"
111
+ >
112
+ <div style="flex:1">{tool.name}</div>
113
+ {tool.image && (
114
+ <img src={tool.image} alt={tool.name} style="width:36px;height:36px" />
115
+ )}
116
+ </a>
117
+ </li>
118
+ ))}
119
+ </ul>
120
+ </section>
121
+ <section style="display:flex;flex-direction:column;margin-top:1.5rem;margin-bottom:1rem">
122
+ <h2 style="font-size:1.4rem;font-weight:600">Git</h2>
123
+ <div style="display:grid;grid-template-columns:auto auto;gap:1rem;margin-top:0.5rem">
124
+ {REPOS.map((repo) => (
125
+ <div style="text-overflow:ellipsis;overflow:hidden;padding:0.5rem;background:var(--color-box-bg);color:var(--color-text);font-size:0.95rem">
126
+ <h4 style="font-size:1.05rem;font-weight:500;line-height:1.2;border-bottom:1px solid #495057;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;margin-bottom:0;padding:0">
127
+ <a href={`/repos/${repo.title}`} style="color:var(--color-link)">
128
+ {repo.title}
129
+ </a>
130
+ </h4>
131
+ <p>{repo.description}</p>
132
+ <div style="margin-top:0.5rem;display:flex;flex-wrap:wrap;gap:0.25rem">
133
+ {repo.tags.map((tag) => (
134
+ <span style="color:var(--color-tag);padding:0.15rem 0.5rem 0.5rem 0rem;border-radius:0.25rem;font-size:0.95rem;font-weight:500">
135
+ #{tag}
136
+ </span>
137
+ ))}
138
+ </div>
139
+ </div>
140
+ ))}
141
+ </div>
142
+ </section>
143
+ </div>
144
+ </div>
145
+ </Layout>,
146
+ { headers: { "content-type": "text/html" } },
147
+ );
148
+ },
149
+ };
packages/workers/home/tsconfig.json ADDED
@@ -0,0 +1,4 @@
1
+ {
2
+ "extends": "../../../tsconfig.base.json",
3
+ "include": ["src"]
4
+ }
packages/workers/home/wrangler.jsonc ADDED
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "pyrossh-home",
3
+ "main": "src/index.tsx",
4
+ "compatibility_date": "2026-07-07",
5
+ "compatibility_flags": ["nodejs_compat"],
6
+ "workers_dev": false,
7
+ "routes": [{ "pattern": "pyrossh.dev/", "custom_domain": true }],
8
+ }