website

#astro#js#html#css

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

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


af5a5b2pyrossh 2026-07-07T11:26:41+05:30
feat: scaffold monorepo with shared config package
.gitignore CHANGED
@@ -58,4 +58,4 @@ dist-ssr
58
58
  *.sw?
59
59
  target
60
60
  .wrangler
61
- repos/
61
+ repos/*
package.json CHANGED
@@ -28,12 +28,14 @@
28
28
  "remark-rehype": "^11.1.2",
29
29
  "spamscanner": "^6.1.5",
30
30
  "timeago.js": "^4.0.2",
31
+ "typed-htmx": "^0.3.1",
31
32
  "unified": "^11.0.5"
32
33
  },
33
34
  "devDependencies": {
34
35
  "@astrojs/check": "^0.9.9",
35
36
  "@astrojs/rss": "^4.0.18",
36
37
  "@astrojs/sitemap": "^3.7.2",
38
+ "@cloudflare/workers-types": "^5.20260706.1",
37
39
  "@iconify-json/material-symbols": "^1.2.39",
38
40
  "@iconify-json/mdi": "^1.2.3",
39
41
  "@iconify-json/vscode-icons": "^1.2.36",
packages/shared/config/package.json ADDED
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "@pyrossh/config",
3
+ "version": "0.0.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "main": "src/index.ts",
7
+ "types": "src/index.ts"
8
+ }
packages/shared/config/src/index.ts ADDED
@@ -0,0 +1,132 @@
1
+ export const SITE_TITLE = "pyrossh";
2
+ export const SITE_DESCRIPTION = "Welcome to my website!";
3
+ export const REPOS = [
4
+ {
5
+ title: "rust-embed",
6
+ description:
7
+ "rust macro which loads files into the rust binary at compile time during release and loads the file from the fs during dev.",
8
+ tags: ["rust", "proc-macro", "http"],
9
+ },
10
+ {
11
+ title: "website",
12
+ description: "木 Personal website of pyrossh. Built with astrojs, shiki, vite.",
13
+ tags: ["astro", "js", "html", "css"],
14
+ },
15
+ {
16
+ title: "plum",
17
+ description: "A statically typed, imperative programming language inspired by rust, python",
18
+ tags: ["treesitter", "compiler", "wasm"],
19
+ },
20
+ {
21
+ title: "edge-city",
22
+ description:
23
+ "edge-city is a next level meta-framework for react that runs only on edge runtimes",
24
+ tags: ["react", "js", "ssr"],
25
+ },
26
+ {
27
+ title: "gromer",
28
+ description:
29
+ "gromer is a framework and cli to build multipage web apps in golang using htmx and alpinejs.",
30
+ tags: ["golang", "htmx", "ssr"],
31
+ },
32
+ {
33
+ title: "atoms-element",
34
+ description:
35
+ "A simple web component library for defining your custom elements. It works on both client and server.",
36
+ tags: ["js"],
37
+ },
38
+ {
39
+ title: "atoms-state",
40
+ description: "Simple State management for react",
41
+ tags: ["js", "react", "flux"],
42
+ },
43
+ {
44
+ title: "remote-monitor",
45
+ description: "Remote Monitoring and Control using GSM-SMS",
46
+ tags: ["c++", "teensy", "arduino"],
47
+ },
48
+ {
49
+ title: "only-bible-app",
50
+ description:
51
+ "The only bible app you will ever need. No ads. No in-app purchases. No distractions.",
52
+ tags: ["kotlin", "android", "ios"],
53
+ },
54
+ {
55
+ title: "gdx-studio",
56
+ description:
57
+ "An IDE for creating Games using libgdx and Java supported on all platforms Android, iOS, Desktop",
58
+ tags: ["libgdx", "java", "desktop"],
59
+ },
60
+ {
61
+ title: "rp2350",
62
+ description: "code to drive rp2350",
63
+ tags: ["zig", "raspberry-pi"],
64
+ },
65
+ {
66
+ title: "config",
67
+ description: "Common configuration",
68
+ tags: ["brew", "nushell"],
69
+ },
70
+ {
71
+ title: "sabel-ide",
72
+ description: "sabel-ide",
73
+ tags: ["python", "qt"],
74
+ },
75
+ {
76
+ title: "tide-jsx",
77
+ description: "Tide + JSX",
78
+ tags: ["rust", "proc-macro", "jsx"],
79
+ },
80
+ ];
81
+ export const TOOLS = [
82
+ {
83
+ name: "Stats",
84
+ link: "https://github.com/exelban/stats",
85
+ image: "/assets/logos/stats.png",
86
+ },
87
+ {
88
+ name: "Void",
89
+ link: "https://github.com/voideditor/void",
90
+ image: "/assets/logos/void.png",
91
+ },
92
+ {
93
+ name: "Helix",
94
+ link: "https://github.com/helix-editor/helix",
95
+ image: "/assets/logos/helix.png",
96
+ },
97
+ {
98
+ name: "Nushell",
99
+ link: "https://github.com/nushell/nushell",
100
+ image: "/assets/logos/nu.png",
101
+ },
102
+ {
103
+ name: "Ghostty",
104
+ link: "https://github.com/ghostty-org/ghostty",
105
+ image: "/assets/logos/ghostty.png",
106
+ },
107
+ {
108
+ name: "Zellij",
109
+ link: "https://zellij.dev/",
110
+ image: "/assets/logos/zellij.png",
111
+ },
112
+ {
113
+ name: "Zen",
114
+ link: "https://github.com/zen-browser/desktop",
115
+ image: "/assets/logos/zen.svg",
116
+ },
117
+ {
118
+ name: "Bruno",
119
+ link: "https://github.com/usebruno/bruno",
120
+ image: "/assets/logos/bruno.png",
121
+ },
122
+ {
123
+ name: "Secretive",
124
+ link: "https://github.com/maxgoedjen/secretive",
125
+ image: null,
126
+ },
127
+ ];
128
+ export const NAV_ITEMS = [
129
+ { href: "/cv", label: "cv" },
130
+ { href: "/posts", label: "posts" },
131
+ ] as const;
132
+ export const SITE_URL = "https://pyrossh.dev";
packages/shared/config/tsconfig.json ADDED
@@ -0,0 +1,4 @@
1
+ {
2
+ "extends": "../../../tsconfig.base.json",
3
+ "include": ["src"]
4
+ }
pnpm-lock.yaml CHANGED
@@ -221,7 +221,7 @@ importers:
221
221
  version: 1.2.0
222
222
  '@astrojs/cloudflare':
223
223
  specifier: ^13.5.0
224
224
225
225
  astro:
226
226
  specifier: 6.3.1
227
227
@@ -261,6 +261,9 @@ importers:
261
261
  timeago.js:
262
262
  specifier: ^4.0.2
263
263
  version: 4.0.2
264
+ typed-htmx:
265
+ specifier: ^0.3.1
266
+ version: 0.3.1
264
267
  unified:
265
268
  specifier: ^11.0.5
266
269
  version: 11.0.5
@@ -274,6 +277,9 @@ importers:
274
277
  '@astrojs/sitemap':
275
278
  specifier: ^3.7.2
276
279
  version: 3.7.3
280
+ '@cloudflare/workers-types':
281
+ specifier: ^5.20260706.1
282
+ version: 5.20260706.1
277
283
  '@iconify-json/material-symbols':
278
284
  specifier: ^1.2.39
279
285
  version: 1.2.82
@@ -309,7 +315,9 @@ importers:
309
315
  version: https://codeload.github.com/vscode-icons/vscode-icons/tar.gz/e4668f9a6cd557cfa4c2546a2449b66a8bb66ddb
310
316
  wrangler:
311
317
  specifier: ^4.105.0
312
- version: 4.107.0
318
+ version: 4.107.0(@cloudflare/[email protected])
319
+
320
+ packages/shared/config: {}
313
321
 
314
322
  packages:
315
323
 
@@ -471,6 +479,9 @@ packages:
471
479
  cpu: [x64]
472
480
  os: [win32]
473
481
 
482
+ '@cloudflare/[email protected]':
483
+ resolution: {integrity: sha512-PdGrKyJMmKjrZs6xPN/LYN2zpKo9bgn8Iq3JLYho1/76t0HEfUYnssgUljqFxQYPzH4SZ8wsIThaGHmW5GZkLg==}
484
+
474
485
  '@colors/[email protected]':
475
486
  resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
476
487
  engines: {node: '>=0.1.90'}
@@ -5077,6 +5088,14 @@ packages:
5077
5088
5078
5089
  resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==}
5079
5090
 
5091
5092
+ resolution: {integrity: sha512-JKCM9zTfPDuPqQqdGZBWSEiItShliKkBFg5c6yOR8zth43v763XkAzTWaOlVqc0Y6p9ee8AaAbipGfUnCsYZUA==}
5093
+ engines: {node: '>=12'}
5094
+
5095
5096
+ resolution: {integrity: sha512-6WSPsukTIOEMsVbx5wzgVSvldLmgBUVcFIm2vJlBpRPtcbDOGC5y1IYrCWNX1yUlNsrv1Ngcw4gGM8jsPyNV7w==}
5097
+ engines: {node: '>=12'}
5098
+
5080
5099
5081
5100
  resolution: {integrity: sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==}
5082
5101
 
@@ -5664,16 +5683,16 @@ snapshots:
5664
5683
  - prettier
5665
5684
  - prettier-plugin-astro
5666
5685
 
5667
5686
5668
5687
  dependencies:
5669
5688
  '@astrojs/internal-helpers': 0.10.0
5670
5689
  '@astrojs/underscore-redirects': 1.0.3
5671
5690
5672
5691
5673
5692
  piccolore: 0.1.3
5674
5693
  tinyglobby: 0.2.17
5675
5694
5676
- wrangler: 4.107.0
5695
+ wrangler: 4.107.0(@cloudflare/[email protected])
5677
5696
  transitivePeerDependencies:
5678
5697
  - '@types/node'
5679
5698
  - bufferutil
@@ -5839,13 +5858,13 @@ snapshots:
5839
5858
  optionalDependencies:
5840
5859
  workerd: 1.20260701.1
5841
5860
 
5842
5861
5843
5862
  dependencies:
5844
5863
  '@cloudflare/unenv-preset': 2.16.1([email protected])([email protected])
5845
5864
  miniflare: 4.20260701.0
5846
5865
  unenv: 2.0.0-rc.24
5847
5866
5848
- wrangler: 4.107.0
5867
+ wrangler: 4.107.0(@cloudflare/[email protected])
5849
5868
  ws: 8.21.0
5850
5869
  transitivePeerDependencies:
5851
5870
  - bufferutil
@@ -5867,6 +5886,8 @@ snapshots:
5867
5886
  '@cloudflare/[email protected]':
5868
5887
  optional: true
5869
5888
 
5889
+ '@cloudflare/[email protected]': {}
5890
+
5870
5891
  '@colors/[email protected]':
5871
5892
  optional: true
5872
5893
 
@@ -10651,6 +10672,12 @@ snapshots:
10651
10672
 
10652
10673
10653
10674
 
10675
10676
+
10677
10678
+ dependencies:
10679
+ typed-html: 3.0.1
10680
+
10654
10681
10655
10682
 
10656
10683
@@ -11066,7 +11093,7 @@ snapshots:
11066
11093
  '@cloudflare/workerd-linux-arm64': 1.20260701.1
11067
11094
  '@cloudflare/workerd-windows-64': 1.20260701.1
11068
11095
 
11069
11096
11070
11097
  dependencies:
11071
11098
  '@cloudflare/kv-asset-handler': 0.5.0
11072
11099
  '@cloudflare/unenv-preset': 2.16.1([email protected])([email protected])
@@ -11077,6 +11104,7 @@ snapshots:
11077
11104
  unenv: 2.0.0-rc.24
11078
11105
  workerd: 1.20260701.1
11079
11106
  optionalDependencies:
11107
+ '@cloudflare/workers-types': 5.20260706.1
11080
11108
  fsevents: 2.3.3
11081
11109
  transitivePeerDependencies:
11082
11110
  - bufferutil
pnpm-workspace.yaml CHANGED
@@ -1,3 +1,7 @@
1
+ packages:
2
+ - "packages/shared/*"
3
+ - "packages/workers/**"
4
+
1
5
  catalog:
2
6
  vite: ^7.3.6
3
7
  vite-plus: ^0.2.2
tsconfig.base.json ADDED
@@ -0,0 +1,16 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ESNext",
4
+ "module": "ESNext",
5
+ "moduleResolution": "bundler",
6
+ "jsx": "react-jsx",
7
+ "jsxImportSource": "typed-htmx/typed-html",
8
+ "strict": true,
9
+ "skipLibCheck": true,
10
+ "forceConsistentCasingInFileNames": true,
11
+ "resolveJsonModule": true,
12
+ "isolatedModules": true,
13
+ "noEmit": true,
14
+ "types": ["@cloudflare/workers-types"]
15
+ }
16
+ }