A great start
There was this amazing energy at InfiniteWorld that resonated with me. It was my first role as a programmer and I simply wanted to do a damn good job. The team was amazing as well. Team members collaborated remotely from different parts of the world and I learned a lot from them.
I worked as a UX engineer as part of the front-end team for an NFT marketplace. The value proposition: provide an encouraging experience for brands and creators to build and monetize in the Metaverse, along with an accessible platform for users to engage with those creations. The challenge: have an MVP ready ASAP. It was a high point for us when the platform was used by McLaren and won Best White Label Marketplace Creation Platform at OpenSea Awards 2022.
To me, it felt like building a bridge or a sort of 2.5 stepping stone to make that leap to Web3 more approachable. It meant developing connections between traditional authentication, identity, or payment APIs with transactions generated in blockchain networks. That, without adding awkward friction to the UX.
Experiences and contributions
I was eager to improve and explore when I started contributing to InfiniteWorld's projects and right from the start I found plenty of growth opportunities. React was a familiar landscape for me, but we were working with Svelte. Interacting with blockchain networks using third-party SDKs was core for our product and another new territory for me. Soon enough, I found myself working with a browser extension using Vue. All in all, I contributed to two apps with their respective admin dashboards and a browser extension.
These are some highlights of my experiences:
Git workflow and contributing as part of a team
As the ProGit book puts it, after learning about Git's branching model: "...you may feel the need to spend a quiet moment pondering how you lived before Git branching was part of your life". That about sums up my feelings on that matter.
I saw our dev team grow rapidly, but it was still small when I joined, so we shared a lot of responsibilities. We took ownership of the issues we worked on, shared knowledge as features of the app grew, and were active in Agile ceremonies. We also took part in creating releases and overseeing deployments ensuring that every step of our CI/CD pipeline was kept up to date and working correctly. It wasn't always smooth sailing. We had to work out a branching strategy that fit our project and our team. We also agreed on a rotation for tasks related to operations. I'm grateful for my teammates and their good attitude, collaboration was a blast.
Working with new frameworks and server-side rendering
We went with SvelteKit for one of our projects and Next.js for another. Compilation and hydration were new additions to my front-end development mental model. I started getting the hang of thinking in terms of a two-pass render: first, the general parts of our layout were rendered at compilation time, and then the specific dynamic elements were added at run time. This became especially important when working on features reliant on connecting with external wallets from browser extensions on desktop or apps on mobile, considering this connection was exclusively accessible on the client side during run time.
Working with Svelte was another learning experience that I enjoyed a lot. Component code felt more
idiomatic. Using variables naturally for the component's state or slots for component composition,
for example. Using bindings to move data
upwards out of components or elements simplified event handling. Logic blocks like {#await}
helped
to write very readable markup.
I'm very interested to see how that framework keeps evolving and to have the chance to work with it in the future.
Building for scalability and customizability
One of the challenges we faced during development was ensuring our product could be adapted for marketplaces used by different brands or creators. Our in-house team handled the overall custom design with input from the brand or creator, while smaller elements like assets or copy text were managed directly by the brands or creators themselves.
This adaptability meant that our UI had to support unique design tokens and custom layouts per marketplace while maintaining a consistent core of shared components. We achieved this with a combination of Storybook, Tailwind CSS, custom properties, and several proprietary scripts.
The core set of components was important to streamline the onboarding and deployment of new marketplaces. We were constantly reevaluating what was core versus what was tailored for specific marketplaces. It got a bit crazy juggling the development of our product's functionality while keeping the freedom to enable or disable features for individual marketplaces. The same challenge applied to striking the right balance between design guidelines and the ability to customize within our component library.
Integrating with third-party services
I contributed to integrations with Auth0 and AWS Cognito, Stripe, Persona, and Tsevo. On the blockchain side, I got familiar with Hedera and Ethereum SDKs and interacting with wallets.
Going through the documentation while testing, iterating, and refining implementations was a meticulous process. We spent a lot of time making the integration seamless and in compliance with the requirements of the product.
I had the chance to work extensively with our Auth0 integration. We used Playwright to test whole user flows that required programmatically logging in, and I was part of the subset of our team that worked on that setup. I also collaborated with the backend team on several Auth0 Actions that were necessary for our login and registration processes.
Going from scratch to production
At a later stage of my time with InfiniteWorld we leveraged our previous marketplace-building experience to fast-track a new product from scratch. It shared some functionality with our previous product but was different enough to merit a new codebase. We took the initial concept and designs that were provided to us and developed them into a beta experience in production.
This felt like a true test of everything I had learned while contributing to InfiniteWorld. It was challenging to simplify complex flows and UI screens into more manageable components while also coordinating with the backend team to determine the necessary data for each step of the user's journey through our app. We worked on every aspect from the initial setup of the libraries needed for the app to the final deployment. Perseverance and constant communication were crucial to move that project forward.
Good memories
Looking back, my time with InfiniteWorld was an exciting journey, filled with milestones and relentless growth.