A desktop application that simplifies the interview process by letting you load a list of questions from a file, search them by keyword, and leave notes for each question - all saved automatically back to the source file.
- Features
- Requirements
- Installation
- Running the App
- How to Use
- Supported File Formats
- Packaging as a Standalone App
- Project Structure
- Troubleshooting
| Feature | Description |
|---|---|
| File loading | Open .xlsx, .xls, .csv, or .txt files |
| Live search | Filter questions by any keyword as you type |
| Results list | Scrollable dropdown showing all matching questions |
| Full question view | Read the complete text of the selected question |
| Auto-saved notes | Type a note - it saves automatically 1.4 s after your last keystroke |
| Save indicator | Shows Saving… while writing, then Saved. on success |
| Interview timer | Counts total elapsed time from the moment the app is launched |
| Per-question timer | Resets each time you select a new question |
| Cross-platform | Works on macOS and Windows |
| Packagable | Can be built into a .exe or .dmg with one command |
- Python 3.9+
- The following Python packages:
pandas>=2.0
openpyxl>=3.1
xlrd>=2.0
tkinteris part of the Python standard library - no separate install needed.
# 1. Clone or download the project folder
cd /path/to/Project
# 2. Install dependencies
pip install -r requirements.txtpython interview_assistant.pyThe window opens immediately and the Interview timer starts counting.
Click Open File in the top-left corner and select your questions file (.xlsx, .xls, .csv, or .txt).
After loading, the top bar shows:
- the file name
- how many rows were found
- which column was detected as the question column
Question column detection - the app checks your column headers for common names (question, questions, text, prompt, topic, title, content, q). If none match, it uses the first column automatically.
Type any keyword into the Keyword field inside the Search Questions panel.
- Results update live as you type - no need to press Enter.
- A counter below the field shows how many results were found (e.g.
5 results found). - Click ✕ Clear to reset the search field and clear the list.
Click any item in the results list.
- The full question text appears in the Question text area below.
- Any existing note for that question is loaded into the Notes area.
- The On question timer resets and starts counting from
00:00.
Click inside the Notes area and start typing.
- Notes are editable plain text - write anything you like (e.g.
"good answer","no answer","needs follow-up"). - Saving happens automatically 1.4 seconds after you stop typing.
- The bottom-right corner shows the save state:
| Text | Meaning |
|---|---|
| (empty) | No changes since last save |
Saving… |
Debounce delay in progress |
Saved. |
Written to file successfully |
Save failed - file is open in another program! |
Close the file in Excel / another app and try again |
Save failed: <error> |
Unexpected error - check file permissions |
Two timers run simultaneously:
| Timer | Location | Behaviour |
|---|---|---|
| Interview time | Top-right, HH:MM:SS |
Starts when the app launches, runs continuously |
| On question | Inside the question panel, MM:SS |
Starts (or resets) each time you select a question from the list; shows --:-- when nothing is selected |
- All rows in the detected question column are loaded.
- Notes are written back to the same file as a new
Notescolumn (added automatically if missing). - Keep the file closed in Excel while the app is running to avoid save conflicts.
- Parsed with
pandas. Comma-separated by default. - Notes are written back to the same file as a
Notescolumn.
- Each non-empty line is treated as one question.
- Because
.txthas no column structure, notes are saved to a companion CSV file in the same folder:my_questions.txt ← original, untouched my_questions_notes.csv ← created automatically, contains questions + notes
A helper script build_app.py automates packaging with PyInstaller.
pip install pyinstallerRun on a Mac:
python build_app.py --macOutput:
dist/InterviewAssistant.app ← double-clickable app bundle
dist/InterviewAssistant.dmg ← drag-to-install disk image (if hdiutil is available)
To add a custom icon, place an icon.icns file in the project folder before building.
Run on a Windows machine:
python build_app.py --windowsOutput:
dist/InterviewAssistant.exe ← single portable executable
To add a custom icon, place an icon.ico file in the project folder before building.
The resulting binary bundles Python and all dependencies - no installation required on the target machine.
PyCharmMiscProject/
├── interview_assistant.py # Main application (single file)
├── requirements.txt # pip dependencies
├── build_app.py # Packaging helper (PyInstaller wrapper)
├── README.md # This file
├── icon.ico # (optional) Windows icon
└── icon.icns # (optional) macOS icon
ModuleNotFoundError: No module named 'pandas'
Run pip install -r requirements.txt and try again.
Save fails on Excel file
Close the file in Excel (or any other application) before running the app. Only one process can write to an .xlsx file at a time.
Question column not detected correctly
Rename your column header to Question (or any name from the list: question, questions, text, prompt, topic, title, content, q), save the file, and reload it.
.xls file fails to open
Make sure xlrd is installed: pip install xlrd. Note that xlrd supports only the old binary .xls format - save the file as .xlsx if possible.
App window is too small The minimum window size is 800 × 620 px. Resize or maximise the window freely - all panels stretch to fill the available space.