AYATEI Initiative
Website for a vocational training non-profit in Ethiopia
- Role
- Sole developer, with the founder as client
- Timeline
- July–October 2026
- Built with
- React · TypeScript · Tailwind CSS · Express · MongoDB Atlas · PayPal

The problem
Many young Ethiopians see no route to stable work and risk dangerous irregular migration instead. AYATEI (African Young Adult Training & Employment) is building a trade-training compound as an alternative. It needed one place to tell that story, take student applications, attract partners and collect donations, in the languages its audience actually reads.
What I built
A seven-language public website with a working back office behind it.
- Narrative home page
- A chaptered scroll story with paired imagery and an embedded video from the founder, moving from the migration routes to the alternative AYATEI offers.
- Application and partner forms
- Validated in the browser and again on the server, rate-limited per IP, protected by a honeypot field and stored in MongoDB Atlas. Nothing personal is kept in the visitor's browser, which matters for people applying from shared phones and internet cafés.
- Donation studio
- Eight contribution tiers, each with its own PayPal hosted button and QR code. Card details never touch the site.
- Seven languages
- English, Amharic, Oromo, Tigrinya, Somali, Swahili and French, 492 strings each, with Ethiopic script support and automatic detection of the visitor's browser language.
- Admin panel
- Staff move applicants and partners through stages (New, Contacted, Interview, Accepted), search, filter, add notes and export to CSV.
- Hardening
- Security headers served by the Express server, signed HttpOnly session cookies, SEO metadata, a sitemap and a robots file.
My role
Sole developer, working with the founder as the client. I designed and built the front end, wrote the Express API and data layer, integrated PayPal, deployed to Hostinger and iterated on rounds of client feedback.
The October audit
The site looked finished. When I reviewed it end to end I found that forms saved only to the visitor's own browser, five of the seven languages fell back to English, the admin page was unreachable and the PayPal button vanished when switching tier. I rebuilt those pieces properly, took known package vulnerabilities from 7 to 0, and cut public assets from 39 MB to 19 MB.
Tech stack
- Front end
- React 19, TypeScript, Vite 6, Tailwind CSS v4, Motion, Lenis, Lucide icons
- Routing and i18n
- Custom History API router; custom language context with typed locale files (no i18n library)
- Back end
- Node.js, Express, Nodemailer
- Data
- MongoDB Atlas
- Payments
- PayPal hosted buttons and QR codes
- Hosting
- Hostinger, deployed automatically on push to main
Screenshots



What I'd improve next
- Email notifications
- Submissions are saved, but nobody is emailed when one arrives. The mailer is written and needs configuring on the host.
- Native-speaker review of translations
- Oromo, Tigrinya and Somali are the most likely to contain mistakes, and the newer Amharic text should be checked too.
- Automated tests
- I'd start with the server-side validation and an end-to-end test that submits a form and finds it in the admin panel.
- Wider device testing
- Real low-end Android phones and Safari matter most for this audience.
- Donation tracking
- A PayPal webhook would let staff see donations alongside partners and applicants.