Applikon is a job application tracker for IT candidates in Poland. One place for applications, CVs, and interview notes, instead of scattered spreadsheets and expired links. Designed for anyone actively applying to multiple positions at once.
Built with Claude Code using a strict spec-first approach. No code was written without a plan first; no plan was written without knowing what not to do.
π¦ Specify β πͺ Plan β π§ Implement β π¨ Review β π© Refactor βΊ
| Stage | What it produces | |
|---|---|---|
| π¦ | Specify | Sets up the phase before any code: context, scope, out of scope, numbered Definition of Done. |
| πͺ | Plan | Implementation steps with tests batched at the end of each stage. |
| π§ | Implement | Code against the plan β each step with tests, DoD, and a Conventional Commit (feat(backend), refactor(frontend)). |
| π¨ | Review | Findings classified Critical / Important / Nice-to-have, with Status and Tested columns until each one is closed. |
| π© | Refactor | Fixes applied alongside learning: explain β fix β control questions β notes (the AI runs in mentor mode). |
spec/
βββ v1/
β βββ 01-vision/ β MVP scope
β βββ 02-implementation/ β implementation plan
β βββ 03-review/ β code review
β βββ 04-mvp-refactoring/ β refactoring & learning (Claude as mentor)
β βββ 05-additional-features/ β i18n, onboarding, gamification
β βββ 06-cleanup/ β technical cleanup
β βββ 07-privacy-rodo/ β RODO & privacy policy
β βββ 08-user-data/ β account management
β βββ 09-security-refactoring/ β OWASP audit, timing attack fix, HMAC-SHA256 tokens
β βββ 10-logging/ β production observability
β βββ 11-swagger/ β API documentation
β βββ 12-ci/ β GitHub Actions CI
β βββ 13-docker-registry/ β Docker & GHCR
β βββ 14-rebrand-applikon β rebranding EasyApply -> Applikon
β βββ architecture.md β package structure, REST endpoints, DB schema, FE components
β βββ as-built.md β plan vs reality, deviations, phase history
β βββ security.md β security rules, flow
βββ v2/
βββ vision.md β microservices + AI features (CV analysis, job matching)
.claude/ is the Claude Code config directory:
.claude/
βββ commands/
β βββ commit-assistant.md β propose Conventional Commit
β βββ changelog-manager.md β automated CHANGELOG.md
β βββ mentor-refactor-backend.md β backend refactor + learning (**AI mentor mode**)
β βββ mentor-refactor-frontend.md β frontend refactor + learning (**AI mentor mode**)
βββ skills/
βββ code-review-backend/ β Java 21 / Spring Boot 3.4 reviewer
β βββ SKILL.md
β βββ references/
βββ code-review-frontend/ β React 19 / TypeScript reviewer
β βββ SKILL.md
β βββ references/
βββ security-auditor/ β OWASP Top 10 read-only auditor (no code modifications)
βββ SKILL.md
- Application registry - company, position, salary (range, currency, gross/net, contract type), job source, link to posting
- Kanban board - visual overview of recruitment status: Sent β In progress β Completed, with drag & drop
- Recruitment stages - tracking current stage: HR interview, technical interview, manager interview, recruitment task, final interview, or custom stage
- CV archive - storing different CV versions (link or note β file upload temporarily disabled) and assigning them to specific applications
- Notes - saving interview questions, feedback, and personal thoughts for each application (categories: Questions / Feedback / Other)
- Job posting archive - copy of the job description in case the link expires
- Duplicate detection - warning when reapplying to the same company and position
- Badge system - achievements for rejections and ghosting (gamification)
- Authentication - Google OAuth2 login, JWT access token + refresh token
- i18n - Polish and English interface with a language switcher
- Settings - account management: change display name, delete account
- Data export - download all personal data as JSON (RODO Art. 20)
- Service notices - system announcements displayed on login (maintenance, updates)
- API documentation - Swagger UI with all endpoints, request/response schemas, and authorization
cp .env.example .env # fill in Postgres credentials + Google OAuth client ID/secret
docker compose up --buildOpen http://localhost:3000. All required variables are documented in .env.example.
Production images (published to GHCR on every master build):
ghcr.io/jakubbone/applikon-backend:latest
ghcr.io/jakubbone/applikon-frontend:latest
- Refresh tokens stored as HMAC-SHA256 hashes - a stolen database cannot be used to hijack sessions
- Logs contain UUIDs only - no emails, names, or tokens in plaintext
- Account deletion permanently removes all data; inactive accounts purged after 12 months
Full design rationale: spec/v1/07-privacy-rodo/
