21-not-so-cool — WIAL Platform

Inspiration

Imagine you spent years becoming a certified Action Learning coach. You did the training, the practice sessions, the assessments. You are listed on a global directory. But a company in Brazil looking for exactly your skills cannot find you because they searched in Portuguese and your profile is written in English.

That is not a translation problem. That is a discovery problem.

We talked to WIAL and what we heard was specific and human. A chapter lead in Nigeria manually sending payment reminders via email. A coach in the Philippines whose profile existed on a website nobody could easily find. A global organization that genuinely changes how leaders think and solve problems but whose digital presence did not reflect any of that.

WIAL operates like PMI or ICF. Global standards, regional delivery. But unlike those organizations they had no unified platform. Each chapter was an island. Dues collection was manual. Coaches were invisible across language barriers.

We are three developers who believe good infrastructure is an act of care. When the tools work, people can focus on what they are actually good at. For WIAL that is developing leaders. We wanted to give them the platform that makes that possible.


What it does

Coaches are findable across languages. The directory has a search bar built on top of Jina AI multilingual embeddings and Supabase pgvector. The infrastructure is fully wired — coach profiles are embedded at save time, stored as 768 dimensional vectors, and retrieved by cosine similarity at search time. The architecture supports querying in any of 89 languages and returning results in any other language. End to end integration is the immediate next step post hackathon.

Any chapter lead can go live without a developer. Fill a short form with chapter name, region, and preferred URL. Click submit. Within 10 seconds wial.org/kenya is live and a login link is in their inbox. From there they manage their page through a visual editor that feels like Google Docs. No code. No IT ticket.

Dues collection is automated. Chapter leads pay WIAL Global directly through the platform. $50 per enrolled student, $30 per certified coach. Stripe handles the payment, sends the receipt, and the record updates automatically in the database.

Branding stays consistent everywhere. Every chapter page shares the same locked header, footer, and navigation. Chapter leads can change their hero color, headline, and local content. They cannot break the global design.


How we built it

We used Next.js 14 for the frontend and API layer, Supabase for the database and authentication, Sanity as the content management system for chapter leads, Stripe for payments, and Jina AI for multilingual embeddings.

The architecture is simple by design. Each chapter page at /[chapter] is a server rendered route that fetches independently. If one chapter has a data issue it does not affect any other page on the platform.

The AI search infrastructure is fully built. When a coach profile is saved the text is sent to Jina AI which returns a 768 dimensional vector representing the meaning of that text. That vector is stored in Supabase using the pgvector extension. The search endpoint takes a query, embeds it using the same model, and returns coaches ranked by cosine similarity. Because Jina maps 89 languages into the same vector space a Portuguese query is designed to find an English profile that means the same thing. Connecting this to the directory search bar UI is the first thing we complete after the hackathon.

For content editing we chose Sanity because chapter leads are not developers. They get a clean visual interface. They change what they need, hit publish, and the page updates. No deployment required.

The entire platform runs on free tiers. Vercel hosts the Next.js app. Supabase handles the database and auth. Sanity manages content. Total monthly cost is under $10.


Challenges we ran into

The hardest debugging session was Supabase Row Level Security. We had written the policies correctly but the anon role still could not read the coaches table. After checking the policies, the grants, and the query itself we discovered that RLS controls row level filtering while grants control table level access. Both need to be set. Most documentation only covers one of them.

We also hit a Next.js build failure on Vercel. The chapter dynamic route was using generateStaticParams which tried to call Supabase during the build process before the database was reachable. The fix was adding export const dynamic = 'force-dynamic' to render the page on each request instead of at build time.


Accomplishments that we are proud of

We are proud that a non-technical chapter lead can go from zero to a live branded page in under a minute. That felt impossible at the start of the hackathon and it works end to end now.

We are proud of the AI search demo. Watching a Portuguese query surface an English profile is the moment where the problem and the solution click together visually. It is the clearest way to show why keyword search was never going to work for a global organization.

We are proud that the platform costs under $10 a month. WIAL operates in countries where resources are limited. A solution that works beautifully and costs almost nothing is the right kind of solution for a nonprofit.


What we learned

RLS and grants in Supabase are two separate layers and both matter. We learned this the hard way.

We learned that the right question for every feature is not "can we build this" but "who has to maintain this at 2am when something goes wrong." That question changed several decisions. It is why we chose Sanity for content editing. It is why we kept the coach dashboard to two buttons. Simplicity is a feature.

We also learned that multilingual search is a fundamentally different problem from localization. Translation shows the same content in different languages. Semantic search finds meaning across languages without translation. That distinction matters a lot for a global organization and embeddings are the right tool for it.


What's next for 21-not-so-cool

The immediate next steps are wiring up the full authentication login flow so roles are enforced in the UI, pointing the Stripe webhook to the production URL, and building the events calendar display page.

After that we want to add email reminders for unpaid dues, coach photo uploads, and an approval UI for the executive director to review and publish certification badges.

The longer term vision is giving each chapter true financial and infrastructure independence. Each chapter gets their own deployment, pays their own hosting bill, and stores their coach data in a datacenter in their own region for GDPR and local data regulation compliance. A sync layer pushes coach profiles to the global directory when published so wial.org always reflects the full picture across all chapters.

The platform we built is not just for WIAL. Any global nonprofit with regional chapters and a coach or member directory could deploy this. That is the version we want to build next.

Built With

  • nextjs
  • sanity
  • supabase
  • vercel
Share this project:

Updates