A modern job application tracking web application built with Go, templ, HTMX, and SQLite. Pathwise helps you organize and track your job search with features like status updates, notes, salary tracking, timeline views, and export capabilities.
- Application Tracking: Track where you've applied, position details, application dates, and current status
- Status Management: Monitor applications through stages (applied, interviewing, offered, rejected, etc.)
- Notes & Timeline: Add notes and view a complete timeline of your application history
- Salary Tracking: Record salary ranges and currency for each position
- Archive System: Archive old applications to keep your active list focused
- Export Functionality: Export your data in various formats
- Responsive Design: Works seamlessly on desktop and mobile devices
- User Authentication: Secure login system with session management
- Backend: Go 1.24+ with standard library HTTP server
- Frontend: templ templates with HTMX for dynamic interactions
- Database: SQLite with sqlc for type-safe queries
- Styling: Tailwind CSS processed with go-tw
- Testing: Go testing with Playwright for E2E tests
- Development: Air for hot reloading
- Go+ - Download Go
- Air (optional, for development) -
go install github.com/air-verse/air@latest
- golangci-lint (optional, for linting) - Installation guide
-
Clone the repository
git clone https://github.com/Piszmog/pathwise.git cd pathwise
-
Install dependencies
go mod download
-
Generate code and build assets
go tool templ generate -path ./components go tool go-tw -i ./styles/input.css -o ./dist/assets/css/[email protected] go tool sqlc generate
-
Run the application
# Development with hot reload air # Or build and run manually go build -o ./tmp/main . ./tmp/main
-
Open your browser Navigate to
http://localhost:8080
Variable | Description | Default |
---|---|---|
PORT |
Server port | 8080 |
LOG_LEVEL |
Logging level (debug, info, warn, error) | info |
LOG_OUTPUT |
Log output (stdout or file path) | stdout |
DB_URL |
Database URL | ./db.sqlite3 |
DB_TOKEN |
Database token (for remote databases) | - |
VERSION |
Application version | - |
# Development server with hot reload
air
# Build application
go build -o ./tmp/main .
# Run tests
go test ./...
# Run E2E tests (requires Playwright)
go test -tags=e2e ./e2e/...
# Lint code
golangci-lint run
# Generate code (templates, CSS, SQL)
go tool templ generate -path ./components
go tool go-tw -i ./styles/input.css -o ./dist/assets/css/[email protected]
go tool sqlc generate
pathwise/
βββ components/ # Templ templates (.templ files)
βββ db/
β βββ migrations/ # Database schema migrations
β βββ queries/ # SQL queries for sqlc
βββ dist/ # Static assets (CSS, JS, images)
βββ e2e/ # End-to-end tests
βββ server/
β βββ handler/ # HTTP request handlers
β βββ middleware/ # HTTP middleware
β βββ router/ # Route definitions
βββ styles/ # Tailwind CSS source files
βββ types/ # Domain types and business logic
βββ utils/ # Utility functions
βββ main.go # Application entry point
Pathwise uses SQLite with migrations managed by golang-migrate. The database schema includes:
- Users: Authentication and user management
- Job Applications: Core application data with status tracking
- Notes: Timeline notes for applications
- Status History: Audit trail of status changes
- Sessions: User session management
The project uses several code generation tools:
- templ: Compiles
.templ
files to Go code for type-safe HTML templates - sqlc: Generates type-safe Go code from SQL queries
- go-tw: Processes Tailwind CSS for styling
# Unit tests
go test ./...
# E2E tests (requires Playwright setup)
go test -tags=e2e ./e2e/...
# Test specific package
go test ./server/handler -run TestJobHandler
# Build image
docker build -t pathwise .
# Run container
docker run -p 8080:8080 pathwise
- Build the application:
go build -o pathwise .
- Set environment variables as needed
- Run the binary:
./pathwise
- Fork the repository
- Create a feature branch:
git checkout -b feature-name
- Make your changes and add tests
- Run tests and linting:
go test ./... && golangci-lint run
- Commit your changes:
git commit -am 'Add feature'
- Push to the branch:
git push origin feature-name
- Submit a pull request
- Desktop version - A desktop application with similar functionality
See LICENSE for details.