Skip to content

jbrink90/job_tracker_node_react

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

152 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

JobTrackr.online πŸš€

Your intelligent job application companion - A modern PWA that helps you track, manage, and organize your job search with powerful features like LinkedIn integration, rich markdown descriptions, and seamless authentication.


✨ Key Features

🎯 Smart Job Management

  • πŸ“ Rich Markdown Editor - Format job descriptions with full markdown support
  • πŸ”— LinkedIn Integration - Auto-import job details from LinkedIn URLs with one click
  • πŸ“Š Advanced Data Grid - Sort, filter, and manage applications with MUI Data Grid
  • πŸ“ Interactive Maps - Visualize job locations with Mapbox integration

πŸ” Modern Authentication

  • πŸ“§ Passwordless Login - Secure email-based authentication via Supabase
  • πŸ‘€ Multi-User Support - Each user has their own private job database
  • πŸ›‘οΈ Admin Protection - Secure admin endpoints with role-based access

πŸ“± Progressive Web App

  • πŸ“ˆ Install Anywhere - Works as a native app on desktop and mobile
  • 🌐 Offline Support - Service worker caching for offline functionality
  • πŸ“± Mobile Optimized - Responsive design that works on all devices

πŸ› οΈ Developer Experience

  • ⚑ TypeScript - Full type safety across frontend and backend
  • 🎨 Material-UI - Beautiful, consistent UI components
  • 🐳 Docker Ready - Containerized deployment with Docker Compose
  • πŸ”„ Hot Reload - Fast development with Vite and Nodemon

πŸ—οΈ Architecture

Frontend (React + TypeScript)

  • UI Framework: Material-UI (MUI) v7 with custom theming
  • State Management: React hooks with local state
  • Routing: React Router v6 with protected routes
  • Rich Text: MDX Editor for job descriptions
  • Maps: Mapbox GL JS for location visualization
  • PWA: Service worker with offline caching

Backend (Node.js + Express)

  • API: RESTful endpoints with Express.js
  • Database: SQLite for lightweight, portable storage
  • Authentication: Supabase JWT integration
  • Web Scraping: Cheerio + Axios for LinkedIn job import

Infrastructure

  • Deployment: Docker containers with nginx reverse proxy
  • Environment: Production-ready environment variable validation
  • Security: CORS, JWT authentication, admin middleware
  • Monitoring: Structured error handling and logging

οΏ½ Quick Start

Prerequisites

  • Node.js 18+
  • npm or yarn
  • Git

Installation

  1. Clone the repository
git clone https://github.com/jbrink90/job_tracker_node_react.git
cd job_tracker_node_react
  1. Install dependencies
npm install
  1. Environment Setup
# Copy the example environment file
cp .env.example .env

# Edit .env with your Supabase credentials
# Required: SUPABASE_URL, SUPABASE_ANON, ADMIN_EMAIL
# Optional: API_PORT, SQLITE_FILENAME, NODE_ENV
  1. Start Development
# Start both frontend and backend
npm run dev

# Or start individually
npm run dev:frontend  # Frontend on http://localhost:5173
npm run dev:backend   # Backend on http://localhost:4444
  1. Access the App

οΏ½ API Documentation

Authentication

All protected endpoints require a Bearer token from Supabase authentication:

Authorization: Bearer <your-supabase-jwt-token>

Core Endpoints

Method Endpoint Description Auth Required
GET /jobs Get user's job listings βœ…
POST /jobs Create new job entry βœ…
PATCH /jobs Update existing job βœ…
DELETE /jobs/:id Delete job entry βœ…
POST /jobs/pull Import from LinkedIn βœ…
GET /jobs/all Get all jobs (admin only) πŸ”

LinkedIn Integration

curl -X POST http://localhost:4444/jobs/pull \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://www.linkedin.com/jobs/view/12345"}'

Job Data Model

{
  "id": 1,
  "company": "Tech Corp",
  "job_title": "Senior Developer",
  "description": "# About the role\n\nExciting opportunity...",
  "location": "San Francisco, CA",
  "status": "Applied",
  "applied": "2024-01-15",
  "last_updated": "2024-01-15T10:30:00Z",
  "supabase_id": "user-uuid-here"
}

🐳 Docker Deployment

Production Docker Compose

services:
  backend:
    build:
      context: ./backend
      dockerfile: Dockerfile
    container_name: jobtrackr_backend
    ports:
      - "4444:4444"
    environment:
      API_PORT: 4444
      SQLITE_FILENAME: /usr/src/app/data/job_data.sqlite
      SUPABASE_URL: https://your-project.supabase.co
      SUPABASE_ANON: your-anon-key
      ADMIN_EMAIL: admin@example.com
    volumes:
      - ./data:/usr/src/app/data
    restart: unless-stopped

  frontend:
    build:
      context: ./frontend
      dockerfile: Dockerfile
    container_name: jobtrackr_frontend
    ports:
      - "80:80"
    depends_on:
      - backend
    restart: unless-stopped
    environment:
      VITE_SUPABASE_URL: https://your-project.supabase.co
      VITE_SUPABASE_ANON: your-anon-key
      VITE_API_BASE_URL: https://api.jobtrackr.online
      VITE_FRONTEND_BASE_URL: https://jobtrackr.online

πŸ§ͺ Development & Testing

Available Scripts

npm run dev          # Start development servers
npm run build        # Build for production
npm run lint         # ESLint with auto-fix
npm run format       # Prettier formatting
npm run test         # Run frontend tests
npm run test:ui      # Run tests with UI

Project Structure

job_tracker_node_react/
β”œβ”€β”€ backend/                 # Node.js API server
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ routes/         # API endpoints
β”‚   β”‚   β”œβ”€β”€ utils/          # Authentication & utilities
β”‚   β”‚   └── server.ts       # Main server file
β”‚   β”œβ”€β”€ api_docs/           # Bruno API collections
β”‚   └── Dockerfile
β”œβ”€β”€ frontend/               # React PWA
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ components/    # Reusable UI components
β”‚   β”‚   β”œβ”€β”€ pages/         # Route components
β”‚   β”‚   β”œβ”€β”€ lib/           # Utilities & API calls
β”‚   β”‚   └── main.tsx       # App entry point
β”‚   β”œβ”€β”€ public/            # Static assets & service worker
β”‚   └── Dockerfile
β”œβ”€β”€ compose.yaml           # Docker Compose configuration
└── README.md

πŸš€ Future Roadmap

Completed Features βœ…

  • Supabase authentication integration
  • Advanced search and filtering
  • LinkedIn job import functionality
  • Rich markdown editor
  • PWA capabilities
  • Docker deployment

In Development 🚧

  • Unit Testing
  • Context / Theme Improvements
  • Limiting free users

Planned Features πŸ“‹

  • Interview Scheduling with calendar integration
  • Email notifications for interview reminders
  • Job application analytics dashboard
  • Job export functionality

🀝 Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

πŸ“„ License

This project is licensed under the ISC License - see the package.json file for details.


πŸ™ Acknowledgments

  • Supabase - Authentication and database services
  • Material-UI - React component library
  • Mapbox - Mapping and location services
  • Vite - Fast build tool and development server
  • Express.js - Backend web framework

πŸ“ž Support


Built with ❀️ for job seekers everywhere 🎯

About

A simple and efficient job tracking web app built using React, Express (Node.js), and SQLite.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors