diff --git a/about.html b/about.html index c820216..3d679d1 100644 --- a/about.html +++ b/about.html @@ -63,10 +63,10 @@ analytics_storage: 'denied', }); - - - - + + + + diff --git a/assets/about-L7Mz625S.js b/assets/about-sCSCFr40.js similarity index 92% rename from assets/about-L7Mz625S.js rename to assets/about-sCSCFr40.js index 9345d33..b2ac49f 100644 --- a/assets/about-L7Mz625S.js +++ b/assets/about-sCSCFr40.js @@ -1 +1 @@ -import{i as c,h as d,c as m,b as n,t,m as h}from"./template-ByEHfdYF.js";import{T as f,S as b}from"./title-D785si6n.js";const _="_header_1laim_1",y="_cv_1laim_6",w="_cvText_1laim_22",r={header:_,cv:y,cvText:w};var $=t("

Coming from interaction and service design background, I have been constantly challenging myself in blending technology into design process. Working as a freelance web designer and developer for over 7 years, I have gained expertise in modern web applications and services – from designing a platform-based service to actual implementation."),k=t("

Now as a Software Engineer, I take holistic approach from design research to technical implementation. I aim to take my role as a bridge between design and development throughout the process, by providing my own insights from technical point of view as well as building tangible prototypes for quick iterations – and sometimes, by delivering production-ready output."),C=t("C.V."),T=t("

");function x(){return(()=>{var o=T(),i=o.firstChild,u=i.firstChild,g=i.nextSibling,v=g.firstChild;return c(u,d(f,{title:"From user study to full-stack implementation",get headline(){return"As a software engineer, how can I utilise my unique background to bring research into real-life use cases?"}})),c(v,d(b,{get children(){return[$(),k(),(()=>{var a=C(),p=a.firstChild;return m(e=>{var s=r.cv,l=r.cvText;return s!==e.e&&n(a,e.e=s),l!==e.t&&n(p,e.t=l),e},{e:void 0,t:void 0}),a})()]}})),m(()=>n(i,r.header)),o})()}h({component:x,page:"about"}); +import{i as c,h as d,c as m,b as n,t,m as h}from"./template-DEwkplrf.js";import{T as f,S as b}from"./title-C9g8anI-.js";const _="_header_1laim_1",y="_cv_1laim_6",w="_cvText_1laim_22",r={header:_,cv:y,cvText:w};var $=t("

Coming from interaction and service design background, I have been constantly challenging myself in blending technology into design process. Working as a freelance web designer and developer for over 7 years, I have gained expertise in modern web applications and services – from designing a platform-based service to actual implementation."),k=t("

Now as a Software Engineer, I take holistic approach from design research to technical implementation. I aim to take my role as a bridge between design and development throughout the process, by providing my own insights from technical point of view as well as building tangible prototypes for quick iterations – and sometimes, by delivering production-ready output."),C=t("C.V."),T=t("

");function x(){return(()=>{var o=T(),i=o.firstChild,u=i.firstChild,g=i.nextSibling,v=g.firstChild;return c(u,d(f,{title:"From user study to full-stack implementation",get headline(){return"As a software engineer, how can I utilise my unique background to bring research into real-life use cases?"}})),c(v,d(b,{get children(){return[$(),k(),(()=>{var a=C(),p=a.firstChild;return m(e=>{var s=r.cv,l=r.cvText;return s!==e.e&&n(a,e.e=s),l!==e.t&&n(p,e.t=l),e},{e:void 0,t:void 0}),a})()]}})),m(()=>n(i,r.header)),o})()}h({component:x,page:"about"}); diff --git a/assets/azizi-life-ZO93ZK59.js b/assets/azizi-life-CLwpZnw_.js similarity index 98% rename from assets/azizi-life-ZO93ZK59.js rename to assets/azizi-life-CLwpZnw_.js index 58e66ce..cb3619a 100644 --- a/assets/azizi-life-ZO93ZK59.js +++ b/assets/azizi-life-CLwpZnw_.js @@ -1,4 +1,4 @@ -import{f as x,i as s,h as t,c as v,b as p,E as h,j as u,t as e,m as k}from"./template-ByEHfdYF.js";import{p as d,R as $,B as y,I as f,H as g}from"./project.module-CfcmTz4O.js";import{C as _}from"./cards-BzwuqlUe.js";import{P as w}from"./picture-DoVBIOq-.js";import{T as C,S as r}from"./title-D785si6n.js";import{u as j}from"./useInitProject-D_rdr1bV.js";import{B as L}from"./azizi_life_bg-CuiGyWks.js";const I="/assets/azizi-life-products-lg-DxOWPMkD.jpg",W="/assets/azizi-life-products-lg-p9vpGGYP.webp",A="/assets/azizi-life-products-md-DzRIwIiI.jpg",P="/assets/azizi-life-products-md-Bej4DTpo.webp",S="/assets/azizi-life-products-sm-BW-JYAjn.jpg",T="/assets/azizi-life-products-sm-D4i_ctWg.webp",D="/assets/azizi-life-products-xl-BsdKUEbU.jpg",B="/assets/azizi-life-products-xl-D2wJ_CLm.webp",X="/assets/azizi-life-products-xs-CmDLd4Tn.jpg",E="/assets/azizi-life-products-xs-CdOOXMyt.webp",M="/assets/azizi-life-products-B9SBbMKl.jpg",R="/assets/azizi-life-products-CHPKdpAZ.webp",O={xs:X,sm:S,md:A,lg:I,xl:D,default:M},q={xs:E,sm:T,md:P,lg:W,xl:B,default:R},H={jpg:O,webp:q},F="/assets/booking-example-lg-CtJcqzM4.jpg",K="/assets/booking-example-lg-CyffSIXL.webp",G="/assets/booking-example-md-lRRicJ5s.jpg",U="/assets/booking-example-md-Bt9B2Ma1.webp",J="/assets/booking-example-sm-C6qZcWSF.jpg",N="/assets/booking-example-sm-B8JROB2g.webp",Y="/assets/booking-example-xl-DwxLbfa4.jpg",Z="/assets/booking-example-xl-DSbwUI1J.webp",Q="/assets/booking-example-xs-CKj8wAL_.jpg",V="/assets/booking-example-xs-BLx-hX9T.webp",ee="/assets/booking-example-CsWK0Aw1.jpg",te="/assets/booking-example-DtotXJsl.webp",se={xs:Q,sm:J,md:G,lg:F,xl:Y,default:ee},oe={xs:V,sm:N,md:U,lg:K,xl:Z,default:te},ie={jpg:se,webp:oe},ae="/assets/product-images-lg-CXH9XHcQ.jpg",ne="/assets/product-images-lg-bK8qyxEt.webp",re="/assets/product-images-md-CQxJZril.jpg",le="/assets/product-images-md-CP-a7uyC.webp",ce="/assets/product-images-sm-CQy95n7-.jpg",de="/assets/product-images-sm-DtzI4l66.webp",me="/assets/product-images-xl-DeLHPI6q.jpg",pe="/assets/product-images-xl-Bd-kcwYO.webp",he="/assets/product-images-xs-QaeFlC-8.jpg",ue="/assets/product-images-xs--52alU1R.webp",ge="/assets/product-images-cDDNeIs9.jpg",fe="/assets/product-images-XkZ_k4Hx.webp",we={xs:he,sm:ce,md:re,lg:ae,xl:me,default:ge},be={xs:ue,sm:de,md:le,lg:ne,xl:pe,default:fe},ve={jpg:we,webp:be},ye="/assets/scaffolding-lg-B3ACXY1f.jpg",ze="/assets/scaffolding-lg-DCcudc-s.webp",xe="/assets/scaffolding-md-B9iT3poB.jpg",ke="/assets/scaffolding-md-U0BNL9Sl.webp",$e="/assets/scaffolding-sm-rXrFY5G2.jpg",_e="/assets/scaffolding-sm-CjxI0KSx.webp",Ce="/assets/scaffolding-xl-DDrBlf3r.jpg",je="/assets/scaffolding-xl-2T9rFPfc.webp",Le="/assets/scaffolding-xs-RVPUILZy.jpg",Ie="/assets/scaffolding-xs-Dm3Amfcl.webp",We="/assets/scaffolding-DHRm7LA6.jpg",Ae="/assets/scaffolding-BuPnfCwk.webp",Pe={xs:Le,sm:$e,md:xe,lg:ye,xl:Ce,default:We},Se={xs:Ie,sm:_e,md:ke,lg:ze,xl:je,default:Ae},Te={jpg:Pe,webp:Se},De="/assets/theme-customisation-lg-BscsKYOV.jpg",Be="/assets/theme-customisation-lg-D_-d9Cy0.webp",Xe="/assets/theme-customisation-md-DKTStYad.jpg",Ee="/assets/theme-customisation-md-pu402NGP.webp",Me="/assets/theme-customisation-sm-C0IrW6ud.jpg",Re="/assets/theme-customisation-sm-4mgzs7PQ.webp",Oe="/assets/theme-customisation-xl-Vo5WtZoa.jpg",qe="/assets/theme-customisation-xl-DhfefdLN.webp",He="/assets/theme-customisation-xs-CpBdSIoe.jpg",Fe="/assets/theme-customisation-xs-DZQxTKeW.webp",Ke="/assets/theme-customisation-DpRq4ttC.jpg",Ge="/assets/theme-customisation-CD2lMn8A.webp",Ue={xs:He,sm:Me,md:Xe,lg:De,xl:Oe,default:Ke},Je={xs:Fe,sm:Re,md:Ee,lg:Be,xl:qe,default:Ge},Ne={jpg:Ue,webp:Je},Ye="/assets/artisan-demo-BE9a9Spa.mp4",Ze="/assets/artisan-demo-C8vyGZ6V.webm",Qe="/assets/craft-experience-DYIwhO_h.mp4",Ve="/assets/craft-experience-Rx1yhRrq.webm";var et=e("
"),tt=e("

Introduction"),st=e("

Azizi Life is a non-profit organisation based in Muhanga, Rwanda, that supports local communities by providing various opportunities. They began with a business development programme in which they provided artisan cooperatives a channel to connect with international customers. Today, they are enlightening broader communities with more activities, ranging from to ."),ot=e("

I engaged with Azizi Life while I was serving for my military in Muhanga. We casually met and shared our activities in Rwanda and new opportunities we were trying to bring to the local community. Our sharing brought an idea of transforming their existing website into a proper e-commerce to target wider audience in the globe, and I happily volunteered to help them with it."),it=e("

Challenges"),at=e("

Azizi Life was mainly targeting U.S. customers through existing channels including their old website. Our main challenge was to identify what is possible through the new e-commerce and define our directions. Also, we needed to find a way to collaborate efficiently as the members were working from all over the world."),nt=e("

By the time we were discussing about this project for the first time in 2013, the practice of running an e-commerce was not as clear to everyone as today. Me and a business designer who was also supporting earlier phase of the planning thought Azizi Life might not be fully aware of the amount of effort they needed to put on running the platform, not only on making it. Thus, assuring their understanding was one of our core challenges."),rt=e("

Another major challenge was to find a way to setup our project so that all roles – visual design, web development and content design – could progress in parallel, without having to wait for others working in different time zones."),lt=e("

Approach"),ct=e("

Before we could kickstart our project, we needed to be clear in what Azizi Life wanted to achieve through the new platform. For this, me and the business designer suggested to go through several consulting sessions to help them understand what they were about to do."),dt=e("

Understanding e-commerce"),mt=e("

As mentioned above, running an e-commerce is far more complex than having a website. The business operations have to be re-aligned with the platform in mind, and Azizi Life would need to invest much more time and effort to keep the content up-to-date. The business designer advised them from marketing point of view, emphasising the importance of growing demand for new contents in social network driven world."),pt=e("

I expressed similar opinion from technical point of view and explained how search engines prioritise newly updated contents in search result. More importantly, I ensured them the necessity of technical training for updating contents, not only for saving their time but also for maintaining the quality of contents in terms of web user experience."),ht=e("

I also guided them through what features are available through e-commerce platforms, so they could plan their programmes accordingly. For example, they wanted to launch a new experience programme which would require a booking functionality, so I advised them to create a list of needed features for easier communication."),ut=e("

After going through several sessions, Azizi Life spent long months to plan their new activities and prepare contents for the new e-commerce website, hence a full pause of the project until 2015."),gt=e("

Technical setup"),ft=e("

I had to find a technical solution that is highly customisable as well as easy enough so everyone could collaborate simultaneously. After discussing with the visual designer, I decided to use a paid WordPress theme that had visual block editing feature and integration. The fact that he already had experiences with this theme was also a great advantage."),wt=e("

Rather than changing things by directly editing theme's PHP files, I used theme's customisation feature as much as possible so the visual designer could also tweak CSS directly by himself. This would reduce my development speed as I had to edit everything on web editor, but obviously the benefit of collaboration was superior. Thus, only necessary technical features were implemented via WordPress's child theme functionality."),bt=e("

Collaboration process"),vt=e("

To onboard the content team, me and the visual designer made several scaffolding pages with theme's editor so they could duplicate them and input only the texts."),yt=e("

This way, they could add their contents while we were working on design and technical features."),zt=e("

Several sessions were also organised to go through WooCommerce features. During the sessions, I provided basic training on adding products as well as aligned with the team for necessary features such as booking calendar for field activities."),xt=e("

Outcome"),kt=e("

After almost two years of design and development, the new e-commerce website was finally launched. Due to the geographical constraints and vast amount of content, post development process took longer time, but as the result, Azizi Life successfully integrated the web platform into their business."),$t=e("

Storytelling"),_t=e("

Besides all the e-commerce features, our primary focus was on storytelling. Every single product and activity offered by Azizi Life are directly associated to local artisans and cooperatives, and we wanted to find an effective way to introduce them and their backgrounds to the customers."),Ct=e("

As shown above, we came up with an idea to pin artisans to each product to give visual attention. By clicking on the element, visitors can quickly view summary and quotes from artisans without having to leave the page."),Lt=e("

Also, all the products are published with rich number of photos to give more visual context. Rather than showing only the products, many of them include photos of artisans or surroundings, so customers can naturally engage with the stories behind the craft and imagine lifestyles around them."),It=e("

Growth beyond e-commerce"),Wt=e("

The launch of the new website enabled Azizi Life to be more active in introducing new programmes. The collaboration setup during the development involved thorough training on WordPress and WooCommerce, and this also became part of maintenance hand over. All needed features such as time booking were pre-implemented so Azizi Life could update new activities or products by themselves in future."),At=e("

For example, they earlier offered only one Experience Day programme along with their products, which was meant for tourists visiting Rwanda. Now, such on-field activities have grown into a major business, and currently, they offer more than ten programmes through the website. In addition, they have launched a dedicated studio for workshops, which is also introduced and booked through the platform."),Pt=e("

Learnings"),St=e("

I am proud to have done this pro bono project with such a big scale with multiple stakeholders involved. It was by far my biggest web-related project, as it extended beyond the online platform and transformed an entire business. I was lucky to have Azizi Life as my client, who was ready for the challenge and passionate to push themselves further through the investment – which is quite unusual for many NGOs."),Tt=e("

An unusually long project"),Dt=e("

Azizi Life was very serious about transforming their business into a modern one, and they were putting lots of effort in polishing their content. Given large number of local partners, they had to take about a year to sort out future business directions as well as gather stories and footages for the new website."),Bt=e("

This period brought a major change in technical setup. During the initial planning phase in 2013, I was opting for as our back-end engine, as I had experiences with it and other MVC frameworks. However, as I was drafting the first version of the new Azizi Life website, I quickly learnt its limits:"),Xt=e("

1. Difficult maintenance. This is actually not true today, but earlier version of OpenCart did not have auto-update functionality, meaning that Azizi Life will have to hire a developer to keep the engine up-to-date."),Et=e("

2. High learning curve. Also related to the above, both development and using OpenCart itself required a good understanding of the framework. This directly affect maintenance as well, as it would be difficult for Azizi Life to find someone with the knowledge."),Mt=e("

Luckily, WooCommerce has grown rapidly during the pause period, and I could safely recommend the switch to WordPress + WooCommerce. To be fair, this combination also has high learning curve, but obviously it has incomparably larger community to support."),Rt=e("

This process gave me clearer idea on what factors I need to consider in choosing the right technology and importance of monitoring the trend. I applied these learnings in my other consulting works to help clients in choosing solutions."),Ot=e("

Supports beyond the web"),qt=e("

As me and Azizi Life shared our time together in Muhanga for over two years, we often shared our thoughts and experiences from our activities. During the project, I also had several opportunities to support them in other areas than the web."),Ht=e("

For example, I had a chance to be involved in one of their pilot activities. I once mentioned them that I wanted to learn to weave a basket, and they introduced me to an artisan to give me a workshop. This later became a regular activity introduced in their Experience Days programme."),Kt=e("

This gave me much clearer idea on what Azizi Life was trying to achieve through their new e-commerce platform and what related features are needed. I learnt that just like a service design project, such activities or workshops could be organised in research phase for an e-commerce project."),Gt=e("

"),Ut=e("

Planning an e-commerce is far more complex than planning a website. Especially for Azizi Life, launching an e-commerce also meant bringing new activities and programmes. We needed to align website features with their upcoming plans as well as allow them to add new offers later by themselves."),Jt=e("

Azizi Life not only had a vast number of products from their main business, but also tons of stories to share from their communities. Most of the articles needed to be republished as we were introducing a fresh concept. The local team was already gathering stories and preparing new photographs, but they needed longer time to polish them."),Nt=e("

When the project begun, my service in Rwanda has already ended, and I was back in South Korea. Also, the visual designer was located in U.S., so we all had to work from different continent. Every role in other parts of the world was surely a big challenge – we could barely find a meeting time when we were all awake!");function Yt(){const z=l=>{j("azizi-life",l)};return[(()=>{var l=et(),o=l.firstChild,i=o.firstChild,n=o.nextSibling;return x(z,o),s(o,t(w,{alt:"Azizi Life",get class(){return d.bg},srcset:L}),i),s(n,t(C,{title:"Azizi Life – extending fair trade business through e-commerce",headline:"To help spreading the goodwill by utilising the power of online platform"}),null),s(n,t($,{agency:"N/A – Freelance pro bono project",client:"Azizi Life",clientLink:"https://azizilife.com/",overview:` +import{f as x,i as s,h as t,c as v,b as p,E as h,j as u,t as e,m as k}from"./template-DEwkplrf.js";import{p as d,R as $,B as y,I as f,H as g}from"./project.module-EyBcDRJv.js";import{C as _}from"./cards-DXqYv8UG.js";import{P as w}from"./picture-DZcGR_Rp.js";import{T as C,S as r}from"./title-C9g8anI-.js";import{u as j}from"./useInitProject-BYcbynEk.js";import{B as L}from"./azizi_life_bg-CuiGyWks.js";const I="/assets/azizi-life-products-lg-DxOWPMkD.jpg",W="/assets/azizi-life-products-lg-p9vpGGYP.webp",A="/assets/azizi-life-products-md-DzRIwIiI.jpg",P="/assets/azizi-life-products-md-Bej4DTpo.webp",S="/assets/azizi-life-products-sm-BW-JYAjn.jpg",T="/assets/azizi-life-products-sm-D4i_ctWg.webp",D="/assets/azizi-life-products-xl-BsdKUEbU.jpg",B="/assets/azizi-life-products-xl-D2wJ_CLm.webp",X="/assets/azizi-life-products-xs-CmDLd4Tn.jpg",E="/assets/azizi-life-products-xs-CdOOXMyt.webp",M="/assets/azizi-life-products-B9SBbMKl.jpg",R="/assets/azizi-life-products-CHPKdpAZ.webp",O={xs:X,sm:S,md:A,lg:I,xl:D,default:M},q={xs:E,sm:T,md:P,lg:W,xl:B,default:R},H={jpg:O,webp:q},F="/assets/booking-example-lg-CtJcqzM4.jpg",K="/assets/booking-example-lg-CyffSIXL.webp",G="/assets/booking-example-md-lRRicJ5s.jpg",U="/assets/booking-example-md-Bt9B2Ma1.webp",J="/assets/booking-example-sm-C6qZcWSF.jpg",N="/assets/booking-example-sm-B8JROB2g.webp",Y="/assets/booking-example-xl-DwxLbfa4.jpg",Z="/assets/booking-example-xl-DSbwUI1J.webp",Q="/assets/booking-example-xs-CKj8wAL_.jpg",V="/assets/booking-example-xs-BLx-hX9T.webp",ee="/assets/booking-example-CsWK0Aw1.jpg",te="/assets/booking-example-DtotXJsl.webp",se={xs:Q,sm:J,md:G,lg:F,xl:Y,default:ee},oe={xs:V,sm:N,md:U,lg:K,xl:Z,default:te},ie={jpg:se,webp:oe},ae="/assets/product-images-lg-CXH9XHcQ.jpg",ne="/assets/product-images-lg-bK8qyxEt.webp",re="/assets/product-images-md-CQxJZril.jpg",le="/assets/product-images-md-CP-a7uyC.webp",ce="/assets/product-images-sm-CQy95n7-.jpg",de="/assets/product-images-sm-DtzI4l66.webp",me="/assets/product-images-xl-DeLHPI6q.jpg",pe="/assets/product-images-xl-Bd-kcwYO.webp",he="/assets/product-images-xs-QaeFlC-8.jpg",ue="/assets/product-images-xs--52alU1R.webp",ge="/assets/product-images-cDDNeIs9.jpg",fe="/assets/product-images-XkZ_k4Hx.webp",we={xs:he,sm:ce,md:re,lg:ae,xl:me,default:ge},be={xs:ue,sm:de,md:le,lg:ne,xl:pe,default:fe},ve={jpg:we,webp:be},ye="/assets/scaffolding-lg-B3ACXY1f.jpg",ze="/assets/scaffolding-lg-DCcudc-s.webp",xe="/assets/scaffolding-md-B9iT3poB.jpg",ke="/assets/scaffolding-md-U0BNL9Sl.webp",$e="/assets/scaffolding-sm-rXrFY5G2.jpg",_e="/assets/scaffolding-sm-CjxI0KSx.webp",Ce="/assets/scaffolding-xl-DDrBlf3r.jpg",je="/assets/scaffolding-xl-2T9rFPfc.webp",Le="/assets/scaffolding-xs-RVPUILZy.jpg",Ie="/assets/scaffolding-xs-Dm3Amfcl.webp",We="/assets/scaffolding-DHRm7LA6.jpg",Ae="/assets/scaffolding-BuPnfCwk.webp",Pe={xs:Le,sm:$e,md:xe,lg:ye,xl:Ce,default:We},Se={xs:Ie,sm:_e,md:ke,lg:ze,xl:je,default:Ae},Te={jpg:Pe,webp:Se},De="/assets/theme-customisation-lg-BscsKYOV.jpg",Be="/assets/theme-customisation-lg-D_-d9Cy0.webp",Xe="/assets/theme-customisation-md-DKTStYad.jpg",Ee="/assets/theme-customisation-md-pu402NGP.webp",Me="/assets/theme-customisation-sm-C0IrW6ud.jpg",Re="/assets/theme-customisation-sm-4mgzs7PQ.webp",Oe="/assets/theme-customisation-xl-Vo5WtZoa.jpg",qe="/assets/theme-customisation-xl-DhfefdLN.webp",He="/assets/theme-customisation-xs-CpBdSIoe.jpg",Fe="/assets/theme-customisation-xs-DZQxTKeW.webp",Ke="/assets/theme-customisation-DpRq4ttC.jpg",Ge="/assets/theme-customisation-CD2lMn8A.webp",Ue={xs:He,sm:Me,md:Xe,lg:De,xl:Oe,default:Ke},Je={xs:Fe,sm:Re,md:Ee,lg:Be,xl:qe,default:Ge},Ne={jpg:Ue,webp:Je},Ye="/assets/artisan-demo-BE9a9Spa.mp4",Ze="/assets/artisan-demo-C8vyGZ6V.webm",Qe="/assets/craft-experience-DYIwhO_h.mp4",Ve="/assets/craft-experience-Rx1yhRrq.webm";var et=e("

"),tt=e("

Introduction"),st=e("

Azizi Life is a non-profit organisation based in Muhanga, Rwanda, that supports local communities by providing various opportunities. They began with a business development programme in which they provided artisan cooperatives a channel to connect with international customers. Today, they are enlightening broader communities with more activities, ranging from to ."),ot=e("

I engaged with Azizi Life while I was serving for my military in Muhanga. We casually met and shared our activities in Rwanda and new opportunities we were trying to bring to the local community. Our sharing brought an idea of transforming their existing website into a proper e-commerce to target wider audience in the globe, and I happily volunteered to help them with it."),it=e("

Challenges"),at=e("

Azizi Life was mainly targeting U.S. customers through existing channels including their old website. Our main challenge was to identify what is possible through the new e-commerce and define our directions. Also, we needed to find a way to collaborate efficiently as the members were working from all over the world."),nt=e("

By the time we were discussing about this project for the first time in 2013, the practice of running an e-commerce was not as clear to everyone as today. Me and a business designer who was also supporting earlier phase of the planning thought Azizi Life might not be fully aware of the amount of effort they needed to put on running the platform, not only on making it. Thus, assuring their understanding was one of our core challenges."),rt=e("

Another major challenge was to find a way to setup our project so that all roles – visual design, web development and content design – could progress in parallel, without having to wait for others working in different time zones."),lt=e("

Approach"),ct=e("

Before we could kickstart our project, we needed to be clear in what Azizi Life wanted to achieve through the new platform. For this, me and the business designer suggested to go through several consulting sessions to help them understand what they were about to do."),dt=e("

Understanding e-commerce"),mt=e("

As mentioned above, running an e-commerce is far more complex than having a website. The business operations have to be re-aligned with the platform in mind, and Azizi Life would need to invest much more time and effort to keep the content up-to-date. The business designer advised them from marketing point of view, emphasising the importance of growing demand for new contents in social network driven world."),pt=e("

I expressed similar opinion from technical point of view and explained how search engines prioritise newly updated contents in search result. More importantly, I ensured them the necessity of technical training for updating contents, not only for saving their time but also for maintaining the quality of contents in terms of web user experience."),ht=e("

I also guided them through what features are available through e-commerce platforms, so they could plan their programmes accordingly. For example, they wanted to launch a new experience programme which would require a booking functionality, so I advised them to create a list of needed features for easier communication."),ut=e("

After going through several sessions, Azizi Life spent long months to plan their new activities and prepare contents for the new e-commerce website, hence a full pause of the project until 2015."),gt=e("

Technical setup"),ft=e("

I had to find a technical solution that is highly customisable as well as easy enough so everyone could collaborate simultaneously. After discussing with the visual designer, I decided to use a paid WordPress theme that had visual block editing feature and integration. The fact that he already had experiences with this theme was also a great advantage."),wt=e("

Rather than changing things by directly editing theme's PHP files, I used theme's customisation feature as much as possible so the visual designer could also tweak CSS directly by himself. This would reduce my development speed as I had to edit everything on web editor, but obviously the benefit of collaboration was superior. Thus, only necessary technical features were implemented via WordPress's child theme functionality."),bt=e("

Collaboration process"),vt=e("

To onboard the content team, me and the visual designer made several scaffolding pages with theme's editor so they could duplicate them and input only the texts."),yt=e("

This way, they could add their contents while we were working on design and technical features."),zt=e("

Several sessions were also organised to go through WooCommerce features. During the sessions, I provided basic training on adding products as well as aligned with the team for necessary features such as booking calendar for field activities."),xt=e("

Outcome"),kt=e("

After almost two years of design and development, the new e-commerce website was finally launched. Due to the geographical constraints and vast amount of content, post development process took longer time, but as the result, Azizi Life successfully integrated the web platform into their business."),$t=e("

Storytelling"),_t=e("

Besides all the e-commerce features, our primary focus was on storytelling. Every single product and activity offered by Azizi Life are directly associated to local artisans and cooperatives, and we wanted to find an effective way to introduce them and their backgrounds to the customers."),Ct=e("

As shown above, we came up with an idea to pin artisans to each product to give visual attention. By clicking on the element, visitors can quickly view summary and quotes from artisans without having to leave the page."),Lt=e("

Also, all the products are published with rich number of photos to give more visual context. Rather than showing only the products, many of them include photos of artisans or surroundings, so customers can naturally engage with the stories behind the craft and imagine lifestyles around them."),It=e("

Growth beyond e-commerce"),Wt=e("

The launch of the new website enabled Azizi Life to be more active in introducing new programmes. The collaboration setup during the development involved thorough training on WordPress and WooCommerce, and this also became part of maintenance hand over. All needed features such as time booking were pre-implemented so Azizi Life could update new activities or products by themselves in future."),At=e("

For example, they earlier offered only one Experience Day programme along with their products, which was meant for tourists visiting Rwanda. Now, such on-field activities have grown into a major business, and currently, they offer more than ten programmes through the website. In addition, they have launched a dedicated studio for workshops, which is also introduced and booked through the platform."),Pt=e("

Learnings"),St=e("

I am proud to have done this pro bono project with such a big scale with multiple stakeholders involved. It was by far my biggest web-related project, as it extended beyond the online platform and transformed an entire business. I was lucky to have Azizi Life as my client, who was ready for the challenge and passionate to push themselves further through the investment – which is quite unusual for many NGOs."),Tt=e("

An unusually long project"),Dt=e("

Azizi Life was very serious about transforming their business into a modern one, and they were putting lots of effort in polishing their content. Given large number of local partners, they had to take about a year to sort out future business directions as well as gather stories and footages for the new website."),Bt=e("

This period brought a major change in technical setup. During the initial planning phase in 2013, I was opting for as our back-end engine, as I had experiences with it and other MVC frameworks. However, as I was drafting the first version of the new Azizi Life website, I quickly learnt its limits:"),Xt=e("

1. Difficult maintenance. This is actually not true today, but earlier version of OpenCart did not have auto-update functionality, meaning that Azizi Life will have to hire a developer to keep the engine up-to-date."),Et=e("

2. High learning curve. Also related to the above, both development and using OpenCart itself required a good understanding of the framework. This directly affect maintenance as well, as it would be difficult for Azizi Life to find someone with the knowledge."),Mt=e("

Luckily, WooCommerce has grown rapidly during the pause period, and I could safely recommend the switch to WordPress + WooCommerce. To be fair, this combination also has high learning curve, but obviously it has incomparably larger community to support."),Rt=e("

This process gave me clearer idea on what factors I need to consider in choosing the right technology and importance of monitoring the trend. I applied these learnings in my other consulting works to help clients in choosing solutions."),Ot=e("

Supports beyond the web"),qt=e("

As me and Azizi Life shared our time together in Muhanga for over two years, we often shared our thoughts and experiences from our activities. During the project, I also had several opportunities to support them in other areas than the web."),Ht=e("

For example, I had a chance to be involved in one of their pilot activities. I once mentioned them that I wanted to learn to weave a basket, and they introduced me to an artisan to give me a workshop. This later became a regular activity introduced in their Experience Days programme."),Kt=e("

This gave me much clearer idea on what Azizi Life was trying to achieve through their new e-commerce platform and what related features are needed. I learnt that just like a service design project, such activities or workshops could be organised in research phase for an e-commerce project."),Gt=e("

"),Ut=e("

Planning an e-commerce is far more complex than planning a website. Especially for Azizi Life, launching an e-commerce also meant bringing new activities and programmes. We needed to align website features with their upcoming plans as well as allow them to add new offers later by themselves."),Jt=e("

Azizi Life not only had a vast number of products from their main business, but also tons of stories to share from their communities. Most of the articles needed to be republished as we were introducing a fresh concept. The local team was already gathering stories and preparing new photographs, but they needed longer time to polish them."),Nt=e("

When the project begun, my service in Rwanda has already ended, and I was back in South Korea. Also, the visual designer was located in U.S., so we all had to work from different continent. Every role in other parts of the world was surely a big challenge – we could barely find a meeting time when we were all awake!");function Yt(){const z=l=>{j("azizi-life",l)};return[(()=>{var l=et(),o=l.firstChild,i=o.firstChild,n=o.nextSibling;return x(z,o),s(o,t(w,{alt:"Azizi Life",get class(){return d.bg},srcset:L}),i),s(n,t(C,{title:"Azizi Life – extending fair trade business through e-commerce",headline:"To help spreading the goodwill by utilising the power of online platform"}),null),s(n,t($,{agency:"N/A – Freelance pro bono project",client:"Azizi Life",clientLink:"https://azizilife.com/",overview:` I suggested the client to extend their capabilities by focusing more on their web platform. I advised and helped them on integrating their business with e-commerce, and I collaborated diff --git a/assets/cards-BzwuqlUe.js b/assets/cards-DXqYv8UG.js similarity index 93% rename from assets/cards-BzwuqlUe.js rename to assets/cards-DXqYv8UG.js index b045be9..d16191a 100644 --- a/assets/cards-BzwuqlUe.js +++ b/assets/cards-DXqYv8UG.js @@ -1 +1 @@ -import{i as c,g as _,c as u,j as v,h as g,b as o,a as $,t as m,F as x}from"./template-ByEHfdYF.js";import{P as C}from"./picture-DoVBIOq-.js";const j="_card_u2oe8_1",w="_image_u2oe8_16",P="_title_u2oe8_21",n={card:j,image:w,title:P,"col-2":"_col-2_u2oe8_26","col-3":"_col-3_u2oe8_33"};var b=m("

"),E=m("
"),F=m("");function N(t){if(t.image&&!t.alt)throw new Error("You must provide alt text for the image.");return(()=>{var e=b(),r=e.firstChild;return c(e,(()=>{var a=_(()=>!!t.image);return()=>a()&&(()=>{var l=E();return c(l,(()=>{var i=_(()=>typeof t.image=="string");return()=>i()?(()=>{var f=F();return u(s=>{var h=t.image,d=t.alt;return h!==s.e&&v(f,"src",s.e=h),d!==s.t&&v(f,"alt",s.t=d),s},{e:void 0,t:void 0}),f})():g(C,{get alt(){return t.alt},get srcset(){return t.image}})})()),u(()=>o(l,n.image)),l})()})(),r),c(r,()=>t.title),c(e,()=>t.children,null),u(a=>{var l=$(n.card,n[`col-${t.col}`]),i=n.title;return l!==a.e&&o(e,a.e=l),i!==a.t&&o(r,a.t=i),a},{e:void 0,t:void 0}),e})()}const y="_cards_10whc_1",A={cards:y};var M=m("
");function k(t){const e=["project__section","col-12"];return t.class&&e.push(t.class),t.name&&e.push(`${t.name}__section`),t.noPadding&&e.push("section--no-padding"),t.col===2?(e.push("col-sm-10"),e.push("offset-sm-1"),e.push("col-md-12"),e.push("offset-md-0"),e.push("col-lg-10"),e.push("offset-lg-1"),e.push("col-xl-8"),e.push("offset-xl-2")):t.col===3&&(e.push("col-sm-10"),e.push("offset-sm-1"),e.push("col-md-8"),e.push("offset-md-2"),e.push("col-lg-12"),e.push("offset-lg-0"),e.push("col-xl-10"),e.push("offset-xl-1")),(()=>{var r=M();return c(r,g(x,{get each(){return t.cards},children:a=>g(N,{get alt(){return a.alt},get col(){return t.col},get image(){return a.image},get title(){return a.title},get children(){return a.children}})})),u(()=>o(r,$(e.join(" "),A.cards))),r})()}export{k as C}; +import{i as c,g as _,c as u,j as v,h as g,b as o,a as $,t as m,F as x}from"./template-DEwkplrf.js";import{P as C}from"./picture-DZcGR_Rp.js";const j="_card_u2oe8_1",w="_image_u2oe8_16",P="_title_u2oe8_21",n={card:j,image:w,title:P,"col-2":"_col-2_u2oe8_26","col-3":"_col-3_u2oe8_33"};var b=m("

"),E=m("
"),F=m("");function N(t){if(t.image&&!t.alt)throw new Error("You must provide alt text for the image.");return(()=>{var e=b(),r=e.firstChild;return c(e,(()=>{var a=_(()=>!!t.image);return()=>a()&&(()=>{var l=E();return c(l,(()=>{var i=_(()=>typeof t.image=="string");return()=>i()?(()=>{var f=F();return u(s=>{var h=t.image,d=t.alt;return h!==s.e&&v(f,"src",s.e=h),d!==s.t&&v(f,"alt",s.t=d),s},{e:void 0,t:void 0}),f})():g(C,{get alt(){return t.alt},get srcset(){return t.image}})})()),u(()=>o(l,n.image)),l})()})(),r),c(r,()=>t.title),c(e,()=>t.children,null),u(a=>{var l=$(n.card,n[`col-${t.col}`]),i=n.title;return l!==a.e&&o(e,a.e=l),i!==a.t&&o(r,a.t=i),a},{e:void 0,t:void 0}),e})()}const y="_cards_10whc_1",A={cards:y};var M=m("
");function k(t){const e=["project__section","col-12"];return t.class&&e.push(t.class),t.name&&e.push(`${t.name}__section`),t.noPadding&&e.push("section--no-padding"),t.col===2?(e.push("col-sm-10"),e.push("offset-sm-1"),e.push("col-md-12"),e.push("offset-md-0"),e.push("col-lg-10"),e.push("offset-lg-1"),e.push("col-xl-8"),e.push("offset-xl-2")):t.col===3&&(e.push("col-sm-10"),e.push("offset-sm-1"),e.push("col-md-8"),e.push("offset-md-2"),e.push("col-lg-12"),e.push("offset-lg-0"),e.push("col-xl-10"),e.push("offset-xl-1")),(()=>{var r=M();return c(r,g(x,{get each(){return t.cards},children:a=>g(N,{get alt(){return a.alt},get col(){return t.col},get image(){return a.image},get title(){return a.title},get children(){return a.children}})})),u(()=>o(r,$(e.join(" "),A.cards))),r})()}export{k as C}; diff --git a/assets/gallery-DIUdS5aK.js b/assets/gallery-aZizFZOU.js similarity index 90% rename from assets/gallery-DIUdS5aK.js rename to assets/gallery-aZizFZOU.js index 86974ed..ae76cda 100644 --- a/assets/gallery-DIUdS5aK.js +++ b/assets/gallery-aZizFZOU.js @@ -1 +1 @@ -import{i as s,h as l,c as n,b as c,F as i,a as _,t as m}from"./template-ByEHfdYF.js";import{P as f}from"./picture-DoVBIOq-.js";const g="_gallery_ra65t_1",d="_item_ra65t_12",o={gallery:g,item:d};var u=m("
"),y=m("
");function x(e){return(()=>{var t=u();return s(t,l(i,{get each(){return e.images},children:a=>(()=>{var r=y();return s(r,l(f,{get alt(){return a.alt},get srcset(){return a.srcset}})),n(()=>c(r,o.item)),r})()})),n(()=>c(t,_(o.gallery,e.name&&`${e.name}__section`,e.class,{"section--no-padding":e.noPadding},"project__section col-12 col-sm-10 offset-sm-1 col-md-12 offset-md-0 col-xl-10 offset-xl-1"))),t})()}export{x as G}; +import{i as s,h as l,c as n,b as c,F as i,a as _,t as m}from"./template-DEwkplrf.js";import{P as f}from"./picture-DZcGR_Rp.js";const g="_gallery_ra65t_1",d="_item_ra65t_12",o={gallery:g,item:d};var u=m("
"),y=m("
");function x(e){return(()=>{var t=u();return s(t,l(i,{get each(){return e.images},children:a=>(()=>{var r=y();return s(r,l(f,{get alt(){return a.alt},get srcset(){return a.srcset}})),n(()=>c(r,o.item)),r})()})),n(()=>c(t,_(o.gallery,e.name&&`${e.name}__section`,e.class,{"section--no-padding":e.noPadding},"project__section col-12 col-sm-10 offset-sm-1 col-md-12 offset-md-0 col-xl-10 offset-xl-1"))),t})()}export{x as G}; diff --git a/assets/home-CDy1SLXk.js b/assets/home-D9i2vWBb.js similarity index 98% rename from assets/home-CDy1SLXk.js rename to assets/home-D9i2vWBb.js index 830e0fd..f688b00 100644 --- a/assets/home-CDy1SLXk.js +++ b/assets/home-D9i2vWBb.js @@ -1 +1 @@ -import{c as A,a as c,b as s,s as M,t as L,u as Q,d as D,e as G,f as H,i as m,g as Y,h as o,j as X,o as Z,k as p,l as ee,m as te}from"./template-ByEHfdYF.js";import{S as ie,R as ne,s as oe,D as re,C as le,P as V,T as se,a as ae,b as ce}from"./visual_intelligence.module-BTfy8Y1F.js";import{P as j}from"./picture-DoVBIOq-.js";import{B as ve}from"./azizi_life_bg-CuiGyWks.js";import{B as de}from"./mobility_study_bg-I28_J20f.js";import{B as fe}from"./synaesthesify-bg-LwQASnIi.js";import{B as ue}from"./typing_practice_bg-Cez8mW-L.js";const he="_container_1scc3_1",me="_border_1scc3_15",ye="_top_1scc3_20",_e="_bottom_1scc3_21",ge="_left_1scc3_55",be="_right_1scc3_56",g={container:he,border:me,top:ye,bottom:_e,left:ge,right:be};var Se=L("
");function xe(e){return(()=>{var i=Se(),l=i.firstChild,y=l.nextSibling,f=y.nextSibling,S=f.nextSibling;return A(n=>{var x=g.container,a=c(g.border,g.top),d=e.style.y,_=c(g.border,g.right),w=e.style.x,k=c(g.border,g.left),u=e.style.x,h=c(g.border,g.bottom),t=e.style.y;return x!==n.e&&s(i,n.e=x),a!==n.t&&s(l,n.t=a),n.a=M(l,d,n.a),_!==n.o&&s(y,n.o=_),n.i=M(y,w,n.i),k!==n.n&&s(f,n.n=k),n.s=M(f,u,n.s),h!==n.h&&s(S,n.h=h),n.r=M(S,t,n.r),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0}),i})()}const ke="_hero_1tomh_1",Ce="_background_1tomh_8",we="_cover_1tomh_15",Re="_coverElement_1tomh_20",$e="_overlay_1tomh_27",Te="_content_1tomh_36",ze="_subtitle_1tomh_43",Ie="_link_1tomh_48",Pe="_linkText_1tomh_65",Be="_seoOnly_1tomh_70",v={hero:ke,background:Ce,cover:we,coverElement:Re,overlay:$e,content:Te,subtitle:ze,link:Ie,linkText:Pe,seoOnly:Be};var Ee=L('

Learn moreabout '),Ae=L("
");function B(e){let i;const l=Q(ie),{height:y}=Q(ne),[f,S]=D(0),[n,x]=D(y()*.25),[a,d]=D(1),[_,w]=D({}),k=u=>{i=u,e.forwardRef&&e.forwardRef(u)};return G(Z(l,()=>{S(i.getBoundingClientRect().top)})),G(()=>{x(y()*.25)}),G(()=>{f()<0&&-f()=0?d(1):d(0)}),G(()=>{w({x:{transform:`scale3d(${a()}, 1, 1)`},y:{transform:`scale3d(1, ${a()}, 1)`}})}),(()=>{var u=Ee(),h=u.firstChild,t=h.firstChild,z=h.nextSibling,O=z.firstChild,I=O.firstChild,R=I.nextSibling,$=R.nextSibling,q=$.firstChild,N=q.nextSibling;return N.firstChild,H(k,u),m(t,()=>e.children),m(h,(()=>{var r=Y(()=>!!e.overlay);return()=>r()&&(()=>{var C=Ae();return A(b=>{var P=v.overlay,T=1-a();return P!==b.e&&s(C,b.e=P),T!==b.t&&((b.t=T)!=null?C.style.setProperty("opacity",T):C.style.removeProperty("opacity")),b},{e:void 0,t:void 0}),C})()})(),null),m(h,o(xe,{get style(){return _()}}),null),m(I,()=>e.title),m(R,()=>e.subtitle),m(N,()=>e.title,null),A(r=>{var C=c(e.class,v.hero,"col-nested"),b=v.background,P=v.cover,T=c(v.content,"container-fluid"),F=c(v.subtitle,"font--subtitle"),U=e.linkTo,W=v.link,J=v.linkText,K=v.seoOnly;return C!==r.e&&s(u,r.e=C),b!==r.t&&s(h,r.t=b),P!==r.a&&s(t,r.a=P),T!==r.o&&s(z,r.o=T),F!==r.i&&s(R,r.i=F),U!==r.n&&X($,"href",r.n=U),W!==r.s&&s($,r.s=W),J!==r.h&&s(q,r.h=J),K!==r.r&&s(N,r.r=K),r},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0}),u})()}function Le(e){return o(j,{alt:"Azizi Life",get class(){return c(e.class,v.coverElement)},srcset:ve,ref(i){var l=e.ref;typeof l=="function"?l(i):e.ref=i}})}function Oe(e){return o(j,{alt:"Volkswagen Future of Mobility",get class(){return c(e.class,v.coverElement)},srcset:de,ref(i){var l=e.ref;typeof l=="function"?l(i):e.ref=i}})}var Me=L("Synaesthesify");function De(e){return(()=>{var i=Me(),l=e.ref;return typeof l=="function"?H(l,i):e.ref=i,X(i,"src",fe),A(()=>s(i,c(e.class,v.coverElement))),i})()}function Ge(e){return o(j,{alt:"Nyaruka Typing Practice Software",get class(){return c(e.class,v.coverElement)},srcset:ue,ref(i){var l=e.ref;typeof l=="function"?l(i):e.ref=i}})}function Ne(e){return o(se,{get class(){return c(oe.canvas,e.class,v.coverElement)},get viRef(){return e.parentContainer},get children(){return o(re,{get children(){return[o(le,{}),o(V,{pointSetIndex:0}),o(V,{pointSetIndex:1}),o(V,{pointSetIndex:2})]}})}})}const Ve="_container_s3vi3_1",He="_intro_s3vi3_5",je="_name_s3vi3_12",qe="_position_s3vi3_13",Fe="_headline_s3vi3_14",E={container:Ve,intro:He,name:je,position:qe,headline:Fe};var Ue=L("

Da-Woon Chung

Software Engineer at DeepMind

I deliver unique design perspectives by combining user- and tech-driven insights. I also leverage my skills to evolve them into tangible output.");function We(){let e,i,l,y,f,S;const n=()=>[e,i,l,y,f,S],x=new IntersectionObserver(a=>{for(const{isIntersecting:d,target:_}of a)d?document.body.classList.add(_.classList[0]):document.body.classList.remove(_.classList[0])},{rootMargin:"0px 0px -100% 0px"});return p(()=>{document.body.classList.add("home");for(const a of n())x.observe(a)}),ee(()=>{x.disconnect(),document.body.className=""}),o(ce,{get children(){return o(ae,{get children(){var a=Ue(),d=a.firstChild,_=d.firstChild,w=_.firstChild,k=w.nextSibling,u=k.nextSibling,h=e;return typeof h=="function"?H(h,d):e=d,m(a,o(B,{class:"visual-intelligence",title:"Visual Intelligence",subtitle:"Utilising complex data through visualisation",linkTo:"/work/visual-intelligence",forwardRef:t=>{i=t},get children(){return o(Ne,{parentContainer:i})}}),null),m(a,o(B,{class:"typing-practice",title:"Nyaruka!",subtitle:"Speeding up typing in Rwanda",overlay:!0,linkTo:"/work/typing-practice",forwardRef:t=>{l=t},get children(){return o(Ge,{})}}),null),m(a,o(B,{class:"mobility-study",title:"Volkswagen Mobility Study",subtitle:"A visual exploration with qualitative data",overlay:!0,linkTo:"/work/mobility-study",forwardRef:t=>{y=t},get children(){return o(Oe,{})}}),null),m(a,o(B,{class:"azizi-life",title:"Azizi Life",subtitle:"A pro bono project for a fair trade firm in Rwanda",overlay:!0,linkTo:"/work/azizi-life",forwardRef:t=>{f=t},get children(){return o(Le,{})}}),null),m(a,o(B,{class:"synaesthesify",title:"Synaesthesify",subtitle:"A visual synthesiser with Spotify API",overlay:!0,linkTo:"/work/synaesthesify",forwardRef:t=>{S=t},get children(){return o(De,{})}}),null),A(t=>{var z=c(E.container,"container-fluid"),O=c("intro",E.intro,"col-12","col-md-10","col-xl-8","offset-md-1","offset-xl-2"),I=c(E.name,"font--title"),R=c(E.position),$=c(E.headline);return z!==t.e&&s(a,t.e=z),O!==t.t&&s(d,t.t=O),I!==t.a&&s(w,t.a=I),R!==t.o&&s(k,t.o=R),$!==t.i&&s(u,t.i=$),t},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),a}})}})}te({component:We,page:"work"}); +import{c as A,a as c,b as s,s as M,t as L,u as Q,d as D,e as G,f as H,i as m,g as Y,h as o,j as X,o as Z,k as p,l as ee,m as te}from"./template-DEwkplrf.js";import{S as ie,R as ne,s as oe,D as re,C as le,P as V,T as se,a as ae,b as ce}from"./visual_intelligence.module-D117g8v2.js";import{P as j}from"./picture-DZcGR_Rp.js";import{B as ve}from"./azizi_life_bg-CuiGyWks.js";import{B as de}from"./mobility_study_bg-I28_J20f.js";import{B as fe}from"./synaesthesify-bg-LwQASnIi.js";import{B as ue}from"./typing_practice_bg-Cez8mW-L.js";const he="_container_1scc3_1",me="_border_1scc3_15",ye="_top_1scc3_20",_e="_bottom_1scc3_21",ge="_left_1scc3_55",be="_right_1scc3_56",g={container:he,border:me,top:ye,bottom:_e,left:ge,right:be};var Se=L("
");function xe(e){return(()=>{var i=Se(),l=i.firstChild,y=l.nextSibling,f=y.nextSibling,S=f.nextSibling;return A(n=>{var x=g.container,a=c(g.border,g.top),d=e.style.y,_=c(g.border,g.right),w=e.style.x,k=c(g.border,g.left),u=e.style.x,h=c(g.border,g.bottom),t=e.style.y;return x!==n.e&&s(i,n.e=x),a!==n.t&&s(l,n.t=a),n.a=M(l,d,n.a),_!==n.o&&s(y,n.o=_),n.i=M(y,w,n.i),k!==n.n&&s(f,n.n=k),n.s=M(f,u,n.s),h!==n.h&&s(S,n.h=h),n.r=M(S,t,n.r),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0}),i})()}const ke="_hero_1tomh_1",Ce="_background_1tomh_8",we="_cover_1tomh_15",Re="_coverElement_1tomh_20",$e="_overlay_1tomh_27",Te="_content_1tomh_36",ze="_subtitle_1tomh_43",Ie="_link_1tomh_48",Pe="_linkText_1tomh_65",Be="_seoOnly_1tomh_70",v={hero:ke,background:Ce,cover:we,coverElement:Re,overlay:$e,content:Te,subtitle:ze,link:Ie,linkText:Pe,seoOnly:Be};var Ee=L('

Learn moreabout '),Ae=L("
");function B(e){let i;const l=Q(ie),{height:y}=Q(ne),[f,S]=D(0),[n,x]=D(y()*.25),[a,d]=D(1),[_,w]=D({}),k=u=>{i=u,e.forwardRef&&e.forwardRef(u)};return G(Z(l,()=>{S(i.getBoundingClientRect().top)})),G(()=>{x(y()*.25)}),G(()=>{f()<0&&-f()=0?d(1):d(0)}),G(()=>{w({x:{transform:`scale3d(${a()}, 1, 1)`},y:{transform:`scale3d(1, ${a()}, 1)`}})}),(()=>{var u=Ee(),h=u.firstChild,t=h.firstChild,z=h.nextSibling,O=z.firstChild,I=O.firstChild,R=I.nextSibling,$=R.nextSibling,q=$.firstChild,N=q.nextSibling;return N.firstChild,H(k,u),m(t,()=>e.children),m(h,(()=>{var r=Y(()=>!!e.overlay);return()=>r()&&(()=>{var C=Ae();return A(b=>{var P=v.overlay,T=1-a();return P!==b.e&&s(C,b.e=P),T!==b.t&&((b.t=T)!=null?C.style.setProperty("opacity",T):C.style.removeProperty("opacity")),b},{e:void 0,t:void 0}),C})()})(),null),m(h,o(xe,{get style(){return _()}}),null),m(I,()=>e.title),m(R,()=>e.subtitle),m(N,()=>e.title,null),A(r=>{var C=c(e.class,v.hero,"col-nested"),b=v.background,P=v.cover,T=c(v.content,"container-fluid"),F=c(v.subtitle,"font--subtitle"),U=e.linkTo,W=v.link,J=v.linkText,K=v.seoOnly;return C!==r.e&&s(u,r.e=C),b!==r.t&&s(h,r.t=b),P!==r.a&&s(t,r.a=P),T!==r.o&&s(z,r.o=T),F!==r.i&&s(R,r.i=F),U!==r.n&&X($,"href",r.n=U),W!==r.s&&s($,r.s=W),J!==r.h&&s(q,r.h=J),K!==r.r&&s(N,r.r=K),r},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0}),u})()}function Le(e){return o(j,{alt:"Azizi Life",get class(){return c(e.class,v.coverElement)},srcset:ve,ref(i){var l=e.ref;typeof l=="function"?l(i):e.ref=i}})}function Oe(e){return o(j,{alt:"Volkswagen Future of Mobility",get class(){return c(e.class,v.coverElement)},srcset:de,ref(i){var l=e.ref;typeof l=="function"?l(i):e.ref=i}})}var Me=L("Synaesthesify");function De(e){return(()=>{var i=Me(),l=e.ref;return typeof l=="function"?H(l,i):e.ref=i,X(i,"src",fe),A(()=>s(i,c(e.class,v.coverElement))),i})()}function Ge(e){return o(j,{alt:"Nyaruka Typing Practice Software",get class(){return c(e.class,v.coverElement)},srcset:ue,ref(i){var l=e.ref;typeof l=="function"?l(i):e.ref=i}})}function Ne(e){return o(se,{get class(){return c(oe.canvas,e.class,v.coverElement)},get viRef(){return e.parentContainer},get children(){return o(re,{get children(){return[o(le,{}),o(V,{pointSetIndex:0}),o(V,{pointSetIndex:1}),o(V,{pointSetIndex:2})]}})}})}const Ve="_container_s3vi3_1",He="_intro_s3vi3_5",je="_name_s3vi3_12",qe="_position_s3vi3_13",Fe="_headline_s3vi3_14",E={container:Ve,intro:He,name:je,position:qe,headline:Fe};var Ue=L("

Da-Woon Chung

Software Engineer at DeepMind

I deliver unique design perspectives by combining user- and tech-driven insights. I also leverage my skills to evolve them into tangible output.");function We(){let e,i,l,y,f,S;const n=()=>[e,i,l,y,f,S],x=new IntersectionObserver(a=>{for(const{isIntersecting:d,target:_}of a)d?document.body.classList.add(_.classList[0]):document.body.classList.remove(_.classList[0])},{rootMargin:"0px 0px -100% 0px"});return p(()=>{document.body.classList.add("home");for(const a of n())x.observe(a)}),ee(()=>{x.disconnect(),document.body.className=""}),o(ce,{get children(){return o(ae,{get children(){var a=Ue(),d=a.firstChild,_=d.firstChild,w=_.firstChild,k=w.nextSibling,u=k.nextSibling,h=e;return typeof h=="function"?H(h,d):e=d,m(a,o(B,{class:"visual-intelligence",title:"Visual Intelligence",subtitle:"Utilising complex data through visualisation",linkTo:"/work/visual-intelligence",forwardRef:t=>{i=t},get children(){return o(Ne,{parentContainer:i})}}),null),m(a,o(B,{class:"typing-practice",title:"Nyaruka!",subtitle:"Speeding up typing in Rwanda",overlay:!0,linkTo:"/work/typing-practice",forwardRef:t=>{l=t},get children(){return o(Ge,{})}}),null),m(a,o(B,{class:"mobility-study",title:"Volkswagen Mobility Study",subtitle:"A visual exploration with qualitative data",overlay:!0,linkTo:"/work/mobility-study",forwardRef:t=>{y=t},get children(){return o(Oe,{})}}),null),m(a,o(B,{class:"azizi-life",title:"Azizi Life",subtitle:"A pro bono project for a fair trade firm in Rwanda",overlay:!0,linkTo:"/work/azizi-life",forwardRef:t=>{f=t},get children(){return o(Le,{})}}),null),m(a,o(B,{class:"synaesthesify",title:"Synaesthesify",subtitle:"A visual synthesiser with Spotify API",overlay:!0,linkTo:"/work/synaesthesify",forwardRef:t=>{S=t},get children(){return o(De,{})}}),null),A(t=>{var z=c(E.container,"container-fluid"),O=c("intro",E.intro,"col-12","col-md-10","col-xl-8","offset-md-1","offset-xl-2"),I=c(E.name,"font--title"),R=c(E.position),$=c(E.headline);return z!==t.e&&s(a,t.e=z),O!==t.t&&s(d,t.t=O),I!==t.a&&s(w,t.a=I),R!==t.o&&s(k,t.o=R),$!==t.i&&s(u,t.i=$),t},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),a}})}})}te({component:We,page:"work"}); diff --git a/assets/mobility-study-X8uYVsyF.js b/assets/mobility-study-DIM3s4QW.js similarity index 98% rename from assets/mobility-study-X8uYVsyF.js rename to assets/mobility-study-DIM3s4QW.js index e007d90..f88948b 100644 --- a/assets/mobility-study-X8uYVsyF.js +++ b/assets/mobility-study-DIM3s4QW.js @@ -1,4 +1,4 @@ -import{f as x,i as s,h as a,c as v,b as m,E as y,j as d,t as e,m as j}from"./template-ByEHfdYF.js";import{p,R as $,B as u,I as c,H as h}from"./project.module-CfcmTz4O.js";import{C as _}from"./cards-BzwuqlUe.js";import{P as D}from"./picture-DoVBIOq-.js";import{T as I,S as l}from"./title-D785si6n.js";import{u as W}from"./useInitProject-D_rdr1bV.js";import{B as S}from"./mobility_study_bg-I28_J20f.js";const C="/assets/amount-of-data-lg-YQ2PInG0.jpg",B="/assets/amount-of-data-lg-r79osC-P.webp",T="/assets/amount-of-data-md-CkLJlHp2.jpg",L="/assets/amount-of-data-md-DqYc037D.webp",X="/assets/amount-of-data-sm-LivS5PFs.jpg",M="/assets/amount-of-data-sm-jlKeXtK1.webp",O="/assets/amount-of-data-xl-DlYss6kM.jpg",P="/assets/amount-of-data-xl-B8FrxW_d.webp",q="/assets/amount-of-data-xs-IVOAaW8h.jpg",V="/assets/amount-of-data-xs-D6tqADdH.webp",A="/assets/amount-of-data-DK0TSrbQ.jpg",z="/assets/amount-of-data-D_fvZkma.webp",N={xs:q,sm:X,md:T,lg:C,xl:O,default:A},F={xs:V,sm:M,md:L,lg:B,xl:P,default:z},H={jpg:N,webp:F},J="/assets/concept-sketch-lg-CpiPvLol.jpg",E="/assets/concept-sketch-lg-DUtKCjcc.webp",U="/assets/concept-sketch-md-DLGrJaYx.jpg",Q="/assets/concept-sketch-md-Bil7YEnh.webp",G="/assets/concept-sketch-sm-BMXO0i70.jpg",R="/assets/concept-sketch-sm-C3KErfwm.webp",Y="/assets/concept-sketch-xl-BU6o400b.jpg",K="/assets/concept-sketch-xl-DbWDeO5n.webp",Z="/assets/concept-sketch-xs-BBBPUcpT.jpg",ee="/assets/concept-sketch-xs-xuTNLseg.webp",te="/assets/concept-sketch-DRJIvW1I.jpg",se="/assets/concept-sketch-CmKqbHEd.webp",ae={xs:Z,sm:G,md:U,lg:J,xl:Y,default:te},ne={xs:ee,sm:R,md:Q,lg:E,xl:K,default:se},oe={jpg:ae,webp:ne},ie="/assets/definition-of-viz-lg-C0yhKaoX.jpg",le="/assets/definition-of-viz-lg-BQDbQS4M.webp",re="/assets/definition-of-viz-md-vbjrzQoj.jpg",de="/assets/definition-of-viz-md-DevuEnFP.webp",pe="/assets/definition-of-viz-sm-DPMVFnWn.jpg",ce="/assets/definition-of-viz-sm-CUugQ-Ob.webp",he="/assets/definition-of-viz-xl-B0JeTARV.jpg",me="/assets/definition-of-viz-xl-DEpmi9eJ.webp",ue="/assets/definition-of-viz-xs-ZX9kcYB-.jpg",ge="/assets/definition-of-viz-xs-Du5IV3MC.webp",fe="/assets/definition-of-viz-dC32fJaX.jpg",we="/assets/definition-of-viz-BpaeorTQ.webp",be={xs:ue,sm:pe,md:re,lg:ie,xl:he,default:fe},ve={xs:ge,sm:ce,md:de,lg:le,xl:me,default:we},ye={jpg:be,webp:ve},ke="/assets/feeding-data-lg-VSuI8ZEd.jpg",xe="/assets/feeding-data-lg-Diz8Bk3j.webp",je="/assets/feeding-data-md-f2DVJJ2x.jpg",$e="/assets/feeding-data-md-9o3ahHoB.webp",_e="/assets/feeding-data-sm-CbiTnN3B.jpg",De="/assets/feeding-data-sm-Dq_XiAZc.webp",Ie="/assets/feeding-data-xl-CgM2mYXj.jpg",We="/assets/feeding-data-xl-DcWiEmIu.webp",Se="/assets/feeding-data-xs-I4SPQCFX.jpg",Ce="/assets/feeding-data-xs-Bj5HrvU9.webp",Be="/assets/feeding-data-CBoX5c3N.jpg",Te="/assets/feeding-data-B3GN26sI.webp",Le={xs:Se,sm:_e,md:je,lg:ke,xl:Ie,default:Be},Xe={xs:Ce,sm:De,md:$e,lg:xe,xl:We,default:Te},Me={jpg:Le,webp:Xe},Oe="/assets/final-presentation-lg-CsC3ZvwB.jpg",Pe="/assets/final-presentation-lg-CAeUcq50.webp",qe="/assets/final-presentation-md-BLOrpEMg.jpg",Ve="/assets/final-presentation-md-Cne_HU_c.webp",Ae="/assets/final-presentation-sm-9ZrUD6qc.jpg",ze="/assets/final-presentation-sm-DkN-y4rQ.webp",Ne="/assets/final-presentation-xl-Hsj4u1xB.jpg",Fe="/assets/final-presentation-xl-DtRswIUM.webp",He="/assets/final-presentation-xs-BFfjzbYN.jpg",Je="/assets/final-presentation-xs-BTFZZQUv.webp",Ee="/assets/final-presentation-DKGBHe11.jpg",Ue="/assets/final-presentation-BBT590KF.webp",Qe={xs:He,sm:Ae,md:qe,lg:Oe,xl:Ne,default:Ee},Ge={xs:Je,sm:ze,md:Ve,lg:Pe,xl:Fe,default:Ue},Re={jpg:Qe,webp:Ge},Ye="/assets/post-its-lg-DZl4ViCe.jpg",Ke="/assets/post-its-lg-COnHHvB1.webp",Ze="/assets/post-its-md-DAh8h-LD.jpg",et="/assets/post-its-md-s2aRQIIo.webp",tt="/assets/post-its-sm-Qprc4aE4.jpg",st="/assets/post-its-sm-92Juvk9f.webp",at="/assets/post-its-xl-CJeu4s5m.jpg",nt="/assets/post-its-xl-Duv6LrcA.webp",ot="/assets/post-its-xs-C350kfoH.jpg",it="/assets/post-its-xs-DdrSsuHu.webp",lt="/assets/post-its-CElNyUxY.jpg",rt="/assets/post-its-Byq0pUui.webp",dt={xs:ot,sm:tt,md:Ze,lg:Ye,xl:at,default:lt},pt={xs:it,sm:st,md:et,lg:Ke,xl:nt,default:rt},ct={jpg:dt,webp:pt},ht="/assets/spreadsheet-lg-BD5atB2C.jpg",mt="/assets/spreadsheet-lg-UahYuVhN.webp",ut="/assets/spreadsheet-md-oTEdxdpT.jpg",gt="/assets/spreadsheet-md-C3VobxnC.webp",ft="/assets/spreadsheet-sm-BHiIOre0.jpg",wt="/assets/spreadsheet-sm-DyrdvgCS.webp",bt="/assets/spreadsheet-xl-DjyNgFkv.jpg",vt="/assets/spreadsheet-xl-CAyz21vq.webp",yt="/assets/spreadsheet-xs-DvC5PIdK.jpg",kt="/assets/spreadsheet-xs-rNnGVJNM.webp",xt="/assets/spreadsheet--lMe48MH.jpg",jt="/assets/spreadsheet-BpcnnGUA.webp",$t={xs:yt,sm:ft,md:ut,lg:ht,xl:bt,default:xt},_t={xs:kt,sm:wt,md:gt,lg:mt,xl:vt,default:jt},Dt={jpg:$t,webp:_t},It="/assets/we-need-logic-lg-DHMHQ0-e.jpg",Wt="/assets/we-need-logic-lg-C6qG2YBD.webp",St="/assets/we-need-logic-md-BaTBYi-J.jpg",Ct="/assets/we-need-logic-md-BDNUr3Wn.webp",Bt="/assets/we-need-logic-sm-XJF_zVAt.jpg",Tt="/assets/we-need-logic-sm-C92CAtJ1.webp",Lt="/assets/we-need-logic-xl-CHwYJ_eD.jpg",Xt="/assets/we-need-logic-xl-G_Kd5Jpl.webp",Mt="/assets/we-need-logic-xs-BIBgMlWF.jpg",Ot="/assets/we-need-logic-xs-sWBtDRKW.webp",Pt="/assets/we-need-logic-Bz2xw325.jpg",qt="/assets/we-need-logic-D_pn_jwf.webp",Vt={xs:Mt,sm:Bt,md:St,lg:It,xl:Lt,default:Pt},At={xs:Ot,sm:Tt,md:Ct,lg:Wt,xl:Xt,default:qt},zt={jpg:Vt,webp:At},Nt="/assets/animation-demo-C9QrLBel.mp4",Ft="/assets/animation-demo-BmsWG9_Z.webm",Ht="/assets/theme-shape-f3zgbF_8.mp4",Jt="/assets/theme-shape-BaiPb26d.webm",Et="/assets/tool-demo-C66tEYeI.mp4",Ut="/assets/tool-demo-C1Xo5xup.webm";var Qt=e("
"),Gt=e("

Introduction"),Rt=e("

Mobility is perhaps one of the most rapidly evolving industry with changes driven by latest technologies, new services and cultural shift of transportation."),Yt=e("

To further understand the latest trends, a mixed team from Fjord, Accenture and Volkswagen has done a series of global research from both market and human points of view, from which merged view analysis was also derived."),Kt=e("

While the result was successfully compiled into a book, the team was not fully satisfied with the format due to the vast amount of information. Thus, the team challenged themselves to make the research more accessible."),Zt=e("

Challenges"),es=e("

When the team reached me out for the first time, the above was obviously my first response. I was not fully convinced with the term data visualisation they used, so I had to make sure we were speaking the same language. We started our discussion by asking below questions to align our requirements."),ts=e("

Approach"),ss=e("

Once above questions were derived, we went through them one by one to align ourselves. This process helped us greatly to kickstart our collaboration."),as=e("

Interactive and navigable data visualisation"),ns=e("

The main benefit of a digital application is in its interactivity to enable users to navigate through relevant information. Unlike quantitative data, our research data could not be displayed in numbers, so it was crucial to sort it by relevance to maximise accessibility."),os=e("

Thus, we defined our data visualisation as an interactive visual representation that allows users to easily navigate through the data. Furthermore, it should encourage users to learn new information by intuitively showing related data."),is=e("

Keywords- and sentence-based parameters"),ls=e("

In order to build our logics for the visualisation, keywords were suggested as the parameter. The team was already well-aware of the necessity and were ready for extracting those. Indeed, such process is already common in design research analysis."),rs=e("

To save their time, I suggested them to use natural words or sentences as keywords rather than spending time to come up with a single word. This allowed them to use, for example, representative user quotes selected from affinity diagrams as parameters."),ds=e("

Making use of online spreadsheet"),ps=e("

The team was already collaborating with an online spreadsheet, which could be exported into xlsx format. I had a quick discussion with another back-end developer to check if it can be directly imported by writing a server-side script and confirmed it possible with ."),cs=e("

As the result, we agreed to onboard another back-end developer to program xlsx importing script to save our time and effort in filling in the data, and the team was able to continue working with their spreadsheet."),hs=e("

To best avoid the risk of structural and logical changes to the data, I carefully prioritised my tasks to give the team as much time as possible to digest their research."),ms=e("

Process"),us=e("

After spending some time to align ourselves, it was time to bring the concept into life. I took the lead developer role and onboarded a back-end developer to support me with processing xlsx data while I develop the main application."),gs=e("

Data-driven visual design"),fs=e("

The collaboration with designers was very unique and interesting as many elements were generated from data. I mostly worked together with a visual designer to build our logics for visual elements, just as shown in below animation."),g=e("

As our concept continued to develop, we needed to design new logics to match our desired visuals, so I also joined ideation sessions to share my knowledge and design together."),bs=e("

Technical setup"),vs=e("

In order to make a highly interactive data visualisation, I needed to find out the best options to generate and animate interactive elements."),ys=e("

During my research, I learnt SVG works very efficiently with CSS animations, and more importantly, React library could handle generating SVG nodes through JSX. Using React would enable me to implement more seamless interactions and animations by making it as a single-page application."),ks=e("

Our data was fairly small, although complex, but I nevertheless decided to save our data into a database rather than hard-coding into JavaScript as JSON. This was mainly to save development time by working with a back-end developer in parallel."),xs=e("

Coping with the uncertainty"),js=e("

In spite of our effort, we could not avoid critical changes in data structure. I tried my best to prioritise works that had less dependencies on data, but as the core logics changed, there was no other option but to restart from scratch."),$s=e("

To make things worse, a manager from Volkswagen requested not to use GPL licensed software. We were using MongoDB for storing our data, and all of sudden we were forced to seek for an alternative."),_s=e("

Fortunate for us, these two issues came up at the same time, so we could deal with them simultaneously. While I was re-working on front-end with visual designer, back-end developer worked on with structuring PostgreSQL database and new data importing scripts."),Ds=e("

Outcome"),Is=e("

After a month delay due to changes in structure, we were finally able to deliver the final application. Also, based on the internal tool we made, was also designed and developed within a short period."),Ws=e("

Controlling SVG"),Ss=e("

As a technical note, I preferred to use CSS transforms rather than inline SVG transformations to fully utilise CSS animations. It significantly saved my development time, but with one downside of not being able export the generated visual into an SVG file. I later wrote a dedicated script with inline styles to share generated assets for designers to use in their documentation."),Cs=e("

I utilised Redux state management to animate SVG, combined with React Router. This combination allowed sharing the desired visualisation through URLs, just like any other website."),Bs=e("

Real-time coding"),Ts=e("

The public website development followed immediately after the visualisation project, with a very tight timeline. Although we already had all assets ready, me and visual designer had to progress very quickly to meet the deadline. Thus, we decided to design and develop in parallel, sitting next to each other."),Ls=e("

For example, the visual designer would suggest visual and interaction ideas like the one above, and once I confirm it, I would develop it quickly to grasp the look and feel. As it was a simple static website, this method worked very well to utilise both of our skills quickly."),Xs=e("

Delivery"),Ms=e("

As there was no other developer from Volkswagen involved in the project, I had to think about how to deliver our application via a non-developer with minimum instructions. The team also did not know about their internal platforms for hosting applications, so I had to think of a universal method."),Os=e("

As the result, we agreed to package the application with Docker. This greatly simplified configuration process of PostgreSQL and Node server – not only for them but also for ourselves to share our outcome internally."),Ps=e("

Learnings"),qs=e("

This was one of the most difficult development projects I have had so far, with challenges coming from various aspects – from coding itself to corporate setup. This process gave me valuable lessons, with some remaining open questions."),Vs=e("

Modes of collaboration"),As=e("

Collaboration process with designers was the core challenge, as the application concept was continuously evolving in parallel with development. I had to quickly figure out which parts could be done independently or had to be done together with designers, just as mentioned earlier."),zs=e("

Especially during the public website production, there was absolutely no time for me to wait for the design confirmation. I and the visual designer agreed to sit together and design and develop at the same time. I literally implemented the design in real-time and this actually worked out great."),Ns=e("

Obviously, this was possible as the design direction was already defined from internal prototype, however, such mode of collaboration would be very useful in many situations in which quick – but fully working – prototypes are needed."),Fs=e("

Double check client's requirements"),Hs=e("

We were lucky (and unlucky) to have two game-over situations happening exactly at the same time, saving us from restarting for another round. While changes in data structure might have been extremely difficult to predict, the license issue could have been definitely avoided."),Js=e("

I learnt that use of open source solutions needs to be discussed thoroughly as a part of technical requirements upon planning. As the use of freely available dependencies are almost non-avoidable in modern web development, developers including me often neglect the importance of licenses associated with them. I took this experience to add such factor into my pre-development checklist for my next projects."),Es=e("

How to best avoid structural changes in data?"),Us=e("

As a Creative Technologist, I often face situations in which prototypes are urgently needed but ideas are not finalised. This always comes with risks of losing all my work due to the last-minute changes. This is usually manageable as they don't always require complex data structure."),Qs=e("

However, in this project, such change was critical and in spite of my effort, I could not avoid starting all over again. As a non-expert in data architecture, it was very difficult for me to predict every scenario and make my code expandable enough to cope with such situations."),Gs=e("

Later, I shared my experience with other developers and Creative Technologists, but we all agreed that in such project setup, the risk cannot be completely removed, and thus it remains an open challenge for all of us."),Rs=e("

"),Ys=e("

What exactly do we want to produce? Are we sure we are not talking about another infographic and not trying to make things unnecessarily complicated? Since the term visualisation is so broad, we needed to understand what it means in our context, and what we were trying to achieve by making it."),Ks=e("

In order to generate a visualisation, it is obvious that we need to have a logic behind it. How are we going to parameterise qualitative research data? The team already had a good understanding of the requirement, so our discussion was more about in what format we are going to parameterise the data."),Zs=e("

Qualitative data usually requires more complex input than numbers. Also, the team was in the process of iterating their research, so I needed to come up with a solution in which the team can directly input the data while I develop the application. This also meant potential risks of changes in data structure.");function ea(){const k=r=>{W("mobility-study",r)};return[(()=>{var r=Qt(),t=r.firstChild,n=t.firstChild,i=t.nextSibling;return x(k,t),s(t,a(D,{alt:"The Future of Mobility",get class(){return p.bg},srcset:S}),n),s(i,a(I,{title:"The Future of Mobility",headline:"A development diary on an interactive web visualisation with qualitative data"}),null),s(i,a($,{agency:"Fjord",agencyLink:"https://fjordnet.com/",client:"Volkswagen",clientLink:"https://www.volkswagen.de/",overview:` +import{f as x,i as s,h as a,c as v,b as m,E as y,j as d,t as e,m as j}from"./template-DEwkplrf.js";import{p,R as $,B as u,I as c,H as h}from"./project.module-EyBcDRJv.js";import{C as _}from"./cards-DXqYv8UG.js";import{P as D}from"./picture-DZcGR_Rp.js";import{T as I,S as l}from"./title-C9g8anI-.js";import{u as W}from"./useInitProject-BYcbynEk.js";import{B as S}from"./mobility_study_bg-I28_J20f.js";const C="/assets/amount-of-data-lg-YQ2PInG0.jpg",B="/assets/amount-of-data-lg-r79osC-P.webp",T="/assets/amount-of-data-md-CkLJlHp2.jpg",L="/assets/amount-of-data-md-DqYc037D.webp",X="/assets/amount-of-data-sm-LivS5PFs.jpg",M="/assets/amount-of-data-sm-jlKeXtK1.webp",O="/assets/amount-of-data-xl-DlYss6kM.jpg",P="/assets/amount-of-data-xl-B8FrxW_d.webp",q="/assets/amount-of-data-xs-IVOAaW8h.jpg",V="/assets/amount-of-data-xs-D6tqADdH.webp",A="/assets/amount-of-data-DK0TSrbQ.jpg",z="/assets/amount-of-data-D_fvZkma.webp",N={xs:q,sm:X,md:T,lg:C,xl:O,default:A},F={xs:V,sm:M,md:L,lg:B,xl:P,default:z},H={jpg:N,webp:F},J="/assets/concept-sketch-lg-CpiPvLol.jpg",E="/assets/concept-sketch-lg-DUtKCjcc.webp",U="/assets/concept-sketch-md-DLGrJaYx.jpg",Q="/assets/concept-sketch-md-Bil7YEnh.webp",G="/assets/concept-sketch-sm-BMXO0i70.jpg",R="/assets/concept-sketch-sm-C3KErfwm.webp",Y="/assets/concept-sketch-xl-BU6o400b.jpg",K="/assets/concept-sketch-xl-DbWDeO5n.webp",Z="/assets/concept-sketch-xs-BBBPUcpT.jpg",ee="/assets/concept-sketch-xs-xuTNLseg.webp",te="/assets/concept-sketch-DRJIvW1I.jpg",se="/assets/concept-sketch-CmKqbHEd.webp",ae={xs:Z,sm:G,md:U,lg:J,xl:Y,default:te},ne={xs:ee,sm:R,md:Q,lg:E,xl:K,default:se},oe={jpg:ae,webp:ne},ie="/assets/definition-of-viz-lg-C0yhKaoX.jpg",le="/assets/definition-of-viz-lg-BQDbQS4M.webp",re="/assets/definition-of-viz-md-vbjrzQoj.jpg",de="/assets/definition-of-viz-md-DevuEnFP.webp",pe="/assets/definition-of-viz-sm-DPMVFnWn.jpg",ce="/assets/definition-of-viz-sm-CUugQ-Ob.webp",he="/assets/definition-of-viz-xl-B0JeTARV.jpg",me="/assets/definition-of-viz-xl-DEpmi9eJ.webp",ue="/assets/definition-of-viz-xs-ZX9kcYB-.jpg",ge="/assets/definition-of-viz-xs-Du5IV3MC.webp",fe="/assets/definition-of-viz-dC32fJaX.jpg",we="/assets/definition-of-viz-BpaeorTQ.webp",be={xs:ue,sm:pe,md:re,lg:ie,xl:he,default:fe},ve={xs:ge,sm:ce,md:de,lg:le,xl:me,default:we},ye={jpg:be,webp:ve},ke="/assets/feeding-data-lg-VSuI8ZEd.jpg",xe="/assets/feeding-data-lg-Diz8Bk3j.webp",je="/assets/feeding-data-md-f2DVJJ2x.jpg",$e="/assets/feeding-data-md-9o3ahHoB.webp",_e="/assets/feeding-data-sm-CbiTnN3B.jpg",De="/assets/feeding-data-sm-Dq_XiAZc.webp",Ie="/assets/feeding-data-xl-CgM2mYXj.jpg",We="/assets/feeding-data-xl-DcWiEmIu.webp",Se="/assets/feeding-data-xs-I4SPQCFX.jpg",Ce="/assets/feeding-data-xs-Bj5HrvU9.webp",Be="/assets/feeding-data-CBoX5c3N.jpg",Te="/assets/feeding-data-B3GN26sI.webp",Le={xs:Se,sm:_e,md:je,lg:ke,xl:Ie,default:Be},Xe={xs:Ce,sm:De,md:$e,lg:xe,xl:We,default:Te},Me={jpg:Le,webp:Xe},Oe="/assets/final-presentation-lg-CsC3ZvwB.jpg",Pe="/assets/final-presentation-lg-CAeUcq50.webp",qe="/assets/final-presentation-md-BLOrpEMg.jpg",Ve="/assets/final-presentation-md-Cne_HU_c.webp",Ae="/assets/final-presentation-sm-9ZrUD6qc.jpg",ze="/assets/final-presentation-sm-DkN-y4rQ.webp",Ne="/assets/final-presentation-xl-Hsj4u1xB.jpg",Fe="/assets/final-presentation-xl-DtRswIUM.webp",He="/assets/final-presentation-xs-BFfjzbYN.jpg",Je="/assets/final-presentation-xs-BTFZZQUv.webp",Ee="/assets/final-presentation-DKGBHe11.jpg",Ue="/assets/final-presentation-BBT590KF.webp",Qe={xs:He,sm:Ae,md:qe,lg:Oe,xl:Ne,default:Ee},Ge={xs:Je,sm:ze,md:Ve,lg:Pe,xl:Fe,default:Ue},Re={jpg:Qe,webp:Ge},Ye="/assets/post-its-lg-DZl4ViCe.jpg",Ke="/assets/post-its-lg-COnHHvB1.webp",Ze="/assets/post-its-md-DAh8h-LD.jpg",et="/assets/post-its-md-s2aRQIIo.webp",tt="/assets/post-its-sm-Qprc4aE4.jpg",st="/assets/post-its-sm-92Juvk9f.webp",at="/assets/post-its-xl-CJeu4s5m.jpg",nt="/assets/post-its-xl-Duv6LrcA.webp",ot="/assets/post-its-xs-C350kfoH.jpg",it="/assets/post-its-xs-DdrSsuHu.webp",lt="/assets/post-its-CElNyUxY.jpg",rt="/assets/post-its-Byq0pUui.webp",dt={xs:ot,sm:tt,md:Ze,lg:Ye,xl:at,default:lt},pt={xs:it,sm:st,md:et,lg:Ke,xl:nt,default:rt},ct={jpg:dt,webp:pt},ht="/assets/spreadsheet-lg-BD5atB2C.jpg",mt="/assets/spreadsheet-lg-UahYuVhN.webp",ut="/assets/spreadsheet-md-oTEdxdpT.jpg",gt="/assets/spreadsheet-md-C3VobxnC.webp",ft="/assets/spreadsheet-sm-BHiIOre0.jpg",wt="/assets/spreadsheet-sm-DyrdvgCS.webp",bt="/assets/spreadsheet-xl-DjyNgFkv.jpg",vt="/assets/spreadsheet-xl-CAyz21vq.webp",yt="/assets/spreadsheet-xs-DvC5PIdK.jpg",kt="/assets/spreadsheet-xs-rNnGVJNM.webp",xt="/assets/spreadsheet--lMe48MH.jpg",jt="/assets/spreadsheet-BpcnnGUA.webp",$t={xs:yt,sm:ft,md:ut,lg:ht,xl:bt,default:xt},_t={xs:kt,sm:wt,md:gt,lg:mt,xl:vt,default:jt},Dt={jpg:$t,webp:_t},It="/assets/we-need-logic-lg-DHMHQ0-e.jpg",Wt="/assets/we-need-logic-lg-C6qG2YBD.webp",St="/assets/we-need-logic-md-BaTBYi-J.jpg",Ct="/assets/we-need-logic-md-BDNUr3Wn.webp",Bt="/assets/we-need-logic-sm-XJF_zVAt.jpg",Tt="/assets/we-need-logic-sm-C92CAtJ1.webp",Lt="/assets/we-need-logic-xl-CHwYJ_eD.jpg",Xt="/assets/we-need-logic-xl-G_Kd5Jpl.webp",Mt="/assets/we-need-logic-xs-BIBgMlWF.jpg",Ot="/assets/we-need-logic-xs-sWBtDRKW.webp",Pt="/assets/we-need-logic-Bz2xw325.jpg",qt="/assets/we-need-logic-D_pn_jwf.webp",Vt={xs:Mt,sm:Bt,md:St,lg:It,xl:Lt,default:Pt},At={xs:Ot,sm:Tt,md:Ct,lg:Wt,xl:Xt,default:qt},zt={jpg:Vt,webp:At},Nt="/assets/animation-demo-C9QrLBel.mp4",Ft="/assets/animation-demo-BmsWG9_Z.webm",Ht="/assets/theme-shape-f3zgbF_8.mp4",Jt="/assets/theme-shape-BaiPb26d.webm",Et="/assets/tool-demo-C66tEYeI.mp4",Ut="/assets/tool-demo-C1Xo5xup.webm";var Qt=e("

"),Gt=e("

Introduction"),Rt=e("

Mobility is perhaps one of the most rapidly evolving industry with changes driven by latest technologies, new services and cultural shift of transportation."),Yt=e("

To further understand the latest trends, a mixed team from Fjord, Accenture and Volkswagen has done a series of global research from both market and human points of view, from which merged view analysis was also derived."),Kt=e("

While the result was successfully compiled into a book, the team was not fully satisfied with the format due to the vast amount of information. Thus, the team challenged themselves to make the research more accessible."),Zt=e("

Challenges"),es=e("

When the team reached me out for the first time, the above was obviously my first response. I was not fully convinced with the term data visualisation they used, so I had to make sure we were speaking the same language. We started our discussion by asking below questions to align our requirements."),ts=e("

Approach"),ss=e("

Once above questions were derived, we went through them one by one to align ourselves. This process helped us greatly to kickstart our collaboration."),as=e("

Interactive and navigable data visualisation"),ns=e("

The main benefit of a digital application is in its interactivity to enable users to navigate through relevant information. Unlike quantitative data, our research data could not be displayed in numbers, so it was crucial to sort it by relevance to maximise accessibility."),os=e("

Thus, we defined our data visualisation as an interactive visual representation that allows users to easily navigate through the data. Furthermore, it should encourage users to learn new information by intuitively showing related data."),is=e("

Keywords- and sentence-based parameters"),ls=e("

In order to build our logics for the visualisation, keywords were suggested as the parameter. The team was already well-aware of the necessity and were ready for extracting those. Indeed, such process is already common in design research analysis."),rs=e("

To save their time, I suggested them to use natural words or sentences as keywords rather than spending time to come up with a single word. This allowed them to use, for example, representative user quotes selected from affinity diagrams as parameters."),ds=e("

Making use of online spreadsheet"),ps=e("

The team was already collaborating with an online spreadsheet, which could be exported into xlsx format. I had a quick discussion with another back-end developer to check if it can be directly imported by writing a server-side script and confirmed it possible with ."),cs=e("

As the result, we agreed to onboard another back-end developer to program xlsx importing script to save our time and effort in filling in the data, and the team was able to continue working with their spreadsheet."),hs=e("

To best avoid the risk of structural and logical changes to the data, I carefully prioritised my tasks to give the team as much time as possible to digest their research."),ms=e("

Process"),us=e("

After spending some time to align ourselves, it was time to bring the concept into life. I took the lead developer role and onboarded a back-end developer to support me with processing xlsx data while I develop the main application."),gs=e("

Data-driven visual design"),fs=e("

The collaboration with designers was very unique and interesting as many elements were generated from data. I mostly worked together with a visual designer to build our logics for visual elements, just as shown in below animation."),g=e("

As our concept continued to develop, we needed to design new logics to match our desired visuals, so I also joined ideation sessions to share my knowledge and design together."),bs=e("

Technical setup"),vs=e("

In order to make a highly interactive data visualisation, I needed to find out the best options to generate and animate interactive elements."),ys=e("

During my research, I learnt SVG works very efficiently with CSS animations, and more importantly, React library could handle generating SVG nodes through JSX. Using React would enable me to implement more seamless interactions and animations by making it as a single-page application."),ks=e("

Our data was fairly small, although complex, but I nevertheless decided to save our data into a database rather than hard-coding into JavaScript as JSON. This was mainly to save development time by working with a back-end developer in parallel."),xs=e("

Coping with the uncertainty"),js=e("

In spite of our effort, we could not avoid critical changes in data structure. I tried my best to prioritise works that had less dependencies on data, but as the core logics changed, there was no other option but to restart from scratch."),$s=e("

To make things worse, a manager from Volkswagen requested not to use GPL licensed software. We were using MongoDB for storing our data, and all of sudden we were forced to seek for an alternative."),_s=e("

Fortunate for us, these two issues came up at the same time, so we could deal with them simultaneously. While I was re-working on front-end with visual designer, back-end developer worked on with structuring PostgreSQL database and new data importing scripts."),Ds=e("

Outcome"),Is=e("

After a month delay due to changes in structure, we were finally able to deliver the final application. Also, based on the internal tool we made, was also designed and developed within a short period."),Ws=e("

Controlling SVG"),Ss=e("

As a technical note, I preferred to use CSS transforms rather than inline SVG transformations to fully utilise CSS animations. It significantly saved my development time, but with one downside of not being able export the generated visual into an SVG file. I later wrote a dedicated script with inline styles to share generated assets for designers to use in their documentation."),Cs=e("

I utilised Redux state management to animate SVG, combined with React Router. This combination allowed sharing the desired visualisation through URLs, just like any other website."),Bs=e("

Real-time coding"),Ts=e("

The public website development followed immediately after the visualisation project, with a very tight timeline. Although we already had all assets ready, me and visual designer had to progress very quickly to meet the deadline. Thus, we decided to design and develop in parallel, sitting next to each other."),Ls=e("

For example, the visual designer would suggest visual and interaction ideas like the one above, and once I confirm it, I would develop it quickly to grasp the look and feel. As it was a simple static website, this method worked very well to utilise both of our skills quickly."),Xs=e("

Delivery"),Ms=e("

As there was no other developer from Volkswagen involved in the project, I had to think about how to deliver our application via a non-developer with minimum instructions. The team also did not know about their internal platforms for hosting applications, so I had to think of a universal method."),Os=e("

As the result, we agreed to package the application with Docker. This greatly simplified configuration process of PostgreSQL and Node server – not only for them but also for ourselves to share our outcome internally."),Ps=e("

Learnings"),qs=e("

This was one of the most difficult development projects I have had so far, with challenges coming from various aspects – from coding itself to corporate setup. This process gave me valuable lessons, with some remaining open questions."),Vs=e("

Modes of collaboration"),As=e("

Collaboration process with designers was the core challenge, as the application concept was continuously evolving in parallel with development. I had to quickly figure out which parts could be done independently or had to be done together with designers, just as mentioned earlier."),zs=e("

Especially during the public website production, there was absolutely no time for me to wait for the design confirmation. I and the visual designer agreed to sit together and design and develop at the same time. I literally implemented the design in real-time and this actually worked out great."),Ns=e("

Obviously, this was possible as the design direction was already defined from internal prototype, however, such mode of collaboration would be very useful in many situations in which quick – but fully working – prototypes are needed."),Fs=e("

Double check client's requirements"),Hs=e("

We were lucky (and unlucky) to have two game-over situations happening exactly at the same time, saving us from restarting for another round. While changes in data structure might have been extremely difficult to predict, the license issue could have been definitely avoided."),Js=e("

I learnt that use of open source solutions needs to be discussed thoroughly as a part of technical requirements upon planning. As the use of freely available dependencies are almost non-avoidable in modern web development, developers including me often neglect the importance of licenses associated with them. I took this experience to add such factor into my pre-development checklist for my next projects."),Es=e("

How to best avoid structural changes in data?"),Us=e("

As a Creative Technologist, I often face situations in which prototypes are urgently needed but ideas are not finalised. This always comes with risks of losing all my work due to the last-minute changes. This is usually manageable as they don't always require complex data structure."),Qs=e("

However, in this project, such change was critical and in spite of my effort, I could not avoid starting all over again. As a non-expert in data architecture, it was very difficult for me to predict every scenario and make my code expandable enough to cope with such situations."),Gs=e("

Later, I shared my experience with other developers and Creative Technologists, but we all agreed that in such project setup, the risk cannot be completely removed, and thus it remains an open challenge for all of us."),Rs=e("

"),Ys=e("

What exactly do we want to produce? Are we sure we are not talking about another infographic and not trying to make things unnecessarily complicated? Since the term visualisation is so broad, we needed to understand what it means in our context, and what we were trying to achieve by making it."),Ks=e("

In order to generate a visualisation, it is obvious that we need to have a logic behind it. How are we going to parameterise qualitative research data? The team already had a good understanding of the requirement, so our discussion was more about in what format we are going to parameterise the data."),Zs=e("

Qualitative data usually requires more complex input than numbers. Also, the team was in the process of iterating their research, so I needed to come up with a solution in which the team can directly input the data while I develop the application. This also meant potential risks of changes in data structure.");function ea(){const k=r=>{W("mobility-study",r)};return[(()=>{var r=Qt(),t=r.firstChild,n=t.firstChild,i=t.nextSibling;return x(k,t),s(t,a(D,{alt:"The Future of Mobility",get class(){return p.bg},srcset:S}),n),s(i,a(I,{title:"The Future of Mobility",headline:"A development diary on an interactive web visualisation with qualitative data"}),null),s(i,a($,{agency:"Fjord",agencyLink:"https://fjordnet.com/",client:"Volkswagen",clientLink:"https://www.volkswagen.de/",overview:` I led the full-stack development of an interactive website that is fully generated with qualitative research data. I collaborated with a back-end developer and visual designers to produce the web. diff --git a/assets/picture-DoVBIOq-.js b/assets/picture-DZcGR_Rp.js similarity index 96% rename from assets/picture-DoVBIOq-.js rename to assets/picture-DZcGR_Rp.js index 96cd841..eafda99 100644 --- a/assets/picture-DoVBIOq-.js +++ b/assets/picture-DZcGR_Rp.js @@ -1 +1 @@ -import{i as s,c as d,j as r,b as v,t as c}from"./template-ByEHfdYF.js";var m=c(""),g=c(''),_=c(''),w=c(''),b=c(''),h=c(''),k=c("");const o={xs:0,sm:576,md:1024,lg:1200,xl:1440,hd:1920};function x(l,a="jpeg"){const n={};for(const[i,t]of Object.entries(l))switch(i){case"xs":n[i]=(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),e})();break;case"sm":case"md":n[i]=(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(min-width: ${o[i]}px)`)),e})();break;case"lg":n[i]=[(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(min-width: ${o.sm}px) and (min-resolution: 192dpi)`)),e})(),(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(min-width: ${o.sm}px) and (-webkit-min-device-pixel-ratio: 2)`)),e})(),(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(min-width: ${o[i]}px)`)),e})()];break;case"xl":n[i]=[(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(min-width: ${o.md}px) and (min-resolution: 192dpi)`)),e})(),(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(min-width: ${o.md}px) and (-webkit-min-device-pixel-ratio: 2)`)),e})(),(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(min-width: ${o[i]}px)`)),e})()];break;case"portrait1x":n[i]=(()=>{var e=g();return r(e,"srcset",t),r(e,"type",`image/${a}`),e})();break;case"portrait2x":n[i]=[(()=>{var e=_();return r(e,"srcset",t),r(e,"type",`image/${a}`),e})(),(()=>{var e=w();return r(e,"srcset",t),r(e,"type",`image/${a}`),e})(),(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(orientation: portrait) and (min-width: ${o.sm})`)),e})()];break;case"portrait3x":n[i]=[(()=>{var e=b();return r(e,"srcset",t),r(e,"type",`image/${a}`),e})(),(()=>{var e=h();return r(e,"srcset",t),r(e,"type",`image/${a}`),e})(),(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(orientation: portrait) and (min-width: ${o.sm}) and (min-resolution: 192dpi)`)),e})(),(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(orientation: portrait) and (min-width: ${o.sm}) and (-webkit-min-device-pixel-ratio: 2)`)),e})(),(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(orientation: portrait) and (min-width: ${o.lg})`)),e})()];break;case"default":default:n[i]=[(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(min-width: ${o.md}px) and (min-resolution: 384dpi)`)),e})(),(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(min-width: ${o.md}px) and (-webkit-min-device-pixel-ratio: 3)`)),e})(),(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(min-width: ${o.xl}px) and (min-resolution: 192dpi)`)),e})(),(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(min-width: ${o.xl}px) and (-webkit-min-device-pixel-ratio: 2)`)),e})(),(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(min-width: ${o.hd}px)`)),e})()];break}return n}function j(l){const a=x(l.srcset.jpg),n=x(l.srcset.webp,"webp");return(()=>{var i=k(),t=i.firstChild;return s(i,()=>n.default,t),s(i,()=>n.portrait3x,t),s(i,()=>n.portrait2x,t),s(i,()=>n.portrait1x,t),s(i,()=>n.xl,t),s(i,()=>n.lg,t),s(i,()=>n.md,t),s(i,()=>n.sm,t),s(i,()=>n.xs,t),s(i,()=>a.default,t),s(i,()=>a.portrait3x,t),s(i,()=>a.portrait2x,t),s(i,()=>a.portrait1x,t),s(i,()=>a.xl,t),s(i,()=>a.lg,t),s(i,()=>a.md,t),s(i,()=>a.sm,t),s(i,()=>a.xs,t),d(e=>{var $=l.alt,p=l.class,u=l.srcset.jpg.default;return $!==e.e&&r(t,"alt",e.e=$),p!==e.t&&v(t,e.t=p),u!==e.a&&r(t,"src",e.a=u),e},{e:void 0,t:void 0,a:void 0}),i})()}export{j as P}; +import{i as s,c as d,j as r,b as v,t as c}from"./template-DEwkplrf.js";var m=c(""),g=c(''),_=c(''),w=c(''),b=c(''),h=c(''),k=c("");const o={xs:0,sm:576,md:1024,lg:1200,xl:1440,hd:1920};function x(l,a="jpeg"){const n={};for(const[i,t]of Object.entries(l))switch(i){case"xs":n[i]=(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),e})();break;case"sm":case"md":n[i]=(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(min-width: ${o[i]}px)`)),e})();break;case"lg":n[i]=[(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(min-width: ${o.sm}px) and (min-resolution: 192dpi)`)),e})(),(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(min-width: ${o.sm}px) and (-webkit-min-device-pixel-ratio: 2)`)),e})(),(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(min-width: ${o[i]}px)`)),e})()];break;case"xl":n[i]=[(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(min-width: ${o.md}px) and (min-resolution: 192dpi)`)),e})(),(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(min-width: ${o.md}px) and (-webkit-min-device-pixel-ratio: 2)`)),e})(),(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(min-width: ${o[i]}px)`)),e})()];break;case"portrait1x":n[i]=(()=>{var e=g();return r(e,"srcset",t),r(e,"type",`image/${a}`),e})();break;case"portrait2x":n[i]=[(()=>{var e=_();return r(e,"srcset",t),r(e,"type",`image/${a}`),e})(),(()=>{var e=w();return r(e,"srcset",t),r(e,"type",`image/${a}`),e})(),(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(orientation: portrait) and (min-width: ${o.sm})`)),e})()];break;case"portrait3x":n[i]=[(()=>{var e=b();return r(e,"srcset",t),r(e,"type",`image/${a}`),e})(),(()=>{var e=h();return r(e,"srcset",t),r(e,"type",`image/${a}`),e})(),(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(orientation: portrait) and (min-width: ${o.sm}) and (min-resolution: 192dpi)`)),e})(),(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(orientation: portrait) and (min-width: ${o.sm}) and (-webkit-min-device-pixel-ratio: 2)`)),e})(),(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(orientation: portrait) and (min-width: ${o.lg})`)),e})()];break;case"default":default:n[i]=[(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(min-width: ${o.md}px) and (min-resolution: 384dpi)`)),e})(),(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(min-width: ${o.md}px) and (-webkit-min-device-pixel-ratio: 3)`)),e})(),(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(min-width: ${o.xl}px) and (min-resolution: 192dpi)`)),e})(),(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(min-width: ${o.xl}px) and (-webkit-min-device-pixel-ratio: 2)`)),e})(),(()=>{var e=m();return r(e,"srcset",t),r(e,"type",`image/${a}`),d(()=>r(e,"media",`(min-width: ${o.hd}px)`)),e})()];break}return n}function j(l){const a=x(l.srcset.jpg),n=x(l.srcset.webp,"webp");return(()=>{var i=k(),t=i.firstChild;return s(i,()=>n.default,t),s(i,()=>n.portrait3x,t),s(i,()=>n.portrait2x,t),s(i,()=>n.portrait1x,t),s(i,()=>n.xl,t),s(i,()=>n.lg,t),s(i,()=>n.md,t),s(i,()=>n.sm,t),s(i,()=>n.xs,t),s(i,()=>a.default,t),s(i,()=>a.portrait3x,t),s(i,()=>a.portrait2x,t),s(i,()=>a.portrait1x,t),s(i,()=>a.xl,t),s(i,()=>a.lg,t),s(i,()=>a.md,t),s(i,()=>a.sm,t),s(i,()=>a.xs,t),d(e=>{var $=l.alt,p=l.class,u=l.srcset.jpg.default;return $!==e.e&&r(t,"alt",e.e=$),p!==e.t&&v(t,e.t=p),u!==e.a&&r(t,"src",e.a=u),e},{e:void 0,t:void 0,a:void 0}),i})()}export{j as P}; diff --git a/assets/project.module-CfcmTz4O.js b/assets/project.module-EyBcDRJv.js similarity index 96% rename from assets/project.module-CfcmTz4O.js rename to assets/project.module-EyBcDRJv.js index 91d41e6..f10e1bf 100644 --- a/assets/project.module-CfcmTz4O.js +++ b/assets/project.module-EyBcDRJv.js @@ -1 +1 @@ -import{i,c as s,b as l,a as r,t as v,g as h,j as G,h as f,E as j,F as O}from"./template-ByEHfdYF.js";import{P as T}from"./picture-DoVBIOq-.js";const U="_quote_rhym9_1",V="_noQuote_rhym9_9",J={quote:U,noQuote:V};var W=v("

");function ke(t){return(()=>{var o=W();return i(o,()=>t.children),s(()=>l(o,r(J.quote,"col-12","col-lg-10","offset-lg-1",t.class,{[`${t.name}__quote`]:!!t.name,[J.noQuote]:t.noQuote}))),o})()}const X="_line_3otpa_1",Y={line:X};var Z=v("
");function be(){return(()=>{var t=Z();return s(()=>l(t,r(Y.line,"col-2","offset-5"))),t})()}const p="_imageBlock_8psxd_1",ee={imageBlock:p};var te=v("
"),ne=v("");function ye(t){return(()=>{var o=te();return i(o,(()=>{var d=h(()=>!!t.src);return()=>d()&&(()=>{var _=ne();return s(c=>{var u=t.alt,m=t.src;return u!==c.e&&G(_,"alt",c.e=u),m!==c.t&&G(_,"src",c.t=m),c},{e:void 0,t:void 0}),_})()})(),null),i(o,(()=>{var d=h(()=>!!t.srcset);return()=>d()&&f(T,{get alt(){return t.alt},get srcset(){return t.srcset}})})(),null),s(()=>l(o,r("project__section col-12 col-md-10 offset-md-1 col-lg-8 offset-lg-2",ee.imageBlock,t.className,t.name&&`${t.name}__section`))),o})()}const le="_roles_ah6jh_1",oe="_overview_ah6jh_13",re="_role_ah6jh_1",ie="_label_ah6jh_26",ce="_content_ah6jh_33",n={roles:le,overview:oe,role:re,label:ie,content:ce};var ae=v("
Summary

Key roles
    Project year
    Agency
    Client
    "),de=v("

    "),ve=v("

  • ");function je(t){let o;return t.client?o=t.clientLink?f(j,{get href(){return t.clientLink},get children(){return t.client}}):t.client:o="[Non-disclosable]",(()=>{var d=ae(),_=d.firstChild,c=_.firstChild,u=c.firstChild,m=u.nextSibling,x=m.firstChild,g=c.nextSibling,$=g.firstChild,k=$.nextSibling,S=k.firstChild,w=k.nextSibling,b=w.nextSibling,C=b.nextSibling,y=C.nextSibling,L=y.nextSibling,q=L.nextSibling;return i(x,()=>t.overview),i(g,(()=>{var e=h(()=>!!t.projectLink);return()=>e()&&(()=>{var a=de();return i(a,f(j,{get href(){return t.projectLink},children:"Project link"})),s(()=>l(a,r(n.content,n.projectLink,"font--default"))),a})()})(),$),i(S,f(O,{get each(){return t.roles},children:e=>(()=>{var a=ve();return i(a,e),a})()})),i(b,()=>t.year),i(y,(()=>{var e=h(()=>!!t.agencyLink);return()=>e()?f(j,{get href(){return t.agencyLink},get children(){return t.agency}}):t.agency})()),i(q,o),s(e=>{var a=r(n.roles,t.name&&`${t.name}__section`,"project__section col-nested"),B=r(n.summary,"col-12 col-sm-7 col-md-6 offset-md-1"),Q=n.label,P=n.content,E=r(n.overview,"font--overview"),N=r(n.details,"col-12 col-sm-5 col-md-4"),R=n.label,A=n.content,F=r(n.role,"font--default"),H=n.label,I=r(n.content,n.year,"font--default"),K=n.label,M=r(n.content,n.agency,"font--default"),z=n.label,D=r(n.content,n.client,"font--default");return a!==e.e&&l(d,e.e=a),B!==e.t&&l(c,e.t=B),Q!==e.a&&l(u,e.a=Q),P!==e.o&&l(m,e.o=P),E!==e.i&&l(x,e.i=E),N!==e.n&&l(g,e.n=N),R!==e.s&&l($,e.s=R),A!==e.h&&l(k,e.h=A),F!==e.r&&l(S,e.r=F),H!==e.d&&l(w,e.d=H),I!==e.l&&l(b,e.l=I),K!==e.u&&l(C,e.u=K),M!==e.c&&l(y,e.c=M),z!==e.w&&l(L,e.w=z),D!==e.m&&l(q,e.m=D),e},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0,w:void 0,m:void 0}),d})()}const se="_main_fkvu0_1",_e="_header_fkvu0_5",ue="_hero_fkvu0_12",me="_sticky_fkvu0_18",fe="_bg_fkvu0_22",he="_overlay_fkvu0_28",xe={main:se,header:_e,hero:ue,sticky:me,bg:fe,overlay:he};export{ke as B,be as H,ye as I,je as R,xe as p}; +import{i,c as s,b as l,a as r,t as v,g as h,j as G,h as f,E as j,F as O}from"./template-DEwkplrf.js";import{P as T}from"./picture-DZcGR_Rp.js";const U="_quote_rhym9_1",V="_noQuote_rhym9_9",J={quote:U,noQuote:V};var W=v("
    ");function ke(t){return(()=>{var o=W();return i(o,()=>t.children),s(()=>l(o,r(J.quote,"col-12","col-lg-10","offset-lg-1",t.class,{[`${t.name}__quote`]:!!t.name,[J.noQuote]:t.noQuote}))),o})()}const X="_line_3otpa_1",Y={line:X};var Z=v("
    ");function be(){return(()=>{var t=Z();return s(()=>l(t,r(Y.line,"col-2","offset-5"))),t})()}const p="_imageBlock_8psxd_1",ee={imageBlock:p};var te=v("
    "),ne=v("");function ye(t){return(()=>{var o=te();return i(o,(()=>{var d=h(()=>!!t.src);return()=>d()&&(()=>{var _=ne();return s(c=>{var u=t.alt,m=t.src;return u!==c.e&&G(_,"alt",c.e=u),m!==c.t&&G(_,"src",c.t=m),c},{e:void 0,t:void 0}),_})()})(),null),i(o,(()=>{var d=h(()=>!!t.srcset);return()=>d()&&f(T,{get alt(){return t.alt},get srcset(){return t.srcset}})})(),null),s(()=>l(o,r("project__section col-12 col-md-10 offset-md-1 col-lg-8 offset-lg-2",ee.imageBlock,t.className,t.name&&`${t.name}__section`))),o})()}const le="_roles_ah6jh_1",oe="_overview_ah6jh_13",re="_role_ah6jh_1",ie="_label_ah6jh_26",ce="_content_ah6jh_33",n={roles:le,overview:oe,role:re,label:ie,content:ce};var ae=v("
    Summary

    Key roles
      Project year
      Agency
      Client
      "),de=v("

      "),ve=v("

    • ");function je(t){let o;return t.client?o=t.clientLink?f(j,{get href(){return t.clientLink},get children(){return t.client}}):t.client:o="[Non-disclosable]",(()=>{var d=ae(),_=d.firstChild,c=_.firstChild,u=c.firstChild,m=u.nextSibling,x=m.firstChild,g=c.nextSibling,$=g.firstChild,k=$.nextSibling,S=k.firstChild,w=k.nextSibling,b=w.nextSibling,C=b.nextSibling,y=C.nextSibling,L=y.nextSibling,q=L.nextSibling;return i(x,()=>t.overview),i(g,(()=>{var e=h(()=>!!t.projectLink);return()=>e()&&(()=>{var a=de();return i(a,f(j,{get href(){return t.projectLink},children:"Project link"})),s(()=>l(a,r(n.content,n.projectLink,"font--default"))),a})()})(),$),i(S,f(O,{get each(){return t.roles},children:e=>(()=>{var a=ve();return i(a,e),a})()})),i(b,()=>t.year),i(y,(()=>{var e=h(()=>!!t.agencyLink);return()=>e()?f(j,{get href(){return t.agencyLink},get children(){return t.agency}}):t.agency})()),i(q,o),s(e=>{var a=r(n.roles,t.name&&`${t.name}__section`,"project__section col-nested"),B=r(n.summary,"col-12 col-sm-7 col-md-6 offset-md-1"),Q=n.label,P=n.content,E=r(n.overview,"font--overview"),N=r(n.details,"col-12 col-sm-5 col-md-4"),R=n.label,A=n.content,F=r(n.role,"font--default"),H=n.label,I=r(n.content,n.year,"font--default"),K=n.label,M=r(n.content,n.agency,"font--default"),z=n.label,D=r(n.content,n.client,"font--default");return a!==e.e&&l(d,e.e=a),B!==e.t&&l(c,e.t=B),Q!==e.a&&l(u,e.a=Q),P!==e.o&&l(m,e.o=P),E!==e.i&&l(x,e.i=E),N!==e.n&&l(g,e.n=N),R!==e.s&&l($,e.s=R),A!==e.h&&l(k,e.h=A),F!==e.r&&l(S,e.r=F),H!==e.d&&l(w,e.d=H),I!==e.l&&l(b,e.l=I),K!==e.u&&l(C,e.u=K),M!==e.c&&l(y,e.c=M),z!==e.w&&l(L,e.w=z),D!==e.m&&l(q,e.m=D),e},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0,w:void 0,m:void 0}),d})()}const se="_main_fkvu0_1",_e="_header_fkvu0_5",ue="_hero_fkvu0_12",me="_sticky_fkvu0_18",fe="_bg_fkvu0_22",he="_overlay_fkvu0_28",xe={main:se,header:_e,hero:ue,sticky:me,bg:fe,overlay:he};export{ke as B,be as H,ye as I,je as R,xe as p}; diff --git a/assets/synaesthesify-C2eZALfQ.js b/assets/synaesthesify-Crv0dONd.js similarity index 96% rename from assets/synaesthesify-C2eZALfQ.js rename to assets/synaesthesify-Crv0dONd.js index ee4a1dc..0d8c9ed 100644 --- a/assets/synaesthesify-C2eZALfQ.js +++ b/assets/synaesthesify-Crv0dONd.js @@ -1,4 +1,4 @@ -import{f as x,j as v,i as t,h as s,c as f,b as c,E as w,t as a,m as k}from"./template-ByEHfdYF.js";import{R as S,B as y,H as h,I as d,p}from"./project.module-CfcmTz4O.js";import{T as I,S as i}from"./title-D785si6n.js";import{u as q}from"./useInitProject-D_rdr1bV.js";import{B as j}from"./synaesthesify-bg-LwQASnIi.js";import"./picture-DoVBIOq-.js";const _="/assets/at-equinox-lg-BSR6CBE5.jpg",$="/assets/at-equinox-lg-NIWSl_eb.webp",C="/assets/at-equinox-md-Dyop9fi_.jpg",E="/assets/at-equinox-md-BphNDyZD.webp",T="/assets/at-equinox-sm-CX6VlUps.jpg",W="/assets/at-equinox-sm-B1rspy0M.webp",B="/assets/at-equinox-xl-BFtyo1YZ.jpg",A="/assets/at-equinox-xl-CrldTY5x.webp",F="/assets/at-equinox-xs-7YrUrUuq.jpg",P="/assets/at-equinox-xs-C5KFHN4g.webp",M="/assets/at-equinox-x_r7Zn4u.jpg",D="/assets/at-equinox-B4_6Cv2q.webp",L={xs:F,sm:T,md:C,lg:_,xl:B,default:M},X={xs:P,sm:W,md:E,lg:$,xl:A,default:D},G={jpg:L,webp:X},N="/assets/main-screen-lg-Ba381QWv.jpg",H="/assets/main-screen-lg-B7YILnQH.webp",R="/assets/main-screen-md-D4x5s7Mh.jpg",U="/assets/main-screen-md-CvOVw1BD.webp",Y="/assets/main-screen-sm-D3IxYDtj.jpg",Z="/assets/main-screen-sm-BL4I1oCz.webp",O="/assets/main-screen-xl-BtcNsaxO.jpg",V="/assets/main-screen-xl-DZoxbMtT.webp",z="/assets/main-screen-xs-BGyyZXG3.jpg",K="/assets/main-screen-xs-BKm86smG.webp",Q="/assets/main-screen-C55xCIcq.jpg",J="/assets/main-screen-DVd362Pz.webp",ee={xs:z,sm:Y,md:R,lg:N,xl:O,default:Q},te={xs:K,sm:Z,md:U,lg:H,xl:V,default:J},se={jpg:ee,webp:te},ae="/assets/sample-artwork-XUiOll_v.svg",ne="/assets/sample-chart-C0f2yUCw.svg",oe="/assets/sample-tweaks-D3BypgN2.svg";var ie=a("
      Synaesthesify
      "),re=a("

      Introduction"),le=a("

      Shortly after I joined Fjord, I was suggested to give a talk at Fjord's biggest annual event – – to share a Creative Technologist's point of view towards the design world."),de=a("

      I teamed up with two other new-joiners from Fjord Milan studio – a Visual Designer and another Creative Technologist – to quickly ideate on topics and concepts to talk about. We agreed that data and APIs are rising topics, and it would be inspiring for designers to show what we can do with them."),ce=a("

      We came up with the idea of experimenting with to generate some artworks. Rather than giving a too techy talk, we wanted to engage designers in a more friendly way by producing visual outputs."),pe=a("

      Approach"),he=a("

      The main idea of this project was to play around with data to generate interesting visual outputs. I also personally wanted to generate something that makes sense, rather than being too artistic. I decided to start by making a chart with available data in order to determine which track features would be useful."),me=a("

      After some trials, I decided to use seven track features shown above to generate a radar chart, with HSL colour extracted from song's key, loudness and tempo. These features are the ones directly related to song itself, which also means they are the most useful to visually find out how a song feels like."),ue=a("

      At this point, I could already imagine an artwork generated by scattering the shape of radar charts. Also, by stacking them together in one place, I would be able to easily compare multiple song's characteristics at a glance."),ge=a("

      The first outputs I got were close to what I had expected. I tried to fetch track features from all songs in Global Top 50 chart and generate above visualisations. From here, I started to experiment further by tweaking some parameters."),fe=a("

      I was inspired by the fact that alignment of each radar charts makes significant difference in the output's look and feel. I quickly added options to toggle randomisations for each chart's position and rotation to see the output."),we=a("

      As can be seen above, these simple tweaks already generated completely different effects, which was something I could not expect. The shapes of radar charts showed some similar patterns throughout the Global Top 50 chart (as a note, this does not necessarily mean these songs are similar; the pattern may come from different scoring system for each feature) that gave the feeling of directional movement in the left example."),ye=a("

      Similarly, the charts formed a nice radial pattern as shown on the right example, giving somewhat joyful and playful feeling."),be=a("

      As I had limited time, I decided to stop here and proceed to make my final product – a visual synthesiser for Spotify albums."),xe=a("

      Outcome"),ve=a("

      I took the physical grid sequencers as a metaphor to my app. I already had some design directions suggested by the visual designer, so I could quickly proceed with my idea."),ke=a("

      In the final design, users can generate an artwork from a selected album or playlist, and also play around with positions and rotations. Each song in an album is represented as a grid title as shown above, which users can click to check song's features."),Se=a("

      This work was presented in a pop-up session at Fjord's Equinox event, together with the Milan team with their own version of experiments. We shared our learnings and initiated conversations around the topic with designers from all over the world."),Ie=a("

      Learnings"),qe=a("

      While this mini-project was a simple and quick one, it triggered many discussions in the talk. It became a good opportunity to share experiences from both designers' and Creative Technologists' points of view."),je=a("

      Many designers were interested in collaborating with Creative Technologists but found the process somewhat difficult. Also, as a team of new joiners, we were also keen to find out what has been the process in other studios and what we could suggest them to improve it."),_e=a("

      At the end of the talk, one designer from Fjord London studio asked what designers could do to help Creative Technologists; and our suggestion was that they could familiarise themselves in reading developer documentations on APIs to learn what data is available. This will not only help us build our logic but will also become food for thoughts for designing new products and services."),$e=a("

      ");function Ce(){const b=r=>{q("synaesthesify",r)};return[(()=>{var r=ie(),e=r.firstChild,o=e.firstChild,l=e.nextSibling;return x(b,e),v(o,"src",j),t(l,s(I,{title:"Synaesthesify",headline:"A three-day mini experiment with Spotify API by three fresh joiners"}),null),t(l,s(S,{agency:"Fjord",agencyLink:"https://fjordnet.com/",client:"N/A",overview:` +import{f as x,j as v,i as t,h as s,c as f,b as c,E as w,t as a,m as k}from"./template-DEwkplrf.js";import{R as S,B as y,H as h,I as d,p}from"./project.module-EyBcDRJv.js";import{T as I,S as i}from"./title-C9g8anI-.js";import{u as q}from"./useInitProject-BYcbynEk.js";import{B as j}from"./synaesthesify-bg-LwQASnIi.js";import"./picture-DZcGR_Rp.js";const _="/assets/at-equinox-lg-BSR6CBE5.jpg",$="/assets/at-equinox-lg-NIWSl_eb.webp",C="/assets/at-equinox-md-Dyop9fi_.jpg",E="/assets/at-equinox-md-BphNDyZD.webp",T="/assets/at-equinox-sm-CX6VlUps.jpg",W="/assets/at-equinox-sm-B1rspy0M.webp",B="/assets/at-equinox-xl-BFtyo1YZ.jpg",A="/assets/at-equinox-xl-CrldTY5x.webp",F="/assets/at-equinox-xs-7YrUrUuq.jpg",P="/assets/at-equinox-xs-C5KFHN4g.webp",M="/assets/at-equinox-x_r7Zn4u.jpg",D="/assets/at-equinox-B4_6Cv2q.webp",L={xs:F,sm:T,md:C,lg:_,xl:B,default:M},X={xs:P,sm:W,md:E,lg:$,xl:A,default:D},G={jpg:L,webp:X},N="/assets/main-screen-lg-Ba381QWv.jpg",H="/assets/main-screen-lg-B7YILnQH.webp",R="/assets/main-screen-md-D4x5s7Mh.jpg",U="/assets/main-screen-md-CvOVw1BD.webp",Y="/assets/main-screen-sm-D3IxYDtj.jpg",Z="/assets/main-screen-sm-BL4I1oCz.webp",O="/assets/main-screen-xl-BtcNsaxO.jpg",V="/assets/main-screen-xl-DZoxbMtT.webp",z="/assets/main-screen-xs-BGyyZXG3.jpg",K="/assets/main-screen-xs-BKm86smG.webp",Q="/assets/main-screen-C55xCIcq.jpg",J="/assets/main-screen-DVd362Pz.webp",ee={xs:z,sm:Y,md:R,lg:N,xl:O,default:Q},te={xs:K,sm:Z,md:U,lg:H,xl:V,default:J},se={jpg:ee,webp:te},ae="/assets/sample-artwork-XUiOll_v.svg",ne="/assets/sample-chart-C0f2yUCw.svg",oe="/assets/sample-tweaks-D3BypgN2.svg";var ie=a("
      Synaesthesify
      "),re=a("

      Introduction"),le=a("

      Shortly after I joined Fjord, I was suggested to give a talk at Fjord's biggest annual event – – to share a Creative Technologist's point of view towards the design world."),de=a("

      I teamed up with two other new-joiners from Fjord Milan studio – a Visual Designer and another Creative Technologist – to quickly ideate on topics and concepts to talk about. We agreed that data and APIs are rising topics, and it would be inspiring for designers to show what we can do with them."),ce=a("

      We came up with the idea of experimenting with to generate some artworks. Rather than giving a too techy talk, we wanted to engage designers in a more friendly way by producing visual outputs."),pe=a("

      Approach"),he=a("

      The main idea of this project was to play around with data to generate interesting visual outputs. I also personally wanted to generate something that makes sense, rather than being too artistic. I decided to start by making a chart with available data in order to determine which track features would be useful."),me=a("

      After some trials, I decided to use seven track features shown above to generate a radar chart, with HSL colour extracted from song's key, loudness and tempo. These features are the ones directly related to song itself, which also means they are the most useful to visually find out how a song feels like."),ue=a("

      At this point, I could already imagine an artwork generated by scattering the shape of radar charts. Also, by stacking them together in one place, I would be able to easily compare multiple song's characteristics at a glance."),ge=a("

      The first outputs I got were close to what I had expected. I tried to fetch track features from all songs in Global Top 50 chart and generate above visualisations. From here, I started to experiment further by tweaking some parameters."),fe=a("

      I was inspired by the fact that alignment of each radar charts makes significant difference in the output's look and feel. I quickly added options to toggle randomisations for each chart's position and rotation to see the output."),we=a("

      As can be seen above, these simple tweaks already generated completely different effects, which was something I could not expect. The shapes of radar charts showed some similar patterns throughout the Global Top 50 chart (as a note, this does not necessarily mean these songs are similar; the pattern may come from different scoring system for each feature) that gave the feeling of directional movement in the left example."),ye=a("

      Similarly, the charts formed a nice radial pattern as shown on the right example, giving somewhat joyful and playful feeling."),be=a("

      As I had limited time, I decided to stop here and proceed to make my final product – a visual synthesiser for Spotify albums."),xe=a("

      Outcome"),ve=a("

      I took the physical grid sequencers as a metaphor to my app. I already had some design directions suggested by the visual designer, so I could quickly proceed with my idea."),ke=a("

      In the final design, users can generate an artwork from a selected album or playlist, and also play around with positions and rotations. Each song in an album is represented as a grid title as shown above, which users can click to check song's features."),Se=a("

      This work was presented in a pop-up session at Fjord's Equinox event, together with the Milan team with their own version of experiments. We shared our learnings and initiated conversations around the topic with designers from all over the world."),Ie=a("

      Learnings"),qe=a("

      While this mini-project was a simple and quick one, it triggered many discussions in the talk. It became a good opportunity to share experiences from both designers' and Creative Technologists' points of view."),je=a("

      Many designers were interested in collaborating with Creative Technologists but found the process somewhat difficult. Also, as a team of new joiners, we were also keen to find out what has been the process in other studios and what we could suggest them to improve it."),_e=a("

      At the end of the talk, one designer from Fjord London studio asked what designers could do to help Creative Technologists; and our suggestion was that they could familiarise themselves in reading developer documentations on APIs to learn what data is available. This will not only help us build our logic but will also become food for thoughts for designing new products and services."),$e=a("

      ");function Ce(){const b=r=>{q("synaesthesify",r)};return[(()=>{var r=ie(),e=r.firstChild,o=e.firstChild,l=e.nextSibling;return x(b,e),v(o,"src",j),t(l,s(I,{title:"Synaesthesify",headline:"A three-day mini experiment with Spotify API by three fresh joiners"}),null),t(l,s(S,{agency:"Fjord",agencyLink:"https://fjordnet.com/",client:"N/A",overview:` I created a mini web application to generate artworks from song's characteristics. With this work, I gave a talk at Fjord's annual event to fellow designers to raise the topic of data and design. diff --git a/assets/template-B3LBMZve.css b/assets/template-B3LBMZve.css deleted file mode 100644 index 536398e..0000000 --- a/assets/template-B3LBMZve.css +++ /dev/null @@ -1 +0,0 @@ -@charset "UTF-8";._footer_ux7d3_1{position:relative;z-index:9999;background-color:var(--footer-background);padding:4rem 0 1rem;color:var(--footer-font-color);text-align:center}._copyright_ux7d3_10{font-size:calc(1.275rem + .3vw)}@media (min-width: 1200px){._copyright_ux7d3_10{font-size:1.5rem}}._iconLink_ux7d3_19{display:inline-block;transition:opacity .15s;margin:0 .75rem;border:0}._icon_ux7d3_19{width:2.5rem}._icon_ux7d3_19 path{fill:#fffc;transition:fill .15s}._icon_ux7d3_19:hover path{fill:#f6e81e}._version_ux7d3_37{display:block;margin-top:3.5rem;padding:0 1rem;font-size:.7rem;font-family:ibm-plex-mono,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;text-align:right}._version_ux7d3_37 a{transition:color .15s;border:0}._version_ux7d3_37 a:hover{color:var(--footer-link-color)}._logo_1egx1_1{margin:0;font-weight:900;font-size:2.5rem;line-height:3rem;-webkit-user-select:none;-moz-user-select:none;user-select:none}._logo_1egx1_1>a{transition:color .15s;border:0;color:var(--toolbar-logo-color)}._logo_1egx1_1>a:hover{color:var(--toolbar-logo-hover-color)}._list_139r2_1{display:flex;margin:0;padding:0;list-style:none}._item_139r2_8{font-size:1rem;margin-left:2rem}._item_139r2_8:first-child{margin:0}._item_139r2_8 a{transition:color .15s,border .15s;border-color:transparent;color:var(--toolbar-font-color)}._item_139r2_8 a._current_139r2_20,._item_139r2_8 a:hover{border-bottom:2px solid color-mix(in srgb,var(--toolbar-link-color) 70%,transparent);color:var(--toolbar-link-color)}._toolbar_tv5pn_1{display:flex;position:absolute;top:0;right:0;left:0;justify-content:space-between;align-items:center;z-index:9999;transition:background-color .3s ease-in-out;margin-bottom:-3rem;height:3rem}@media (min-width: 0){._toolbar_tv5pn_1{padding-right:2rem;padding-left:2rem}}@media (min-width: 576px){._toolbar_tv5pn_1{padding-right:2rem;padding-left:2rem}}@media (min-width: 1024px){._toolbar_tv5pn_1{padding-right:3rem;padding-left:3rem}}@media (min-width: 1200px){._toolbar_tv5pn_1{padding-right:4rem;padding-left:4rem}}@media (min-width: 1440px){._toolbar_tv5pn_1{padding-right:4rem;padding-left:4rem}}@media (min-width: 576px){._toolbar_tv5pn_1{position:sticky}}body{--background: #fff;--font-color: #504f4e;--link-color: #797979;--border-color: #222;--on-dark-background: #fff;--toolbar-logo-color: #797979;--toolbar-logo-hover-color: #${v.$grey-dark}--toolbar-font-color: #797979;--toolbar-link-color: #504f4e;--footer-font-color: #fff;--footer-link-color: #f6e81e;--footer-background: #222}body.home:not(.intro){--toolbar-logo-color: #fff;--toolbar-logo-hover-color: #f6e81e;--toolbar-font-color: #fff;--toolbar-link-color: #f6e81e}body:not(.home).intro{--toolbar-logo-color: #fff;--toolbar-logo-hover-color: #f6e81e;--toolbar-font-color: #fff;--toolbar-link-color: #f6e81e}body:not(.home).visual-intelligence{--background: #222;--font-color: #fff;--link-color: #f6e81e;--border-color: #fff;--on-dark-background: #222;--toolbar-logo-color: #fff;--toolbar-logo-hover-color: #f6e81e;--toolbar-font-color: #fff;--toolbar-link-color: #f6e81e}body:not(.home).synaesthesify{--background: #0c2126;--font-color: #fff;--link-color: #f6e81e;--border-color: #fff;--on-dark-background: #222;--toolbar-logo-color: #fff;--toolbar-logo-hover-color: #f6e81e;--toolbar-font-color: #fff;--toolbar-link-color: #f6e81e}*,*:before,*:after{box-sizing:border-box}body{font-size:calc(1.275rem + .3vw);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;background:var(--background);color:var(--font-color);line-height:1.2;font-family:neue-haas-unica,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}@media (min-width: 1200px){body{font-size:1.5rem}}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}h3{margin-top:2em}h3:first-child{margin-top:0}p,.font--paragraph{font-size:calc(1.3rem + .6vw);margin-top:0;margin-bottom:1em;line-height:1.4}@media (min-width: 1200px){p,.font--paragraph{font-size:1.75rem}}a{transition:border .15s;border-bottom:3px solid color-mix(in srgb,var(--link-color) 70%,transparent);color:inherit;text-decoration:none}a:hover{border-color:var(--link-color);text-decoration:none}ul,ol,dl{margin:0 0 1rem}dd{margin-left:0}figure{margin:0 0 1rem}.font--title{font-size:calc(1.525rem + 3.3vw);margin-bottom:.5em;font-weight:900;line-height:1.1;font-family:big-caslon-fb,serif;letter-spacing:.02em}@media (min-width: 1200px){.font--title{font-size:4rem}}.font--subtitle{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.1}@media (min-width: 1200px){.font--subtitle{font-size:3rem}}.font--headline{font-size:calc(1.3rem + .6vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.font--headline{font-size:1.75rem}}.font--overview{font-size:calc(1.3rem + .6vw);font-weight:600;line-height:1.2}@media (min-width: 1200px){.font--overview{font-size:1.75rem}}.font--default{font-size:calc(1.275rem + .3vw)}@media (min-width: 1200px){.font--default{font-size:1.5rem}}abbr[title]{cursor:inherit;text-decoration:none}blockquote{font-size:calc(1.525rem + 3.3vw);margin-bottom:.5em;font-weight:900;line-height:1.1;font-family:big-caslon-fb,serif;letter-spacing:.02em}@media (min-width: 1200px){blockquote{font-size:4rem}}blockquote:before{content:"“"}blockquote:after{content:"”"}q{font-style:italic}small{font-size:1rem}::-moz-selection{background-color:color-mix(in srgb,#f6e81e 50%,transparent)}::selection{background-color:color-mix(in srgb,#f6e81e 50%,transparent)}body{transition:background-color .3s ease-in-out}.container{display:grid;grid-template-columns:repeat(12,1fr);margin-right:auto;margin-left:auto;width:100%}@media (min-width: 576px){.container{max-width:540px}}@media (min-width: 1024px){.container{max-width:720px}}@media (min-width: 1200px){.container{max-width:960px}}@media (min-width: 1440px){.container{max-width:1140px}}@media (min-width: 0){.container{-moz-column-gap:0;column-gap:0;padding-right:2rem;padding-left:2rem}}@media (min-width: 576px){.container{-moz-column-gap:0 2rem;column-gap:0 2rem;padding-right:2rem;padding-left:2rem}}@media (min-width: 1024px){.container{-moz-column-gap:0 2rem;column-gap:0 2rem;padding-right:3rem;padding-left:3rem}}@media (min-width: 1200px){.container{-moz-column-gap:0 4rem;column-gap:0 4rem;padding-right:4rem;padding-left:4rem}}@media (min-width: 1440px){.container{-moz-column-gap:0 4rem;column-gap:0 4rem;padding-right:4rem;padding-left:4rem}}.container-fluid{display:grid;grid-template-columns:repeat(12,1fr);margin-right:auto;margin-left:auto;width:100%;position:relative;max-width:1920px}@media (min-width: 0){.container-fluid{gap:0;padding-right:2rem;padding-left:2rem}}@media (min-width: 576px){.container-fluid{gap:0 2rem;padding-right:2rem;padding-left:2rem}}@media (min-width: 1024px){.container-fluid{gap:0 2rem;padding-right:3rem;padding-left:3rem}}@media (min-width: 1200px){.container-fluid{gap:0 4rem;padding-right:4rem;padding-left:4rem}}@media (min-width: 1440px){.container-fluid{gap:0 4rem;padding-right:4rem;padding-left:4rem}}.col-nested{grid-column-start:1;grid-column-end:span 12}@media (min-width: 0){.col-nested{margin-right:-2rem;margin-left:-2rem}}@media (min-width: 576px){.col-nested{margin-right:-2rem;margin-left:-2rem}}@media (min-width: 1024px){.col-nested{margin-right:-3rem;margin-left:-3rem}}@media (min-width: 1200px){.col-nested{margin-right:-4rem;margin-left:-4rem}}@media (min-width: 1440px){.col-nested{margin-right:-4rem;margin-left:-4rem}}@media (min-width: 0){.col-1{grid-column-end:span 1}.col-2{grid-column-end:span 2}.col-3{grid-column-end:span 3}.col-4{grid-column-end:span 4}.col-5{grid-column-end:span 5}.col-6{grid-column-end:span 6}.col-7{grid-column-end:span 7}.col-8{grid-column-end:span 8}.col-9{grid-column-end:span 9}.col-10{grid-column-end:span 10}.col-11{grid-column-end:span 11}.col-12{grid-column-end:span 12}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{grid-column-start:2}.offset-2{grid-column-start:3}.offset-3{grid-column-start:4}.offset-4{grid-column-start:5}.offset-5{grid-column-start:6}.offset-6{grid-column-start:7}.offset-7{grid-column-start:8}.offset-8{grid-column-start:9}.offset-9{grid-column-start:10}.offset-10{grid-column-start:11}.offset-11{grid-column-start:12}}@media (min-width: 576px){.col-sm-1{grid-column-end:span 1}.col-sm-2{grid-column-end:span 2}.col-sm-3{grid-column-end:span 3}.col-sm-4{grid-column-end:span 4}.col-sm-5{grid-column-end:span 5}.col-sm-6{grid-column-end:span 6}.col-sm-7{grid-column-end:span 7}.col-sm-8{grid-column-end:span 8}.col-sm-9{grid-column-end:span 9}.col-sm-10{grid-column-end:span 10}.col-sm-11{grid-column-end:span 11}.col-sm-12{grid-column-end:span 12}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{grid-column-start:1}.offset-sm-1{grid-column-start:2}.offset-sm-2{grid-column-start:3}.offset-sm-3{grid-column-start:4}.offset-sm-4{grid-column-start:5}.offset-sm-5{grid-column-start:6}.offset-sm-6{grid-column-start:7}.offset-sm-7{grid-column-start:8}.offset-sm-8{grid-column-start:9}.offset-sm-9{grid-column-start:10}.offset-sm-10{grid-column-start:11}.offset-sm-11{grid-column-start:12}}@media (min-width: 1024px){.col-md-1{grid-column-end:span 1}.col-md-2{grid-column-end:span 2}.col-md-3{grid-column-end:span 3}.col-md-4{grid-column-end:span 4}.col-md-5{grid-column-end:span 5}.col-md-6{grid-column-end:span 6}.col-md-7{grid-column-end:span 7}.col-md-8{grid-column-end:span 8}.col-md-9{grid-column-end:span 9}.col-md-10{grid-column-end:span 10}.col-md-11{grid-column-end:span 11}.col-md-12{grid-column-end:span 12}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{grid-column-start:1}.offset-md-1{grid-column-start:2}.offset-md-2{grid-column-start:3}.offset-md-3{grid-column-start:4}.offset-md-4{grid-column-start:5}.offset-md-5{grid-column-start:6}.offset-md-6{grid-column-start:7}.offset-md-7{grid-column-start:8}.offset-md-8{grid-column-start:9}.offset-md-9{grid-column-start:10}.offset-md-10{grid-column-start:11}.offset-md-11{grid-column-start:12}}@media (min-width: 1200px){.col-lg-1{grid-column-end:span 1}.col-lg-2{grid-column-end:span 2}.col-lg-3{grid-column-end:span 3}.col-lg-4{grid-column-end:span 4}.col-lg-5{grid-column-end:span 5}.col-lg-6{grid-column-end:span 6}.col-lg-7{grid-column-end:span 7}.col-lg-8{grid-column-end:span 8}.col-lg-9{grid-column-end:span 9}.col-lg-10{grid-column-end:span 10}.col-lg-11{grid-column-end:span 11}.col-lg-12{grid-column-end:span 12}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{grid-column-start:1}.offset-lg-1{grid-column-start:2}.offset-lg-2{grid-column-start:3}.offset-lg-3{grid-column-start:4}.offset-lg-4{grid-column-start:5}.offset-lg-5{grid-column-start:6}.offset-lg-6{grid-column-start:7}.offset-lg-7{grid-column-start:8}.offset-lg-8{grid-column-start:9}.offset-lg-9{grid-column-start:10}.offset-lg-10{grid-column-start:11}.offset-lg-11{grid-column-start:12}}@media (min-width: 1440px){.col-xl-1{grid-column-end:span 1}.col-xl-2{grid-column-end:span 2}.col-xl-3{grid-column-end:span 3}.col-xl-4{grid-column-end:span 4}.col-xl-5{grid-column-end:span 5}.col-xl-6{grid-column-end:span 6}.col-xl-7{grid-column-end:span 7}.col-xl-8{grid-column-end:span 8}.col-xl-9{grid-column-end:span 9}.col-xl-10{grid-column-end:span 10}.col-xl-11{grid-column-end:span 11}.col-xl-12{grid-column-end:span 12}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{grid-column-start:1}.offset-xl-1{grid-column-start:2}.offset-xl-2{grid-column-start:3}.offset-xl-3{grid-column-start:4}.offset-xl-4{grid-column-start:5}.offset-xl-5{grid-column-start:6}.offset-xl-6{grid-column-start:7}.offset-xl-7{grid-column-start:8}.offset-xl-8{grid-column-start:9}.offset-xl-9{grid-column-start:10}.offset-xl-10{grid-column-start:11}.offset-xl-11{grid-column-start:12}}img{margin-bottom:1rem;max-width:100%}video{max-width:100%;height:auto} diff --git a/assets/template-CR0AsWLv.css b/assets/template-CR0AsWLv.css new file mode 100644 index 0000000..70e7e32 --- /dev/null +++ b/assets/template-CR0AsWLv.css @@ -0,0 +1 @@ +@charset "UTF-8";._footer_ux7d3_1{position:relative;z-index:9999;background-color:var(--footer-background);padding:4rem 0 1rem;color:var(--footer-font-color);text-align:center}._copyright_ux7d3_10{font-size:calc(1.275rem + .3vw)}@media (min-width: 1200px){._copyright_ux7d3_10{font-size:1.5rem}}._iconLink_ux7d3_19{display:inline-block;transition:opacity .15s;margin:0 .75rem;border:0}._icon_ux7d3_19{width:2.5rem}._icon_ux7d3_19 path{fill:#fffc;transition:fill .15s}._icon_ux7d3_19:hover path{fill:#f6e81e}._version_ux7d3_37{display:block;margin-top:3.5rem;padding:0 1rem;font-size:.7rem;font-family:ibm-plex-mono,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;text-align:right}._version_ux7d3_37 a{transition:color .15s;border:0}._version_ux7d3_37 a:hover{color:var(--footer-link-color)}._logo_1egx1_1{margin:0;font-weight:900;font-size:2.5rem;line-height:3rem;-webkit-user-select:none;-moz-user-select:none;user-select:none}._logo_1egx1_1>a{transition:color .15s;border:0;color:var(--toolbar-logo-color)}._logo_1egx1_1>a:hover{color:var(--toolbar-logo-hover-color)}._list_139r2_1{display:flex;margin:0;padding:0;list-style:none}._item_139r2_8{font-size:1rem;margin-left:2rem}._item_139r2_8:first-child{margin:0}._item_139r2_8 a{transition:color .15s,border .15s;border-color:transparent;color:var(--toolbar-font-color)}._item_139r2_8 a._current_139r2_20,._item_139r2_8 a:hover{border-bottom:2px solid color-mix(in srgb,var(--toolbar-link-color) 70%,transparent);color:var(--toolbar-link-color)}._toolbar_tv5pn_1{display:flex;position:absolute;top:0;right:0;left:0;justify-content:space-between;align-items:center;z-index:9999;transition:background-color .3s ease-in-out;margin-bottom:-3rem;height:3rem}@media (min-width: 0){._toolbar_tv5pn_1{padding-right:2rem;padding-left:2rem}}@media (min-width: 576px){._toolbar_tv5pn_1{padding-right:2rem;padding-left:2rem}}@media (min-width: 1024px){._toolbar_tv5pn_1{padding-right:3rem;padding-left:3rem}}@media (min-width: 1200px){._toolbar_tv5pn_1{padding-right:4rem;padding-left:4rem}}@media (min-width: 1440px){._toolbar_tv5pn_1{padding-right:4rem;padding-left:4rem}}@media (min-width: 576px){._toolbar_tv5pn_1{position:sticky}}body{--background: #fff;--font-color: #504f4e;--link-color: #797979;--border-color: #222;--on-dark-background: #fff;--toolbar-logo-color: #797979;--toolbar-logo-hover-color: #504f4e;--toolbar-font-color: #797979;--toolbar-link-color: #504f4e;--footer-font-color: #fff;--footer-link-color: #f6e81e;--footer-background: #222}body.home:not(.intro){--toolbar-logo-color: #fff;--toolbar-logo-hover-color: #f6e81e;--toolbar-font-color: #fff;--toolbar-link-color: #f6e81e}body:not(.home).intro{--toolbar-logo-color: #fff;--toolbar-logo-hover-color: #f6e81e;--toolbar-font-color: #fff;--toolbar-link-color: #f6e81e}body:not(.home).visual-intelligence{--background: #222;--font-color: #fff;--link-color: #f6e81e;--border-color: #fff;--on-dark-background: #222;--toolbar-logo-color: #fff;--toolbar-logo-hover-color: #f6e81e;--toolbar-font-color: #fff;--toolbar-link-color: #f6e81e}body:not(.home).synaesthesify{--background: #0c2126;--font-color: #fff;--link-color: #f6e81e;--border-color: #fff;--on-dark-background: #222;--toolbar-logo-color: #fff;--toolbar-logo-hover-color: #f6e81e;--toolbar-font-color: #fff;--toolbar-link-color: #f6e81e}*,*:before,*:after{box-sizing:border-box}body{font-size:calc(1.275rem + .3vw);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;background:var(--background);color:var(--font-color);line-height:1.2;font-family:neue-haas-unica,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}@media (min-width: 1200px){body{font-size:1.5rem}}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}h3{margin-top:2em}h3:first-child{margin-top:0}p,.font--paragraph{font-size:calc(1.3rem + .6vw);margin-top:0;margin-bottom:1em;line-height:1.4}@media (min-width: 1200px){p,.font--paragraph{font-size:1.75rem}}a{transition:border .15s;border-bottom:3px solid color-mix(in srgb,var(--link-color) 70%,transparent);color:inherit;text-decoration:none}a:hover{border-color:var(--link-color);text-decoration:none}ul,ol,dl{margin:0 0 1rem}dd{margin-left:0}figure{margin:0 0 1rem}.font--title{font-size:calc(1.525rem + 3.3vw);margin-bottom:.5em;font-weight:900;line-height:1.1;font-family:big-caslon-fb,serif;letter-spacing:.02em}@media (min-width: 1200px){.font--title{font-size:4rem}}.font--subtitle{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.1}@media (min-width: 1200px){.font--subtitle{font-size:3rem}}.font--headline{font-size:calc(1.3rem + .6vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.font--headline{font-size:1.75rem}}.font--overview{font-size:calc(1.3rem + .6vw);font-weight:600;line-height:1.2}@media (min-width: 1200px){.font--overview{font-size:1.75rem}}.font--default{font-size:calc(1.275rem + .3vw)}@media (min-width: 1200px){.font--default{font-size:1.5rem}}abbr[title]{cursor:inherit;text-decoration:none}blockquote{font-size:calc(1.525rem + 3.3vw);margin-bottom:.5em;font-weight:900;line-height:1.1;font-family:big-caslon-fb,serif;letter-spacing:.02em}@media (min-width: 1200px){blockquote{font-size:4rem}}blockquote:before{content:"“"}blockquote:after{content:"”"}q{font-style:italic}small{font-size:1rem}::-moz-selection{background-color:color-mix(in srgb,#f6e81e 50%,transparent)}::selection{background-color:color-mix(in srgb,#f6e81e 50%,transparent)}body{transition:background-color .3s ease-in-out}.container{display:grid;grid-template-columns:repeat(12,1fr);margin-right:auto;margin-left:auto;width:100%}@media (min-width: 576px){.container{max-width:540px}}@media (min-width: 1024px){.container{max-width:720px}}@media (min-width: 1200px){.container{max-width:960px}}@media (min-width: 1440px){.container{max-width:1140px}}@media (min-width: 0){.container{-moz-column-gap:0;column-gap:0;padding-right:2rem;padding-left:2rem}}@media (min-width: 576px){.container{-moz-column-gap:0 2rem;column-gap:0 2rem;padding-right:2rem;padding-left:2rem}}@media (min-width: 1024px){.container{-moz-column-gap:0 2rem;column-gap:0 2rem;padding-right:3rem;padding-left:3rem}}@media (min-width: 1200px){.container{-moz-column-gap:0 4rem;column-gap:0 4rem;padding-right:4rem;padding-left:4rem}}@media (min-width: 1440px){.container{-moz-column-gap:0 4rem;column-gap:0 4rem;padding-right:4rem;padding-left:4rem}}.container-fluid{display:grid;grid-template-columns:repeat(12,1fr);margin-right:auto;margin-left:auto;width:100%;position:relative;max-width:1920px}@media (min-width: 0){.container-fluid{gap:0;padding-right:2rem;padding-left:2rem}}@media (min-width: 576px){.container-fluid{gap:0 2rem;padding-right:2rem;padding-left:2rem}}@media (min-width: 1024px){.container-fluid{gap:0 2rem;padding-right:3rem;padding-left:3rem}}@media (min-width: 1200px){.container-fluid{gap:0 4rem;padding-right:4rem;padding-left:4rem}}@media (min-width: 1440px){.container-fluid{gap:0 4rem;padding-right:4rem;padding-left:4rem}}.col-nested{grid-column-start:1;grid-column-end:span 12}@media (min-width: 0){.col-nested{margin-right:-2rem;margin-left:-2rem}}@media (min-width: 576px){.col-nested{margin-right:-2rem;margin-left:-2rem}}@media (min-width: 1024px){.col-nested{margin-right:-3rem;margin-left:-3rem}}@media (min-width: 1200px){.col-nested{margin-right:-4rem;margin-left:-4rem}}@media (min-width: 1440px){.col-nested{margin-right:-4rem;margin-left:-4rem}}@media (min-width: 0){.col-1{grid-column-end:span 1}.col-2{grid-column-end:span 2}.col-3{grid-column-end:span 3}.col-4{grid-column-end:span 4}.col-5{grid-column-end:span 5}.col-6{grid-column-end:span 6}.col-7{grid-column-end:span 7}.col-8{grid-column-end:span 8}.col-9{grid-column-end:span 9}.col-10{grid-column-end:span 10}.col-11{grid-column-end:span 11}.col-12{grid-column-end:span 12}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{grid-column-start:2}.offset-2{grid-column-start:3}.offset-3{grid-column-start:4}.offset-4{grid-column-start:5}.offset-5{grid-column-start:6}.offset-6{grid-column-start:7}.offset-7{grid-column-start:8}.offset-8{grid-column-start:9}.offset-9{grid-column-start:10}.offset-10{grid-column-start:11}.offset-11{grid-column-start:12}}@media (min-width: 576px){.col-sm-1{grid-column-end:span 1}.col-sm-2{grid-column-end:span 2}.col-sm-3{grid-column-end:span 3}.col-sm-4{grid-column-end:span 4}.col-sm-5{grid-column-end:span 5}.col-sm-6{grid-column-end:span 6}.col-sm-7{grid-column-end:span 7}.col-sm-8{grid-column-end:span 8}.col-sm-9{grid-column-end:span 9}.col-sm-10{grid-column-end:span 10}.col-sm-11{grid-column-end:span 11}.col-sm-12{grid-column-end:span 12}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{grid-column-start:1}.offset-sm-1{grid-column-start:2}.offset-sm-2{grid-column-start:3}.offset-sm-3{grid-column-start:4}.offset-sm-4{grid-column-start:5}.offset-sm-5{grid-column-start:6}.offset-sm-6{grid-column-start:7}.offset-sm-7{grid-column-start:8}.offset-sm-8{grid-column-start:9}.offset-sm-9{grid-column-start:10}.offset-sm-10{grid-column-start:11}.offset-sm-11{grid-column-start:12}}@media (min-width: 1024px){.col-md-1{grid-column-end:span 1}.col-md-2{grid-column-end:span 2}.col-md-3{grid-column-end:span 3}.col-md-4{grid-column-end:span 4}.col-md-5{grid-column-end:span 5}.col-md-6{grid-column-end:span 6}.col-md-7{grid-column-end:span 7}.col-md-8{grid-column-end:span 8}.col-md-9{grid-column-end:span 9}.col-md-10{grid-column-end:span 10}.col-md-11{grid-column-end:span 11}.col-md-12{grid-column-end:span 12}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{grid-column-start:1}.offset-md-1{grid-column-start:2}.offset-md-2{grid-column-start:3}.offset-md-3{grid-column-start:4}.offset-md-4{grid-column-start:5}.offset-md-5{grid-column-start:6}.offset-md-6{grid-column-start:7}.offset-md-7{grid-column-start:8}.offset-md-8{grid-column-start:9}.offset-md-9{grid-column-start:10}.offset-md-10{grid-column-start:11}.offset-md-11{grid-column-start:12}}@media (min-width: 1200px){.col-lg-1{grid-column-end:span 1}.col-lg-2{grid-column-end:span 2}.col-lg-3{grid-column-end:span 3}.col-lg-4{grid-column-end:span 4}.col-lg-5{grid-column-end:span 5}.col-lg-6{grid-column-end:span 6}.col-lg-7{grid-column-end:span 7}.col-lg-8{grid-column-end:span 8}.col-lg-9{grid-column-end:span 9}.col-lg-10{grid-column-end:span 10}.col-lg-11{grid-column-end:span 11}.col-lg-12{grid-column-end:span 12}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{grid-column-start:1}.offset-lg-1{grid-column-start:2}.offset-lg-2{grid-column-start:3}.offset-lg-3{grid-column-start:4}.offset-lg-4{grid-column-start:5}.offset-lg-5{grid-column-start:6}.offset-lg-6{grid-column-start:7}.offset-lg-7{grid-column-start:8}.offset-lg-8{grid-column-start:9}.offset-lg-9{grid-column-start:10}.offset-lg-10{grid-column-start:11}.offset-lg-11{grid-column-start:12}}@media (min-width: 1440px){.col-xl-1{grid-column-end:span 1}.col-xl-2{grid-column-end:span 2}.col-xl-3{grid-column-end:span 3}.col-xl-4{grid-column-end:span 4}.col-xl-5{grid-column-end:span 5}.col-xl-6{grid-column-end:span 6}.col-xl-7{grid-column-end:span 7}.col-xl-8{grid-column-end:span 8}.col-xl-9{grid-column-end:span 9}.col-xl-10{grid-column-end:span 10}.col-xl-11{grid-column-end:span 11}.col-xl-12{grid-column-end:span 12}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{grid-column-start:1}.offset-xl-1{grid-column-start:2}.offset-xl-2{grid-column-start:3}.offset-xl-3{grid-column-start:4}.offset-xl-4{grid-column-start:5}.offset-xl-5{grid-column-start:6}.offset-xl-6{grid-column-start:7}.offset-xl-7{grid-column-start:8}.offset-xl-8{grid-column-start:9}.offset-xl-9{grid-column-start:10}.offset-xl-10{grid-column-start:11}.offset-xl-11{grid-column-start:12}}img{margin-bottom:1rem;max-width:100%}video{max-width:100%;height:auto} diff --git a/assets/template-ByEHfdYF.js b/assets/template-DEwkplrf.js similarity index 100% rename from assets/template-ByEHfdYF.js rename to assets/template-DEwkplrf.js diff --git a/assets/title-D785si6n.js b/assets/title-C9g8anI-.js similarity index 88% rename from assets/title-D785si6n.js rename to assets/title-C9g8anI-.js index fc19777..90fbbcd 100644 --- a/assets/title-D785si6n.js +++ b/assets/title-C9g8anI-.js @@ -1 +1 @@ -import{f as o,i as s,c,b as a,t as r,a as d}from"./template-ByEHfdYF.js";const h="_section_16620_1",u="_noPadding_16620_27",g="_fullHeight_16620_32",l={section:h,noPadding:u,fullHeight:g};var m=r("
      ");function P(e){const t=[l.section,"col-12","col-md-8","col-xl-6"];return e.class&&t.push(e.class),e.align==="left"?(t.push("col-sm-8"),t.push("offset-xl-1")):(t.push("col-sm-10"),t.push("offset-sm-1"),t.push("offset-md-2"),t.push("offset-xl-3")),e.fullHeight&&t.push(l.fullHeight),e.noPadding&&(t.push(l.noPadding),t.push("section--no-padding")),(()=>{var n=m(),i=e.ref;return typeof i=="function"?o(i,n):e.ref=n,s(n,()=>e.children),c(()=>a(n,t.join(" "))),n})()}const $="_intro_1cyyr_1",v={intro:$};var x=r('

      ');function j(e){return(()=>{var t=x(),n=t.firstChild,i=n.firstChild,_=i.nextSibling,f=e.ref;return typeof f=="function"?o(f,t):e.ref=t,s(i,()=>e.title),s(_,()=>e.headline),c(()=>a(t,d(v.intro,e.class,"col-12","col-sm-10","offset-sm-1","col-lg-8","offset-lg-2","project__intro"))),t})()}export{P as S,j as T}; +import{f as o,i as s,c,b as a,t as r,a as d}from"./template-DEwkplrf.js";const h="_section_16620_1",u="_noPadding_16620_27",g="_fullHeight_16620_32",l={section:h,noPadding:u,fullHeight:g};var m=r("
      ");function P(e){const t=[l.section,"col-12","col-md-8","col-xl-6"];return e.class&&t.push(e.class),e.align==="left"?(t.push("col-sm-8"),t.push("offset-xl-1")):(t.push("col-sm-10"),t.push("offset-sm-1"),t.push("offset-md-2"),t.push("offset-xl-3")),e.fullHeight&&t.push(l.fullHeight),e.noPadding&&(t.push(l.noPadding),t.push("section--no-padding")),(()=>{var n=m(),i=e.ref;return typeof i=="function"?o(i,n):e.ref=n,s(n,()=>e.children),c(()=>a(n,t.join(" "))),n})()}const $="_intro_1cyyr_1",v={intro:$};var x=r('

      ');function j(e){return(()=>{var t=x(),n=t.firstChild,i=n.firstChild,_=i.nextSibling,f=e.ref;return typeof f=="function"?o(f,t):e.ref=t,s(i,()=>e.title),s(_,()=>e.headline),c(()=>a(t,d(v.intro,e.class,"col-12","col-sm-10","offset-sm-1","col-lg-8","offset-lg-2","project__intro"))),t})()}export{P as S,j as T}; diff --git a/assets/typing-practice-CWRvwoI-.js b/assets/typing-practice-B7Nv8n7N.js similarity index 98% rename from assets/typing-practice-CWRvwoI-.js rename to assets/typing-practice-B7Nv8n7N.js index b965214..5916585 100644 --- a/assets/typing-practice-CWRvwoI-.js +++ b/assets/typing-practice-B7Nv8n7N.js @@ -1,4 +1,4 @@ -import{f as x,i as s,h as a,c as y,b as d,E as u,t as e,m as S}from"./template-ByEHfdYF.js";import{p as g,R as j,B as h,H as c,I as p}from"./project.module-CfcmTz4O.js";import{C as f}from"./cards-BzwuqlUe.js";import{G as W}from"./gallery-DIUdS5aK.js";import{P as $}from"./picture-DoVBIOq-.js";import{T as _,S as o}from"./title-D785si6n.js";import{u as k}from"./useInitProject-D_rdr1bV.js";import{B as C}from"./typing_practice_bg-Cez8mW-L.js";const I="/assets/application-lg-D9uffI9e.jpg",T="/assets/application-lg-CLenPyn9.webp",D="/assets/application-md-lVqClql0.jpg",X="/assets/application-md-E16VRpgK.webp",P="/assets/application-sm-_8-nqhjZ.jpg",M="/assets/application-sm-hl_275qo.webp",B="/assets/application-xl-C5OpLb5y.jpg",R="/assets/application-xl-CoRXc5Ky.webp",L="/assets/application-xs-UedUOX6M.jpg",K="/assets/application-xs-CONWNNlm.webp",E="/assets/application-B6uFBdlr.jpg",A="/assets/application-ClePgXgC.webp",q={xs:L,sm:P,md:D,lg:I,xl:B,default:E},O={xs:K,sm:M,md:X,lg:T,xl:R,default:A},N={jpg:q,webp:O},F="/assets/level-complete-lg-y3VU1t_D.jpg",H="/assets/level-complete-lg-zZgWC3Ui.webp",U="/assets/level-complete-md-DXOjhV5q.jpg",G="/assets/level-complete-md-DzRzmBPv.webp",Q="/assets/level-complete-sm-hNdhe6GR.jpg",Z="/assets/level-complete-sm-DIDXds1s.webp",z="/assets/level-complete-xl-CUAi-avF.jpg",V="/assets/level-complete-xl-qfN-k-mQ.webp",J="/assets/level-complete-xs-C_hRPIBa.jpg",Y="/assets/level-complete-xs-DjwIV2Sx.webp",ee="/assets/level-complete-D4OI11qp.jpg",te="/assets/level-complete-CcXO7qzq.webp",se={xs:J,sm:Q,md:U,lg:F,xl:z,default:ee},ae={xs:Y,sm:Z,md:G,lg:H,xl:V,default:te},ne={jpg:se,webp:ae},oe="/assets/level-selection-lg-HFZQZJMO.jpg",re="/assets/level-selection-lg-fH1t1CWM.webp",le="/assets/level-selection-md-iXSFGzo1.jpg",ie="/assets/level-selection-md-D5WgI0b9.webp",ce="/assets/level-selection-sm-CXMVJjPO.jpg",pe="/assets/level-selection-sm-8ziGeEDZ.webp",ge="/assets/level-selection-xl-CRWCS1bh.jpg",de="/assets/level-selection-xl-DEIcOIZK.webp",he="/assets/level-selection-xs-DNDMCUy_.jpg",ue="/assets/level-selection-xs-BezCRtwX.webp",me="/assets/level-selection-CIIJyv6F.jpg",we="/assets/level-selection-B-fcnqEG.webp",be={xs:he,sm:ce,md:le,lg:oe,xl:ge,default:me},ye={xs:ue,sm:pe,md:ie,lg:re,xl:de,default:we},fe={jpg:be,webp:ye},ve="/assets/long-paragraph-screen-lg-qeiYCezB.jpg",xe="/assets/long-paragraph-screen-lg-pZGItH4u.webp",Se="/assets/long-paragraph-screen-md-BUJlJgb6.jpg",je="/assets/long-paragraph-screen-md-CHDuNopj.webp",We="/assets/long-paragraph-screen-sm-B6Pvmi_W.jpg",$e="/assets/long-paragraph-screen-sm-Cf7UWHDj.webp",_e="/assets/long-paragraph-screen-xl-DO5IMn4o.jpg",ke="/assets/long-paragraph-screen-xl-yo-o-1qH.webp",Ce="/assets/long-paragraph-screen-xs-DwnQ0lyc.jpg",Ie="/assets/long-paragraph-screen-xs-DXmFW4zW.webp",Te="/assets/long-paragraph-screen-CqlE7i29.jpg",De="/assets/long-paragraph-screen-QTTPXuva.webp",Xe={xs:Ce,sm:We,md:Se,lg:ve,xl:_e,default:Te},Pe={xs:Ie,sm:$e,md:je,lg:xe,xl:ke,default:De},Me={jpg:Xe,webp:Pe},Be="/assets/long-paragraph-selection-lg-dmqJpSGl.jpg",Re="/assets/long-paragraph-selection-lg-BXtU-1dy.webp",Le="/assets/long-paragraph-selection-md-BAaZSn8j.jpg",Ke="/assets/long-paragraph-selection-md-D5Tumc6Q.webp",Ee="/assets/long-paragraph-selection-sm-Dcb6Ykf4.jpg",Ae="/assets/long-paragraph-selection-sm-D35LzlKq.webp",qe="/assets/long-paragraph-selection-xl-DVEq2u7s.jpg",Oe="/assets/long-paragraph-selection-xl-BBN4Gk6K.webp",Ne="/assets/long-paragraph-selection-xs-CUaZotNk.jpg",Fe="/assets/long-paragraph-selection-xs-B-mwksX_.webp",He="/assets/long-paragraph-selection-Eb8Ppr-U.jpg",Ue="/assets/long-paragraph-selection-BTvkzZgw.webp",Ge={xs:Ne,sm:Ee,md:Le,lg:Be,xl:qe,default:He},Qe={xs:Fe,sm:Ae,md:Ke,lg:Re,xl:Oe,default:Ue},Ze={jpg:Ge,webp:Qe},ze="/assets/practice-screen-lg-D4diQkIF.jpg",Ve="/assets/practice-screen-lg-LFbdHTMu.webp",Je="/assets/practice-screen-md-TceQG0Fy.jpg",Ye="/assets/practice-screen-md-B_t-WLnp.webp",et="/assets/practice-screen-sm-CjQo_8Xi.jpg",tt="/assets/practice-screen-sm-Dzh75bsh.webp",st="/assets/practice-screen-xl-DHT8Epy_.jpg",at="/assets/practice-screen-xl-BW1AUMu9.webp",nt="/assets/practice-screen-xs-BGd77xoV.jpg",ot="/assets/practice-screen-xs-X6Xmeq-A.webp",rt="/assets/practice-screen-BiEZdQUT.jpg",lt="/assets/practice-screen-qw_-8rTv.webp",it={xs:nt,sm:et,md:Je,lg:ze,xl:st,default:rt},ct={xs:ot,sm:tt,md:Ye,lg:Ve,xl:at,default:lt},pt={jpg:it,webp:ct},gt="/assets/short-sentence-lg-BwQ0EePs.jpg",dt="/assets/short-sentence-lg-DoxuykwT.webp",ht="/assets/short-sentence-md-ClJpNtkb.jpg",ut="/assets/short-sentence-md-wkYVllpn.webp",mt="/assets/short-sentence-sm-COfJdsW4.jpg",wt="/assets/short-sentence-sm-DNZ2uAtI.webp",bt="/assets/short-sentence-xl-KMHsFMs_.jpg",yt="/assets/short-sentence-xl-D45W1tDf.webp",ft="/assets/short-sentence-xs-CErsTwCG.jpg",vt="/assets/short-sentence-xs-DdGV8sZQ.webp",xt="/assets/short-sentence-CpoHYIcc.jpg",St="/assets/short-sentence-Cqiq0DE6.webp",jt={xs:ft,sm:mt,md:ht,lg:gt,xl:bt,default:xt},Wt={xs:vt,sm:wt,md:ut,lg:dt,xl:yt,default:St},$t={jpg:jt,webp:Wt},_t="/assets/special-keys-lg-DsQNPJ8y.jpg",kt="/assets/special-keys-lg-DNm6dFdU.webp",Ct="/assets/special-keys-md-CWEAat8w.jpg",It="/assets/special-keys-md-6eXLAezB.webp",Tt="/assets/special-keys-sm-D1Sc9LZr.jpg",Dt="/assets/special-keys-sm-xx29mC6I.webp",Xt="/assets/special-keys-xl-Cl_SUM1x.jpg",Pt="/assets/special-keys-xl-CV7GW8fJ.webp",Mt="/assets/special-keys-xs-u2T-DyxR.jpg",Bt="/assets/special-keys-xs-C3H189no.webp",Rt="/assets/special-keys-BkY5qoXM.jpg",Lt="/assets/special-keys-6dPoKE0h.webp",Kt={xs:Mt,sm:Tt,md:Ct,lg:_t,xl:Xt,default:Rt},Et={xs:Bt,sm:Dt,md:It,lg:kt,xl:Pt,default:Lt},At={jpg:Kt,webp:Et},qt="/assets/teaching-in-rwanda-lg-CFeDcweR.jpg",Ot="/assets/teaching-in-rwanda-lg-Dic0BBYS.webp",Nt="/assets/teaching-in-rwanda-md-ikK68Waw.jpg",Ft="/assets/teaching-in-rwanda-md-DUtusymv.webp",Ht="/assets/teaching-in-rwanda-sm-B1CaINQ-.jpg",Ut="/assets/teaching-in-rwanda-sm-BQYMQuCK.webp",Gt="/assets/teaching-in-rwanda-xl-nitpwkvy.jpg",Qt="/assets/teaching-in-rwanda-xl-CY8UhGfE.webp",Zt="/assets/teaching-in-rwanda-xs-CjFlmwEy.jpg",zt="/assets/teaching-in-rwanda-xs-fbFBJ9Qz.webp",Vt="/assets/teaching-in-rwanda-B8mDTQ3P.jpg",Jt="/assets/teaching-in-rwanda-DVkAE4F0.webp",Yt={xs:Zt,sm:Ht,md:Nt,lg:qt,xl:Gt,default:Vt},es={xs:zt,sm:Ut,md:Ft,lg:Ot,xl:Qt,default:Jt},ts={jpg:Yt,webp:es},ss="/assets/teaching-method-lg-NZ3VzdNM.jpg",as="/assets/teaching-method-lg-DwRrp1TO.webp",ns="/assets/teaching-method-md-DcHingk6.jpg",os="/assets/teaching-method-md-eqWaLXf_.webp",rs="/assets/teaching-method-sm-D5wc1H_D.jpg",ls="/assets/teaching-method-sm-B7QGNNXJ.webp",is="/assets/teaching-method-xl-BZLGvbw-.jpg",cs="/assets/teaching-method-xl-KNXfFQfa.webp",ps="/assets/teaching-method-xs-B4Huh4GA.jpg",gs="/assets/teaching-method-xs-DccZTutq.webp",ds="/assets/teaching-method-rne_iSDC.jpg",hs="/assets/teaching-method-2-biUbR8.webp",us={xs:ps,sm:rs,md:ns,lg:ss,xl:is,default:ds},ms={xs:gs,sm:ls,md:os,lg:as,xl:cs,default:hs},ws={jpg:us,webp:ms},bs="/assets/typing-demonstration-lg-ATW2jT1Z.jpg",ys="/assets/typing-demonstration-lg-B9vEHtp_.webp",fs="/assets/typing-demonstration-md-DIwPTprl.jpg",vs="/assets/typing-demonstration-md-GSaEMNj3.webp",xs="/assets/typing-demonstration-sm-Bek1B1TK.jpg",Ss="/assets/typing-demonstration-sm-BFG9oHI8.webp",js="/assets/typing-demonstration-xl-C8yy2ROK.jpg",Ws="/assets/typing-demonstration-xl-BEGvtQ1T.webp",$s="/assets/typing-demonstration-xs-Cp7hcx6R.jpg",_s="/assets/typing-demonstration-xs-DNSrdvEg.webp",ks="/assets/typing-demonstration-HFHyrP03.jpg",Cs="/assets/typing-demonstration-DkdwW7R_.webp",Is={xs:$s,sm:xs,md:fs,lg:bs,xl:js,default:ks},Ts={xs:_s,sm:Ss,md:vs,lg:ys,xl:Ws,default:Cs},Ds={jpg:Is,webp:Ts},Xs="/assets/user-test-lg-OHhmWSc9.jpg",Ps="/assets/user-test-lg-CfbfvdNK.webp",Ms="/assets/user-test-md-CorLRY2n.jpg",Bs="/assets/user-test-md-CgPZXP1N.webp",Rs="/assets/user-test-sm-BuNpsXOY.jpg",Ls="/assets/user-test-sm-BpbdMEjS.webp",Ks="/assets/user-test-xl-DIfbX9fV.jpg",Es="/assets/user-test-xl-BQRyhKFQ.webp",As="/assets/user-test-xs-DhpW7FI2.jpg",qs="/assets/user-test-xs-B7ZdFrij.webp",Os="/assets/user-test-B0QWPZD5.jpg",Ns="/assets/user-test-CLZhRh3S.webp",Fs={xs:As,sm:Rs,md:Ms,lg:Xs,xl:Ks,default:Os},Hs={xs:qs,sm:Ls,md:Bs,lg:Ps,xl:Es,default:Ns},Us={jpg:Fs,webp:Hs};var Gs=e("
      "),Qs=e("

      Introduction"),Zs=e("

      I spent about 2.5 years in Rwanda serving as an IT education volunteer. It was an alternative service for Korean mandatory military service by KOICA (Korea International Cooperation Agency) under Ministry of Foreign Affairs."),zs=e("

      The above quote was the very first question I got from my students in my first lecture with the classic ‘Hello World!’ example. This C/C++ programming course was intended for second-year IT-major students in a college in Rwanda."),Vs=e("

      ...and this turned out to be one of my better days."),Js=e("

      Challenges (a.k.a. The Reality)"),Ys=e("

      When another student shouted right after my short instructions on how to use shift key, I realised that student had a German keyboard. Some students even had Arabic keyboards!"),ea=e("

      But again, this was one of my better days – because, at least, the school had electricity on that day."),ta=e("

      Frequent power outage"),sa=e("

      How many people in developing countries have 24/7 access to electricity? Some obvious things for us are considered luxuries for people living in this part of the world. Teaching any computer-related things without power was a great challenge for me and colleagues."),aa=e("

      This fact extends to personal access to computers, not to mention individual's ability to afford one. We can safely assume the lecture hours are the only chances for students to use computers."),na=e("

      Power outage also causes maintenance issue. Due to the unstable electricity, computers have significantly lower lifespan, forcing schools to spend more money into parts."),oa=e("

      Rainy season"),ra=e("

      This may sound strange, but the weather was a great blocker for running courses for two main reasons."),la=e("

      First reason is that during the rain, it is extremely dangerous to move in Rwanda due to high chances of lightning strikes. Also, one of the main affordable and reliable transportations is moto-taxi, which cannot run in heavy rain. This means most of the students will not make it to the school in such weather."),ia=e("

      Another reason rain hinders lecture is due to tin roofs. Most Rwandan schools and houses are built with affordable tin roofs, which make much noise during rain. In a pouring rain, it is simply impossible to hear anything under such roof."),ca=e("

      Language barrier"),pa=e("

      Education in Rwanda after primary school is officially done in English. However, in rural areas where average education rate is relatively lower, it is realistically not possible to give lectures only in English."),ga=e("

      On the other hand, there was no material on IT education written in Kinyarwanda language, so it was a great challenge for us to prepare our own lecture materials."),da=e("

      Approach"),ha=e("

      It is obvious that we, as a group of volunteers, cannot radically solve all the problems at once. We had to focus on what we could achieve within our service period."),ua=e("

      Our primary goal (targeted for IT education volunteers) was very clear – effectively teach students on how to type. We simply could not move on to next lecture without students being able to type!"),ma=e("

      We decided to make a typing practice software, and we defined three main approaches to help ourselves achieve the goal:"),wa=e("

      Process"),ba=e("

      Once our approaches were defined, we quickly started to build the actual software, aiming for a quick proof-of-concept test."),ya=e("

      The team focused on building a working prototype for the test phase. Meanwhile, we also gathered supporters from KOICA volunteers to arrange user testing sessions together with Rwanda Education Board."),fa=e("

      User test"),va=e("

      With the help of Rwanda Education Board and participating schools, we were able to gather students to try our software. We wanted to test if students could follow instructions, but more importantly, we wanted to know if this actually is an effective way of teaching. Below are our key findings."),xa=e("

      Collaboration with Rwanda Education Board"),Sa=e("

      One of the biggest challenges we had was the Kinyarwanda language. Also, gathering contents for typing exercises was extremely difficult due to lack of digital database on literature as well as rarity of Rwandan literatures."),ja=e("

      For this, we collaborated with Rwanda Education Board to gather usable contents. They were able to provide us with already existing course materials, and they offered us to help with translating English literatures."),Wa=e("

      In addition, they agreed to include typing practice as an official curriculum for all Rwandan schools, which would significantly make distribution easier. To support the process, KOICA offered to sponsor software CD production and provide trainings for teachers."),$a=e("

      Outcome"),_a=e("

      Based on the user test outcomes, we finalised our software with improved features and local contents provided by Rwanda Education Board. At the same time, we proceeded to organise teaching sessions to introduce it as well as train first group of teachers and students."),ka=e("/ˈɲaruka/ n. to be quick"),Ca=e("

      The software"),Ia=e("

      The name Nyaruka was suggested by Rwanda Education Board, which – according to them – straightforwardly represents the purpose of “enhancing typing speed.”"),Ta=e("

      The structure of the program is similar to other existing typing practice software, with keyboard position training and various exercises ranging from single characters to long paragraphs."),Da=e("

      We tried to gamify the learning process, hence the joyful design style with game-like interfaces. We found this very effective, as several people during showcase events challenged us to compete with typing speed. Interestingly, the gamifying process itself helped us to naturally come up with new evaluation criteria such as frequently mistaken keys."),Xa=e("

      Applying to the field"),Pa=e("

      After finalising our software, we actively sought for opportunities to utilise it in actual teaching situations. While in bulk production, it was pre-distributed to KOICA volunteers who could directly apply it in their teaching."),Ma=e("

      We were also invited to Tech-girl camp – organised by Peace Corps and Michigan State University as part of women empowerment programme. Together with their volunteers, we gave effective typing lessons to Rwandan girls using our software, along with other general IT courses."),Ba=e("

      It was a great opportunity to test, develop and share teaching methods with education experts from the field, especially because many of KOICA volunteers did not have any pedagogical knowledge. We later shared our learnings with KOICA community to apply new methods in our teaching. Detailed evaluation report on Techkobwa camp can be found ."),Ra=e("

      The Last Moment Failure"),La=e("

      Everything seemed to be going so well, until the very last moment. And there was nothing we could do about it."),Ka=e("

      Rwanda Education Board has informed KOICA shortly after the production of software CDs that they cannot distribute CDs until we fix our content. We tried to triple check our contents together with the board members before the production, but unfortunately, this nevertheless happened."),Ea=e("

      Things got really tricky as KOICA had already spent all budgets to produce CDs, and to make things worse, the team's service period was almost ending. If things could not be solved within a few weeks, there would nothing we could do."),Aa=e("

      Rwanda Education Board and KOICA had several meetings to seek for solutions, but sadly the conflict only became worse into political arguments. Eventually, the distribution was postponed indefinitely, with neither side following up until today."),qa=e("

      Learnings and Next Steps"),Oa=e("

      A project can nevertheless fail – the team learnt it the hard way. Although we, as experienced volunteers in the actual fields, were clearly aware anything unexpected could happen, it was very hard for us to accept the result. The reason behind our failure was completely out of our control, and there was nothing we could do about it – a painful, but a lifetime lesson."),Na=e("

      How can we teach IT without any digital tools?"),Fa=e("

      Despite the unsatisfactory result, like any other projects, our journey gave us priceless learnings. I personally found the collaboration with Peace Corps and Michigan State University really opened up my eyes."),Ha=e("

      As a computer education volunteer coming from non-teaching background, I have never thought about teaching the digital world without plugs. However, what those education experts demonstrated in the camp made me realise how creative teaching could be, and also how unprepared I was in giving such education to others."),Ua=e("

      Just like preparing design workshops, those volunteers prepared a number of activities students could easily do without any power – for example, playing with binaries using simple black-and-white cards!"),Ga=e("

      Applying teaching methods for and with typing practice"),Qa=e("

      Such experience also made me wonder if there would be more effective ways in teaching how to type. None of the team had any knowledge in pedagogy, nor did we learn typing with a software like this."),Za=e("

      I recently (2019) had a good discussion with a friend regarding this project, as I am currently planning to re-develop the software. He suggested me to focus on utilising the software in teaching rather than focusing on the typing itself, as most of us ourselves learnt typing naturally rather than by practicing with a software."),za=e("

      Inspired by this, and also looking back on one of our first aims to increase literacy, I hope to re-launch this project in open source and suggest a new school curriculum for developing countries, in which students have more chances to read and type."),Va=e("

      "),Ja=e("Nyaruka!"),Ya=e('KOICA'),en=e("

      The main reason we decided to develop another typing practice software was because there was surprisingly no available multilingual solution. The whole point of this is to make education material written in Kinyarwanda language."),tn=e("

      The software is mainly for teaching young students, and we also observed many of them are often afraid to use computer for the first time. We tried to make our software joyful so students can enjoy learning to type."),sn=e("

      Many students in Rwanda have limited access to books. . We thought we could help them read more by including literatures for long paragraph typing exercises."),an=e("

      During our tests, it became clear that students have no problem in following our software if we give them clear instructions. This also meant proper training for teachers on utilising the software is necessary."),nn=e("

      Our observations gave some inspirations on features as well. For example, we found out that students tended to keep their eyes on on-screen keyboard, which prevented them from improving – so we implemented a feature to completely hide the keyboard."),on=e("

      Although we were aware our software needed to run on low-end machines, there still were things we could not consider, for example, ultra-low resolution. Our test sessions helped us to ensure more coverage for schools.");function rn(){const v=l=>{k("typing-practice",l)};return[(()=>{var l=Gs(),t=l.firstChild,r=t.firstChild,i=t.nextSibling;return x(v,t),s(t,a($,{alt:"Nyaruka! Typing Practice",get class(){return g.bg},srcset:C}),r),s(i,a(_,{get title(){return[Ja()," Typing practice software for Rwanda"]},headline:` +import{f as x,i as s,h as a,c as y,b as d,E as u,t as e,m as S}from"./template-DEwkplrf.js";import{p as g,R as j,B as h,H as c,I as p}from"./project.module-EyBcDRJv.js";import{C as f}from"./cards-DXqYv8UG.js";import{G as W}from"./gallery-aZizFZOU.js";import{P as $}from"./picture-DZcGR_Rp.js";import{T as _,S as o}from"./title-C9g8anI-.js";import{u as k}from"./useInitProject-BYcbynEk.js";import{B as C}from"./typing_practice_bg-Cez8mW-L.js";const I="/assets/application-lg-D9uffI9e.jpg",T="/assets/application-lg-CLenPyn9.webp",D="/assets/application-md-lVqClql0.jpg",X="/assets/application-md-E16VRpgK.webp",P="/assets/application-sm-_8-nqhjZ.jpg",M="/assets/application-sm-hl_275qo.webp",B="/assets/application-xl-C5OpLb5y.jpg",R="/assets/application-xl-CoRXc5Ky.webp",L="/assets/application-xs-UedUOX6M.jpg",K="/assets/application-xs-CONWNNlm.webp",E="/assets/application-B6uFBdlr.jpg",A="/assets/application-ClePgXgC.webp",q={xs:L,sm:P,md:D,lg:I,xl:B,default:E},O={xs:K,sm:M,md:X,lg:T,xl:R,default:A},N={jpg:q,webp:O},F="/assets/level-complete-lg-y3VU1t_D.jpg",H="/assets/level-complete-lg-zZgWC3Ui.webp",U="/assets/level-complete-md-DXOjhV5q.jpg",G="/assets/level-complete-md-DzRzmBPv.webp",Q="/assets/level-complete-sm-hNdhe6GR.jpg",Z="/assets/level-complete-sm-DIDXds1s.webp",z="/assets/level-complete-xl-CUAi-avF.jpg",V="/assets/level-complete-xl-qfN-k-mQ.webp",J="/assets/level-complete-xs-C_hRPIBa.jpg",Y="/assets/level-complete-xs-DjwIV2Sx.webp",ee="/assets/level-complete-D4OI11qp.jpg",te="/assets/level-complete-CcXO7qzq.webp",se={xs:J,sm:Q,md:U,lg:F,xl:z,default:ee},ae={xs:Y,sm:Z,md:G,lg:H,xl:V,default:te},ne={jpg:se,webp:ae},oe="/assets/level-selection-lg-HFZQZJMO.jpg",re="/assets/level-selection-lg-fH1t1CWM.webp",le="/assets/level-selection-md-iXSFGzo1.jpg",ie="/assets/level-selection-md-D5WgI0b9.webp",ce="/assets/level-selection-sm-CXMVJjPO.jpg",pe="/assets/level-selection-sm-8ziGeEDZ.webp",ge="/assets/level-selection-xl-CRWCS1bh.jpg",de="/assets/level-selection-xl-DEIcOIZK.webp",he="/assets/level-selection-xs-DNDMCUy_.jpg",ue="/assets/level-selection-xs-BezCRtwX.webp",me="/assets/level-selection-CIIJyv6F.jpg",we="/assets/level-selection-B-fcnqEG.webp",be={xs:he,sm:ce,md:le,lg:oe,xl:ge,default:me},ye={xs:ue,sm:pe,md:ie,lg:re,xl:de,default:we},fe={jpg:be,webp:ye},ve="/assets/long-paragraph-screen-lg-qeiYCezB.jpg",xe="/assets/long-paragraph-screen-lg-pZGItH4u.webp",Se="/assets/long-paragraph-screen-md-BUJlJgb6.jpg",je="/assets/long-paragraph-screen-md-CHDuNopj.webp",We="/assets/long-paragraph-screen-sm-B6Pvmi_W.jpg",$e="/assets/long-paragraph-screen-sm-Cf7UWHDj.webp",_e="/assets/long-paragraph-screen-xl-DO5IMn4o.jpg",ke="/assets/long-paragraph-screen-xl-yo-o-1qH.webp",Ce="/assets/long-paragraph-screen-xs-DwnQ0lyc.jpg",Ie="/assets/long-paragraph-screen-xs-DXmFW4zW.webp",Te="/assets/long-paragraph-screen-CqlE7i29.jpg",De="/assets/long-paragraph-screen-QTTPXuva.webp",Xe={xs:Ce,sm:We,md:Se,lg:ve,xl:_e,default:Te},Pe={xs:Ie,sm:$e,md:je,lg:xe,xl:ke,default:De},Me={jpg:Xe,webp:Pe},Be="/assets/long-paragraph-selection-lg-dmqJpSGl.jpg",Re="/assets/long-paragraph-selection-lg-BXtU-1dy.webp",Le="/assets/long-paragraph-selection-md-BAaZSn8j.jpg",Ke="/assets/long-paragraph-selection-md-D5Tumc6Q.webp",Ee="/assets/long-paragraph-selection-sm-Dcb6Ykf4.jpg",Ae="/assets/long-paragraph-selection-sm-D35LzlKq.webp",qe="/assets/long-paragraph-selection-xl-DVEq2u7s.jpg",Oe="/assets/long-paragraph-selection-xl-BBN4Gk6K.webp",Ne="/assets/long-paragraph-selection-xs-CUaZotNk.jpg",Fe="/assets/long-paragraph-selection-xs-B-mwksX_.webp",He="/assets/long-paragraph-selection-Eb8Ppr-U.jpg",Ue="/assets/long-paragraph-selection-BTvkzZgw.webp",Ge={xs:Ne,sm:Ee,md:Le,lg:Be,xl:qe,default:He},Qe={xs:Fe,sm:Ae,md:Ke,lg:Re,xl:Oe,default:Ue},Ze={jpg:Ge,webp:Qe},ze="/assets/practice-screen-lg-D4diQkIF.jpg",Ve="/assets/practice-screen-lg-LFbdHTMu.webp",Je="/assets/practice-screen-md-TceQG0Fy.jpg",Ye="/assets/practice-screen-md-B_t-WLnp.webp",et="/assets/practice-screen-sm-CjQo_8Xi.jpg",tt="/assets/practice-screen-sm-Dzh75bsh.webp",st="/assets/practice-screen-xl-DHT8Epy_.jpg",at="/assets/practice-screen-xl-BW1AUMu9.webp",nt="/assets/practice-screen-xs-BGd77xoV.jpg",ot="/assets/practice-screen-xs-X6Xmeq-A.webp",rt="/assets/practice-screen-BiEZdQUT.jpg",lt="/assets/practice-screen-qw_-8rTv.webp",it={xs:nt,sm:et,md:Je,lg:ze,xl:st,default:rt},ct={xs:ot,sm:tt,md:Ye,lg:Ve,xl:at,default:lt},pt={jpg:it,webp:ct},gt="/assets/short-sentence-lg-BwQ0EePs.jpg",dt="/assets/short-sentence-lg-DoxuykwT.webp",ht="/assets/short-sentence-md-ClJpNtkb.jpg",ut="/assets/short-sentence-md-wkYVllpn.webp",mt="/assets/short-sentence-sm-COfJdsW4.jpg",wt="/assets/short-sentence-sm-DNZ2uAtI.webp",bt="/assets/short-sentence-xl-KMHsFMs_.jpg",yt="/assets/short-sentence-xl-D45W1tDf.webp",ft="/assets/short-sentence-xs-CErsTwCG.jpg",vt="/assets/short-sentence-xs-DdGV8sZQ.webp",xt="/assets/short-sentence-CpoHYIcc.jpg",St="/assets/short-sentence-Cqiq0DE6.webp",jt={xs:ft,sm:mt,md:ht,lg:gt,xl:bt,default:xt},Wt={xs:vt,sm:wt,md:ut,lg:dt,xl:yt,default:St},$t={jpg:jt,webp:Wt},_t="/assets/special-keys-lg-DsQNPJ8y.jpg",kt="/assets/special-keys-lg-DNm6dFdU.webp",Ct="/assets/special-keys-md-CWEAat8w.jpg",It="/assets/special-keys-md-6eXLAezB.webp",Tt="/assets/special-keys-sm-D1Sc9LZr.jpg",Dt="/assets/special-keys-sm-xx29mC6I.webp",Xt="/assets/special-keys-xl-Cl_SUM1x.jpg",Pt="/assets/special-keys-xl-CV7GW8fJ.webp",Mt="/assets/special-keys-xs-u2T-DyxR.jpg",Bt="/assets/special-keys-xs-C3H189no.webp",Rt="/assets/special-keys-BkY5qoXM.jpg",Lt="/assets/special-keys-6dPoKE0h.webp",Kt={xs:Mt,sm:Tt,md:Ct,lg:_t,xl:Xt,default:Rt},Et={xs:Bt,sm:Dt,md:It,lg:kt,xl:Pt,default:Lt},At={jpg:Kt,webp:Et},qt="/assets/teaching-in-rwanda-lg-CFeDcweR.jpg",Ot="/assets/teaching-in-rwanda-lg-Dic0BBYS.webp",Nt="/assets/teaching-in-rwanda-md-ikK68Waw.jpg",Ft="/assets/teaching-in-rwanda-md-DUtusymv.webp",Ht="/assets/teaching-in-rwanda-sm-B1CaINQ-.jpg",Ut="/assets/teaching-in-rwanda-sm-BQYMQuCK.webp",Gt="/assets/teaching-in-rwanda-xl-nitpwkvy.jpg",Qt="/assets/teaching-in-rwanda-xl-CY8UhGfE.webp",Zt="/assets/teaching-in-rwanda-xs-CjFlmwEy.jpg",zt="/assets/teaching-in-rwanda-xs-fbFBJ9Qz.webp",Vt="/assets/teaching-in-rwanda-B8mDTQ3P.jpg",Jt="/assets/teaching-in-rwanda-DVkAE4F0.webp",Yt={xs:Zt,sm:Ht,md:Nt,lg:qt,xl:Gt,default:Vt},es={xs:zt,sm:Ut,md:Ft,lg:Ot,xl:Qt,default:Jt},ts={jpg:Yt,webp:es},ss="/assets/teaching-method-lg-NZ3VzdNM.jpg",as="/assets/teaching-method-lg-DwRrp1TO.webp",ns="/assets/teaching-method-md-DcHingk6.jpg",os="/assets/teaching-method-md-eqWaLXf_.webp",rs="/assets/teaching-method-sm-D5wc1H_D.jpg",ls="/assets/teaching-method-sm-B7QGNNXJ.webp",is="/assets/teaching-method-xl-BZLGvbw-.jpg",cs="/assets/teaching-method-xl-KNXfFQfa.webp",ps="/assets/teaching-method-xs-B4Huh4GA.jpg",gs="/assets/teaching-method-xs-DccZTutq.webp",ds="/assets/teaching-method-rne_iSDC.jpg",hs="/assets/teaching-method-2-biUbR8.webp",us={xs:ps,sm:rs,md:ns,lg:ss,xl:is,default:ds},ms={xs:gs,sm:ls,md:os,lg:as,xl:cs,default:hs},ws={jpg:us,webp:ms},bs="/assets/typing-demonstration-lg-ATW2jT1Z.jpg",ys="/assets/typing-demonstration-lg-B9vEHtp_.webp",fs="/assets/typing-demonstration-md-DIwPTprl.jpg",vs="/assets/typing-demonstration-md-GSaEMNj3.webp",xs="/assets/typing-demonstration-sm-Bek1B1TK.jpg",Ss="/assets/typing-demonstration-sm-BFG9oHI8.webp",js="/assets/typing-demonstration-xl-C8yy2ROK.jpg",Ws="/assets/typing-demonstration-xl-BEGvtQ1T.webp",$s="/assets/typing-demonstration-xs-Cp7hcx6R.jpg",_s="/assets/typing-demonstration-xs-DNSrdvEg.webp",ks="/assets/typing-demonstration-HFHyrP03.jpg",Cs="/assets/typing-demonstration-DkdwW7R_.webp",Is={xs:$s,sm:xs,md:fs,lg:bs,xl:js,default:ks},Ts={xs:_s,sm:Ss,md:vs,lg:ys,xl:Ws,default:Cs},Ds={jpg:Is,webp:Ts},Xs="/assets/user-test-lg-OHhmWSc9.jpg",Ps="/assets/user-test-lg-CfbfvdNK.webp",Ms="/assets/user-test-md-CorLRY2n.jpg",Bs="/assets/user-test-md-CgPZXP1N.webp",Rs="/assets/user-test-sm-BuNpsXOY.jpg",Ls="/assets/user-test-sm-BpbdMEjS.webp",Ks="/assets/user-test-xl-DIfbX9fV.jpg",Es="/assets/user-test-xl-BQRyhKFQ.webp",As="/assets/user-test-xs-DhpW7FI2.jpg",qs="/assets/user-test-xs-B7ZdFrij.webp",Os="/assets/user-test-B0QWPZD5.jpg",Ns="/assets/user-test-CLZhRh3S.webp",Fs={xs:As,sm:Rs,md:Ms,lg:Xs,xl:Ks,default:Os},Hs={xs:qs,sm:Ls,md:Bs,lg:Ps,xl:Es,default:Ns},Us={jpg:Fs,webp:Hs};var Gs=e("

      "),Qs=e("

      Introduction"),Zs=e("

      I spent about 2.5 years in Rwanda serving as an IT education volunteer. It was an alternative service for Korean mandatory military service by KOICA (Korea International Cooperation Agency) under Ministry of Foreign Affairs."),zs=e("

      The above quote was the very first question I got from my students in my first lecture with the classic ‘Hello World!’ example. This C/C++ programming course was intended for second-year IT-major students in a college in Rwanda."),Vs=e("

      ...and this turned out to be one of my better days."),Js=e("

      Challenges (a.k.a. The Reality)"),Ys=e("

      When another student shouted right after my short instructions on how to use shift key, I realised that student had a German keyboard. Some students even had Arabic keyboards!"),ea=e("

      But again, this was one of my better days – because, at least, the school had electricity on that day."),ta=e("

      Frequent power outage"),sa=e("

      How many people in developing countries have 24/7 access to electricity? Some obvious things for us are considered luxuries for people living in this part of the world. Teaching any computer-related things without power was a great challenge for me and colleagues."),aa=e("

      This fact extends to personal access to computers, not to mention individual's ability to afford one. We can safely assume the lecture hours are the only chances for students to use computers."),na=e("

      Power outage also causes maintenance issue. Due to the unstable electricity, computers have significantly lower lifespan, forcing schools to spend more money into parts."),oa=e("

      Rainy season"),ra=e("

      This may sound strange, but the weather was a great blocker for running courses for two main reasons."),la=e("

      First reason is that during the rain, it is extremely dangerous to move in Rwanda due to high chances of lightning strikes. Also, one of the main affordable and reliable transportations is moto-taxi, which cannot run in heavy rain. This means most of the students will not make it to the school in such weather."),ia=e("

      Another reason rain hinders lecture is due to tin roofs. Most Rwandan schools and houses are built with affordable tin roofs, which make much noise during rain. In a pouring rain, it is simply impossible to hear anything under such roof."),ca=e("

      Language barrier"),pa=e("

      Education in Rwanda after primary school is officially done in English. However, in rural areas where average education rate is relatively lower, it is realistically not possible to give lectures only in English."),ga=e("

      On the other hand, there was no material on IT education written in Kinyarwanda language, so it was a great challenge for us to prepare our own lecture materials."),da=e("

      Approach"),ha=e("

      It is obvious that we, as a group of volunteers, cannot radically solve all the problems at once. We had to focus on what we could achieve within our service period."),ua=e("

      Our primary goal (targeted for IT education volunteers) was very clear – effectively teach students on how to type. We simply could not move on to next lecture without students being able to type!"),ma=e("

      We decided to make a typing practice software, and we defined three main approaches to help ourselves achieve the goal:"),wa=e("

      Process"),ba=e("

      Once our approaches were defined, we quickly started to build the actual software, aiming for a quick proof-of-concept test."),ya=e("

      The team focused on building a working prototype for the test phase. Meanwhile, we also gathered supporters from KOICA volunteers to arrange user testing sessions together with Rwanda Education Board."),fa=e("

      User test"),va=e("

      With the help of Rwanda Education Board and participating schools, we were able to gather students to try our software. We wanted to test if students could follow instructions, but more importantly, we wanted to know if this actually is an effective way of teaching. Below are our key findings."),xa=e("

      Collaboration with Rwanda Education Board"),Sa=e("

      One of the biggest challenges we had was the Kinyarwanda language. Also, gathering contents for typing exercises was extremely difficult due to lack of digital database on literature as well as rarity of Rwandan literatures."),ja=e("

      For this, we collaborated with Rwanda Education Board to gather usable contents. They were able to provide us with already existing course materials, and they offered us to help with translating English literatures."),Wa=e("

      In addition, they agreed to include typing practice as an official curriculum for all Rwandan schools, which would significantly make distribution easier. To support the process, KOICA offered to sponsor software CD production and provide trainings for teachers."),$a=e("

      Outcome"),_a=e("

      Based on the user test outcomes, we finalised our software with improved features and local contents provided by Rwanda Education Board. At the same time, we proceeded to organise teaching sessions to introduce it as well as train first group of teachers and students."),ka=e("/ˈɲaruka/ n. to be quick"),Ca=e("

      The software"),Ia=e("

      The name Nyaruka was suggested by Rwanda Education Board, which – according to them – straightforwardly represents the purpose of “enhancing typing speed.”"),Ta=e("

      The structure of the program is similar to other existing typing practice software, with keyboard position training and various exercises ranging from single characters to long paragraphs."),Da=e("

      We tried to gamify the learning process, hence the joyful design style with game-like interfaces. We found this very effective, as several people during showcase events challenged us to compete with typing speed. Interestingly, the gamifying process itself helped us to naturally come up with new evaluation criteria such as frequently mistaken keys."),Xa=e("

      Applying to the field"),Pa=e("

      After finalising our software, we actively sought for opportunities to utilise it in actual teaching situations. While in bulk production, it was pre-distributed to KOICA volunteers who could directly apply it in their teaching."),Ma=e("

      We were also invited to Tech-girl camp – organised by Peace Corps and Michigan State University as part of women empowerment programme. Together with their volunteers, we gave effective typing lessons to Rwandan girls using our software, along with other general IT courses."),Ba=e("

      It was a great opportunity to test, develop and share teaching methods with education experts from the field, especially because many of KOICA volunteers did not have any pedagogical knowledge. We later shared our learnings with KOICA community to apply new methods in our teaching. Detailed evaluation report on Techkobwa camp can be found ."),Ra=e("

      The Last Moment Failure"),La=e("

      Everything seemed to be going so well, until the very last moment. And there was nothing we could do about it."),Ka=e("

      Rwanda Education Board has informed KOICA shortly after the production of software CDs that they cannot distribute CDs until we fix our content. We tried to triple check our contents together with the board members before the production, but unfortunately, this nevertheless happened."),Ea=e("

      Things got really tricky as KOICA had already spent all budgets to produce CDs, and to make things worse, the team's service period was almost ending. If things could not be solved within a few weeks, there would nothing we could do."),Aa=e("

      Rwanda Education Board and KOICA had several meetings to seek for solutions, but sadly the conflict only became worse into political arguments. Eventually, the distribution was postponed indefinitely, with neither side following up until today."),qa=e("

      Learnings and Next Steps"),Oa=e("

      A project can nevertheless fail – the team learnt it the hard way. Although we, as experienced volunteers in the actual fields, were clearly aware anything unexpected could happen, it was very hard for us to accept the result. The reason behind our failure was completely out of our control, and there was nothing we could do about it – a painful, but a lifetime lesson."),Na=e("

      How can we teach IT without any digital tools?"),Fa=e("

      Despite the unsatisfactory result, like any other projects, our journey gave us priceless learnings. I personally found the collaboration with Peace Corps and Michigan State University really opened up my eyes."),Ha=e("

      As a computer education volunteer coming from non-teaching background, I have never thought about teaching the digital world without plugs. However, what those education experts demonstrated in the camp made me realise how creative teaching could be, and also how unprepared I was in giving such education to others."),Ua=e("

      Just like preparing design workshops, those volunteers prepared a number of activities students could easily do without any power – for example, playing with binaries using simple black-and-white cards!"),Ga=e("

      Applying teaching methods for and with typing practice"),Qa=e("

      Such experience also made me wonder if there would be more effective ways in teaching how to type. None of the team had any knowledge in pedagogy, nor did we learn typing with a software like this."),Za=e("

      I recently (2019) had a good discussion with a friend regarding this project, as I am currently planning to re-develop the software. He suggested me to focus on utilising the software in teaching rather than focusing on the typing itself, as most of us ourselves learnt typing naturally rather than by practicing with a software."),za=e("

      Inspired by this, and also looking back on one of our first aims to increase literacy, I hope to re-launch this project in open source and suggest a new school curriculum for developing countries, in which students have more chances to read and type."),Va=e("

      "),Ja=e("Nyaruka!"),Ya=e('KOICA'),en=e("

      The main reason we decided to develop another typing practice software was because there was surprisingly no available multilingual solution. The whole point of this is to make education material written in Kinyarwanda language."),tn=e("

      The software is mainly for teaching young students, and we also observed many of them are often afraid to use computer for the first time. We tried to make our software joyful so students can enjoy learning to type."),sn=e("

      Many students in Rwanda have limited access to books. . We thought we could help them read more by including literatures for long paragraph typing exercises."),an=e("

      During our tests, it became clear that students have no problem in following our software if we give them clear instructions. This also meant proper training for teachers on utilising the software is necessary."),nn=e("

      Our observations gave some inspirations on features as well. For example, we found out that students tended to keep their eyes on on-screen keyboard, which prevented them from improving – so we implemented a feature to completely hide the keyboard."),on=e("

      Although we were aware our software needed to run on low-end machines, there still were things we could not consider, for example, ultra-low resolution. Our test sessions helped us to ensure more coverage for schools.");function rn(){const v=l=>{k("typing-practice",l)};return[(()=>{var l=Gs(),t=l.firstChild,r=t.firstChild,i=t.nextSibling;return x(v,t),s(t,a($,{alt:"Nyaruka! Typing Practice",get class(){return g.bg},srcset:C}),r),s(i,a(_,{get title(){return[Ja()," Typing practice software for Rwanda"]},headline:` In a hope for better IT education for students who have never seen a computer in their life `}),null),s(i,a(j,{get agency(){return Ya()},agencyLink:"https://koica.go.kr/",client:"Rwanda Education Board",clientLink:"https://reb.rw/",overview:` diff --git a/assets/useInitProject-D_rdr1bV.js b/assets/useInitProject-BYcbynEk.js similarity index 82% rename from assets/useInitProject-D_rdr1bV.js rename to assets/useInitProject-BYcbynEk.js index 8d4d53f..b2a4795 100644 --- a/assets/useInitProject-D_rdr1bV.js +++ b/assets/useInitProject-BYcbynEk.js @@ -1 +1 @@ -import{k as t,l as r}from"./template-ByEHfdYF.js";function d(o,e){const s=new IntersectionObserver(([{isIntersecting:n}])=>{n?document.body.classList.add("intro"):document.body.classList.remove("intro")},{rootMargin:"-24px 0px 0px 0px"});t(()=>{document.body.classList.add(o),s.observe(e)}),r(()=>{document.body.classList.remove(o),s.disconnect()})}export{d as u}; +import{k as t,l as r}from"./template-DEwkplrf.js";function d(o,e){const s=new IntersectionObserver(([{isIntersecting:n}])=>{n?document.body.classList.add("intro"):document.body.classList.remove("intro")},{rootMargin:"-24px 0px 0px 0px"});t(()=>{document.body.classList.add(o),s.observe(e)}),r(()=>{document.body.classList.remove(o),s.disconnect()})}export{d as u}; diff --git a/assets/visual-intelligence-BKHTmL2v.js b/assets/visual-intelligence-DM5cA4cX.js similarity index 98% rename from assets/visual-intelligence-BKHTmL2v.js rename to assets/visual-intelligence-DM5cA4cX.js index 76998a6..e460f0e 100644 --- a/assets/visual-intelligence-BKHTmL2v.js +++ b/assets/visual-intelligence-DM5cA4cX.js @@ -1,4 +1,4 @@ -import{n as se,c as f,b as p,t as s,h as e,u as te,d as V,k as ne,l as oe,e as K,i as n,f as _,E as ie,a as ae,m as re}from"./template-ByEHfdYF.js";import{R as le,H as P,B as Y,I as ce,p as Z}from"./project.module-CfcmTz4O.js";import{C as Q}from"./cards-BzwuqlUe.js";import{G as pe}from"./gallery-DIUdS5aK.js";import{T as de,S as l}from"./title-D785si6n.js";import{a as ge,R as ue,s as c,D as he,c as me,d as E,T as fe}from"./visual_intelligence.module-BTfy8Y1F.js";import"./picture-DoVBIOq-.js";const we="_wrap_gekm5_1",be="_input_gekm5_6",ve="_toggle_gekm5_11",R={wrap:we,input:be,toggle:ve};var ye=s("

      Introduction

      More and more companies are investing into gathering various data, as access to sensors and cloud services has never been easier. But what are they going to do with the flooding amount of data?

      Our core objective was to find out ways to make sense of data with rich visual representation."),kt=s("

      Challenges"),_t=s("

      Not all projects are planned ideally – in fact, it is harder to find a flawless setup. But this project was at another level, leaving us difficult challenges before we could even start. These are key challenges we had to face:"),jt=s("

      Approach"),$t=s("

      We did not have time to play ping-pong with our client. Instead, we decided to work on top of the challenges to convince the client with our approach."),Wt=s("

      Seeking for use cases"),Ft=s("

      Our major challenge was to find practical use cases for complex 3d data visualisation. Fortunately, we learnt that visual data mining is indeed a growing field with the help of artificial intelligence. One good example we found was ."),Bt=s("

      Extracting design drivers"),Ct=s("

      Based on our findings on use cases, we moved on to explore ways to navigate through data. Our learnings and ideation results were compiled into design drivers."),Pt=s("

      Scenario generation"),Dt=s("

      After defining and selecting our design drivers, we started to narrow down our potential target user to build a complete use case scenario for the visualisation."),Mt=s("

      Outcome"),It=s("

      During the ideation phase, it became clear that a working prototype is needed to show how interactions with complex data visualisation is done. I worked closely with visual designer and interaction designer to prioritise features to meet the time constraint."),Xt=s("

      Based on the generated scenario and key design drivers, I created a fully working prototype to demonstrate how our concepts are achieved with live interaction. Below are some of the concepts we delivered with the prototype."),Lt=s("

      Noise Cancelling

      Errant data can be switched on or off to allow for a pure focus experience or a noisier view to explore new connections.

      Try toggling data below:
      "),Tt=s("

      Clustering and Alignment

      The easiest way of visualising relevance of data is through clustering them. With the help of latest technologies such as machine learning, this process can be done automatically to discover new patterns."),At=s("

      Different Points of View

      A simple and one of the most common methods to view data in different ways. By combining recipes generated from latest technologies, this simple approach can unveil unexpected insights."),Vt=s("

      Learnings"),Et=s("

      This was my first project in which I took role completely as a Creative Technologist. On top of the challenges we had for the project, it was a very good opportunity to define my role within the studio as well as to showcase what tangible output we could produce together."),Rt=s("

      Pushing our beliefs to the client"),Ot=s("

      We had to face a client with very strong opinions towards the visual design output. We were constantly challenged to convince our client with the need of proper user research and use case scenario. We often did not have time to argue with the client, but instead we learnt to move forward believing in our approach to fight back later by showing the result."),Gt=s("

      Bridging the creativity and technology"),Ht=s("

      Just as the title states, my primary role is to establish a close connection between design and technology within the team. Coming from a design background, I actively participated in design process not only to adjust technical capabilities, but also to expand our design ideas based on technical knowledge."),Ut=s("

      Extending Fjord's capabilities in prototyping"),zt=s("

      My personal aim in this project was to demonstrate my capabilities in programming to the studio. I pushed the team to create a fully working visualisation rather than a click dummy. I have successfully delivered a high-fidelity prototype within 4-week period, and designers were convinced we could escalate our deliverables with next-level tangible outputs."),qt=s("

      "),Nt=s("

      Our client was a massive corporate with nearly 150k employees. The only information provided to us was that we were supposed to target internal employees. To make things worse, we were not able to interview any of them."),Jt=s("

      We were not provided with any sample data we could ideate on. The official reason was confidentiality – but it was very clear to us that it was simply not defined. We were literally asked to deliver data visualisation without any data."),Kt=s("

      The client already had a very strong idea on the tool's visual language. This was not fully aligned with our desires to produce usable visualisation. Rather, he wanted more visually pleasing one, putting aside the importance of use cases."),Yt=s("

      Through the use of shadows, filters and lights we are able to expose new insights. Overlaps will show information in different ways for different perspectives. This is also about seeing the same thing in a totally different way. It's something very common, with a different perspective, e.g. infrared posters."),Zt=s("

      Presented data changes based on angle of view, providing different ways to interpret it. Different angles can be achieved easily by changing the camera view or rotating the objects, with different number of viewports as well."),Qt=s("

      This concept will take the user on a data journey. It uses storytelling techniques to enable users to scroll through time, e.g. 5-year time-lapse. We explore the idea of presenting a snapshot in time – slowing everything down so it is understandable."),en=s("

      We will explore the use of relativity to show connections, relationships (of different solutions). Example properties: size, shape, colour, fluidity, vibration, depth, speed, etc.");function sn(){const{breakpoint:$}=te(ue),[w,b]=V(0),[d,r]=V([!0,!0,!0]);let v,y,x,D,M,I,X,L,W;const G=()=>[y,x,D,M,I,X,L],T=a=>{r(g=>g.map((u,h)=>h===a?!u:u))},[A,ee]=V(!1),H=new IntersectionObserver(a=>{const g=a.find(u=>u.isIntersecting);g&&b(G().indexOf(g.target))},{rootMargin:"-40% 0%"});let j;return ne(()=>{document.body.classList.add("visual-intelligence");for(const a of G())H.observe(a)}),oe(()=>{H.disconnect(),j?.disconnect(),document.body.classList.remove("visual-intelligence")}),K(()=>{w()===3?r([!1,!0,!1]):r([!0,!0,!0])}),K(()=>{$()==="xs"?(j||(j=new IntersectionObserver(([{isIntersecting:a}])=>{ee(a)},{rootMargin:"-40% 0%"})),j.observe(W)):j?.unobserve(W)}),(()=>{var a=qt(),g=a.firstChild,u=g.nextSibling,h=u.firstChild,F=h.nextSibling,i=F.nextSibling,B=i.nextSibling,m=B.nextSibling,U=v;typeof U=="function"?_(U,a):v=a,n(g,e(fe,{get class(){return c.canvas},viRef:v,stage:w,get children(){return e(he,{get children(){return[e(me,{}),e(E,{pointSetIndex:0,popupText:"Unidentified machine",get isActive(){return d()[0]},get disablePopup(){return A()}}),e(E,{pointSetIndex:1,popupText:"Unrecognised user",get isActive(){return d()[1]},get disablePopup(){return A()}}),e(E,{pointSetIndex:2,popupText:"Unknown data",get isActive(){return d()[2]},get disablePopup(){return A()}})]}})}}));var z=y;typeof z=="function"?_(z,h):y=h,n(h,e(de,{get headline(){return"How can we suggest ways to utilise complex data with limited information about users?"},title:"Visual intelligence: use case scenarios for massive unknown data"}),null),n(h,e(le,{agency:"Fjord",agencyLink:"https://www.fjordnet.com/",overview:` +import{n as se,c as f,b as p,t as s,h as e,u as te,d as V,k as ne,l as oe,e as K,i as n,f as _,E as ie,a as ae,m as re}from"./template-DEwkplrf.js";import{R as le,H as P,B as Y,I as ce,p as Z}from"./project.module-EyBcDRJv.js";import{C as Q}from"./cards-DXqYv8UG.js";import{G as pe}from"./gallery-aZizFZOU.js";import{T as de,S as l}from"./title-C9g8anI-.js";import{a as ge,R as ue,s as c,D as he,c as me,d as E,T as fe}from"./visual_intelligence.module-D117g8v2.js";import"./picture-DZcGR_Rp.js";const we="_wrap_gekm5_1",be="_input_gekm5_6",ve="_toggle_gekm5_11",R={wrap:we,input:be,toggle:ve};var ye=s("

      Introduction

      More and more companies are investing into gathering various data, as access to sensors and cloud services has never been easier. But what are they going to do with the flooding amount of data?

      Our core objective was to find out ways to make sense of data with rich visual representation."),kt=s("

      Challenges"),_t=s("

      Not all projects are planned ideally – in fact, it is harder to find a flawless setup. But this project was at another level, leaving us difficult challenges before we could even start. These are key challenges we had to face:"),jt=s("

      Approach"),$t=s("

      We did not have time to play ping-pong with our client. Instead, we decided to work on top of the challenges to convince the client with our approach."),Wt=s("

      Seeking for use cases"),Ft=s("

      Our major challenge was to find practical use cases for complex 3d data visualisation. Fortunately, we learnt that visual data mining is indeed a growing field with the help of artificial intelligence. One good example we found was ."),Bt=s("

      Extracting design drivers"),Ct=s("

      Based on our findings on use cases, we moved on to explore ways to navigate through data. Our learnings and ideation results were compiled into design drivers."),Pt=s("

      Scenario generation"),Dt=s("

      After defining and selecting our design drivers, we started to narrow down our potential target user to build a complete use case scenario for the visualisation."),Mt=s("

      Outcome"),It=s("

      During the ideation phase, it became clear that a working prototype is needed to show how interactions with complex data visualisation is done. I worked closely with visual designer and interaction designer to prioritise features to meet the time constraint."),Xt=s("

      Based on the generated scenario and key design drivers, I created a fully working prototype to demonstrate how our concepts are achieved with live interaction. Below are some of the concepts we delivered with the prototype."),Lt=s("

      Noise Cancelling

      Errant data can be switched on or off to allow for a pure focus experience or a noisier view to explore new connections.

      Try toggling data below:
      "),Tt=s("

      Clustering and Alignment

      The easiest way of visualising relevance of data is through clustering them. With the help of latest technologies such as machine learning, this process can be done automatically to discover new patterns."),At=s("

      Different Points of View

      A simple and one of the most common methods to view data in different ways. By combining recipes generated from latest technologies, this simple approach can unveil unexpected insights."),Vt=s("

      Learnings"),Et=s("

      This was my first project in which I took role completely as a Creative Technologist. On top of the challenges we had for the project, it was a very good opportunity to define my role within the studio as well as to showcase what tangible output we could produce together."),Rt=s("

      Pushing our beliefs to the client"),Ot=s("

      We had to face a client with very strong opinions towards the visual design output. We were constantly challenged to convince our client with the need of proper user research and use case scenario. We often did not have time to argue with the client, but instead we learnt to move forward believing in our approach to fight back later by showing the result."),Gt=s("

      Bridging the creativity and technology"),Ht=s("

      Just as the title states, my primary role is to establish a close connection between design and technology within the team. Coming from a design background, I actively participated in design process not only to adjust technical capabilities, but also to expand our design ideas based on technical knowledge."),Ut=s("

      Extending Fjord's capabilities in prototyping"),zt=s("

      My personal aim in this project was to demonstrate my capabilities in programming to the studio. I pushed the team to create a fully working visualisation rather than a click dummy. I have successfully delivered a high-fidelity prototype within 4-week period, and designers were convinced we could escalate our deliverables with next-level tangible outputs."),qt=s("

      "),Nt=s("

      Our client was a massive corporate with nearly 150k employees. The only information provided to us was that we were supposed to target internal employees. To make things worse, we were not able to interview any of them."),Jt=s("

      We were not provided with any sample data we could ideate on. The official reason was confidentiality – but it was very clear to us that it was simply not defined. We were literally asked to deliver data visualisation without any data."),Kt=s("

      The client already had a very strong idea on the tool's visual language. This was not fully aligned with our desires to produce usable visualisation. Rather, he wanted more visually pleasing one, putting aside the importance of use cases."),Yt=s("

      Through the use of shadows, filters and lights we are able to expose new insights. Overlaps will show information in different ways for different perspectives. This is also about seeing the same thing in a totally different way. It's something very common, with a different perspective, e.g. infrared posters."),Zt=s("

      Presented data changes based on angle of view, providing different ways to interpret it. Different angles can be achieved easily by changing the camera view or rotating the objects, with different number of viewports as well."),Qt=s("

      This concept will take the user on a data journey. It uses storytelling techniques to enable users to scroll through time, e.g. 5-year time-lapse. We explore the idea of presenting a snapshot in time – slowing everything down so it is understandable."),en=s("

      We will explore the use of relativity to show connections, relationships (of different solutions). Example properties: size, shape, colour, fluidity, vibration, depth, speed, etc.");function sn(){const{breakpoint:$}=te(ue),[w,b]=V(0),[d,r]=V([!0,!0,!0]);let v,y,x,D,M,I,X,L,W;const G=()=>[y,x,D,M,I,X,L],T=a=>{r(g=>g.map((u,h)=>h===a?!u:u))},[A,ee]=V(!1),H=new IntersectionObserver(a=>{const g=a.find(u=>u.isIntersecting);g&&b(G().indexOf(g.target))},{rootMargin:"-40% 0%"});let j;return ne(()=>{document.body.classList.add("visual-intelligence");for(const a of G())H.observe(a)}),oe(()=>{H.disconnect(),j?.disconnect(),document.body.classList.remove("visual-intelligence")}),K(()=>{w()===3?r([!1,!0,!1]):r([!0,!0,!0])}),K(()=>{$()==="xs"?(j||(j=new IntersectionObserver(([{isIntersecting:a}])=>{ee(a)},{rootMargin:"-40% 0%"})),j.observe(W)):j?.unobserve(W)}),(()=>{var a=qt(),g=a.firstChild,u=g.nextSibling,h=u.firstChild,F=h.nextSibling,i=F.nextSibling,B=i.nextSibling,m=B.nextSibling,U=v;typeof U=="function"?_(U,a):v=a,n(g,e(fe,{get class(){return c.canvas},viRef:v,stage:w,get children(){return e(he,{get children(){return[e(me,{}),e(E,{pointSetIndex:0,popupText:"Unidentified machine",get isActive(){return d()[0]},get disablePopup(){return A()}}),e(E,{pointSetIndex:1,popupText:"Unrecognised user",get isActive(){return d()[1]},get disablePopup(){return A()}}),e(E,{pointSetIndex:2,popupText:"Unknown data",get isActive(){return d()[2]},get disablePopup(){return A()}})]}})}}));var z=y;typeof z=="function"?_(z,h):y=h,n(h,e(de,{get headline(){return"How can we suggest ways to utilise complex data with limited information about users?"},title:"Visual intelligence: use case scenarios for massive unknown data"}),null),n(h,e(le,{agency:"Fjord",agencyLink:"https://www.fjordnet.com/",overview:` I explored and created ways to utilise a complex data visualisation. Moreover, I built working prototype to demonstrate the idea to convince the client. diff --git a/assets/visual_intelligence.module-BTfy8Y1F.js b/assets/visual_intelligence.module-D117g8v2.js similarity index 99% rename from assets/visual_intelligence.module-BTfy8Y1F.js rename to assets/visual_intelligence.module-D117g8v2.js index 65d0cdf..fc85de3 100644 --- a/assets/visual_intelligence.module-BTfy8Y1F.js +++ b/assets/visual_intelligence.module-D117g8v2.js @@ -1,4 +1,4 @@ -import{d as Re,k as ir,l as pi,h as an,p as rr,f as Go,c as as,b as os,t as ls,u as re,e as Ce,o as Ka,g as ko,q as Wo,a as Xo,S as qo,i as Yo,s as $o}from"./template-ByEHfdYF.js";const Ko=new Map([["xs",0],["sm",576],["md",1024],["lg",1200],["xl",1440]]),Kr=i=>{let t="xs";return Ko.forEach((e,n)=>{i>e&&(t=n)}),t},Zo={width:()=>document.body.clientWidth,height:()=>window.innerHeight,breakpoint:()=>Kr(window.innerWidth)},ti=rr(Zo);function fm(i){const[t,e]=Re(document.body.clientWidth),[n,r]=Re(window.innerHeight),[s,a]=Re(Kr(window.innerWidth));let o;const l=()=>{o&&cancelAnimationFrame(o),o=requestAnimationFrame(()=>{e(document.body.clientWidth),r(window.innerHeight),a(Kr(window.innerWidth))})};return ir(()=>{addEventListener("resize",l),l()}),pi(()=>{o&&cancelAnimationFrame(o),removeEventListener("resize",l)}),an(ti.Provider,{value:{width:t,height:n,breakpoint:s},get children(){return i.children}})}const Za=window.scrollY,cs=rr(()=>Za);function pm(i){const[t,e]=Re(Za),n=()=>{let r;r&&cancelAnimationFrame(r),r=requestAnimationFrame(()=>{e(window.scrollY)})};return ir(()=>{addEventListener("scroll",n)}),pi(()=>{removeEventListener("scroll",n)}),an(cs.Provider,{value:t,get children(){return i.children}})}/** +import{d as Re,k as ir,l as pi,h as an,p as rr,f as Go,c as as,b as os,t as ls,u as re,e as Ce,o as Ka,g as ko,q as Wo,a as Xo,S as qo,i as Yo,s as $o}from"./template-DEwkplrf.js";const Ko=new Map([["xs",0],["sm",576],["md",1024],["lg",1200],["xl",1440]]),Kr=i=>{let t="xs";return Ko.forEach((e,n)=>{i>e&&(t=n)}),t},Zo={width:()=>document.body.clientWidth,height:()=>window.innerHeight,breakpoint:()=>Kr(window.innerWidth)},ti=rr(Zo);function fm(i){const[t,e]=Re(document.body.clientWidth),[n,r]=Re(window.innerHeight),[s,a]=Re(Kr(window.innerWidth));let o;const l=()=>{o&&cancelAnimationFrame(o),o=requestAnimationFrame(()=>{e(document.body.clientWidth),r(window.innerHeight),a(Kr(window.innerWidth))})};return ir(()=>{addEventListener("resize",l),l()}),pi(()=>{o&&cancelAnimationFrame(o),removeEventListener("resize",l)}),an(ti.Provider,{value:{width:t,height:n,breakpoint:s},get children(){return i.children}})}const Za=window.scrollY,cs=rr(()=>Za);function pm(i){const[t,e]=Re(Za),n=()=>{let r;r&&cancelAnimationFrame(r),r=requestAnimationFrame(()=>{e(window.scrollY)})};return ir(()=>{addEventListener("scroll",n)}),pi(()=>{removeEventListener("scroll",n)}),an(cs.Provider,{value:t,get children(){return i.children}})}/** * @license * Copyright 2010-2024 Three.js Authors * SPDX-License-Identifier: MIT diff --git a/index.html b/index.html index 843c971..44a0e32 100644 --- a/index.html +++ b/index.html @@ -72,15 +72,15 @@ analytics_storage: 'denied', }); - - - - + + + + - + diff --git a/sitemap.xml b/sitemap.xml index 0c891b7..2f0e129 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -https://dawoonchung.com/about2024-05-17T14:31:04.849Zdaily1.0https://dawoonchung.com/2024-05-17T14:31:04.849Zdaily1.0https://dawoonchung.com/work/azizi-life2024-05-17T14:31:04.849Zdaily1.0https://dawoonchung.com/work/mobility-study2024-05-17T14:31:04.849Zdaily1.0https://dawoonchung.com/work/synaesthesify2024-05-17T14:31:04.849Zdaily1.0https://dawoonchung.com/work/typing-practice2024-05-17T14:31:04.849Zdaily1.0https://dawoonchung.com/work/visual-intelligence2024-05-17T14:31:04.849Zdaily1.0 \ No newline at end of file +https://dawoonchung.com/about2024-05-24T15:46:56.690Zdaily1.0https://dawoonchung.com/2024-05-24T15:46:56.690Zdaily1.0https://dawoonchung.com/work/azizi-life2024-05-24T15:46:56.690Zdaily1.0https://dawoonchung.com/work/mobility-study2024-05-24T15:46:56.690Zdaily1.0https://dawoonchung.com/work/synaesthesify2024-05-24T15:46:56.690Zdaily1.0https://dawoonchung.com/work/typing-practice2024-05-24T15:46:56.690Zdaily1.0https://dawoonchung.com/work/visual-intelligence2024-05-24T15:46:56.690Zdaily1.0 \ No newline at end of file diff --git a/work/azizi-life.html b/work/azizi-life.html index ae7b9f6..8e4e186 100644 --- a/work/azizi-life.html +++ b/work/azizi-life.html @@ -66,15 +66,15 @@ analytics_storage: 'denied', }); - - - - - - - + + + + + + + - + diff --git a/work/mobility-study.html b/work/mobility-study.html index b696f48..415d231 100644 --- a/work/mobility-study.html +++ b/work/mobility-study.html @@ -72,15 +72,15 @@ analytics_storage: 'denied', }); - - - - - - - + + + + + + + - + diff --git a/work/synaesthesify.html b/work/synaesthesify.html index b8043d8..90a45c3 100644 --- a/work/synaesthesify.html +++ b/work/synaesthesify.html @@ -69,14 +69,14 @@ analytics_storage: 'denied', }); - - - - - - + + + + + + - + diff --git a/work/typing-practice.html b/work/typing-practice.html index 5cc1f55..bbff09e 100644 --- a/work/typing-practice.html +++ b/work/typing-practice.html @@ -75,16 +75,16 @@ analytics_storage: 'denied', }); - - - - - - - - + + + + + + + + - + diff --git a/work/visual-intelligence.html b/work/visual-intelligence.html index 9e4273b..9f5ab45 100644 --- a/work/visual-intelligence.html +++ b/work/visual-intelligence.html @@ -69,15 +69,15 @@ analytics_storage: 'denied', }); - - - - - - - - - + + + + + + + + +