Help
RSS
API
Feed
Maltego
Contact
Domain > chihyungchang.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2024-06-04
104.21.29.178
(
ClassC
)
2025-12-09
172.67.149.146
(
ClassC
)
Port 443
HTTP/1.1 200 OKDate: Tue, 09 Dec 2025 17:51:30 GMTContent-Type: text/html; charsetutf-8Transfer-Encoding: chunkedConnection: keep-aliveAccess-Control-Allow-Origin: *Cache-Control: public, max-age0, must-revalidatereferrer-policy: strict-origin-when-cross-originx-content-type-options: nosniffVary: accept-encodingReport-To: {group:cf-nel,max_age:604800,endpoints:{url:https://a.nel.cloudflare.com/report/v4?sBpf%2BURj2UlmdehE1b7uZe4m%2FZtZbaWT1G2diRFYkw4XaiwAzX9RxdxEWreg6yOHadK3vG%2FR6pSv43bIIK3KOlGeUE0S8LDIIBeYxWhuihA%3D%3D}}Nel: {report_to:cf-nel,success_fraction:0.0,max_age:604800}Server: cloudflarecf-cache-status: DYNAMICCF-RAY: 9ab659d68fab816e-PDXalt-svc: h3:443; ma86400 !DOCTYPE html>html langen>head>meta charsetutf-8>meta nameviewport contentwidthdevice-width, initial-scale1>style idnuxt-ui-colors>@layer base { :root { --ui-color-primary-50: var(--color-blue-50, oklch(97% 0.014 254.604)); --ui-color-primary-100: var(--color-blue-100, oklch(93.2% 0.032 255.585)); --ui-color-primary-200: var(--color-blue-200, oklch(88.2% 0.059 254.128)); --ui-color-primary-300: var(--color-blue-300, oklch(80.9% 0.105 251.813)); --ui-color-primary-400: var(--color-blue-400, oklch(70.7% 0.165 254.624)); --ui-color-primary-500: var(--color-blue-500, oklch(62.3% 0.214 259.815)); --ui-color-primary-600: var(--color-blue-600, oklch(54.6% 0.245 262.881)); --ui-color-primary-700: var(--color-blue-700, oklch(48.8% 0.243 264.376)); --ui-color-primary-800: var(--color-blue-800, oklch(42.4% 0.199 265.638)); --ui-color-primary-900: var(--color-blue-900, oklch(37.9% 0.146 265.522)); --ui-color-primary-950: var(--color-blue-950, oklch(28.2% 0.091 267.935)); --ui-color-secondary-50: var(--color-blue-50, oklch(97% 0.014 254.604)); --ui-color-secondary-100: var(--color-blue-100, oklch(93.2% 0.032 255.585)); --ui-color-secondary-200: var(--color-blue-200, oklch(88.2% 0.059 254.128)); --ui-color-secondary-300: var(--color-blue-300, oklch(80.9% 0.105 251.813)); --ui-color-secondary-400: var(--color-blue-400, oklch(70.7% 0.165 254.624)); --ui-color-secondary-500: var(--color-blue-500, oklch(62.3% 0.214 259.815)); --ui-color-secondary-600: var(--color-blue-600, oklch(54.6% 0.245 262.881)); --ui-color-secondary-700: var(--color-blue-700, oklch(48.8% 0.243 264.376)); --ui-color-secondary-800: var(--color-blue-800, oklch(42.4% 0.199 265.638)); --ui-color-secondary-900: var(--color-blue-900, oklch(37.9% 0.146 265.522)); --ui-color-secondary-950: var(--color-blue-950, oklch(28.2% 0.091 267.935)); --ui-color-success-50: var(--color-green-50, oklch(98.2% 0.018 155.826)); --ui-color-success-100: var(--color-green-100, oklch(96.2% 0.044 156.743)); --ui-color-success-200: var(--color-green-200, oklch(92.5% 0.084 155.995)); --ui-color-success-300: var(--color-green-300, oklch(87.1% 0.15 154.449)); --ui-color-success-400: var(--color-green-400, oklch(79.2% 0.209 151.711)); --ui-color-success-500: var(--color-green-500, oklch(72.3% 0.219 149.579)); --ui-color-success-600: var(--color-green-600, oklch(62.7% 0.194 149.214)); --ui-color-success-700: var(--color-green-700, oklch(52.7% 0.154 150.069)); --ui-color-success-800: var(--color-green-800, oklch(44.8% 0.119 151.328)); --ui-color-success-900: var(--color-green-900, oklch(39.3% 0.095 152.535)); --ui-color-success-950: var(--color-green-950, oklch(26.6% 0.065 152.934)); --ui-color-info-50: var(--color-blue-50, oklch(97% 0.014 254.604)); --ui-color-info-100: var(--color-blue-100, oklch(93.2% 0.032 255.585)); --ui-color-info-200: var(--color-blue-200, oklch(88.2% 0.059 254.128)); --ui-color-info-300: var(--color-blue-300, oklch(80.9% 0.105 251.813)); --ui-color-info-400: var(--color-blue-400, oklch(70.7% 0.165 254.624)); --ui-color-info-500: var(--color-blue-500, oklch(62.3% 0.214 259.815)); --ui-color-info-600: var(--color-blue-600, oklch(54.6% 0.245 262.881)); --ui-color-info-700: var(--color-blue-700, oklch(48.8% 0.243 264.376)); --ui-color-info-800: var(--color-blue-800, oklch(42.4% 0.199 265.638)); --ui-color-info-900: var(--color-blue-900, oklch(37.9% 0.146 265.522)); --ui-color-info-950: var(--color-blue-950, oklch(28.2% 0.091 267.935)); --ui-color-warning-50: var(--color-yellow-50, oklch(98.7% 0.026 102.212)); --ui-color-warning-100: var(--color-yellow-100, oklch(97.3% 0.071 103.193)); --ui-color-warning-200: var(--color-yellow-200, oklch(94.5% 0.129 101.54)); --ui-color-warning-300: var(--color-yellow-300, oklch(90.5% 0.182 98.111)); --ui-color-warning-400: var(--color-yellow-400, oklch(85.2% 0.199 91.936)); --ui-color-warning-500: var(--color-yellow-500, oklch(79.5% 0.184 86.047)); --ui-color-warning-600: var(--color-yellow-600, oklch(68.1% 0.162 75.834)); --ui-color-warning-700: var(--color-yellow-700, oklch(55.4% 0.135 66.442)); --ui-color-warning-800: var(--color-yellow-800, oklch(47.6% 0.114 61.907)); --ui-color-warning-900: var(--color-yellow-900, oklch(42.1% 0.095 57.708)); --ui-color-warning-950: var(--color-yellow-950, oklch(28.6% 0.066 53.813)); --ui-color-error-50: var(--color-red-50, oklch(97.1% 0.013 17.38)); --ui-color-error-100: var(--color-red-100, oklch(93.6% 0.032 17.717)); --ui-color-error-200: var(--color-red-200, oklch(88.5% 0.062 18.334)); --ui-color-error-300: var(--color-red-300, oklch(80.8% 0.114 19.571)); --ui-color-error-400: var(--color-red-400, oklch(70.4% 0.191 22.216)); --ui-color-error-500: var(--color-red-500, oklch(63.7% 0.237 25.331)); --ui-color-error-600: var(--color-red-600, oklch(57.7% 0.245 27.325)); --ui-color-error-700: var(--color-red-700, oklch(50.5% 0.213 27.518)); --ui-color-error-800: var(--color-red-800, oklch(44.4% 0.177 26.899)); --ui-color-error-900: var(--color-red-900, oklch(39.6% 0.141 25.723)); --ui-color-error-950: var(--color-red-950, oklch(25.8% 0.092 26.042)); --ui-color-neutral-50: var(--color-old-neutral-50, oklch(98.5% 0 0)); --ui-color-neutral-100: var(--color-old-neutral-100, oklch(97% 0 0)); --ui-color-neutral-200: var(--color-old-neutral-200, oklch(92.2% 0 0)); --ui-color-neutral-300: var(--color-old-neutral-300, oklch(87% 0 0)); --ui-color-neutral-400: var(--color-old-neutral-400, oklch(70.8% 0 0)); --ui-color-neutral-500: var(--color-old-neutral-500, oklch(55.6% 0 0)); --ui-color-neutral-600: var(--color-old-neutral-600, oklch(43.9% 0 0)); --ui-color-neutral-700: var(--color-old-neutral-700, oklch(37.1% 0 0)); --ui-color-neutral-800: var(--color-old-neutral-800, oklch(26.9% 0 0)); --ui-color-neutral-900: var(--color-old-neutral-900, oklch(20.5% 0 0)); --ui-color-neutral-950: var(--color-old-neutral-950, oklch(14.5% 0 0)); } :root, .light { --ui-primary: var(--ui-color-primary-500); --ui-secondary: var(--ui-color-secondary-500); --ui-success: var(--ui-color-success-500); --ui-info: var(--ui-color-info-500); --ui-warning: var(--ui-color-warning-500); --ui-error: var(--ui-color-error-500); } .dark { --ui-primary: var(--ui-color-primary-400); --ui-secondary: var(--ui-color-secondary-400); --ui-success: var(--ui-color-success-400); --ui-info: var(--ui-color-info-400); --ui-warning: var(--ui-color-warning-400); --ui-error: var(--ui-color-error-400); }}/style>title>Oliver Zhang - Full Stack Software Consultant - Full Stack Software Consultant/title>style>::view-transition-new(root),::view-transition-old(root){animation:none;mix-blend-mode:normal}::view-transition-new(root){z-index:9999}::view-transition-old(root){z-index:1}/style>style>.accordion-contentdata-v-064670b3{backface-visibility:hidden;max-height:0;opacity:0;overflow:hidden;transform:translateZ(0);transition:all .3s cubic-bezier(.4,0,.2,1)}.accordion-content.accordion-opendata-v-064670b3{max-height:1000px;opacity:1}.accordion-content.accordion-closeddata-v-064670b3{max-height:0;opacity:0}.accordion-innerdata-v-064670b3{padding:0;transition:transform .3s cubic-bezier(.4,0,.2,1)}.accordion-content.accordion-open .accordion-innerdata-v-064670b3,.accordion-innerdata-v-064670b3{transform:translateY(0)}.accordion-content.accordion-closed .accordion-innerdata-v-064670b3{transform:translateY(-10px)}@media (max-width:768px){.accordion-contentdata-v-064670b3,.accordion-innerdata-v-064670b3{transition-duration:.25s}.accordion-content.accordion-opendata-v-064670b3{max-height:600px}}.accordion-contentdata-v-064670b3,.accordion-innerdata-v-064670b3{will-change:max-height,opacity,transform}.accordion-contentdata-v-064670b3:not(.accordion-open):not(.accordion-closed){will-change:auto}/style>link relstylesheet href/_nuxt/entry.nqk1yY9B.css crossorigin>link relstylesheet href/_nuxt/index.C-5LNygk.css crossorigin>style>@layer components {:where(.i-lucide\:arrow-right){display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;--svg:url(data:image/svg+xml,%3Csvg xmlnshttp://www.w3.org/2000/svg viewBox0 0 24 24 width24 height24%3E%3Cpath fillnone strokeblack stroke-linecapround stroke-linejoinround stroke-width2 dM5 12h14m-7-7l7 7l-7 7/%3E%3C/svg%3E)}:where(.i-lucide\:file-text){display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;--svg:url(data:image/svg+xml,%3Csvg xmlnshttp://www.w3.org/2000/svg viewBox0 0 24 24 width24 height24%3E%3Cg fillnone strokeblack stroke-linecapround stroke-linejoinround stroke-width2%3E%3Cpath dM15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z/%3E%3Cpath dM14 2v4a2 2 0 0 0 2 2h4M10 9H8m8 4H8m8 4H8/%3E%3C/g%3E%3C/svg%3E)}:where(.i-lucide\:folder){display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;--svg:url(data:image/svg+xml,%3Csvg xmlnshttp://www.w3.org/2000/svg viewBox0 0 24 24 width24 height24%3E%3Cpath fillnone strokeblack stroke-linecapround stroke-linejoinround stroke-width2 dM20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z/%3E%3C/svg%3E)}:where(.i-lucide\:home){display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;--svg:url(data:image/svg+xml,%3Csvg xmlnshttp://www.w3.org/2000/svg viewBox0 0 24 24 width24 height24%3E%3Cg fillnone strokeblack stroke-linecapround stroke-linejoinround stroke-width2%3E%3Cpath dM15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8/%3E%3Cpath dM3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z/%3E%3C/g%3E%3C/svg%3E)}:where(.i-lucide\:plus){display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;--svg:url(data:image/svg+xml,%3Csvg xmlnshttp://www.w3.org/2000/svg viewBox0 0 24 24 width24 height24%3E%3Cpath fillnone strokeblack stroke-linecapround stroke-linejoinround stroke-width2 dM5 12h14m-7-7v14/%3E%3C/svg%3E)}:where(.i-lucide\:user){display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;--svg:url(data:image/svg+xml,%3Csvg xmlnshttp://www.w3.org/2000/svg viewBox0 0 24 24 width24 height24%3E%3Cg fillnone strokeblack stroke-linecapround stroke-linejoinround stroke-width2%3E%3Cpath dM19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2/%3E%3Ccircle cx12 cy7 r4/%3E%3C/g%3E%3C/svg%3E)}:where(.i-simple-icons\:alibabadotcom){display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;--svg:url(data:image/svg+xml,%3Csvg xmlnshttp://www.w3.org/2000/svg viewBox0 0 24 24 width24 height24%3E%3Cpath fillblack dM14.391 16.22c-.963.044-.865-.459-.302-1.234c1.32-1.768 3.82-4.236 3.906-5.982c.151-2.283-2.143-3.026-4.501-3.004c-1.645.022-3.344.492-4.501.906C5 8.315 2.489 10.576.909 13.076C-.768 15.554-.216 17.923 3.322 18c2.716-.109 4.48-.862 6.32-1.802c.01 0-5.086 1.453-6.958.383l-.008-.002c-.193-.11-.404-.264-.457-.683c-.012-.885 1.46-1.802 2.283-2.097v-1.533a5.4 5.4 0 0 0 1.955.366a5.38 5.38 0 0 0 3.472-1.265c.037.13.056.278.044.447h.371c.048-.394-.172-.706-.172-.706c-.333-.529-.915-.52-.915-.52s.315.137.529.466a4.95 4.95 0 0 1-4.665.932l1.21-1.2l-.336-.874c2.435-.852 4.48-1.507 7.812-2.085l-.746-.624l.389-.24c2.01.568 3.325.985 3.253 2.051a2.7 2.7 0 0 1-.202.611c-.584 1.158-2.326 3.09-3.029 3.898c-.465.535-.92 1.06-1.245 1.562c-.335.503-.54.971-.551 1.42c.043 3.504 10.334-1.64 12.324-3.003c-2.943 1.266-6.113 2.489-9.609 2.718/%3E%3C/svg%3E)}:where(.i-simple-icons\:github){display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;--svg:url(data:image/svg+xml,%3Csvg xmlnshttp://www.w3.org/2000/svg viewBox0 0 24 24 width24 height24%3E%3Cpath fillblack dM12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12/%3E%3C/svg%3E)}:where(.i-simple-icons\:invision){display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;--svg:url(data:image/svg+xml,%3Csvg xmlnshttp://www.w3.org/2000/svg viewBox0 0 24 24 width24 height24%3E%3Cpath fillblack dM5.265 15.108a4.7 4.7 0 0 0-.124 1.036c0 1.215.658 2.021 2.058 2.021c1.16 0 2.102-.69 2.78-1.803l-.415 1.661h2.304l1.319-5.28c.329-1.338.966-2.032 1.934-2.032c.761 0 1.235.473 1.235 1.255a2.5 2.5 0 0 1-.103.742l-.679 2.427a3.6 3.6 0 0 0-.144 1.03c0 1.151.679 1.996 2.099 1.996c1.214 0 2.182-.781 2.716-2.654l-.905-.35c-.453 1.255-.844 1.482-1.152 1.482s-.474-.206-.474-.618a2.7 2.7 0 0 1 .103-.638l.66-2.366a5.2 5.2 0 0 0 .226-1.5c0-1.771-1.07-2.695-2.368-2.695c-1.214 0-2.449 1.096-3.066 2.249L13.721 9h-3.518l-.495 1.824h1.648l-1.014 4.055c-.797 1.77-2.26 1.799-2.443 1.758c-.302-.068-.494-.183-.494-.576a4 4 0 0 1 .144-.942l1.544-6.124H5.184l-.493 1.824h1.625zm2.902-7.385a1.38 1.38 0 1 0-1.4-1.38a1.384 1.384 0 0 0 1.4 1.38M0 0h24v24H0Z/%3E%3C/svg%3E)}:where(.i-simple-icons\:processingfoundation){display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;--svg:url(data:image/svg+xml,%3Csvg xmlnshttp://www.w3.org/2000/svg viewBox0 0 24 24 width24 height24%3E%3Cpath fillblack dM11.999 0a12 12 0 1 0 0 24A12 12 0 0 0 12 0zm1.183 5.255h.048c3.273 0 5.247 1.48 5.247 4.103c0 2.727-1.974 4.536-5.295 4.669v-1.742c1.837-.11 2.801-1.061 2.801-2.744c0-1.498-.957-2.442-2.8-2.516zm-1.773.026l.005 11.896c.779.052 1.583.18 2.26.337l-.269 1.324H6.788v-1.324a15 15 0 0 1 2.26-.337V6.993a15 15 0 0 1-2.26-.337V5.33h2.26c.64 0 1.469-.028 2.361-.05z/%3E%3C/svg%3E)}:where(.i-simple-icons\:x){display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;--svg:url(data:image/svg+xml,%3Csvg xmlnshttp://www.w3.org/2000/svg viewBox0 0 24 24 width24 height24%3E%3Cpath fillblack dM18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584l-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z/%3E%3C/svg%3E)}}/style>link relpreload asfetch crossoriginanonymous href/_payload.json?58a0de17-7148-47b8-8688-70c42b12c24b>link relmodulepreload asscript crossorigin href/_nuxt/o4Xm19FN.js>link relmodulepreload asscript crossorigin href/_nuxt/D0A1HPPL.js>link relmodulepreload asscript crossorigin href/_nuxt/DlAUqK2U.js>link relmodulepreload asscript crossorigin href/_nuxt/BJfPRuMD.js>link relmodulepreload asscript crossorigin href/_nuxt/BmnaRd2v.js>link relmodulepreload asscript crossorigin href/_nuxt/D3eBE06Q.js>link relmodulepreload asscript crossorigin href/_nuxt/ByoKhpxy.js>link relmodulepreload asscript crossorigin href/_nuxt/98f1kJNr.js>link relpreload asfetch fetchprioritylow crossoriginanonymous href/_nuxt/builds/meta/58a0de17-7148-47b8-8688-70c42b12c24b.json>link relprefetch asscript crossorigin href/_nuxt/rWlUaNjO.js>link relprefetch asscript crossorigin href/_nuxt/Dtrtw0zj.js>link relprefetch asscript crossorigin href/_nuxt/LVG_eY9u.js>link relprefetch asscript crossorigin href/_nuxt/Ddyvc1_j.js>link relprefetch asscript crossorigin href/_nuxt/mhJ-osCf.js>link relprefetch asscript crossorigin href/_nuxt/wrqBHFeW.js>link relprefetch asscript crossorigin href/_nuxt/IaU1rxhl.js>meta nametheme-color contentwhite>link relicon href/favicon.ico>meta propertyog:image contenthttps://assets.hub.nuxt.com/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1cmwiOiJodHRwczovL3BvcnRmb2xpby10ZW1wbGF0ZS5udXh0LmRldiIsImlhdCI6MTc0NTkzNDczMX0.XDWnQoyVy3XVtKQD6PLQ8RFUwr4yr1QnVwPxRrjCrro.jpg?themelight>meta nametwitter:image contenthttps://assets.hub.nuxt.com/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1cmwiOiJodHRwczovL3BvcnRmb2xpby10ZW1wbGF0ZS5udXh0LmRldiIsImlhdCI6MTc0NTkzNDczMX0.XDWnQoyVy3XVtKQD6PLQ8RFUwr4yr1QnVwPxRrjCrro.jpg?themelight>meta nametwitter:card contentsummary_large_image>meta propertyog:title contentOliver Zhang - Full Stack Software Consultant>meta namedescription contentWelcome to my portfolio! Im ZHI YONG (Oliver) ZHANG, a seasoned full-stack engineer with a focus on front-end development. I build reliable, scalable solutions for global clients using Vue.js, Node.js, and beyond.>meta propertyog:description contentWelcome to my portfolio! Im ZHI YONG (Oliver) ZHANG, a seasoned full-stack engineer with a focus on front-end development. I build reliable, scalable solutions for global clients using Vue.js, Node.js, and beyond.>script typemodule src/_nuxt/o4Xm19FN.js crossorigin>/script>script>use strict;(()>{const twindow,edocument.documentElement,cdark,light,ngetStorageValue(localStorage,nuxt-color-mode)||system;let insystem?u():n;const re.getAttribute(data-color-mode-forced);r&&(ir),l(i),t__NUXT_COLOR_MODE__{preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s+o+,a;e.classList?e.classList.add(s):e.className+ +s,a&&e.setAttribute(data-+a,o)}function d(o){const s+o+,a;e.classList?e.classList.remove(s):e.classNamee.className.replace(new RegExp(s,g),),a&&e.removeAttribute(data-+a)}function f(o){return t.matchMedia((prefers-color-scheme+o+))}function u(){if(t.matchMedia&&f().media!not all){for(const o of c)if(f(:+o).matches)return o}returnlight}})();function getStorageValue(t,e){switch(t){caselocalStorage:return window.localStorage.getItem(e);casesessionStorage:return window.sessionStorage.getItem(e);casecookie:return getCookie(e);default:return null}}function getCookie(t){const c(; +window.document.cookie).split(; +t+);if(c.length2)return c.pop()?.split(;).shift()}/script>/head>body>div id__nuxt classisolate>!---->!---->!---->!---->!---->div>div classw-full max-w-(--ui-container) mx-auto px-4 sm:px-6 lg:px-8 sm:border-x border-default pt-10>!---->div classfixed top-2 sm:top-4 mx-auto left-1/2 transform -translate-x-1/2 z-10>!---->!---->!---->nav data-collapsedfalse classrelative flex gap-1.5 &>div:min-w-0 items-center justify-between bg-muted/80 backdrop-blur-sm rounded-full px-2 sm:px-4 border border-muted/50 shadow-lg shadow-neutral-950/5 aria-labelMain data-orientationhorizontal dirltr data-reka-navigation-menu>!---->!---->!---->!---->!---->div styleposition:relative;>ul classisolate min-w-0 flex items-center data-orientationhorizontal>!---->!---->li data-menu-item classmin-w-0 py-2>!---->!---->a href/ data-reka-collection-item data-active aria-currentpage classgroup relative w-full flex items-center gap-1.5 font-medium text-sm before:absolute before:z--1 before:rounded-md focus:outline-none focus-visible:outline-none dark:focus-visible:outline-none focus-visible:before:ring-inset focus-visible:before:ring-2 focus-visible:before:ring-inverted before:inset-x-px before:inset-y-0 text-highlighted px-2 py-1>!---->!---->!---->span classiconify i-lucide:home shrink-0 size-5 text-highlighted group-data-stateopen:text-highlighted hidden aria-hiddentrue style>/span>!---->span classtruncate>!---->Home!---->!---->/span>!---->!---->!---->/a>!---->!---->!---->!---->/li>li data-menu-item classmin-w-0 py-2>!---->!---->a href/projects data-reka-collection-item classgroup relative w-full flex items-center gap-1.5 font-medium text-sm before:absolute before:z--1 before:rounded-md focus:outline-none focus-visible:outline-none dark:focus-visible:outline-none focus-visible:before:ring-inset focus-visible:before:ring-2 focus-visible:before:ring-inverted before:inset-x-px before:inset-y-0 text-muted hover:text-highlighted transition-colors data-stateopen:text-highlighted px-2 py-1>!---->!---->!---->span classiconify i-lucide:folder shrink-0 size-5 text-dimmed group-hover:text-default transition-colors group-data-stateopen:text-default hidden aria-hiddentrue style>/span>!---->span classtruncate>!---->Projects!---->!---->/span>!---->!---->!---->/a>!---->!---->!---->!---->/li>li data-menu-item classmin-w-0 py-2>!---->!---->a href/blog data-reka-collection-item classgroup relative w-full flex items-center gap-1.5 font-medium text-sm before:absolute before:z--1 before:rounded-md focus:outline-none focus-visible:outline-none dark:focus-visible:outline-none focus-visible:before:ring-inset focus-visible:before:ring-2 focus-visible:before:ring-inverted before:inset-x-px before:inset-y-0 text-muted hover:text-highlighted transition-colors data-stateopen:text-highlighted px-2 py-1>!---->!---->!---->span classiconify i-lucide:file-text shrink-0 size-5 text-dimmed group-hover:text-default transition-colors group-data-stateopen:text-default hidden aria-hiddentrue style>/span>!---->span classtruncate>!---->Blog!---->!---->/span>!---->!---->!---->/a>!---->!---->!---->!---->/li>li data-menu-item classmin-w-0 py-2>!---->!---->a href/about data-reka-collection-item classgroup relative w-full flex items-center gap-1.5 font-medium text-sm before:absolute before:z--1 before:rounded-md focus:outline-none focus-visible:outline-none dark:focus-visible:outline-none focus-visible:before:ring-inset focus-visible:before:ring-2 focus-visible:before:ring-inverted before:inset-x-px before:inset-y-0 text-muted hover:text-highlighted transition-colors data-stateopen:text-highlighted px-2 py-1>!---->!---->!---->span classiconify i-lucide:user shrink-0 size-5 text-dimmed group-hover:text-default transition-colors group-data-stateopen:text-default hidden aria-hiddentrue style>/span>!---->span classtruncate>!---->About!---->!---->/span>!---->!---->!---->/a>!---->!---->!---->!---->/li>!---->!---->/ul>/div>!---->!---->!---->!---->!---->div classsize-4>/div>!---->!---->div classabsolute top-full left-0 flex w-full justify-center>!---->!---->/div>!---->/nav>!---->/div>!---->main classmin-h-calc(100vh-var(--ui-header-height)) relative relative>!---->div classw-full w-full>!---->section classrelative isolate>div classw-full max-w-(--ui-container) mx-auto px-4 sm:px-6 lg:px-8 pt-24 pb-12 sm:pb-12 lg:pb-12>div classheader>!---->!---->/div>!---->div classflex items-center justify-center mb-6>img src/avatar.jpeg altRegular img test classsize-18 rounded-full object-cover stylescale:1.1;opacity:0;filter:blur(20px);>/div>h1 classtext-shadow-md max-w-lg mx-auto text-3xl sm:text-4xl lg:text-5xl font-bold text-center mb-4>span stylescale:1.1;opacity:0;filter:blur(20px);>Hey, I'm Oliver Zhang Full Stack Software Consultant/span>/h1>p classtext-md mx-auto max-w-2xl text-pretty sm:text-md text-muted text-center mb-8>span stylescale:1.1;opacity:0;filter:blur(20px);>I design and code digital systems that feel fast, look clean, and scale with confidence — from front-end to back-end, and across time zones./span>/p>div classmt-4 flex flex-col justify-center items-center>div classflex items-center gap-2 stylescale:1.1;opacity:0;filter:blur(20px);>!---->!---->a href/cdn-cgi/l/email-protection#94fbf8fde2f1e6d4f0e6fde2f1faf6edfdfaf2fdfafde0f1baf7fbf9 relnoopener noreferrer classrounded-md font-medium inline-flex items-center disabled:cursor-not-allowed aria-disabled:cursor-not-allowed disabled:opacity-75 aria-disabled:opacity-75 transition-colors px-2.5 py-1.5 text-sm gap-1.5 text-inverted bg-inverted hover:bg-inverted/90 disabled:bg-inverted aria-disabled:bg-inverted focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-inverted>!---->!---->!---->!---->!---->span classtruncate>Contact me/span>!---->!---->!---->!---->!---->/a>!---->!---->!---->!---->a hrefhttps://cal.com/oliver3109/30min relnoopener noreferrer classrounded-md font-medium inline-flex items-center disabled:cursor-not-allowed aria-disabled:cursor-not-allowed disabled:opacity-75 aria-disabled:opacity-75 transition-colors px-2.5 py-1.5 text-sm text-success hover:bg-success/10 focus:outline-none focus-visible:bg-success/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent gap-2>!---->!---->span classrelative flex size-2>span classabsolute inline-flex size-full rounded-full opacity-75 bg-success animate-ping>/span>span classrelative inline-flex size-2 scale-90 rounded-full bg-success>/span>/span>!---->!---->span classtruncate>Available for new projects/span>!---->!---->!---->!---->!---->/a>!---->!---->/div>div classgap-x-4 inline-flex mt-4>!---->!---->!---->a hrefhttps://www.linkedin.com/in/oliver3109/ relnoopener noreferrer target_blank aria-labelLinkedin stylescale:1.1;opacity:0;filter:blur(20px); classrounded-md font-medium inline-flex items-center disabled:cursor-not-allowed aria-disabled:cursor-not-allowed disabled:opacity-75 aria-disabled:opacity-75 transition-colors text-sm gap-1.5 text-default hover:bg-elevated focus:outline-none focus-visible:bg-elevated hover:disabled:bg-transparent dark:hover:disabled:bg-transparent hover:aria-disabled:bg-transparent dark:hover:aria-disabled:bg-transparent p-1.5>!---->!---->span classiconify i-simple-icons:invision shrink-0 size-5 aria-hiddentrue style>/span>!---->!---->!---->!---->!---->!---->!---->!---->/a>!---->!---->!---->!---->a hrefhttps://github.com/oliver3109 relnoopener noreferrer target_blank aria-labelGitHub stylescale:1.1;opacity:0;filter:blur(20px); classrounded-md font-medium inline-flex items-center disabled:cursor-not-allowed aria-disabled:cursor-not-allowed disabled:opacity-75 aria-disabled:opacity-75 transition-colors text-sm gap-1.5 text-default hover:bg-elevated focus:outline-none focus-visible:bg-elevated hover:disabled:bg-transparent dark:hover:disabled:bg-transparent hover:aria-disabled:bg-transparent dark:hover:aria-disabled:bg-transparent p-1.5>!---->!---->span classiconify i-simple-icons:github shrink-0 size-5 aria-hiddentrue style>/span>!---->!---->!---->!---->!---->!---->!---->!---->/a>!---->!---->!---->!---->a hrefhttps://openprocessing.org/user/324595?viewsketches relnoopener noreferrer target_blank aria-labelOpenProcessing stylescale:1.1;opacity:0;filter:blur(20px); classrounded-md font-medium inline-flex items-center disabled:cursor-not-allowed aria-disabled:cursor-not-allowed disabled:opacity-75 aria-disabled:opacity-75 transition-colors text-sm gap-1.5 text-default hover:bg-elevated focus:outline-none focus-visible:bg-elevated hover:disabled:bg-transparent dark:hover:disabled:bg-transparent hover:aria-disabled:bg-transparent dark:hover:aria-disabled:bg-transparent p-1.5>!---->!---->span classiconify i-simple-icons:processingfoundation shrink-0 size-5 aria-hiddentrue style>/span>!---->!---->!---->!---->!---->!---->!---->!---->/a>!---->!---->!---->!---->a hrefhttps://x.com/oliver3109 relnoopener noreferrer target_blank aria-labelX stylescale:1.1;opacity:0;filter:blur(20px); classrounded-md font-medium inline-flex items-center disabled:cursor-not-allowed aria-disabled:cursor-not-allowed disabled:opacity-75 aria-disabled:opacity-75 transition-colors text-sm gap-1.5 text-default hover:bg-elevated focus:outline-none focus-visible:bg-elevated hover:disabled:bg-transparent dark:hover:disabled:bg-transparent hover:aria-disabled:bg-transparent dark:hover:aria-disabled:bg-transparent p-1.5>!---->!---->span classiconify i-simple-icons:x shrink-0 size-5 aria-hiddentrue style>/span>!---->!---->!---->!---->!---->!---->!---->!---->/a>!---->!---->!---->/div>/div>!---->!---->!---->/div>/section>div styleopacity:0;transform:translateY(20px);>section classrelative isolate>div classw-full max-w-(--ui-container) mx-auto px-4 sm:px-6 lg:px-8 !pt-0 lg:gap-8 !flex !flex-col>div classheader>!---->!---->/div>!---->section classrelative isolate>div classw-full max-w-(--ui-container) mx-auto px-4 sm:px-6 lg:px-8 !px-0>div classheader>!---->!---->/div>!---->h2 classtext-left text-xl sm:text-xl lg:text-2xl font-medium>About Me/h2>p classtext-left mt-3 text-sm sm:text-md lg:text-sm text-muted>I'm Oliver Zhang, a full-stack engineer with a front-end focus. Since I began coding at 16, I've built scalable digital products using a range of modern tools and languages.As an independent developer, I've delivered 10+ international projects for clients in China, Italy, the UK, and the US — often acting as both engineer and technical problem-solver.From SaaS platforms to e-commerce and custom dashboards, I build clean, stable, and scalable solutions./p>!---->!---->!---->/div>/section>section classrelative isolate>div classw-full max-w-(--ui-container) mx-auto px-4 sm:px-6 lg:px-8 pb-16 sm:pb-16 lg:pb-24 !px-0 pt-8 sm:pt-4 lg:pt-2>div classheader>div classtext-pretty tracking-tight text-highlighted text-left text-xl sm:text-xl lg:text-2xl font-medium>!---->span>Work Experience/span>!---->/div>!---->/div>!---->div classflex flex-col gap-2 mt-2 overflow-x-scroll lg:overflow-x-hidden>!---->div classtext-muted flex items-center text-nowrap gap-2 styleopacity:0;transform:translateY(20px);>p classtext-sm>2025 - Present/p>div data-orientationhorizontal roleseparator classflex items-center align-center text-center w-full flex-row>!---->!---->div classborder-default w-full border-solid border-t>/div>!---->!---->!---->/div>!---->a hrefhttps://www.createdbycatalyst.com/ relnoopener noreferrer target_blank classfocus-visible:outline-primary text-muted hover:text-default transition-colors flex items-center gap-1>!---->!---->span classtext-sm>Freelance / XR & Full-stack Engineer/span>div classinline-flex items-center gap-1 stylecolor:#0cccd7;>span classfont-medium>Created by Catalyst (UK)/span>span classiconify aria-hiddentrue style>/span>/div>!---->!---->/a>!---->/div>div classtext-muted flex items-center text-nowrap gap-2 styleopacity:0;transform:translateY(20px);>p classtext-sm>2024 - 2025/p>div data-orientationhorizontal roleseparator classflex items-center align-center text-center w-full flex-row>!---->!---->div classborder-default w-full border-solid border-t>/div>!---->!---->!---->/div>!---->a hrefhttps://www.aladia.io relnoopener noreferrer target_blank classfocus-visible:outline-primary text-muted hover:text-default transition-colors flex items-center gap-1>!---->!---->span classtext-sm>Freelance / Font-end Engineer/span>div classinline-flex items-center gap-1 stylecolor:#f0ca41;>span classfont-medium>Aladia (Italy)/span>span classiconify aria-hiddentrue style>/span>/div>!---->!---->/a>!---->/div>div classtext-muted flex items-center text-nowrap gap-2 styleopacity:0;transform:translateY(20px);>p classtext-sm>2023 - 2024/p>div data-orientationhorizontal roleseparator classflex items-center align-center text-center w-full flex-row>!---->!---->div classborder-default w-full border-solid border-t>/div>!---->!---->!---->/div>!---->a hrefhttp://en.chance3d.com/ relnoopener noreferrer target_blank classfocus-visible:outline-primary text-muted hover:text-default transition-colors flex items-center gap-1>!---->!---->span classtext-sm>Freelance / XR Developer/span>div classinline-flex items-center gap-1 stylecolor:#000000;>span classfont-medium>Guangdong Chance3d Technology Co., Ltd/span>span classiconify aria-hiddentrue style>/span>/div>!---->!---->/a>!---->/div>div classtext-muted flex items-center text-nowrap gap-2 styleopacity:0;transform:translateY(20px);>p classtext-sm>2021 - 2023/p>div data-orientationhorizontal roleseparator classflex items-center align-center text-center w-full flex-row>!---->!---->div classborder-default w-full border-solid border-t>/div>!---->!---->!---->/div>!---->a hrefhttps://www.cs-zjy.com/ relnoopener noreferrer target_blank classfocus-visible:outline-primary text-muted hover:text-default transition-colors flex items-center gap-1>!---->!---->span classtext-sm>Front-end Technical Experts/span>div classinline-flex items-center gap-1 stylecolor:#2e00dd;>span classfont-medium>Shandong Chaoshi Self Owned Tourism Co., Ltd./span>span classiconify aria-hiddentrue style>/span>/div>!---->!---->/a>!---->/div>div classtext-muted flex items-center text-nowrap gap-2 styleopacity:0;transform:translateY(20px);>p classtext-sm>2018 - 2020/p>div data-orientationhorizontal roleseparator classflex items-center align-center text-center w-full flex-row>!---->!---->div classborder-default w-full border-solid border-t>/div>!---->!---->!---->/div>!---->a hrefhttps://www.alibaba.com/ relnoopener noreferrer target_blank classfocus-visible:outline-primary text-muted hover:text-default transition-colors flex items-center gap-1>!---->!---->span classtext-sm>Senior front-end Developer/span>div classinline-flex items-center gap-1 stylecolor:#f60;>span classfont-medium>Alibaba Group Holding Limited/span>span classiconify i-simple-icons:alibabadotcom aria-hiddentrue style>/span>/div>!---->!---->/a>!---->/div>div classtext-muted flex items-center text-nowrap gap-2 styleopacity:0;transform:translateY(20px);>p classtext-sm>2017 - 2019/p>div data-orientationhorizontal roleseparator classflex items-center align-center text-center w-full flex-row>!---->!---->div classborder-default w-full border-solid border-t>/div>!---->!---->!---->/div>!---->a hrefhttps://www.chinatelecom-h.com/en/global/home.php relnoopener noreferrer target_blank classfocus-visible:outline-primary text-muted hover:text-default transition-colors flex items-center gap-1>!---->!---->span classtext-sm>Java Software Developer/span>div classinline-flex items-center gap-1 stylecolor:#007396;>span classfont-medium>China Telecom Corporation Limited/span>span classiconify i-simple-icons:java aria-hiddentrue style>/span>/div>!---->!---->/a>!---->/div>!---->/div>!---->!---->!---->/div>/section>!---->!---->!---->/div>/section>/div>section classrelative isolate>div classw-full max-w-(--ui-container) mx-auto px-4 sm:px-6 lg:px-8 pt-0 pb-8 sm:pb-16 lg:pb-24>div classheader>!---->!---->/div>!---->h2 classtext-left text-xl sm:text-xl lg:text-2xl font-medium>Latest Articles/h2>p classtext-left mt-2 text-sm sm:text-md lg:text-sm text-muted>Some of my recent thoughts on software engineering, freelancing, and tech leadership./p>div classgap-4 lg:gap-y-8 mt-8 space-y-6>!---->div classgroup relative lg:items-start lg:flex ring-0 hover:ring-0 px-0>a href/blog/vision-pro-vs-rokid-max-pro classlg:flex lg:gap-2 flex-col>div classflex items-center gap-2>time classtext-sm text-toned>Jul 4, 2025/time>/div>div classflex-1 py-4 lg:p-0>h2 classtext-xl text-pretty font-semibold text-highlighted>AR at a Glance: Comparing Vision Pro and Rokid Max Pro/h2>p classtext-muted text-sm mb-4>As AR technology evolves, devices like Apple Vision Pro and Rokid Max Pro are drawing developer attention. Here are my brief insights from using and developing on both platforms./p>!---->!---->button typebutton classrounded-md font-medium inline-flex items-center disabled:cursor-not-allowed aria-disabled:cursor-not-allowed disabled:opacity-75 aria-disabled:opacity-75 transition-colors py-1 text-xs text-primary hover:text-primary/75 disabled:text-primary aria-disabled:text-primary focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary px-0 gap-0>!---->!---->!---->!---->!---->span classtruncate>Read Article/span>!---->!---->span classiconify i-lucide:arrow-right size-4 text-primary transition-all opacity-0 group-hover:translate-x-1 group-hover:opacity-100 aria-hiddentrue style>/span>!---->!---->/button>!---->!---->/div>/a>/div>div classgroup relative lg:items-start lg:flex ring-0 hover:ring-0 px-0>a href/blog/chance3d-meeting-minutes classlg:flex lg:gap-2 flex-col>div classflex items-center gap-2>time classtext-sm text-toned>Oct 19, 2023/time>/div>div classflex-1 py-4 lg:p-0>h2 classtext-xl text-pretty font-semibold text-highlighted>Joining a Multinational XR Meeting: Future of Metaverse Tech/h2>p classtext-muted text-sm mb-4>I joined a meeting with Guangdong Chance3D leaders discussing XR progress and plans, underscoring global interest in China’s XR market and the importance of international collaboration./p>!---->!---->button typebutton classrounded-md font-medium inline-flex items-center disabled:cursor-not-allowed aria-disabled:cursor-not-allowed disabled:opacity-75 aria-disabled:opacity-75 transition-colors py-1 text-xs text-primary hover:text-primary/75 disabled:text-primary aria-disabled:text-primary focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary px-0 gap-0>!---->!---->!---->!---->!---->span classtruncate>Read Article/span>!---->!---->span classiconify i-lucide:arrow-right size-4 text-primary transition-all opacity-0 group-hover:translate-x-1 group-hover:opacity-100 aria-hiddentrue style>/span>!---->!---->/button>!---->!---->/div>/a>/div>!---->/div>!---->!---->!---->/div>/section>section classrelative isolate>div classw-full max-w-(--ui-container) mx-auto px-4 sm:px-6 lg:px-8 !px-0 sm:!px-6 lg:!px-8 !pt-0 pb-24 sm:pb-24 lg:pb-24>div classheader>!---->!---->/div>!---->div roleregion aria-roledescriptioncarousel tabindex0 classrelative focus:outline-none>div classoverflow-hidden -mx-4 sm:-mx-12 lg:-mx-16 bg-elevated/50 max-w-(--ui-container)>div classflex items-start flex-row -ms-4>!---->div rolegroup aria-roledescriptionslide classmin-w-0 shrink-0 basis-full ps-4>!---->div classrelative isolate overflow-hidden rounded-none>div classflex flex-col lg:grid px-6 py-12 sm:px-18 lg:px-24 gap-8 sm:py-12 lg:py-24 sm:gap-8 w-full max-w-(--ui-container) mx-auto>!---->!---->!---->p classtext-base sm:text-lg text-center text-balance !text-base text-balance before:content-open-quote before:text-5xl lg:before:text-7xl before:inline-block before:text-dimmed before:absolute before:-ml-6 lg:before:-ml-10 before:-mt-2 lg:before:-mt-4 after:content-close-quote after:text-5xl lg:after:text-7xl after:inline-block after:text-dimmed after:absolute after:mt-1 lg:after:mt-0 after:ml-1 lg:after:ml-2>!---->Mr. Zhang brought exceptional technical expertise that helped us successfully expand into the XR sector. His contribution has injected new momentum into our development in virtual and augmented reality, making him a highly trusted technology partner.!---->/p>div classmt-6>!---->div classrelative group/user flex items-center justify-center flex-row gap-3 justify-center>!---->div classrounded-full object-cover flex-shrink-0 size-12 bg-primary-500 text-white>img src/testimonials/ChenHao.jpg altCheng Hao classrounded-full object-cover flex-shrink-0 size-12 bg-primary-500 text-white>/div>!---->div class>!---->div classfont-semibold text-gray-900 dark:text-white text-lg>!---->Cheng Hao!---->/div>div classtext-gray-500 dark:text-gray-400 text-sm>!---->Chairman of Chengshi Vision Co., Ltd!---->/div>!---->/div>/div>!---->/div>!---->/div>/div>!---->/div>div rolegroup aria-roledescriptionslide classmin-w-0 shrink-0 basis-full ps-4>!---->div classrelative isolate overflow-hidden rounded-none>div classflex flex-col lg:grid px-6 py-12 sm:px-18 lg:px-24 gap-8 sm:py-12 lg:py-24 sm:gap-8 w-full max-w-(--ui-container) mx-auto>!---->!---->!---->p classtext-base sm:text-lg text-center text-balance !text-base text-balance before:content-open-quote before:text-5xl lg:before:text-7xl before:inline-block before:text-dimmed before:absolute before:-ml-6 lg:before:-ml-10 before:-mt-2 lg:before:-mt-4 after:content-close-quote after:text-5xl lg:after:text-7xl after:inline-block after:text-dimmed after:absolute after:mt-1 lg:after:mt-0 after:ml-1 lg:after:ml-2>!---->We've had the pleasure of working with Oliver on several 8thWall-based AR projects, starting with a particularly tricky Android/WeChat bug he resolved with impressive speed and precision. His deep understanding of web-based XR and his ability to solve problems independently made him an invaluable part of our extended team. Oliver’s work is consistently clean, well-documented, and delivered on time — exactly what you hope for in a remote collaborator.!---->/p>div classmt-6>!---->div classrelative group/user flex items-center justify-center flex-row gap-3 justify-center>!---->div classrounded-full object-cover flex-shrink-0 size-12 bg-primary-500 text-white>img src/testimonials/Phil.png altPhil classrounded-full object-cover flex-shrink-0 size-12 bg-primary-500 text-white>/div>!---->div class>!---->div classfont-semibold text-gray-900 dark:text-white text-lg>!---->Phil!---->/div>div classtext-gray-500 dark:text-gray-400 text-sm>!---->Technical Director, Created by Catalyst!---->/div>!---->/div>/div>!---->/div>!---->/div>/div>!---->/div>div rolegroup aria-roledescriptionslide classmin-w-0 shrink-0 basis-full ps-4>!---->div classrelative isolate overflow-hidden rounded-none>div classflex flex-col lg:grid px-6 py-12 sm:px-18 lg:px-24 gap-8 sm:py-12 lg:py-24 sm:gap-8 w-full max-w-(--ui-container) mx-auto>!---->!---->!---->p classtext-base sm:text-lg text-center text-balance !text-base text-balance before:content-open-quote before:text-5xl lg:before:text-7xl before:inline-block before:text-dimmed before:absolute before:-ml-6 lg:before:-ml-10 before:-mt-2 lg:before:-mt-4 after:content-close-quote after:text-5xl lg:after:text-7xl after:inline-block after:text-dimmed after:absolute after:mt-1 lg:after:mt-0 after:ml-1 lg:after:ml-2>!---->Oliver joined our AR team through Phil’s recommendation and quickly proved to be one of the most reliable engineers we've worked with. His contributions to our recent high-profile project for Rolex exceeded both client expectations and user feedback benchmarks. Oliver brings not just technical skill, but clear communication, strong ownership, and a deep sense of craft. We look forward to many more collaborations with him.!---->/p>div classmt-6>!---->div classrelative group/user flex items-center justify-center flex-row gap-3 justify-center>!---->div classrounded-full object-cover flex-shrink-0 size-12 bg-primary-500 text-white>img src/testimonials/Gabriel.jpg altGabriel classrounded-full object-cover flex-shrink-0 size-12 bg-primary-500 text-white>/div>!---->div class>!---->div classfont-semibold text-gray-900 dark:text-white text-lg>!---->Gabriel!---->/div>div classtext-gray-500 dark:text-gray-400 text-sm>!---->Director, Created by Catalyst!---->/div>!---->/div>/div>!---->/div>!---->/div>/div>!---->/div>!---->/div>/div>div class>!---->div classabsolute inset-x-0 -bottom-7 flex flex-wrap items-center justify-center gap-3>!---->!---->/div>/div>/div>!---->!---->!---->/div>/section>section classrelative isolate>div classw-full max-w-(--ui-container) mx-auto px-4 sm:px-6 lg:px-8 pb-8 sm:pb-16 lg:pb-24 flex flex-col gap-4>div classheader>div classtext-pretty tracking-tight text-highlighted text-left text-xl sm:text-xl lg:text-2xl font-medium>Frequently Asked Questions/div>p classtext-balance text-left mt-2 text-sm sm:text-md lg:text-sm text-muted mt-2 mt-2>!---->Answers to common questions about my process and services.!---->/p>/div>!---->div dirltr data-orientationhorizontal classflex-col flex items-center gap-4 w-full>!---->div classp-1 group rounded-lg w-full relative flex bg-transparent dark:bg-transparent gap-2 px-0 tabindex-1 data-orientationhorizontal dirltr styleoutline:none; roletablist aria-orientationhorizontal>!---->!---->!---->!---->!---->button classgroup relative inline-flex items-center min-w-0 hover:data-stateinactive:not-disabled:text-default font-medium disabled:cursor-not-allowed disabled:opacity-75 transition-colors grow justify-center text-sm gap-1.5 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary px-3 py-2 rounded-lg hover:bg-muted/50 data-stateactive:text-highlighted data-stateinactive:text-muted data-reka-collection-item tabindex-1 data-orientationhorizontal data-active idreka-tabs-v-0-4-0-trigger-0 roletab typebutton aria-selectedtrue aria-controlsreka-tabs-v-0-4-0-content-0 data-stateactive>!---->!---->!---->!---->span classtruncate>!---->Services & Process!---->/span>!---->!---->!---->/button>button classgroup relative inline-flex items-center min-w-0 hover:data-stateinactive:not-disabled:text-default font-medium disabled:cursor-not-allowed disabled:opacity-75 transition-colors grow justify-center text-sm gap-1.5 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary px-3 py-2 rounded-lg hover:bg-muted/50 data-stateactive:text-highlighted data-stateinactive:text-muted data-reka-collection-item tabindex-1 data-orientationhorizontal idreka-tabs-v-0-4-0-trigger-1 roletab typebutton aria-selectedfalse aria-controlsreka-tabs-v-0-4-0-content-1 data-stateinactive>!---->!---->!---->!---->span classtruncate>!---->Pricing & Timelines!---->/span>!---->!---->!---->/button>button classgroup relative inline-flex items-center min-w-0 hover:data-stateinactive:not-disabled:text-default font-medium disabled:cursor-not-allowed disabled:opacity-75 transition-colors grow justify-center text-sm gap-1.5 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary px-3 py-2 rounded-lg hover:bg-muted/50 data-stateactive:text-highlighted data-stateinactive:text-muted data-reka-collection-item tabindex-1 data-orientationhorizontal idreka-tabs-v-0-4-0-trigger-2 roletab typebutton aria-selectedfalse aria-controlsreka-tabs-v-0-4-0-content-2 data-stateinactive>!---->!---->!---->!---->span classtruncate>!---->About Me!---->/span>!---->!---->!---->/button>!---->!---->!---->!---->/div>!---->div idreka-tabs-v-0-4-0-content-0 roletabpanel data-stateactive data-orientationhorizontal aria-labelledbyreka-tabs-v-0-4-0-trigger-0 tabindex0 styleanimation-duration:0s; classfocus:outline-none w-full>!---->!---->div class data-v-064670b3>!---->div classborder border-gray-200 dark:border-gray-700 rounded-lg border-none data-v-064670b3>button classw-full px-4 py-3 text-left flex items-center justify-between hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors text-base font-medium border-0 group px-4 transform-gpu rounded-lg bg-elevated/60 will-change-transform hover:bg-muted/50 data-v-064670b3>div classflex items-center gap-3 flex-1 text-warp data-v-064670b3>!---->!---->!---->span classtext-start break-words data-v-064670b3>What services do you offer?/span>/div>!---->span classiconify i-lucide:plus size-5 transition-transform duration-200 rotate-0 group-data-stateclosed:rotate-0 group-data-stateopen:rotate-45 aria-hiddentrue style data-v-064670b3>/span>!---->/button>div classpx-4 pb-4 text-base text-muted accordion-content accordion-closed data-v-064670b3>div classaccordion-inner data-v-064670b3>!---->I specialize in full-stack development with a front-end focus. My services include:- Single-page applications (Vue.js, Nuxt.js)- API development with Node.js- E-commerce front-ends- Admin dashboards- SaaS MVPs- Technical consulting and architecture design!---->/div>/div>/div>div classborder border-gray-200 dark:border-gray-700 rounded-lg border-none data-v-064670b3>button classw-full px-4 py-3 text-left flex items-center justify-between hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors text-base font-medium border-0 group px-4 transform-gpu rounded-lg bg-elevated/60 will-change-transform hover:bg-muted/50 data-v-064670b3>div classflex items-center gap-3 flex-1 text-warp data-v-064670b3>!---->!---->!---->span classtext-start break-words data-v-064670b3>What's your typical workflow?/span>/div>!---->span classiconify i-lucide:plus size-5 transition-transform duration-200 rotate-0 group-data-stateclosed:rotate-0 group-data-stateopen:rotate-45 aria-hiddentrue style data-v-064670b3>/span>!---->/button>div classpx-4 pb-4 text-base text-muted accordion-content accordion-closed data-v-064670b3>div classaccordion-inner data-v-064670b3>!---->My process is collaborative and goal-oriented. It usually includes:1. Initial discovery and requirement gathering2. Technical evaluation and roadmap3. Milestone-based development with regular updates4. Deployment and documentationI prioritize clean code, fast feedback loops, and scalable delivery.!---->/div>/div>/div>div classborder border-gray-200 dark:border-gray-700 rounded-lg border-none data-v-064670b3>button classw-full px-4 py-3 text-left flex items-center justify-between hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors text-base font-medium border-0 group px-4 transform-gpu rounded-lg bg-elevated/60 will-change-transform hover:bg-muted/50 data-v-064670b3>div classflex items-center gap-3 flex-1 text-warp data-v-064670b3>!---->!---->!---->span classtext-start break-words data-v-064670b3>Can you work with designers or existing teams?/span>/div>!---->span classiconify i-lucide:plus size-5 transition-transform duration-200 rotate-0 group-data-stateclosed:rotate-0 group-data-stateopen:rotate-45 aria-hiddentrue style data-v-064670b3>/span>!---->/button>div classpx-4 pb-4 text-base text-muted accordion-content accordion-closed data-v-064670b3>div classaccordion-inner data-v-064670b3>!---->Absolutely. I'm experienced in remote collaboration and can seamlessly integrate with designers, back-end developers, and product teams. I’ve worked across time zones and cultures to ship global products.!---->/div>/div>/div>div classborder border-gray-200 dark:border-gray-700 rounded-lg border-none data-v-064670b3>button classw-full px-4 py-3 text-left flex items-center justify-between hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors text-base font-medium border-0 group px-4 transform-gpu rounded-lg bg-elevated/60 will-change-transform hover:bg-muted/50 data-v-064670b3>div classflex items-center gap-3 flex-1 text-warp data-v-064670b3>!---->!---->!---->span classtext-start break-words data-v-064670b3>Do you offer long-term support?/span>/div>!---->span classiconify i-lucide:plus size-5 transition-transform duration-200 rotate-0 group-data-stateclosed:rotate-0 group-data-stateopen:rotate-45 aria-hiddentrue style data-v-064670b3>/span>!---->/button>div classpx-4 pb-4 text-base text-muted accordion-content accordion-closed data-v-064670b3>div classaccordion-inner data-v-064670b3>!---->Yes. I offer ongoing maintenance, feature development, and performance optimization. Retainer-based support is also available for clients who need consistent development time.!---->/div>/div>/div>!---->/div>!---->!---->/div>div idreka-tabs-v-0-4-0-content-1 roletabpanel data-stateinactive data-orientationhorizontal aria-labelledbyreka-tabs-v-0-4-0-trigger-1 hidden tabindex0 style classfocus:outline-none w-full>!---->/div>div idreka-tabs-v-0-4-0-content-2 roletabpanel data-stateinactive data-orientationhorizontal aria-labelledbyreka-tabs-v-0-4-0-trigger-2 hidden tabindex0 style classfocus:outline-none w-full>!---->/div>!---->!---->/div>!---->!---->!---->/div>/section>!---->/div>!---->/main>!---->footer classborder-t border-gray-200 dark:border-gray-800 bg-white dark:bg-gray-900 z-10 bg-default>div classmx-auto max-w-7xl>div classflex items-center justify-between py-4>div classflex items-center gap-3 text-xs>!---->Copyright © 2023 - 2025!---->/div>!---->div classflex items-center gap-3>!---->!---->!---->!---->a hrefhttps://www.linkedin.com/in/oliver3109/ relnoopener noreferrer target_blank aria-labelLinkedin classrounded-md font-medium inline-flex items-center disabled:cursor-not-allowed aria-disabled:cursor-not-allowed disabled:opacity-75 aria-disabled:opacity-75 transition-colors text-xs gap-1 text-default hover:bg-elevated focus:outline-none focus-visible:bg-elevated hover:disabled:bg-transparent dark:hover:disabled:bg-transparent hover:aria-disabled:bg-transparent dark:hover:aria-disabled:bg-transparent p-1>!---->!---->span classiconify i-simple-icons:invision shrink-0 size-4 aria-hiddentrue style>/span>!---->!---->!---->!---->!---->!---->!---->!---->/a>!---->!---->!---->!---->a hrefhttps://github.com/oliver3109 relnoopener noreferrer target_blank aria-labelGitHub classrounded-md font-medium inline-flex items-center disabled:cursor-not-allowed aria-disabled:cursor-not-allowed disabled:opacity-75 aria-disabled:opacity-75 transition-colors text-xs gap-1 text-default hover:bg-elevated focus:outline-none focus-visible:bg-elevated hover:disabled:bg-transparent dark:hover:disabled:bg-transparent hover:aria-disabled:bg-transparent dark:hover:aria-disabled:bg-transparent p-1>!---->!---->span classiconify i-simple-icons:github shrink-0 size-4 aria-hiddentrue style>/span>!---->!---->!---->!---->!---->!---->!---->!---->/a>!---->!---->!---->!---->a hrefhttps://openprocessing.org/user/324595?viewsketches relnoopener noreferrer target_blank aria-labelOpenProcessing classrounded-md font-medium inline-flex items-center disabled:cursor-not-allowed aria-disabled:cursor-not-allowed disabled:opacity-75 aria-disabled:opacity-75 transition-colors text-xs gap-1 text-default hover:bg-elevated focus:outline-none focus-visible:bg-elevated hover:disabled:bg-transparent dark:hover:disabled:bg-transparent hover:aria-disabled:bg-transparent dark:hover:aria-disabled:bg-transparent p-1>!---->!---->span classiconify i-simple-icons:processingfoundation shrink-0 size-4 aria-hiddentrue style>/span>!---->!---->!---->!---->!---->!---->!---->!---->/a>!---->!---->!---->!---->a hrefhttps://x.com/oliver3109 relnoopener noreferrer target_blank aria-labelX classrounded-md font-medium inline-flex items-center disabled:cursor-not-allowed aria-disabled:cursor-not-allowed disabled:opacity-75 aria-disabled:opacity-75 transition-colors text-xs gap-1 text-default hover:bg-elevated focus:outline-none focus-visible:bg-elevated hover:disabled:bg-transparent dark:hover:disabled:bg-transparent hover:aria-disabled:bg-transparent dark:hover:aria-disabled:bg-transparent p-1>!---->!---->span classiconify i-simple-icons:x shrink-0 size-4 aria-hiddentrue style>/span>!---->!---->!---->!---->!---->!---->!---->!---->/a>!---->!---->!---->!---->/div>!---->/div>/div>/footer>!---->/div>/div>!---->!---->!---->!---->!---->!---->!---->!---->!---->!---->/div>div idteleports>/div>script data-cfasyncfalse src/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js>/script>script typeapplication/json data-nuxt-datanuxt-app data-ssrtrue id__NUXT_DATA__ data-src/_payload.json?58a0de17-7148-47b8-8688-70c42b12c24b>{state:1,once:16,_errors:17,serverRendered:5,path:19,prerenderedAt:20},Reactive,2,{$scolor-mode:3,$stoasts:7,$ssite-config:8},{preference:4,value:4,unknown:5,forced:6},system,true,false,,{_priority:9,env:13,name:14,url:15},{name:10,env:11,url:12},-10,-15,-5,production,nuxt-app,https://189965b8.changchihyung.pages.dev,Set,ShallowReactive,18,{index:-1,index-blogs:-1},/,1756176390710/script>script>window.__NUXT__{};window.__NUXT__.config{public:{content:{wsUrl:},mdc:{components:{prose:true,map:{}},headings:{anchorLinks:{h1:false,h2:true,h3:true,h4:true,h5:false,h6:false}}},nuxt-scripts:{version:,defaultScriptOptions:{trigger:onNuxtReady}}},app:{baseURL:/,buildId:58a0de17-7148-47b8-8688-70c42b12c24b,buildAssetsDir:/_nuxt/,cdnURL:}}/script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]