Taka has two sides. A household or business says what it is throwing out and where; a collection company runs the yard that goes and gets it. A third surface, platform administration, decides which companies are allowed to operate at all.
It started as a WeWantWaste skip-hire take-home assessment. That submission is preserved at a git tag and none of it remains in the tree — what's deployed now is a different product under a different name.
Note: this is a prototype and says so on the landing page. There is no backend, no database and no sign-in. A cookie stands in for a session, and the persona switcher lets you become a customer, a company or the platform admin.
The three surfaces
- Customer — a five-step request wizard (waste type, location, volume, how often, review), then a collections list showing what's booked.
- Collection company — jobs board, services and pricing, crews, vehicles, service zones, company profile.
- Platform admin — onboarding and compliance for the companies operating on the platform, plus the waste-type catalogue.
The platform assigns; nobody chooses
Customers don't pick a company from a list and companies don't bid. The matcher decides. That is only defensible if you can show why, so it returns every candidate's component scores and every rejected company's reason — not just a winner. That transcript doubles as the spec a real backend would implement.
It ranks right size first, then proximity — as a priority order, not a weighting. Candidates are banded by how well the load fills the vehicle and only compared on score within a band. A single blended score had already gone wrong once: an oversized truck in the right ward always found enough proximity points to win, which is how a 10-tonne compactor gets dispatched for a 240 kg load.
Geography is Nairobi wards and sub-counties, with no coordinates anywhere. That's deliberate — proximity stays something you can read and argue with rather than a distance that falls out of a formula.
Two vocabularies
The same job status reads differently depending on who is looking at it. dispatched and en-route are meaningful distinctions to a dispatcher; to the person waiting at the gate they are both "On the way." The matcher's notes have the same problem — "oversized for this load" and "awaiting platform approval" are internal critique, so the customer surface translates them instead of rendering them.
Colour carries one meaning each
The design system holds one rule: yellow is caution, green is confirmation, violet is the only colour that means do this. A dispatcher scans a jobs board hundreds of times a day and blurring those makes it unreadable.
Which is why waste streams are told apart by glyph rather than colour. Real bins are colour-coded, but adopting that would put green on organics and red on hazardous and contradict the rule. Hazardous is the one exception and earns caution styling, because it genuinely changes what a crew has to do.
Built on Next.js and React with Tailwind v4 — no config file, the whole token layer is CSS — and shadcn/ui primitives.