--- sdk: docker app_port: 7860 title: ISA 401 Job Scout Chat emoji: 🔎 colorFrom: red colorTo: gray pinned: false license: mit short_description: Ask questions about ChatISA Job Scout postings --- # ISA 401 Job Scout Chat **Ask a question in plain English, get the SQL and a table back** A twelve-line [querychat](https://github.com/posit-dev/querychat) app built in ISA 401 (Miami University) on the job postings that [ChatISA](https://chatisa.fsb.miamioh.edu) Job Scout collected. It is the starting point for Assignment 05, where you deploy this app to Hugging Face Spaces and then improve it. --- ## What is this app? The app connects to a SQLite database (`data/scout.db`), hands the `scout_postings` table to querychat, and lets an LLM translate your question into SQL. Every answer shows the query it ran, so you can check the logic and reuse the SQL yourself. **Example queries:** - "How many of the postings are remote?" - "Which ten companies have the most postings?" - "Show the internship postings in Ohio." --- ## Dataset Information **Dataset:** `scout_postings` table in `data/scout.db` (1,891 rows, 19 columns) **Source:** ChatISA Job Scout, which harvested the postings from public job boards between July 29 and August 23, 2026 (the `source` column records the board: `activejobs` or `usajobs`) **Data dictionary:** `data/data_desc.md` (started in class; you complete it in Assignment 05) **Query rules for the LLM:** `data/extra_instructions.md` (one starter rule; you add more) ### Key Fields | Field | Description | |-------|-------------| | `title` | Job title as it appeared on the board | | `company` | Employer name | | `location_city` | City of the posting (blank for 61 rows) | | `location_state` | Two-letter state code (blank for 30 rows) | | `remote` | `1` if the posting is remote, `0` otherwise | | `category` | `fulltime`, `federal`, or `internship` | --- ## Required Secret The app calls OpenAI (`gpt-5.6-luna (reasoning off)`) through [ellmer](https://ellmer.tidyverse.org/), so it needs one environment variable: ```bash export OPENAI_API_KEY="your-api-key-here" ``` On Hugging Face Spaces, add it under **Settings > Variables and secrets** as a secret named `OPENAI_API_KEY`. Never commit the key; `.Renviron` is listed in `.gitignore` for that reason. --- ## Running Locally **With R (4.6.0, querychat 0.3.0):** ```r # from inside apps/job_scout_chat/ shiny::runApp(".", port = 7860) ``` **With Docker:** ```bash docker build -t job_scout_chat . docker run --rm -p 7860:7860 -e OPENAI_API_KEY=$OPENAI_API_KEY job_scout_chat ``` Then open http://localhost:7860. --- ## Technology Stack - **[Shiny](https://shiny.posit.co/)** - Web application framework for R - **[querychat](https://github.com/posit-dev/querychat)** - Natural language data querying - **[ellmer](https://ellmer.tidyverse.org/)** - LLM client for R - **[RSQLite](https://rsqlite.r-dbi.org/)** - SQLite driver for R --- ## Course Information This application was developed for **ISA 401** at **Miami University**. The polished version of the same idea, built on BLS wage data, is the [OEWS Jobs Explorer](https://huggingface.co/spaces/fmegahed/querychat_demo).