Scan any product barcode to instantly find out which bin it belongs in — built for expats and residents in Germany.
Germany has one of the most complex waste sorting systems in the world: up to 6 different bins, rules that vary by city, and labels that assume you already know the system. This app removes the guesswork.
- Barcode scanner — point at any product and get an instant bin recommendation
- City-aware rules — rules differ between Berlin, Hamburg, Munich, Frankfurt, and Cologne
- English-first — designed for expats and newcomers; toggle to German at any time
- Bin guide — plain-English reference explaining every bin type in Germany
- Scan history — last 50 scans saved locally on device
- Product images — pulled from Open Food Facts when available
- Offline-capable — city rules bundled with app, no internet needed for lookups
- Tip system — contextual tips per item (e.g. "rinse the can", "flatten the box")
| City | Bundesland |
|---|---|
| Berlin | Berlin |
| Hamburg | Hamburg |
| Munich | Bavaria |
| Frankfurt | Hesse |
| Cologne | NRW |
More cities coming soon. Rules are version-controlled JSON files — contributions welcome.
| Layer | Technology | Why |
|---|---|---|
| Framework | React Native (Expo) | Single codebase for iOS/Android |
| Language | TypeScript (strict) | Type safety across rules/UI |
| State | Zustand | Lightweight global state |
| Product data | Open Food Facts API | 3M+ item open database |
| i18n | Custom hook | English + German, no deps |
| Navigation | React Navigation | Standard mobile tabs |
| Rules | Typed JSON + TS service | Offline, version-controlled |
git clone https://github.com/danielamissah/mulltrennung-app.git
cd mulltrennung-app
npm install
npx expo startsrc/
- components/
BinCard.tsx— Coloured result card with tipCityPicker.tsx— Horizontal city selector chipsLanguageToggle.tsx— EN/DE toggle pill
- data/rules/
berlin.json— Berlin-specific bin ruleshamburg.json— Hamburg-specific bin rulesmunich.json— Munich-specific bin rulesfrankfurt.json— Frankfurt-specific bin rulescologne.json— Cologne-specific bin rules
- i18n/
translations.ts— All UI strings in EN/DEuseTranslation.ts— Hook: returns t() + lang
- screens/
ScannerScreen.tsx— Main barcode scannerGuideScreen.tsx— Full bin guide referenceHistoryScreen.tsx— Last 50 scans
- services/
productService.ts— Open Food Facts API callsrulesService.ts— Material inference + bin lookup
- store/
useAppStore.ts— Zustand store (city, lang, history)
- types/
index.ts— Shared TypeScript types
Flow: Barcode → Open Food Facts API → Material inference → City rules → Bin result
- Send barcode to Open Food Facts API
- Extract packaging/material tags
- Map to material key (
plastic_bottle,cardboard, etc.) - Lookup in active city's JSON file
- Display bin type, color, emoji, tip
Fallback: unknown → Restmüll + "check packaging" note
- Create
src/data/rules/yourcity.json(copyberlin.json) - Add city to
CITIESarray inuseAppStore.ts - Add
require()inrulesService.ts - Submit PR
Open Food Facts — free, open product database. No API key needed.
- Visual search (photo → bin)
- All 400 German Landkreise
- Bin collection calendar
- Recycling centre map
- Offline product cache
PRs welcome for:
- New city rules
- Rule corrections
- Translations (Turkish, Arabic, Ukrainian)
Open issue first for big changes.
MIT — see LICENSE.