~repos /website
git clone https://pyrossh.dev/repos/website.git
木 Personal website of pyrossh. Built with astrojs, shiki, vite.
2b22eec3
—
pyrossh 2 years ago
finish remaining pages
- components/Header.tsx +4 -7
- components/icons/HardwareIcon.tsx +15 -0
- components/icons/SoftwareIcon.tsx +20 -0
- fresh.gen.ts +4 -4
- routes/_404.tsx +10 -7
- routes/api/joke.ts +0 -21
- routes/cv.tsx +274 -0
- routes/greet/[name].tsx +0 -5
- routes/index.tsx +112 -32
- routes/posts.tsx +13 -0
- tailwind.config.ts +0 -2
components/Header.tsx
CHANGED
|
@@ -12,16 +12,13 @@ export default function Header() {
|
|
|
12
12
|
<span class="mr-1 font-logo font-bold">木</span> pyros.sh
|
|
13
13
|
</a>
|
|
14
14
|
<div class="flex flex-row flex-1 items-center text-white sm:[&>a]:mx-1 [&>a]:px-2 [&>a:hover]:bg-gray-600 data-current:child:bg-gray-600">
|
|
15
|
-
<a href="/dev" rel="prefetch">
|
|
16
|
-
dev
|
|
17
|
-
</a>
|
|
18
15
|
<div>|</div>
|
|
19
|
-
<a href="/
|
|
16
|
+
<a href="/cv" rel="prefetch">
|
|
20
|
-
|
|
17
|
+
cv
|
|
21
18
|
</a>
|
|
22
19
|
<div>|</div>
|
|
23
|
-
<a href="/
|
|
20
|
+
<a href="/posts" rel="prefetch">
|
|
24
|
-
|
|
21
|
+
posts
|
|
25
22
|
</a>
|
|
26
23
|
</div>
|
|
27
24
|
<SocialLinks />
|
components/icons/HardwareIcon.tsx
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export default function HardwareIcon({ size = "32" }) {
|
|
2
|
+
return (
|
|
3
|
+
<svg
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width={size}
|
|
6
|
+
height={size}
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
>
|
|
9
|
+
<path
|
|
10
|
+
fill="currentColor"
|
|
11
|
+
d="M22 0H2a2 2 0 0 0-2 2v20a2 2 0 0 0 2 2h20a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2ZM6 16a1 1 0 1 1 1-1a1.001 1.001 0 0 1-1 1ZM22 6h-2.184a3 3 0 1 0 0 2H22v4h-4v2h4v2h-2v2h2v4h-8v-1.184a3 3 0 1 0-2 0V22H7v-4.184a3 3 0 1 0-2 0V22H2V2h4v6h2V2h2v10h2V2h10Zm-4 1a1 1 0 1 1-1-1a1.001 1.001 0 0 1 1 1Z"
|
|
12
|
+
/>
|
|
13
|
+
</svg>
|
|
14
|
+
);
|
|
15
|
+
}
|
components/icons/SoftwareIcon.tsx
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export default function SoftwareIcon({ size = "32" }) {
|
|
2
|
+
return (
|
|
3
|
+
<svg
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width={size}
|
|
6
|
+
height={size}
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
>
|
|
9
|
+
<path
|
|
10
|
+
fill="currentColor"
|
|
11
|
+
d="M14 18.315A7.037 7.037 0 0 1 11.263 16H3V4h18v2.264a7.046 7.046 0 0 1 2 2.15V4a2.006 2.006 0 0 0-2-2H3a2.006 2.006 0 0 0-2 2v12a2.006 2.006 0 0 0 2 2h7v2H8v2h8v-2h-2Z"
|
|
12
|
+
/>
|
|
13
|
+
<path
|
|
14
|
+
fill="currentColor"
|
|
15
|
+
d="M17 6a6 6 0 1 0 6 6a5.998 5.998 0 0 0-6-6Zm0 10a4 4 0 1 1 4-4a4.005 4.005 0 0 1-4 4Z"
|
|
16
|
+
/>
|
|
17
|
+
<circle cx="17" cy="12" r="1" fill="currentColor" />
|
|
18
|
+
</svg>
|
|
19
|
+
);
|
|
20
|
+
}
|
fresh.gen.ts
CHANGED
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
import * as $_404 from "./routes/_404.tsx";
|
|
6
6
|
import * as $_app from "./routes/_app.tsx";
|
|
7
7
|
import * as $_middleware from "./routes/_middleware.ts";
|
|
8
|
-
import * as $
|
|
8
|
+
import * as $cv from "./routes/cv.tsx";
|
|
9
|
-
import * as $greet_name_ from "./routes/greet/[name].tsx";
|
|
10
9
|
import * as $index from "./routes/index.tsx";
|
|
10
|
+
import * as $posts from "./routes/posts.tsx";
|
|
11
11
|
import * as $Counter from "./islands/Counter.tsx";
|
|
12
12
|
import * as $LemonDrop from "./islands/LemonDrop.tsx";
|
|
13
13
|
import { type Manifest } from "$fresh/server.ts";
|
|
@@ -17,9 +17,9 @@ const manifest = {
|
|
|
17
17
|
"./routes/_404.tsx": $_404,
|
|
18
18
|
"./routes/_app.tsx": $_app,
|
|
19
19
|
"./routes/_middleware.ts": $_middleware,
|
|
20
|
-
"./routes/
|
|
20
|
+
"./routes/cv.tsx": $cv,
|
|
21
|
-
"./routes/greet/[name].tsx": $greet_name_,
|
|
22
21
|
"./routes/index.tsx": $index,
|
|
22
|
+
"./routes/posts.tsx": $posts,
|
|
23
23
|
},
|
|
24
24
|
islands: {
|
|
25
25
|
"./islands/Counter.tsx": $Counter,
|
routes/_404.tsx
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { Head } from "$fresh/runtime.ts";
|
|
2
|
+
import { PageProps } from "$fresh/server.ts";
|
|
2
3
|
|
|
3
|
-
export default function Error404() {
|
|
4
|
+
export default function Error404({ url }: PageProps) {
|
|
4
5
|
return (
|
|
5
6
|
<>
|
|
6
7
|
<Head>
|
|
7
|
-
<title>
|
|
8
|
+
<title slot="head">pyros.sh | Page Not Found</title>
|
|
9
|
+
<meta name="description" content="Page Not Found" />
|
|
8
10
|
</Head>
|
|
9
|
-
<div class="px-4 py-8 mx-auto
|
|
11
|
+
<div class="px-4 py-8 mx-auto">
|
|
10
12
|
<div class="max-w-screen-md mx-auto flex flex-col items-center justify-center">
|
|
11
13
|
<img
|
|
12
14
|
class="my-6"
|
|
@@ -16,10 +18,11 @@ export default function Error404() {
|
|
|
16
18
|
alt="the Fresh logo: a sliced lemon dripping with juice"
|
|
17
19
|
/>
|
|
18
20
|
<h1 class="text-4xl font-bold">404 - Page not found</h1>
|
|
19
|
-
<p class="my-4">
|
|
20
|
-
|
|
21
|
+
<p class="my-4">The page you were looking for doesn't exist.</p>
|
|
22
|
+
<pre>Path: {url.pathname}</pre>
|
|
23
|
+
<a href="/" class="underline mt-4">
|
|
24
|
+
Go back home
|
|
21
|
-
</
|
|
25
|
+
</a>
|
|
22
|
-
<a href="/" class="underline">Go back home</a>
|
|
23
26
|
</div>
|
|
24
27
|
</div>
|
|
25
28
|
</>
|
routes/api/joke.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { HandlerContext } from "$fresh/server.ts";
|
|
2
|
-
|
|
3
|
-
// Jokes courtesy of https://punsandoneliners.com/randomness/programmer-jokes/
|
|
4
|
-
const JOKES = [
|
|
5
|
-
"Why do Java developers often wear glasses? They can't C#.",
|
|
6
|
-
"A SQL query walks into a bar, goes up to two tables and says “can I join you?”",
|
|
7
|
-
"Wasn't hard to crack Forrest Gump's password. 1forrest1.",
|
|
8
|
-
"I love pressing the F5 key. It's refreshing.",
|
|
9
|
-
"Called IT support and a chap from Australia came to fix my network connection. I asked “Do you come from a LAN down under?”",
|
|
10
|
-
"There are 10 types of people in the world. Those who understand binary and those who don't.",
|
|
11
|
-
"Why are assembly programmers often wet? They work below C level.",
|
|
12
|
-
"My favourite computer based band is the Black IPs.",
|
|
13
|
-
"What programme do you use to predict the music tastes of former US presidential candidates? An Al Gore Rhythm.",
|
|
14
|
-
"An SEO expert walked into a bar, pub, inn, tavern, hostelry, public house.",
|
|
15
|
-
];
|
|
16
|
-
|
|
17
|
-
export const handler = (_req: Request, _ctx: HandlerContext): Response => {
|
|
18
|
-
const randomIndex = Math.floor(Math.random() * JOKES.length);
|
|
19
|
-
const body = JOKES[randomIndex];
|
|
20
|
-
return new Response(body);
|
|
21
|
-
};
|
routes/cv.tsx
ADDED
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { asset, Head } from "$fresh/runtime.ts";
|
|
2
|
+
|
|
3
|
+
export default function CV() {
|
|
4
|
+
return (
|
|
5
|
+
<div class="mx-auto">
|
|
6
|
+
<Head>
|
|
7
|
+
<title>pyros.sh | CV</title>
|
|
8
|
+
<meta name="description" content="Peter John's CV" />
|
|
9
|
+
</Head>
|
|
10
|
+
<style
|
|
11
|
+
dangerouslySetInnerHTML={{
|
|
12
|
+
__html: `
|
|
13
|
+
.container {
|
|
14
|
+
font-family: system-ui;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
b {
|
|
18
|
+
font-weight: 700;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
ul {
|
|
22
|
+
margin: 0.5rem;
|
|
23
|
+
padding-left: 2rem;
|
|
24
|
+
@media (--mobile) {
|
|
25
|
+
margin: 0.5rem;
|
|
26
|
+
padding-left: 1rem;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
li {
|
|
31
|
+
list-style-type: disc;
|
|
32
|
+
list-style-position: outside;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
h3 {
|
|
36
|
+
font-weight: 700;
|
|
37
|
+
margin-top: 0.5rem;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
h4 {
|
|
41
|
+
font-weight: 500;
|
|
42
|
+
margin-top: 0.5rem;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
h5 {
|
|
46
|
+
font-size: 1.25rem;
|
|
47
|
+
line-height: 1.75rem;
|
|
48
|
+
font-weight: 400;
|
|
49
|
+
margin-top: 0.5rem;
|
|
50
|
+
margin-bottom: 1rem;
|
|
51
|
+
}
|
|
52
|
+
`,
|
|
53
|
+
}}
|
|
54
|
+
/>
|
|
55
|
+
<div>
|
|
56
|
+
<section>
|
|
57
|
+
<h3>Equal Experts</h3>
|
|
58
|
+
<h4>Software Developer, Oct 2018 - present</h4>
|
|
59
|
+
<h5>
|
|
60
|
+
Making Software. Better. Equal Experts is a network of talented,
|
|
61
|
+
experienced software consultants, specialising in agile delivery.
|
|
62
|
+
</h5>
|
|
63
|
+
<div>
|
|
64
|
+
These are the client projects I worked on,
|
|
65
|
+
<ul>
|
|
66
|
+
<li>
|
|
67
|
+
<b>John Lewis</b>
|
|
68
|
+
<ul>
|
|
69
|
+
<li>
|
|
70
|
+
Built the new Product Description Page (PDP) for Simple
|
|
71
|
+
Carpets using nextjs in home interiors
|
|
72
|
+
</li>
|
|
73
|
+
<li>
|
|
74
|
+
Helped build, improve, and run AB experiments in the
|
|
75
|
+
customer services and my orders pages in customer hub
|
|
76
|
+
</li>
|
|
77
|
+
</ul>
|
|
78
|
+
</li>
|
|
79
|
+
<li>
|
|
80
|
+
<b>iOWNA</b>
|
|
81
|
+
<ul>
|
|
82
|
+
<li>
|
|
83
|
+
Built a content editor for curators to create content on our
|
|
84
|
+
platform
|
|
85
|
+
</li>
|
|
86
|
+
<li>
|
|
87
|
+
Built the iOWNA crossplatform app in react-native that works
|
|
88
|
+
in android, ios, and web using one codebase.
|
|
89
|
+
</li>
|
|
90
|
+
<li>
|
|
91
|
+
Implemented admin specific functionalities in the web app
|
|
92
|
+
</li>
|
|
93
|
+
<li>
|
|
94
|
+
Implemented an in-app OTA update method using expo and
|
|
95
|
+
semantic versionin
|
|
96
|
+
</li>
|
|
97
|
+
<li>Built the iOWNA marketing website</li>
|
|
98
|
+
<li>
|
|
99
|
+
Built the Health Questionnaire clinician/patient feedback
|
|
100
|
+
form feature with push notifications
|
|
101
|
+
</li>
|
|
102
|
+
</ul>
|
|
103
|
+
</li>
|
|
104
|
+
<li>
|
|
105
|
+
<b>Zeta</b>
|
|
106
|
+
<ul>
|
|
107
|
+
<li>
|
|
108
|
+
Added multiple download formats (pdf,html,xlsx) for reports
|
|
109
|
+
in the Reporting Center
|
|
110
|
+
</li>
|
|
111
|
+
<li>
|
|
112
|
+
Created a Groovy Script to automate creating ACL's in
|
|
113
|
+
sandbox authorization framework
|
|
114
|
+
</li>
|
|
115
|
+
<li>
|
|
116
|
+
Integrated Camunda Workflow Engine into Zeta services in
|
|
117
|
+
Operations Center
|
|
118
|
+
</li>
|
|
119
|
+
<li>
|
|
120
|
+
Built a few workflows on Camunda and integrated it with some
|
|
121
|
+
internal services
|
|
122
|
+
</li>
|
|
123
|
+
<li>
|
|
124
|
+
Built a custom k8s CRD using the operator framework to
|
|
125
|
+
automate creating ACL's in sandbox using custom resources
|
|
126
|
+
</li>
|
|
127
|
+
</ul>
|
|
128
|
+
</li>
|
|
129
|
+
<li>
|
|
130
|
+
<b>Lifebox</b>
|
|
131
|
+
<ul>
|
|
132
|
+
<li>
|
|
133
|
+
Added search functionality to the hospital procedure codes
|
|
134
|
+
</li>
|
|
135
|
+
<li>
|
|
136
|
+
Converted the Health Questionnaire from json to native go
|
|
137
|
+
code making it easier to make changes to it
|
|
138
|
+
</li>
|
|
139
|
+
<li>
|
|
140
|
+
Integrated with SAP using HL7 message format to create
|
|
141
|
+
patients, episodes, schedule/cancel procedures
|
|
142
|
+
</li>
|
|
143
|
+
<li>
|
|
144
|
+
Built the Patient Document repository for uploading,
|
|
145
|
+
downloading patient files
|
|
146
|
+
</li>
|
|
147
|
+
<li>
|
|
148
|
+
Built the patients online reports view using the data from
|
|
149
|
+
SAP
|
|
150
|
+
</li>
|
|
151
|
+
</ul>
|
|
152
|
+
</li>
|
|
153
|
+
</ul>
|
|
154
|
+
</div>
|
|
155
|
+
</section>
|
|
156
|
+
<section>
|
|
157
|
+
<h3>Numberz</h3>
|
|
158
|
+
<h4>Full Stack Developer, Sept 2016 - Oct 2018</h4>
|
|
159
|
+
<h5>
|
|
160
|
+
Numberz integrates banking with your day-2-day business work-flows
|
|
161
|
+
freeing up a lot of effort, time and heart-burn, to help your
|
|
162
|
+
business grow! You’ll never have to spend time syncing information
|
|
163
|
+
between different systems. Save and record receipts & spends
|
|
164
|
+
with a single tap, automatically categorise transactions for
|
|
165
|
+
book-keeping and easily share information with your accountant.
|
|
166
|
+
</h5>
|
|
167
|
+
<ul>
|
|
168
|
+
<li>
|
|
169
|
+
Implemented new features and fixed bugs on the numberz android app
|
|
170
|
+
</li>
|
|
171
|
+
<li>Integrated numberz with Tally ERP</li>
|
|
172
|
+
<li>
|
|
173
|
+
Implemented CI and Devops within out system to ease our deployment
|
|
174
|
+
process using docker and docker-compose
|
|
175
|
+
</li>
|
|
176
|
+
<li>
|
|
177
|
+
Created a slack bot called deploybot which was used to deploy our
|
|
178
|
+
microservices to our servers
|
|
179
|
+
</li>
|
|
180
|
+
<li>
|
|
181
|
+
Started tech talks on Thursdays to discuss cutting edge
|
|
182
|
+
technologies
|
|
183
|
+
</li>
|
|
184
|
+
<li>
|
|
185
|
+
Architected and built the Notification Service using rabbitmq and
|
|
186
|
+
nodejs
|
|
187
|
+
</li>
|
|
188
|
+
<li>Built the Multi-User and Multi-Company Features</li>
|
|
189
|
+
<li>
|
|
190
|
+
Implemented and lead a team on integration with the GSTN System so
|
|
191
|
+
that customers could file their GST Taxes within our product
|
|
192
|
+
</li>
|
|
193
|
+
<li>
|
|
194
|
+
Architected and built the numberz Identity Management Service(IMS)
|
|
195
|
+
</li>
|
|
196
|
+
<li>
|
|
197
|
+
Architected our new product called the Numberz Accounts Receivable
|
|
198
|
+
(AR)
|
|
199
|
+
</li>
|
|
200
|
+
<li>Laid down the architecture for the frontend and backend</li>
|
|
201
|
+
<li>
|
|
202
|
+
Built these core features for our new AR Product - Auto Reminders,
|
|
203
|
+
Manual Reminders, User Management, Cash Discounting, CFO Dashboard
|
|
204
|
+
Metrics
|
|
205
|
+
</li>
|
|
206
|
+
</ul>
|
|
207
|
+
</section>
|
|
208
|
+
<section>
|
|
209
|
+
<h3>Playlyfe</h3>
|
|
210
|
+
<h4>Full Stack Developer, Apr 2014 - Sept 2016</h4>
|
|
211
|
+
<h5>
|
|
212
|
+
Playlyfe is an online Gamification Platform which empowers anyone to
|
|
213
|
+
design and implement a gamified system.This platform allows a normal
|
|
214
|
+
user to convert a gamified system's design into a fully functional
|
|
215
|
+
web-application complete with teams, real-time notifications,
|
|
216
|
+
leaderboards and many more features. Made Critical decisions on what
|
|
217
|
+
tech stack to switch to for our gamification product Catalyst.
|
|
218
|
+
</h5>
|
|
219
|
+
<ul>
|
|
220
|
+
<li>
|
|
221
|
+
Built the Playlyfe Hybrid Mobile app using Phonegap for Android
|
|
222
|
+
and iOS
|
|
223
|
+
</li>
|
|
224
|
+
<li>
|
|
225
|
+
Built the leaderboard system using Mongodb, Redis and Couchbase as
|
|
226
|
+
the datastore
|
|
227
|
+
</li>
|
|
228
|
+
<li>Migration of data from v1 to v2 of the API</li>
|
|
229
|
+
<li>
|
|
230
|
+
Built SDKs for the Playlyfe v2 API in C#, Java, Python, Ruby, PHP,
|
|
231
|
+
Nodejs, Gos
|
|
232
|
+
</li>
|
|
233
|
+
<li>
|
|
234
|
+
Maintained the job server and wrote most of the background jobs
|
|
235
|
+
</li>
|
|
236
|
+
<li>
|
|
237
|
+
Added documentation to most of the REST API and created the
|
|
238
|
+
Developer Console which was Like Swagger UI
|
|
239
|
+
</li>
|
|
240
|
+
<li>Integrated our REST API in Leanosphere's LMS</li>
|
|
241
|
+
<li>
|
|
242
|
+
Integrated the REST API in Knolskape's product Aktivlearn LMS
|
|
243
|
+
</li>
|
|
244
|
+
<li>Integrated the REST API in Linkstreet's LMS</li>
|
|
245
|
+
<li>
|
|
246
|
+
Integrated the REST API in Moodle LMS by creating an admin plugin
|
|
247
|
+
to add Gamification features
|
|
248
|
+
</li>
|
|
249
|
+
<li>
|
|
250
|
+
Rebuilt the core platform in golang for performance and
|
|
251
|
+
developement speed
|
|
252
|
+
</li>
|
|
253
|
+
<li>Built the GraphQL API for our cutting edge product Catalyst</li>
|
|
254
|
+
<li>
|
|
255
|
+
Convinced the boss to create our own scripting language plscript
|
|
256
|
+
for our rule engine.
|
|
257
|
+
</li>
|
|
258
|
+
<li>
|
|
259
|
+
Build a REST API for our product catalyst for a POC with Vodafone
|
|
260
|
+
</li>
|
|
261
|
+
<li>
|
|
262
|
+
Built the Quiz, Review, Match, Tournament features in Catalyst for
|
|
263
|
+
a major project with HP
|
|
264
|
+
</li>
|
|
265
|
+
<li>
|
|
266
|
+
Added gamification features to Saudi Matches a popular game
|
|
267
|
+
tracking app
|
|
268
|
+
</li>
|
|
269
|
+
</ul>
|
|
270
|
+
</section>
|
|
271
|
+
</div>
|
|
272
|
+
</div>
|
|
273
|
+
);
|
|
274
|
+
}
|
routes/greet/[name].tsx
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { PageProps } from "$fresh/server.ts";
|
|
2
|
-
|
|
3
|
-
export default function Greet(props: PageProps) {
|
|
4
|
-
return <div>Hello {props.params.name}</div>;
|
|
5
|
-
}
|
routes/index.tsx
CHANGED
|
@@ -1,19 +1,12 @@
|
|
|
1
|
-
import { useSignal } from "@preact/signals";
|
|
2
|
-
import { Handlers } from "$fresh/server.ts";
|
|
3
1
|
import Slide from "../components/Slide.tsx";
|
|
4
2
|
import ProjectsIcon from "../components/icons/ProjectsIcon.tsx";
|
|
5
3
|
import TreeIcon from "../components/icons/TreeIcon.tsx";
|
|
6
4
|
import ContactIcon from "../components/icons/ContactIcon.tsx";
|
|
5
|
+
import HardwareIcon from "../components/icons/HardwareIcon.tsx";
|
|
6
|
+
import SoftwareIcon from "../components/icons/SoftwareIcon.tsx";
|
|
7
7
|
import { asset, Head } from "$fresh/runtime.ts";
|
|
8
8
|
|
|
9
|
-
export const handler: Handlers = {
|
|
10
|
-
async GET(req, ctx) {
|
|
11
|
-
return await ctx.render();
|
|
12
|
-
},
|
|
13
|
-
};
|
|
14
|
-
|
|
15
9
|
export default function Home() {
|
|
16
|
-
const count = useSignal(5);
|
|
17
10
|
return (
|
|
18
11
|
<div class="mx-auto">
|
|
19
12
|
<Head>
|
|
@@ -48,7 +41,7 @@ export default function Home() {
|
|
|
48
41
|
</p>
|
|
49
42
|
</div>
|
|
50
43
|
<div>
|
|
51
|
-
<div class="flex items-center mt-8 mb-4
|
|
44
|
+
<div class="flex items-center mt-8 mb-4 child-svg:mr-2 child-svg:text-pink-800">
|
|
52
45
|
<ProjectsIcon size="36" />
|
|
53
46
|
<h2 class="my-0 text-3xl font-bold">Projects</h2>
|
|
54
47
|
</div>
|
|
@@ -117,11 +110,115 @@ export default function Home() {
|
|
|
117
110
|
</p>
|
|
118
111
|
</Slide>
|
|
119
112
|
<section class="flex flex-col flex-1">
|
|
113
|
+
<div class="flex text-3xl font-bold child-svg:mr-2 child-svg:text-green-800">
|
|
114
|
+
<HardwareIcon size="36" />
|
|
115
|
+
Hardware Setup
|
|
116
|
+
</div>
|
|
117
|
+
<div class="ml-1 mt-6 mb-2">My current hardware setup is</div>
|
|
118
|
+
<ul class="ml-1.5">
|
|
119
|
+
<li>
|
|
120
|
+
<strong>Laptop:</strong> M2 Macbook Air
|
|
121
|
+
</li>
|
|
122
|
+
<li>
|
|
123
|
+
<strong>CPU:</strong> Apple M2 (8 cores, 8 threads)
|
|
124
|
+
</li>
|
|
125
|
+
<li>
|
|
126
|
+
<strong>RAM:</strong> 16GB
|
|
127
|
+
</li>
|
|
128
|
+
<li>
|
|
129
|
+
<strong>SSD:</strong> 512GB
|
|
130
|
+
</li>
|
|
131
|
+
</ul>
|
|
132
|
+
</section>
|
|
133
|
+
<section class="flex flex-col flex-1">
|
|
120
|
-
<div class="flex text-3xl font-bold child-svg:mr-2">
|
|
134
|
+
<div class="flex text-3xl font-bold child-svg:mr-2 child-svg:text-red-800">
|
|
135
|
+
<SoftwareIcon size="36" />
|
|
136
|
+
Software Setup
|
|
137
|
+
</div>
|
|
138
|
+
<div class="ml-1 mt-6 mb-2">
|
|
139
|
+
My current list of daily applications
|
|
140
|
+
</div>
|
|
141
|
+
<ul class="grid gap-2 grid-cols-3 ml-4 child:list-disc child:px-0 child:py-1 heir-a:text-blue-800">
|
|
142
|
+
<li>
|
|
143
|
+
<a
|
|
144
|
+
href="https://github.com/exelban/stats"
|
|
145
|
+
target="_blank"
|
|
146
|
+
rel="noopener noreferrer"
|
|
147
|
+
>
|
|
148
|
+
Menubar Stats
|
|
149
|
+
</a>
|
|
150
|
+
</li>
|
|
151
|
+
<li>
|
|
152
|
+
<a
|
|
153
|
+
href="https://github.com/brave/brave-browser"
|
|
154
|
+
target="_blank"
|
|
155
|
+
rel="noopener noreferrer"
|
|
156
|
+
>
|
|
157
|
+
Brave Browser
|
|
158
|
+
</a>
|
|
159
|
+
</li>
|
|
160
|
+
<li>
|
|
161
|
+
<a
|
|
162
|
+
href="https://github.com/microsoft/vscode"
|
|
163
|
+
target="_blank"
|
|
164
|
+
rel="noopener noreferrer"
|
|
165
|
+
>
|
|
166
|
+
VS Code IDE
|
|
167
|
+
</a>
|
|
168
|
+
</li>
|
|
169
|
+
<li>
|
|
170
|
+
<a
|
|
171
|
+
href="https://github.com/helix-editor/helix"
|
|
172
|
+
target="_blank"
|
|
173
|
+
rel="noopener noreferrer"
|
|
174
|
+
>
|
|
175
|
+
Helix
|
|
176
|
+
</a>
|
|
177
|
+
</li>
|
|
178
|
+
<li>
|
|
179
|
+
<a
|
|
180
|
+
href="https://github.com/fish-shell/fish-shell"
|
|
181
|
+
target="_blank"
|
|
182
|
+
rel="noopener noreferrer"
|
|
183
|
+
>
|
|
184
|
+
Fish Shell
|
|
185
|
+
</a>
|
|
186
|
+
</li>
|
|
187
|
+
<li>
|
|
188
|
+
<a
|
|
189
|
+
href="https://github.com/gnachman/iTerm2"
|
|
190
|
+
target="_blank"
|
|
191
|
+
rel="noopener noreferrer"
|
|
192
|
+
>
|
|
193
|
+
iTerm2
|
|
194
|
+
</a>
|
|
195
|
+
</li>
|
|
196
|
+
<li>
|
|
197
|
+
<a
|
|
198
|
+
href="https://colorslurp.com"
|
|
199
|
+
target="_blank"
|
|
200
|
+
rel="noopener noreferrer"
|
|
201
|
+
>
|
|
202
|
+
Color Slurp
|
|
203
|
+
</a>
|
|
204
|
+
</li>
|
|
205
|
+
<li>
|
|
206
|
+
<a
|
|
207
|
+
href="https://www.vectornator.io"
|
|
208
|
+
target="_blank"
|
|
209
|
+
rel="noopener noreferrer"
|
|
210
|
+
>
|
|
211
|
+
Curve
|
|
212
|
+
</a>
|
|
213
|
+
</li>
|
|
214
|
+
</ul>
|
|
215
|
+
</section>
|
|
216
|
+
<section class="flex flex-col flex-1">
|
|
217
|
+
<div class="flex text-3xl font-bold child-svg:mr-2 child-svg:text-amber-900">
|
|
121
218
|
<TreeIcon size="36" />
|
|
122
219
|
Interests
|
|
123
220
|
</div>
|
|
124
|
-
<div class="ml-1 mt-6 mb-
|
|
221
|
+
<div class="ml-1 mt-6 mb-2">
|
|
125
222
|
These are some of the stuff I work on
|
|
126
223
|
</div>
|
|
127
224
|
<ul class="grid gap-2 grid-cols-3 ml-4 [&>li]:list-disc [&>li]:px-0 [&>li]:py-1 [&>li:marker]:text-black">
|
|
@@ -140,14 +237,14 @@ export default function Home() {
|
|
|
140
237
|
</ul>
|
|
141
238
|
</section>
|
|
142
239
|
<section class="flex flex-col flex-1">
|
|
143
|
-
<div class="flex text-3xl font-bold child-svg:mr-2">
|
|
240
|
+
<div class="flex text-3xl font-bold child-svg:mr-2 child-svg:text-cyan-950">
|
|
144
241
|
<ContactIcon size="36" />
|
|
145
242
|
Contact
|
|
146
243
|
</div>
|
|
147
|
-
<div class="ml-1 mt-6 mb-
|
|
244
|
+
<div class="ml-1 mt-6 mb-2">
|
|
148
245
|
You can contact me through any of these methods
|
|
149
246
|
</div>
|
|
150
|
-
<div class="child:flex child:mb-3 child:ml-2 heir-a:ml-4 heir-a:text-blue">
|
|
247
|
+
<div class="child:flex child:mb-3 child:ml-2 heir-a:ml-4 heir-a:text-blue-800">
|
|
151
248
|
<div>
|
|
152
249
|
Email:
|
|
153
250
|
<a href="mailto:pyros2097@gmail.com">pyros2097@gmail.com</a>
|
|
@@ -167,23 +264,6 @@ export default function Home() {
|
|
|
167
264
|
</div>
|
|
168
265
|
</div>
|
|
169
266
|
</div>
|
|
170
|
-
{
|
|
171
|
-
/* <div class="max-w-screen-md mx-auto flex flex-col items-center justify-center">
|
|
172
|
-
<img
|
|
173
|
-
class="my-6"
|
|
174
|
-
src="/logo.svg"
|
|
175
|
-
width="128"
|
|
176
|
-
height="128"
|
|
177
|
-
alt="the Fresh logo: a sliced lemon dripping with juice"
|
|
178
|
-
/>
|
|
179
|
-
<h1 class="text-4xl font-bold">Welcome to Fresh</h1>
|
|
180
|
-
<p class="my-4">
|
|
181
|
-
Try updating this message in the
|
|
182
|
-
<code class="mx-2">./routes/index.tsx</code> file, and refresh.
|
|
183
|
-
</p>
|
|
184
|
-
<Counter count={count} />
|
|
185
|
-
</div> */
|
|
186
|
-
}
|
|
187
267
|
</div>
|
|
188
268
|
);
|
|
189
269
|
}
|
routes/posts.tsx
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Head } from "$fresh/runtime.ts";
|
|
2
|
+
|
|
3
|
+
export default function Posts() {
|
|
4
|
+
return (
|
|
5
|
+
<div class="mx-auto">
|
|
6
|
+
<Head>
|
|
7
|
+
<title>pyros.sh | Posts</title>
|
|
8
|
+
<meta name="description" content="Peter John's Posts" />
|
|
9
|
+
</Head>
|
|
10
|
+
<div class="px-4 py-40 mx-auto">TBD</div>
|
|
11
|
+
</div>
|
|
12
|
+
);
|
|
13
|
+
}
|
tailwind.config.ts
CHANGED
|
@@ -21,8 +21,6 @@ export default {
|
|
|
21
21
|
"black-lighter": "#1f1f1f",
|
|
22
22
|
"black-light": "#313a3d",
|
|
23
23
|
"yellow-dark": "#858579",
|
|
24
|
-
blue: "#0645ad",
|
|
25
|
-
"blue-light": "#0e81c7",
|
|
26
24
|
"slider-bg": "#f0ede2",
|
|
27
25
|
},
|
|
28
26
|
},
|