Ditto is a modern web application designed to simplify and streamline the job application process. It provides intelligent job management, application tracking, and smart company selection with external API enrichment. With Ditto, you can reduce the repetitive work of managing job applications and focus on landing your dream job.
- Smart Job Management
- Create and manage job listings with intelligent company selection
- User-specific job tracking with full CRUD operations
- Advanced filtering and pagination
- Application Tracking
- Keep track of where you've applied, interview progress, and application outcomes
- Status management with analytics and statistics
- Timeline tracking and notes
- Modern Authentication
- JWT-based authentication with refresh tokens
- Secure user registration and login system
- Document Storage and Management
- Save and manage customized resumes and cover letters for future applications
- Next.js (React-based framework for server-rendered and static websites)
- TypeScript (Type-safe development)
- Tailwind CSS (Utility-first CSS framework for styling)
- shadcn/ui (Modern component library)
- Go (High-performance programming language)
- Gin (Web framework for building APIs in Go)
- PostgreSQL (Relational database for storing application and job data)
- JWT (JSON Web Token authentication)
- sqlx (SQL toolkit and query builder)
- Clearout API (Company data enrichment and validation)
- Docker (Containerization for consistent development and deployment)
- Docker Compose (Multi-container orchestration)
- Go 1.21+ (for backend development)
- Node.js 18+ (for frontend development)
- PostgreSQL 14+ (database)
- Docker & Docker Compose (recommended for easy setup)
-
Clone the Repository
git clone https://github.com/your-username/ditto.git cd ditto -
Environment Configuration
# Copy environment template cp .env.example .env # Edit .env with your configuration # Basic setup works out of the box for development
-
Start with Docker Compose
# Start all services (database + backend) docker-compose up -d # View logs docker-compose logs -f backend # Stop services docker-compose down
-
Access the Application
- Backend API: http://localhost:8081
- Health Check: http://localhost:8081/health
- API Documentation: See backend/README.md
-
Setup the Backend
cd backend # Install Go dependencies go mod download # Set up environment variables export DATABASE_URL="postgres://user:password@localhost/ditto_dev?sslmode=disable" export JWT_SECRET="your-jwt-secret" export JWT_REFRESH_SECRET="your-refresh-secret" # Run database migrations migrate -path migrations -database $DATABASE_URL up # Start the backend server go run cmd/server/main.go
-
Setup the Frontend
cd frontend # Install dependencies npm install # Set up environment variables echo "NEXT_PUBLIC_API_URL=http://localhost:8081" > .env.local # Start the development server npm run dev
ditto/
├── backend/ # Go backend (Gin + PostgreSQL)
│ ├── cmd/server/ # Application entrypoint
│ ├── internal/ # Core business logic
│ │ ├── handlers/ # HTTP request handlers
│ │ ├── middleware/ # Authentication, error handling
│ │ ├── models/ # Data structures
│ │ ├── repository/ # Database operations
│ │ └── routes/ # Route registration
│ ├── migrations/ # Database migrations
│ ├── pkg/ # Shared packages
│ └── test_api.sh # API testing script
├── frontend/ # Next.js frontend
│ ├── src/
│ │ ├── app/ # Next.js app router
│ │ ├── components/ # Reusable components
│ │ ├── lib/ # Utilities and configurations
│ │ └── services/ # API client services
│ └── package.json
├── docker-compose.yml # Development environment
└── README.md # This file
-
Clone and Setup
git clone https://github.com/your-username/ditto.git cd ditto docker-compose up -d -
Create an Account
curl -X POST http://localhost:8081/api/users \ -H "Content-Type: application/json" \ -d '{"name":"John Doe","email":"[email protected]","password":"password123"}'
-
Login and Get Token
curl -X POST http://localhost:8081/api/login \ -H "Content-Type: application/json" \ -d '{"email":"[email protected]","password":"password123"}'
-
Create Your First Job
curl -X POST http://localhost:8081/api/jobs \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"company_name":"Google","title":"Software Engineer","job_description":"Backend development","location":"San Francisco","job_type":"Full-time"}'
The backend provides a comprehensive REST API for managing jobs, applications, and companies. Key endpoints include:
POST /api/users- Register new userPOST /api/login- User loginPOST /api/logout- User logoutGET /api/me- Get user profile
GET /api/jobs- List user's jobsPOST /api/jobs- Create new jobPUT /api/jobs/:id- Update jobDELETE /api/jobs/:id- Delete job
GET /api/companies/autocomplete?q=query- Smart company searchPOST /api/companies/select- Create or select company
GET /api/applications- List applicationsPOST /api/applications- Create applicationPATCH /api/applications/:id/status- Update status
For detailed API documentation, see backend/README.md.
cd backend
# Run all tests
go test ./...
# Run with coverage
go test -cover ./...
# Run specific test suite
go test ./internal/repository -vcd backend
# Run comprehensive API tests
./test_api.shcd frontend
# Run frontend tests
npm test
# Run with coverage
npm run test:coveragecd backend
# Run with hot reload (if using air)
air
# Format code
go fmt ./...
# Run linter
go vet ./...
# Build for production
go build -o bin/server cmd/server/main.gocd frontend
# Start development server
npm run dev
# Build for production
npm run build
# Run production server
npm start- Backend Migration - Complete Go backend with full feature parity
- Authentication System - JWT-based auth with refresh tokens
- Job Management - CRUD operations with smart company selection
- Application Tracking - Status management and analytics
- Company Intelligence - External API enrichment and autocomplete
- Docker Development - Complete containerized development environment
- Testing Infrastructure - Comprehensive test suite
- Document Management - Storage for generated documents
- Analytics Dashboard - Application success metrics
- Mobile App - React Native mobile application
- Email Notifications - Application deadline reminders
We welcome contributions to Ditto! To contribute:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Backend: Follow Go best practices and include tests
- Frontend: Use TypeScript and follow React conventions
- Database: Include migrations for schema changes
- Documentation: Update README and API docs for new features
Ditto is open source and available under the MIT License.
Ditto leverages modern web development tools and external APIs to deliver a seamless experience. Special thanks to:
- Go Community for the excellent ecosystem
- Gin Framework for the fast HTTP router
- PostgreSQL for reliable data storage
- Clearout API for company data enrichment
- shadcn/ui for beautiful UI components
- All open-source libraries that make this project possible
Last Updated: January 2025