A modern fullstack web application that aggregates developer job listings from Colombia, automatically updates them every 5 minutes, enriches them with company information, and provides AI-powered job evaluation using GPT-4 Mini.
- Automated Job Scraping: Collects jobs from multiple platforms every 5 minutes
- AI-Powered Evaluation: Each job is evaluated with GPT-4 Mini for quality scoring
- Real-time Updates: Jobs are updated in real-time with WebSocket support
- Smart Filtering: Filter by location, technology, salary, experience level
- Dark Mode: Full dark mode support for better developer experience
- Responsive Design: Works perfectly on mobile, tablet, and desktop
- Next.js 14 with App Router
- TypeScript for type safety
- Tailwind CSS for styling
- shadcn/ui component library
- React Query for data fetching
- Zustand for state management
- Node.js 22 with TypeScript
- Fastify web framework
- Prisma ORM with PostgreSQL
- Redis for caching and job queues
- BullMQ for background job processing
- OpenAI SDK for GPT-4 Mini integration
- Playwright for web scraping
- Node.js 21+
- Docker and Docker Compose
- OpenAI API Key
- PostgreSQL (via Docker)
- Redis (via Docker)
- Clone the repository
git clone https://github.com/yourusername/jobreposter.git
cd jobreposter- Install dependencies
npm install- Set up environment variables
cp .env.example .envEdit .env and add your OpenAI API key:
OPENAI_API_KEY=sk-your-api-key-here- Start Docker services
# Start Docker Desktop first, then:
docker compose up -d postgres redis- Run database migrations
cd apps/api
npx prisma migrate dev
npx prisma generate
cd ../..- Start development servers
In separate terminals:
# Terminal 1: Backend API
cd apps/api
npm run dev
# Terminal 2: Frontend
cd apps/web
npm run devThe application will be available at:
- Frontend: http://localhost:3000
- API: http://localhost:3001
- API Docs: http://localhost:3001/docs
To run the entire stack with Docker:
docker compose up -dThis will start:
- PostgreSQL database
- Redis cache
- Backend API
- Frontend application
jobreposter/
βββ apps/
β βββ api/ # Backend API
β β βββ src/
β β β βββ routes/ # API endpoints
β β β βββ services/ # Business logic
β β β β βββ scraping/ # Web scrapers
β β β β βββ ai/ # AI evaluation
β β β βββ workers/ # Background jobs
β β β βββ lib/ # Utilities
β β βββ prisma/ # Database schema
β β
β βββ web/ # Frontend Next.js app
β βββ app/ # App router pages
β βββ components/ # React components
β β βββ ui/ # Base UI components
β β βββ jobs/ # Job-related components
β β βββ layout/ # Layout components
β βββ lib/ # Utilities
β
βββ packages/ # Shared packages
βββ docker-compose.yml # Docker configuration
βββ turbo.json # Turborepo config
GET /api/jobs- List jobs with filtersGET /api/jobs/:id- Get job detailsGET /api/jobs/:id/evaluation- Get AI evaluation
GET /api/companies- List companiesGET /api/companies/:id- Company detailsGET /api/companies/:id/jobs- Company jobs
GET /api/stats- Platform statisticsGET /api/stats/trends- Tech trendsGET /api/stats/salary-insights- Salary data
Jobs are evaluated on:
- Clarity of requirements and responsibilities
- Technology Stack modernity and relevance
- Company Culture indicators
- Growth Opportunities
- Compensation fairness for Colombian market
- Work-Life Balance (remote/hybrid options)
- Jobs are scraped every 5 minutes
- Inactive jobs (30+ days) are automatically archived
- Duplicate detection prevents redundant listings
- Each scraping run is logged for monitoring
# Install dependencies
npm install
# Run development servers
npm run dev
# Build for production
npm run build
# Run tests
npm run test
# Lint code
npm run lint
# Database commands
npm run db:migrate # Run migrations
npm run db:generate # Generate Prisma client
npm run db:push # Push schema to database
npm run db:studio # Open Prisma StudioKey environment variables:
# Database
DATABASE_URL=postgresql://user:password@localhost:5432/colombia_dev_jobs
# Redis
REDIS_URL=redis://localhost:6379
# OpenAI
OPENAI_API_KEY=sk-...
OPENAI_MODEL=gpt-4o-mini
# Scraping
SCRAPING_INTERVAL_MINUTES=5
ENABLE_AUTO_SCRAPING=true
# API
PORT=3001
NEXT_PUBLIC_API_URL=http://localhost:3001MIT
Contributions are welcome! Please feel free to submit a Pull Request.
Make sure Docker Desktop is running before starting the containers.
Change the ports in docker-compose.yml or .env file.
Ensure PostgreSQL is running and the DATABASE_URL is correct.
Verify your API key is valid and has sufficient credits.
- Add more job platforms (Indeed, Computrabajo, etc.)
- Email notifications for job matches
- User accounts and saved searches
- Mobile app (React Native)
- Advanced analytics dashboard
- Resume matching scores
- Salary prediction model
For questions or support, please open an issue on GitHub.