Add start/stop/restart scripts and USER_GUIDE documentation

This commit is contained in:
2026-07-22 17:09:46 -04:00
parent 0f2d6bb738
commit 64e929bc32
5 changed files with 6209 additions and 0 deletions
+70
View File
@@ -0,0 +1,70 @@
# AI Job Application Suite — Quick Start & Usage Guide
Welcome to the AI Job Application Suite! This app is designed to automate, tailor, and track your job applications using AI (Gemini 3.6 Flash & local LM Studio fallback).
---
## 🛠️ Managing the Application (Start, Stop, Restart)
Helper bash scripts have been created in the repository root for convenience:
| Action | Command | Description |
| :--- | :--- | :--- |
| **Start Server** | `./start.sh` | Starts the app background server on port 3000 and logs output to `.app.log`. |
| **Stop Server** | `./stop.sh` | Gracefully stops the running app server. |
| **Restart Server** | `./restart.sh` | Restarts the app server (useful after environment changes). |
| **Manual Dev Mode** | `npm run dev` | Runs the server synchronously in your active terminal. |
Once started, access the application in your browser at:
👉 **`http://localhost:3000`**
---
## 🚀 Key Features & How to Use Them
### 1. 📊 Application Tracker (`Applications`)
- **Track Status**: View applications organized by stage (`Applied`, `Screening`, `Interviewing`, `Offer`, `Rejected`).
- **Update Status**: Click on status badges to transition applications. Updating to *Interviewing* or *Offer* automatically logs notifications.
- **Log Applications**: Click **"+ Log New Application"** to manually add applications or log auto-applied jobs.
---
### 2. 📝 AI Tailor Walkthrough (`Tailor Resume`)
- Paste a Job Posting URL or Job Description.
- The AI will evaluate your candidate profile against the job posting and generate:
- **Match Score & Key Gap Analysis**
- **Tailored Resume Bullet Points** customized for the role
- **Cover Letter Draft** optimized for ATS keywords
- *Requires Gemini API key or a local LM Studio model active at `http://localhost:1234/v1`.*
---
### 3. 🤖 Autonomous Auto-Apply Engine (`Auto-Apply`)
- Configure automated criteria (e.g. minimum match score threshold, preferred roles, max applications per day).
- Click **"Run Auto-Apply Batch"**. The AI will scan your job feeds, match requirements against your profile, and submit/log compliant applications.
---
### 4. 📰 Job Feeds (`Job Feeds`)
- Browse aggregation feeds (LinkedIn, Greenhouse, Lever, Indeed).
- Click **"Tailor & Apply"** on any job card to jump directly to the AI Resume Tailor tool pre-loaded with the job listing.
---
### 5. 📅 Calendar & Interview Scheduler (`Calendar`)
- View and schedule upcoming screening calls and technical interviews.
- Integrated with Google Calendar synchronization API.
---
### 6. ⚙️ Profile Settings (`Profile Settings`)
- Update your master resume text, technical skills, target job titles, desired salary range, and contact information.
- Configure Auto-Apply rules and threshold preferences.
---
## 🧠 AI Model Configuration
- **Primary Model**: Google Gemini 3.6 Flash (Set your `GEMINI_API_KEY` in [.env](file:///home/david/Documents/vscode/ai-job-application/.env)).
- **Fallback Local Model**: If Gemini API limit/quota is reached or missing, the server automatically routes requests to your local LM Studio instance (`http://localhost:1234/v1`).
- Recommended local model: `qwen2.5-vl-7b-instruct-abliterated` or `qwen2.5-coder-7b-instruct`.
+6053
View File
File diff suppressed because it is too large Load Diff
Executable
+9
View File
@@ -0,0 +1,9 @@
#!/usr/bin/env bash
# Restart script for AI Job Application server
APP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
echo "Restarting AI Job Application server..."
"$APP_DIR/stop.sh"
sleep 1
"$APP_DIR/start.sh"
Executable
+34
View File
@@ -0,0 +1,34 @@
#!/usr/bin/env bash
# Start script for AI Job Application server
APP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PID_FILE="$APP_DIR/.app.pid"
LOG_FILE="$APP_DIR/.app.log"
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if kill -0 "$PID" 2>/dev/null; then
echo "AI Job Application server is already running (PID: $PID)."
echo "Access it at http://localhost:3000"
exit 0
else
rm -f "$PID_FILE"
fi
fi
echo "Starting AI Job Application server..."
cd "$APP_DIR" || exit 1
nohup npm run dev > "$LOG_FILE" 2>&1 &
SERVER_PID=$!
echo "$SERVER_PID" > "$PID_FILE"
sleep 2
if kill -0 "$SERVER_PID" 2>/dev/null; then
echo "✓ Server successfully started (PID: $SERVER_PID)."
echo "✓ App running at: http://localhost:3000"
echo "✓ Logs: $LOG_FILE"
else
echo "❌ Server failed to start. Check logs at $LOG_FILE"
rm -f "$PID_FILE"
exit 1
fi
Executable
+43
View File
@@ -0,0 +1,43 @@
#!/usr/bin/env bash
# Stop script for AI Job Application server
APP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PID_FILE="$APP_DIR/.app.pid"
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if kill -0 "$PID" 2>/dev/null; then
echo "Stopping AI Job Application server (PID: $PID)..."
kill "$PID" 2>/dev/null
# Give it a moment to shutdown gracefully
for i in {1..5}; do
if ! kill -0 "$PID" 2>/dev/null; then
break
fi
sleep 1
done
# Force kill if still running
if kill -0 "$PID" 2>/dev/null; then
echo "Force stopping PID $PID..."
kill -9 "$PID" 2>/dev/null
fi
rm -f "$PID_FILE"
echo "✓ Server stopped successfully."
else
echo "Server is not running (stale PID file found and removed)."
rm -f "$PID_FILE"
fi
else
# Check for any rogue tsx server.ts process
PIDS=$(pgrep -f "tsx server.ts" || pgrep -f "dist/server.cjs")
if [ -n "$PIDS" ]; then
echo "Stopping running server process(es): $PIDS"
kill $PIDS 2>/dev/null
echo "✓ Server stopped."
else
echo "AI Job Application server is not running."
fi
fi