1
1
<script setup lang="ts">
2
-
3
2
useHead ({
4
- title: ' Projects'
5
- })
3
+ title: " Projects" ,
4
+ });
6
5
7
6
interface Projects {
8
- year: string
9
- title: string
10
- place? : string
11
- url: string ,
12
- techStack: string []
13
- github: boolean ,
7
+ year: string ;
8
+ title: string ;
9
+ place? : string ;
10
+ url: string ;
11
+ techStack: string [];
12
+ github: boolean ;
14
13
}
15
14
16
15
const projects = ref <Projects []>([
17
16
{
18
- year: ' 2023' ,
19
- title: ' Vue3-Compare-Image' ,
20
- url: ' vue3-compare-image.vercel.app' ,
21
- techStack: [' Typescript' , ' unbuild' , ' Vue' , ' HTML' , ' CSS' ],
22
- github: false
17
+ year: " 2023" ,
18
+ title: " Vue3-Compare-Image" ,
19
+ url: " vue3-compare-image.vercel.app" ,
20
+ techStack: [" Typescript" , " unbuild" , " Vue" , " HTML" , " CSS" ],
21
+ github: false ,
23
22
},
24
23
{
25
- year: ' 2023' ,
26
- title: ' Haft Studio Website' ,
27
- place: ' Haft Studio' ,
28
- url: ' haftstudio-website.vercel.app' ,
29
- techStack: [' Vuetify' , ' UnoCSS' , ' Typescript' , ' Vue' ],
30
- github: false
24
+ year: " 2023" ,
25
+ title: " Haft Studio Website" ,
26
+ place: " Haft Studio" ,
27
+ url: " haftstudio-website.vercel.app" ,
28
+ techStack: [" Vuetify" , " UnoCSS" , " Typescript" , " Vue" ],
29
+ github: false ,
31
30
},
32
31
{
33
- year: ' 2023' ,
34
- title: ' ProManager Landingpage' ,
35
- url: ' pro-manager.vercel.app' ,
36
- techStack: [' Vue' , ' Typescript' , ' Vuetify' , ' SCSS' ],
37
- github: false
32
+ year: " 2023" ,
33
+ title: " ProManager Landingpage" ,
34
+ url: " pro-manager.vercel.app" ,
35
+ techStack: [" Vue" , " Typescript" , " Vuetify" , " SCSS" ],
36
+ github: false ,
38
37
},
39
38
{
40
- year: ' 2023' ,
41
- title: ' ProManager webapp' ,
42
- url: ' pro-manager.vercel.app' ,
43
- techStack: [' UnoCSS' , ' Vue' , ' Typescript' , ' Mirage' , ' SCSS' , ' Vuetify' ],
44
- github: false
39
+ year: " 2023" ,
40
+ title: " ProManager webapp" ,
41
+ url: " pro-manager.vercel.app" ,
42
+ techStack: [" UnoCSS" , " Vue" , " Typescript" , " Mirage" , " SCSS" , " Vuetify" ],
43
+ github: false ,
45
44
},
46
45
{
47
- year: ' 2023' ,
48
- title: ' Promanger Backend' ,
49
- url: ' promanager-backend' ,
50
- techStack: [' Python' , ' Django' , ' Django Rest Framework' , ' JWT' , ' Postgresql' , ' Redis' , ' Channels' ],
46
+ year: " 2023" ,
47
+ title: " Promanger Backend" ,
48
+ url: " promanager-backend" ,
49
+ techStack: [
50
+ " Python" ,
51
+ " Django" ,
52
+ " Django Rest Framework" ,
53
+ " JWT" ,
54
+ " Postgresql" ,
55
+ " Redis" ,
56
+ " Channels" ,
57
+ ],
51
58
github: true ,
52
59
},
53
60
{
54
- year: ' 2023' ,
55
- title: ' Personal Portfolio' ,
56
- url: ' zedjarvis.github.io' ,
57
- techStack: [' Nuxt.js 3' , ' Tailwind CSS' , ' Three.js' , ' Typescript' ],
58
- github: false
61
+ year: " 2023" ,
62
+ title: " Personal Portfolio" ,
63
+ url: " zedjarvis.github.io" ,
64
+ techStack: [" Nuxt.js 3" , " Tailwind CSS" , " Three.js" , " Typescript" ],
65
+ github: false ,
59
66
},
60
67
{
61
- year: ' 2023' ,
62
- title: ' Vuetify 3 Starter template' ,
63
- url: ' vuetify3-starter-template' ,
64
- techStack: [' Vuetify' , ' Typescript' ],
68
+ year: " 2023" ,
69
+ title: " Vuetify 3 Starter template" ,
70
+ url: " vuetify3-starter-template" ,
71
+ techStack: [" Vuetify" , " Typescript" ],
65
72
github: true ,
66
73
},
67
74
{
68
- year: ' 2022' ,
69
- title: ' Myles Tours and Travels' ,
70
- url: ' myles_tours_and_travel_safaris' ,
71
- techStack: [' JQuery' , ' HTML' , ' CSS' , ' Django' ],
75
+ year: " 2022" ,
76
+ title: " Myles Tours and Travels" ,
77
+ url: " myles_tours_and_travel_safaris" ,
78
+ techStack: [" JQuery" , " HTML" , " CSS" , " Django" ],
72
79
github: true ,
73
80
},
74
81
{
75
- year: ' 2021' ,
76
- title: ' Rollindustries' ,
77
- url: ' rollindustries' ,
78
- techStack: [' Django' , ' Jinja2' , ' Heroku' ],
82
+ year: " 2021" ,
83
+ title: " Rollindustries" ,
84
+ url: " rollindustries" ,
85
+ techStack: [" Django" , " Jinja2" , " Heroku" ],
79
86
github: true ,
80
87
},
81
88
{
82
- year: ' 2021' ,
83
- title: ' Django Blog' ,
84
- url: ' blog' ,
85
- techStack: [' DJango' , ' HTML' , ' CSS' ],
89
+ year: " 2021" ,
90
+ title: " Django Blog" ,
91
+ url: " blog" ,
92
+ techStack: [" DJango" , " HTML" , " CSS" ],
86
93
github: true ,
87
94
},
88
95
{
89
- year: ' 2021' ,
90
- title: ' Ifarming' ,
91
- url: ' ifarming' ,
92
- techStack: [' Django' , ' HTML' , ' CSS' ],
96
+ year: " 2021" ,
97
+ title: " Ifarming" ,
98
+ url: " ifarming" ,
99
+ techStack: [" Django" , " HTML" , " CSS" ],
93
100
github: true ,
94
101
},
95
102
{
96
- year: ' 2020' ,
97
- title: ' Personal Portfolio v1' ,
98
- url: ' landingpage' ,
99
- techStack: [' Django' , ' heroku' ],
103
+ year: " 2020" ,
104
+ title: " Personal Portfolio v1" ,
105
+ url: " landingpage" ,
106
+ techStack: [" Django" , " heroku" ],
100
107
github: true ,
101
- }
102
- ])
108
+ },
109
+ ]);
103
110
</script >
104
111
105
112
<template >
106
113
<div class =" lg:py-24 font-space" >
107
- <NuxtLink to =" /" class =" group mb-2 inline-flex items-center font-semibold leading-tight text-teal-300" >
108
- <UIcon name =" i-carbon-arrow-left" class =" mr-1 h-4 w-4 transition-transform group-hover:-translate-x-2" />
114
+ <NuxtLink
115
+ to =" /"
116
+ class =" group mb-2 inline-flex items-center font-semibold leading-tight text-teal-300"
117
+ >
118
+ <UIcon
119
+ name =" i-carbon-arrow-left"
120
+ class =" mr-1 h-4 w-4 transition-transform group-hover:-translate-x-2"
121
+ />
109
122
Cedrouseroll Omondi
110
123
</NuxtLink >
111
- <h1 class =" text-4xl font-bold tracking-tight text-slate-200 sm:text-5xl" >All Projects</h1 >
124
+ <h1 class =" text-4xl font-bold tracking-tight text-slate-200 sm:text-5xl" >
125
+ All Projects
126
+ </h1 >
112
127
<table id =" content" class =" mt-12 w-full border-collapse text-left" >
113
- <thead class =" sticky top-0 z-10 border-b border-slate-300/10 bg-[#002937]/75 px-6 py-5 backdrop-blur" >
128
+ <thead
129
+ class =" sticky top-0 z-10 border-b border-slate-300/10 bg-[#002937]/75 px-6 py-5 backdrop-blur"
130
+ >
114
131
<tr >
115
132
<th class =" py-4 pr-8 text-sm font-semibold text-slate-200" >Year</th >
116
- <th class =" py-4 pr-8 text-sm font-semibold text-slate-200" >Project</th >
117
- <th class =" hidden py-4 pr-8 text-sm font-semibold text-slate-200 lg:table-cell" >Made at</th >
118
- <th class =" hidden py-4 pr-8 text-sm font-semibold text-slate-200 lg:table-cell" >Built with</th >
119
- <th class =" hidden py-4 pr-8 text-sm font-semibold text-slate-200 sm:table-cell" >Link</th >
133
+ <th class =" py-4 pr-8 text-sm font-semibold text-slate-200" >
134
+ Project
135
+ </th >
136
+ <th
137
+ class =" hidden py-4 pr-8 text-sm font-semibold text-slate-200 lg:table-cell"
138
+ >
139
+ Made at
140
+ </th >
141
+ <th
142
+ class =" hidden py-4 pr-8 text-sm font-semibold text-slate-200 lg:table-cell"
143
+ >
144
+ Built with
145
+ </th >
146
+ <th
147
+ class =" hidden py-4 pr-8 text-sm font-semibold text-slate-200 sm:table-cell"
148
+ >
149
+ Link
150
+ </th >
120
151
</tr >
121
152
</thead >
122
153
<tbody >
123
- <tr v-for =" (project, i) in projects" :key =" i" class =" border-b border-slate-300/10 last:border-none" >
154
+ <tr
155
+ v-for =" (project, i) in projects"
156
+ :key =" i"
157
+ class =" border-b border-slate-300/10 last:border-none"
158
+ >
124
159
<td class =" py-4 pr-4 align-top text-sm" >
125
160
<div class =" translate-y-px" >{{ project.year }}</div >
126
161
</td >
127
- <td class =" py-4 pr-4 align-top font-semibold leading-snug text-slate-200" >
162
+ <td
163
+ class =" py-4 pr-4 align-top font-semibold leading-snug text-slate-200"
164
+ >
128
165
<div >
129
166
<div class =" block sm:hidden" >
130
- <a class =" inline-flex items-baseline font-medium leading-tight text-slate-200 focus-visible:text-teal-300 hover:text-slate-200 sm:hidden group/link text-base"
131
- :href =" `https://${project.url}`" target =" _blank" rel =" noreferrer" :aria-label =" project.title" >
132
- <span class =" inline-block" >{{ project.title }}<svg xmlns =" http://www.w3.org/2000/svg"
133
- viewBox =" 0 0 20 20" fill =" currentColor"
167
+ <a
168
+ class =" inline-flex items-baseline font-medium leading-tight text-slate-200 focus-visible:text-teal-300 hover:text-slate-200 sm:hidden group/link text-base"
169
+ :href =" `https://${project.url}`"
170
+ target =" _blank"
171
+ rel =" noreferrer"
172
+ :aria-label =" project.title"
173
+ >
174
+ <span class =" inline-block"
175
+ >{{ project.title
176
+ }}<svg
177
+ xmlns =" http://www.w3.org/2000/svg"
178
+ viewBox =" 0 0 20 20"
179
+ fill =" currentColor"
134
180
class =" inline-block h-4 w-4 shrink-0 transition-transform group-hover/link:-translate-y-1 group-hover/link:translate-x-1 group-focus-visible/link:-translate-y-1 group-focus-visible/link:translate-x-1 motion-reduce:transition-none ml-1 translate-y-px"
135
- aria-hidden =" true" >
136
- <path fill-rule =" evenodd"
181
+ aria-hidden =" true"
182
+ >
183
+ <path
184
+ fill-rule =" evenodd"
137
185
d =" M5.22 14.78a.75.75 0 001.06 0l7.22-7.22v5.69a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75h-7.5a.75.75 0 000 1.5h5.69l-7.22 7.22a.75.75 0 000 1.06z"
138
- clip-rule =" evenodd" ></path >
186
+ clip-rule =" evenodd"
187
+ ></path >
139
188
</svg >
140
189
</span >
141
190
</a >
@@ -144,33 +193,55 @@ const projects = ref<Projects[]>([
144
193
</div >
145
194
</td >
146
195
<td class =" hidden py-4 pr-4 align-top text-sm lg:table-cell" >
147
- <div class =" translate-y-px whitespace-nowrap" >{{ project.place }}</div >
196
+ <div class =" translate-y-px whitespace-nowrap" >
197
+ {{ project.place }}
198
+ </div >
148
199
</td >
149
200
<td class =" hidden py-4 pr-4 align-top lg:table-cell" >
150
201
<ul class =" flex -translate-y-1.5 flex-wrap" >
151
- <li v-for =" (text, i) in project.techStack" :key =" i" class =" my-1 mr-1.5" >
202
+ <li
203
+ v-for =" (text, i) in project.techStack"
204
+ :key =" i"
205
+ class =" my-1 mr-1.5"
206
+ >
152
207
<Pill :text =" text" />
153
208
</li >
154
209
</ul >
155
210
</td >
156
211
<td class =" hidden py-4 align-top sm:table-cell" >
157
212
<ul class =" translate-y-1" >
158
213
<li class =" mb-1 flex items-center" >
159
- <a v-if =" project.github" :href =" `https://github.com/zedjarvis/${project.url}`"
160
- class =" flex items-center font-medium leading-tight text-sm text-slate-400 hover:text-slate-200 focus-visible:text-teal-300 group/link" >
214
+ <a
215
+ v-if =" project.github"
216
+ :href =" `https://github.com/zedjarvis/${project.url}`"
217
+ class =" flex items-center font-medium leading-tight text-sm text-slate-400 hover:text-slate-200 focus-visible:text-teal-300 group/link"
218
+ >
161
219
GitHub
162
220
<i class =" ml-2 text-[18px] i-carbon-logo-github" ></i >
163
221
</a >
164
- <a v-else
222
+ <a
223
+ v-else
165
224
class =" inline-flex items-baseline font-medium leading-tight text-sm text-slate-400 hover:text-slate-200 focus-visible:text-teal-300 group/link"
166
- :href =" `https://${project.url}`" target =" _blank" rel =" noreferrer" :aria-label =" project.title" >
225
+ :href =" `https://${project.url}`"
226
+ target =" _blank"
227
+ rel =" noreferrer"
228
+ :aria-label =" project.title"
229
+ >
167
230
<span >
168
- <span >{{ project.url }}<svg xmlns =" http://www.w3.org/2000/svg" viewBox =" 0 0 20 20" fill =" currentColor"
231
+ <span
232
+ >{{ project.url
233
+ }}<svg
234
+ xmlns =" http://www.w3.org/2000/svg"
235
+ viewBox =" 0 0 20 20"
236
+ fill =" currentColor"
169
237
class =" inline-block h-4 w-4 shrink-0 transition-transform group-hover/link:-translate-y-1 group-hover/link:translate-x-1 group-focus-visible/link:-translate-y-1 group-focus-visible/link:translate-x-1 motion-reduce:transition-none ml-0.5"
170
- aria-hidden =" true" >
171
- <path fill-rule =" evenodd"
238
+ aria-hidden =" true"
239
+ >
240
+ <path
241
+ fill-rule =" evenodd"
172
242
d =" M5.22 14.78a.75.75 0 001.06 0l7.22-7.22v5.69a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75h-7.5a.75.75 0 000 1.5h5.69l-7.22 7.22a.75.75 0 000 1.06z"
173
- clip-rule =" evenodd" ></path >
243
+ clip-rule =" evenodd"
244
+ ></path >
174
245
</svg >
175
246
</span >
176
247
</span >
0 commit comments