---
title: "Afoma Case Study"
canonical: https://wavect.io/case-studies/afoma/
language: en
description: "Afoma is a live marketplace expanding into Web3: on-chain primitives layered onto the product without breaking it for users who don't know what a wallet is."
image: "https://wavect.io/img/general/bak/open_graph_preview.jpg"
---

[← All case studies](/case-studies/)

![Afoma logo](/img/clients/webp/afoma.webp)

CASE STUDIES · 2024

Afoma

# Added Web3 to a live marketplace without the user ever seeing crypto.

Afoma is a live marketplace expanding into [Web3](/glossary/web3/). The client wanted on-chain primitives layered onto the product without breaking the experience for users who don’t know what a wallet is.

[“We were impressed with their speed of delivery.” Eric Osuorah Clutch](https://clutch.co/go-to-review/f2290100-9e13-4140-a1b0-0ee301a5fd39/477125)

BLOCKCHAIN Web3 Integration & Consulting 2024 Live

At a glance

Engagement Web3 Integration & Consulting

Industry [Web3 / Marketplace](/industries/ecommerce/)

Stage Seed

Engagement size Fixed price

Year 2024

Stack

Typescript Solidity Ethers.js

Status Live

Live [afoma.io](https://afoma.io/)

## Overview

Afoma is a live marketplace expanding into [Web3](/glossary/web3/). The client wanted on-chain primitives layered onto the product without breaking the experience for users who don’t know what a wallet is.

## What's the challenge?

Adding Web3 to a live marketplace is rarely the hard part. Making it feel native to non-crypto users is. The integration had to lower the onboarding barrier: social login that just works, wallet creation hidden behind familiar auth, zero crypto jargon in the flow. Without disturbing what already worked.

## What call did we make?

### Migrating the existing user base was non-negotiable.

> Social Login wasn't the whole job. The existing user base had to cross to the new auth flow without losing accounts, history, or trust. A breakage there meant churn no on-chain feature could recover from. We treated migration as a first-class deliverable: parallel auth flows side by side, silent wallet creation on first social login, zero forced re-onboarding. The on-chain layer launched. Existing users barely noticed.

## What We Did

Live marketplace, on-chain layer added without the user noticing the seam. We started with Web3 Social Login, not a wallet connector, familiar auth carries the user across the boundary, the wallet gets created silently behind it. Social-login-driven onboarding, on-chain plumbing under the marketplace, ongoing consulting on Web3 strategy and product direction. Power-user wallet features deferred. The existing user base could use it without retraining.

## Outcomes

### Web3 Social Login - Live in Production

### Non-Crypto - Friendly UX

Want outcomes like these on your build?

Fixed scope. Fixed deadline. Signed SoW.

[Get in touch](/contact/)

## Selected Screens

![Afoma, screen 1](/img/case-studies/afoma/001_hu_c6b3915623b39d52.webp)

![Afoma, screen 2](/img/case-studies/afoma/002_hu_c817ffa2ed256e3f.webp)

![Afoma, screen 3](/img/case-studies/afoma/003_hu_c89f25eaf60b10d5.webp)

![Afoma, screen 4](/img/case-studies/afoma/004_hu_d8c8cd62f9382ed1.webp)

![Afoma, screen 5](/img/case-studies/afoma/005_hu_47fb12f7488a2000.webp)

## Client Voice

[Clutch · Verified](https://clutch.co/go-to-review/f2290100-9e13-4140-a1b0-0ee301a5fd39/477125)

> **We were impressed with their speed of delivery.**

WAVECT GmbH successfully assigned Web3 wallets to end users, who were impressed with the transition. The team delivered on time and was highly professional. They communicated well via virtual meetings, email, and messaging apps.

Eric Osuorah CEO, AFOMA Marketplace

Want to have the same impact?

Fixed scope. Fixed deadline. Signed SoW.

[Get in touch](/contact/)

## What We Learned

The fastest way to lose a non-crypto user is to make them feel like they’re using crypto. The Web3 layer has to disappear into the existing UX, not bolt onto the side. Social login was the right entry point: marketplace flow intact, on-chain door quietly open.

## Tech Stack

- [Typescript](https://www.typescriptlang.org/)
- [Solidity](https://soliditylang.org/)
- [Ethers.js](https://docs.ethers.org/)

## Tags

- Web3
- Marketplace
- Social Login

## Links & Resources

[Afoma](https://afoma.io/)

Related services

- [Blockchain Development](/services/blockchain/)
- [Custom Software Development](/services/software-development/)

Client references and trademarks

Wavect publishes these case studies about its own work. Client names, logos and trademarks are the property of their respective owners and are used here to identify the work, not to imply any partnership, sponsorship or endorsement. Each case study describes Wavect's own contribution inside a larger effort, and other parties, including the client's own teams and other vendors, contributed to the results. Figures attributed to a client are that client's own reported numbers. Figures about our work come from our records as of the review date, and we provide evidence on request. Reviews are reproduced from the platform named on each card and link to their source. We do not publish the commercial terms of any engagement, and product screenshots remain the property of the client shown. If you are named here and want a correction, a change or a removal, write to us and we will act on it: [office@wavect.io](mailto:office@wavect.io)

### [Account Abstraction](/case-studies/account-abstraction/)

Boba Network's Hybrid Compute lets smart contracts trigger oracle-like off-chain computations and receive results trustlessly on-chain, inside a single …

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/case-studies/afoma/#webpage",
      "@type": "WebPage",
      "dateModified": "2026-05-21",
      "inLanguage": "en",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-05-21",
      "speakable": {
        "@type": "SpeakableSpecification",
        "cssSelector": [
          ".faq-question",
          ".faq-answer"
        ]
      },
      "url": "https://wavect.io/case-studies/afoma/"
    },
    {
      "@id": "https://wavect.io/verified-claims.json#afoma-invisible-wallet",
      "@type": "Claim",
      "appearance": {
        "@id": "https://wavect.io/case-studies/afoma/#webpage",
        "@type": "WebPage",
        "inLanguage": "en",
        "url": "https://wavect.io/case-studies/afoma/"
      },
      "author": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "citation": {
        "@type": "WebPage",
        "url": "https://clutch.co/go-to-review/f2290100-9e13-4140-a1b0-0ee301a5fd39/477125"
      },
      "dateModified": "2026-08-04",
      "identifier": "afoma-invisible-wallet",
      "inLanguage": "en",
      "text": "On Afoma, a live marketplace, Wavect layered on-chain primitives behind social login and invisible wallet creation, so the user never sees crypto jargon."
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@id": "https://wavect.io/case-studies/afoma/#case-study",
  "@type": "Article",
  "about": {
    "@id": "https://wavect.io/case-studies/afoma/#project",
    "@type": "CreativeWork",
    "creator": {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ]
    },
    "dateCreated": "2024-01-01",
    "description": "Web3 Integration & Consulting engagement",
    "funder": {
      "@type": "Organization",
      "name": "Afoma"
    },
    "name": "Afoma",
    "subjectOf": {
      "@id": "https://wavect.io/case-studies/afoma/#case-study",
      "@type": "Article"
    },
    "url": "https://afoma.io/"
  },
  "abstract": "Adding Web3 to a live marketplace is rarely the hard part. Making it feel native to non-crypto users is. The integration had to lower the onboarding barrier: social login that just works, wallet creation hidden behind familiar auth, zero crypto jargon in the flow. Without disturbing what already worked.",
  "author": {
    "@id": "https://wavect.io/#organization",
    "@type": [
      "Organization",
      "ProfessionalService",
      "LocalBusiness"
    ]
  },
  "datePublished": "2024-01-01",
  "description": "Afoma is a live marketplace expanding into Web3. The client wanted on-chain primitives layered onto the product without breaking the experience for users who don't know what a wallet is.",
  "headline": "Afoma, Wavect Case Study",
  "image": "https://wavect.io/img/clients/webp/afoma.webp",
  "inLanguage": "en",
  "isPartOf": {
    "@type": "CollectionPage",
    "name": "Wavect Case Studies",
    "url": "https://wavect.io/case-studies/"
  },
  "keywords": "Web3, Marketplace, Social Login, Typescript, Solidity, Ethers.js",
  "mainEntityOfPage": "https://wavect.io/case-studies/afoma/",
  "mentions": [
    {
      "@type": "DefinedTerm",
      "name": "Typescript",
      "url": "https://www.typescriptlang.org/"
    },
    {
      "@type": "DefinedTerm",
      "name": "Solidity",
      "url": "https://soliditylang.org/"
    },
    {
      "@type": "DefinedTerm",
      "name": "Ethers.js",
      "url": "https://docs.ethers.org/"
    }
  ],
  "publisher": {
    "@id": "https://wavect.io/#organization",
    "@type": [
      "Organization",
      "ProfessionalService",
      "LocalBusiness"
    ]
  },
  "url": "https://wavect.io/case-studies/afoma/"
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "item": "https://wavect.io/",
      "name": "Home",
      "position": 1
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/case-studies/",
      "name": "Case Studies",
      "position": 2
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/case-studies/afoma/",
      "name": "Afoma",
      "position": 3
    }
  ]
}
```
