A native Android app that turns Nigeria's macroeconomic data (GDP, inflation, unemployment) into an accessible, animated mobile experience — with a currency converter, a searchable World Bank indicator database, and an AI assistant that explains the numbers.
Final-year project — Babcock University.
- Authentication — email/password + Google Sign-In (Firebase), with remember-me and password reset.
- Home dashboard — auto-scrolling carousel of indicator cards with live line charts and semantic colour coding.
- Indicator detail pages — GDP / Inflation / Unemployment, each with metadata, methodology, and historical charts.
- Search — real-time filtering of World Bank indicators for Nigeria.
- Currency converter — 50+ currencies via a live exchange-rate API.
- AI chatbot — an OpenAI-powered assistant that explains why an indicator rose or fell.
Java · Firebase Auth/DB/Storage · Retrofit · OkHttp · MPAndroidChart · Glide · Lottie · Facebook Shimmer · ViewPager2 / Material · Chaquopy (Python)
📖 Full technical write-up, architecture, and engineering retrospective: see DOCUMENTATION.md.
git clone https://github.com/Mubby03/macrocon.git
cd macrocon
cp local.properties.template local.properties # then fill in your keys (see below)
./gradlew assembleDebugYou also need to add your own app/google-services.json from a Firebase project (it is intentionally not committed).
The Chaquopy
buildPythonpath inapp/build.gradleis hard-coded to a macOS Python 3.11 launcher — update it for your machine, or remove the Chaquopy plugin if you don't need on-device Python.
This app talks to several external services, each needing its own key. No keys are stored in the source code. They're read at build time from local.properties, which is git-ignored and never committed.
local.properties(git-ignored) holds the real keys.app/build.gradlereads them and injects them intoBuildConfigfields / a string resource.local.properties.template(committed) lists exactly which keys are required.
Copy the template and fill in your own values:
# local.properties
OPENAI_API_KEY=your_openai_key # AI chatbot -> https://platform.openai.com/api-keys
EXCHANGE_RATE_API_KEY=your_exchange_key # Currency converter -> https://www.exchangerate-api.com/
NEWS_API_KEY=your_news_key # News headlines -> https://newsapi.org/
GOOGLE_WEB_CLIENT_ID=your_web_client_id # Google Sign-In -> from google-services.json (client_type 3)Earlier versions of this project had these keys hard-coded in the source. Even though they've now been removed from the code, the old values were already exposed and must be treated as compromised. Before relying on this app:
| Key | Action | Where |
|---|---|---|
| OpenAI API key | Revoke + regenerate | platform.openai.com → API keys |
| ExchangeRate-API key | Regenerate | exchangerate-api.com dashboard |
| News API key | Regenerate | newsapi.org account |
| Google / Firebase web key | Review & restrict | Firebase / Google Cloud console |
GitHub PAT (was in app/github.properties) |
Revoke + delete the file | github.com → Settings → Developer settings → Tokens |
Rule of thumb: moving a key out of source code does not un-leak it. Any key that was ever committed must be rotated. For the highest security, the OpenAI and exchange-rate calls should ideally be proxied through a small backend so the keys never ship inside the app at all.
This is a student project preserved for portfolio purposes. It works, but the DOCUMENTATION.md retrospective honestly catalogues its rough edges (deprecated AsyncTask, no MVVM layer, magic-index JSON parsing, frozen 2022 data, etc.) and how I'd address them today.
Provided as-is for educational and portfolio purposes.
Author: Mubaraq Lawal · Babcock University