Technical portfolio gap advisor for data and analytics engineers.
persona.md + job offer URLs
→ fetch + skill extraction
→ DuckDB + dbt (staging → marts)
→ Python gap scorer
→ LLM recommendation (Mistral)
→ Streamlit UI output
| Layer | Tool |
|---|---|
| Frontend | Streamlit |
| Transformation | dbt-duckdb |
| Local warehouse | DuckDB |
| Skill extraction | Python + BeautifulSoup |
| LLM hook | Mistral AI |
Requirements: Python 3.10+
# 1. Clone and create virtual environment
git clone https://github.com/your-username/greenlight.git
cd greenlight
python -m venv .venv
.venv\Scripts\activate # Windows
# source .venv/bin/activate # macOS/Linux
# 2. Install dependencies
pip install -r requirements.txt
# 3. Configure environment
cp .env.example .env
# Edit .env and add your Mistral API key:
# MISTRAL_API_KEY=your_key_here
# 4. Run the app
streamlit run app/streamlit_app.py- Open the Streamlit app in your browser.
- Upload your persona file (see
persona/hamza.mdas reference). - Paste job offer URLs (one per line, or use
offers.mdformat). - Select LLM mode and click Run.
- View your top skill gaps and the recommended next project to build.
Create a Markdown file following this structure:
## Skills
# tool | proficiency (1-3) | used in production?
dbt | 2 | yes
Python | 3 | yes
## Projects built
# name | domain | pipeline stages covered | dbt concepts used
my-project | fintech | ingestion+transform+test | surrogate keys, window functions
## Target roles
Analytics Engineer, Data Engineer
## Domain preferences
fintech, marketing analytics
## What I want to learn next
DuckDB, LLM pipelines
## Time available for a project
~2 weekspython run.py "https://wttj.co/offer1" "https://wttj.co/offer2"
# or pass a file of URLs
python run.py offers.mdapp/ Streamlit frontend
ingestion/ Fetch, parse, and load offer data
scoring/ Gap scoring logic and LLM hook
transform/ dbt project (staging → marts)
persona/ Persona Markdown files
data/ DuckDB database (gitignored, created at runtime)
offers/ Cached offer text and extracted skills (gitignored)