No description
Email: - Add nodemailer; rewrite lib/email.ts to send via configured SMTP (Proton Mail Bridge) first, Resend fallback, then dev simulation. - Forward SMTP_* env to web and add protonmail-bridge service in compose. - Document Proton Bridge SMTP vars in .env.example files; add test-smtp.mjs. Apply: - OneClickApplyModal now opens the job's real posting URL (company/ATS site) in a new tab as the primary action when jobUrl is present, and records the external application so the card shows 'Applied'. - Internal one-click snapshot flow retained for jobs without an external URL. - POST /api/applications accepts external:true (skips profile completeness) and records an external application. |
||
|---|---|---|
| scraper | ||
| web | ||
| .env.example | ||
| .gitignore | ||
| BETA_OPERATIONS_MANUAL.md | ||
| BETA_RUNBOOK.md | ||
| BETA_TESTING_GUIDE.md | ||
| DEPLOYMENT.md | ||
| DEPLOYMENT_RUNBOOK.md | ||
| docker-compose.yml | ||
| package.json | ||
| PHASE9_RUNBOOK.md | ||
| postgres-entrypoint.sh | ||
| README.md | ||
| ROLLBACK_RUNBOOK.md | ||
| RUNBOOK.md | ||
JobsBoard — Self-Hosted Job Aggregator & ATS Resume Platform
A private, multi-user job aggregation and ATS-friendly resume management platform tailored for personal and family use.
Architecture
- Web Application: Next.js (App Router), React, Tailwind CSS, Lucide React, TypeScript.
- Database & ORM: PostgreSQL 16 with Prisma ORM.
- Authentication: Auth.js / NextAuth (Credentials provider with bcrypt password hashing).
- Resume Engine: ATS-compliant live two-pane editor &
@react-pdf/rendererPDF download generator. - Scraper Worker: Python worker container using
python-jobspy(Indeed, LinkedIn, ZipRecruiter) and custom scrapers (State of Connecticut JobAps portal) with automatic deduplication. - Matching Engine: Local keyword & TF-IDF similarity matcher scoring job postings (0-100%) against user active resumes without paid external APIs.
Quick Start (Docker Compose)
Launch the complete stack (Database, Web App, Scraper Worker) with a single command:
docker-compose up --build -d
- Web Interface: http://localhost:3000
- Database: PostgreSQL on
localhost:5432
Local Development Setup
1. Install Web Dependencies & Initialize Prisma
cd web
npm install
npx prisma generate
2. Environment Variables
Create .env inside /web:
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/jobsboard?schema=public"
NEXTAUTH_SECRET="jobsboard-secret-key-for-auth-sessions"
NEXTAUTH_URL="http://localhost:3000"
3. Run Web App
cd web
npm run dev
4. Run Python Scraper Worker (Optional standalone)
cd scraper
pip install -r requirements.txt
python main.py --once
Features Overview
- Job Aggregation & Search: Aggregates CT local positions and nationwide remote jobs. Filter by Remote, Connecticut Only, minimum pay, and job sources.
- ATS Resume Builder: Live form input with instantaneous ATS preview & one-click ATS-compliant PDF export.
- Resume Matching: Toggle "Match to My Active Resume" on the job feed to view similarity badges on each job card.
- Application Tracker: Bookmark jobs ("Saved"), track status ("Applied", "Interviewing", "Rejected"), and link directly to application portals.