Eureka is an internal issue tracking and management system, originally built as a capstone project. Teams register products, break each product into subsystems and release versions, and then log, triage, assign and resolve issues against them — similar in spirit to Jira, scoped down to the essentials. It supports role-based access (Users, Developers, Managers, Admins), localized UI in three languages, email notifications, and a set of security features (hashed passwords, HttpOnly session cookies, throttled login attempts) covered below with screenshots.
- Product & issue tracking — products → subsystems → release versions → issues, with filtering by product, subsystem, release, status, severity, reporter and assignee
- Role-based access control — per-user roles (User/Admin) and types (Developer/Manager), organized into groups, enforced with Spring Security
- Secure authentication
- Passwords hashed with BCrypt before storage
- Session cookies flagged HttpOnly
- "Remember me" login persistence
- Repeated failed logins are throttled with a localized cooldown message
- Email notifications — assignees get an email the moment an issue is assigned to them (Spring Mail / SMTP)
- Internationalization — full UI translations for English, Russian and Armenian
- User management — admins can add, edit, promote/demote and delete users, with profile photo upload
- Responsive CRUD UI — Thymeleaf + Bootstrap + jQuery DataTables, with sortable, searchable tables throughout
The sign-in screen, available in English, Russian and Armenian.
After too many failed attempts, login is temporarily throttled — shown here in Armenian.
Issues can be filtered by product, subsystem, release version, status, severity, reporter and assignee, and sorted on every column.
Each issue tracks its full lifecycle — report date, fix date, close date, severity, type, source, and whether it was reported by a customer — with an optional confirmation email to the assignee.
Assignees are automatically emailed when an issue is assigned to them.
Session cookies are HttpOnly
Passwords are stored as BCrypt hashes, never in plaintext.
Core entities: user, role, user_role, login_details, product, subsystem, release_version, issue, report. An issue belongs to a product, subsystem and release version, and can have multiple reports (comments/updates) attached to it.
| Layer | Technology |
|---|---|
| Language | Java 11 |
| Backend | Spring Boot, Spring MVC, Spring Data JPA, Spring Security, Spring Mail |
| Templating | Thymeleaf |
| Frontend | Bootstrap 4, jQuery, jQuery UI, jQuery Validation, jQuery.i18n, DataTables |
| Database | MySQL 8 |
| Object mapping | MapStruct |
| Build | Maven |
- Java 11+
- Maven (or use the bundled
./mvnw) - A running MySQL 8 instance
- An SMTP account (e.g. a Gmail account with an app password) for sending notification emails
Eureka reads its database and mail credentials from environment variables — nothing sensitive is hardcoded. Copy the example file and fill in your own values:
cp .env.example .env# --- Database ---
DB_URL=jdbc:mysql://localhost:3306/eureka
DB_USERNAME=root
DB_PASSWORD=
# --- Mail ---
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=your-email@gmail.com
MAIL_PASSWORD=your-app-password
# --- Security ---
SECURITY_SECRET_KEY=change-this-to-a-long-random-string-in-productionExport these (or use a tool like direnv / your IDE's run configuration) before starting the app.
git clone https://github.com/<your-username>/eureka.git
cd eureka
export $(cat .env | xargs) # or configure the variables another way
./mvnw spring-boot:runThe app will be available at http://localhost:8080. Schema tables are created/updated automatically on startup (ddl-auto: update) against the database referenced by DB_URL.
./mvnw clean package
java -jar target/eureka_app.jar- All credentials are supplied via environment variables (see Configuration) — the repository contains no live secrets.
- User passwords are hashed with BCrypt before being persisted.
- Session cookies are issued with the
HttpOnlyflag. - Repeated failed sign-in attempts trigger a temporary, localized login cooldown.
This project is available under the MIT License.












