Inspiration
It happened to us. We were searching for scholarships — scrolling through endless websites, filling out applications without knowing if we even qualified, missing deadlines because we didn't know opportunities existed. We watched friends give up on studying abroad simply because the process felt impossible to navigate alone.
That frustration became the spark for Fahimni. We realized that if we — tech-savvy students who could build software — struggled with this, then millions of other students must be facing the same wall. The problem wasn't lack of opportunities; it was lack of accessible, personalized guidance that respects student privacy.
We wanted to build what we wished existed when we were searching: an intelligent advisor that knows your profile, finds opportunities that actually match your qualifications, and tells you exactly what you're missing — all without selling your data to third parties.
What We Learned
Building Fahimni taught us the critical balance between AI power and privacy protection. We learned:
- How to implement AES-256-CBC encryption in PHP to protect sensitive student data at rest
- Techniques for context anonymization before sending data to third-party AI APIs
- The importance of human-in-the-loop validation when using AI for high-stakes information
- Multi-stage AI orchestration: combining web search, deep scraping (Jina AI), and LLM reasoning
How We Built It
The architecture follows a privacy-first, three-tier approach:
- Profile Encryption Layer: Student data is encrypted with AES-256-CBC before database storage, with random IV per encryption
- AI Proxy Engine: A sophisticated orchestration pipeline that:
- Decrypts profiles server-side
- Builds anonymized student context (no PII)
- Queries partner university programs from local database
- Executes web search for external opportunities
- Scrapes up to 8 result pages for deep content
- Sends enriched context via OpenRouter
- Generates structured 9-section Markdown reports
- Human Review System: All AI reports enter
pendingstatus and require admin approval before students see them
The stack uses PHP 8.2 + MySQLi for the backend, with vanilla JavaScript for the frontend. Three separate authentication systems serve Students, Admins, and Partner Universities.
Challenges We Faced
1. Privacy vs. Personalization Paradox The biggest challenge was delivering highly personalized scholarship recommendations without exposing student PII to AI APIs. We solved this by creating an anonymized context builder that strips emails, names, and identifiers while preserving educational profile data (GPA, test scores, major, preferences).
2. AI Hallucination Control Early tests showed the LLM would occasionally invent scholarship deadlines or requirements. The solution was a dual-layer validation: strict prompt engineering with a 9-section output template, plus mandatory admin review before reports go live.
3. Multi-API Orchestration Complexity
Coordinating Tavily → Jina → OpenRouter in sequence required careful error handling and timeout management. We implemented step-by-step fallback logic and comprehensive logging in debug_proxy.php to track failures at each stage.
4. PHP 8.5 Compatibility
The deprecation of certain curl functions in PHP 8.5 caused unexpected errors. We added error_reporting(E_ALL & ~E_DEPRECATED) in the proxy to maintain compatibility while planning future updates.
The result is a production-ready platform that turns the scholarship search from a frustrating maze into a guided journey — the tool we wish we had when we started.
Built With
- aes-256-cbc-encryption
- bcrypt
- cloudpanel
- html5/css3
- ionos-vps
- jina-ai-reader-api
- mysql/mariadb
- openrouter
- openrouter-api-(qwen-2.5-72b-instruct)
- php-8.x
- tavily-search-api
- vanilla-javascript
- vps
Log in or sign up for Devpost to join the conversation.