{"id":49573635,"url":"https://github.com/pitercoding/worklog","last_synced_at":"2026-05-03T15:39:28.281Z","repository":{"id":337650588,"uuid":"1154583701","full_name":"pitercoding/worklog","owner":"pitercoding","description":"[EN] Worklog is a full-stack application for tracking daily activities in technology teams. [PT] Worklog é uma aplicação full-stack para registro diário de atividades em equipes de tecnologia.","archived":false,"fork":false,"pushed_at":"2026-02-12T13:07:19.000Z","size":935,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-03T15:39:06.429Z","etag":null,"topics":["angular","backend","daily-activities","frotnend","full-stack-application","java","postgresql","productivity","productivity-tool","responsive-design","rest-api","spring-boot","typescript","ux-ui"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pitercoding.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-10T14:55:57.000Z","updated_at":"2026-02-12T13:14:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pitercoding/worklog","commit_stats":null,"previous_names":["pitercoding/worklog"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pitercoding/worklog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pitercoding%2Fworklog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pitercoding%2Fworklog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pitercoding%2Fworklog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pitercoding%2Fworklog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pitercoding","download_url":"https://codeload.github.com/pitercoding/worklog/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pitercoding%2Fworklog/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32575114,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T06:36:36.687Z","status":"ssl_error","status_checked_at":"2026-05-03T06:36:09.306Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angular","backend","daily-activities","frotnend","full-stack-application","java","postgresql","productivity","productivity-tool","responsive-design","rest-api","spring-boot","typescript","ux-ui"],"created_at":"2026-05-03T15:39:27.498Z","updated_at":"2026-05-03T15:39:28.268Z","avatar_url":"https://github.com/pitercoding.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"﻿\u003ch1 align=\"center\"\u003eWorklog\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eLanguages:\u003c/strong\u003e\u003cbr\u003e\n  \u003ca href=\"README.pt.md\"\u003ePortuguese\u003c/a\u003e |\n  \u003ca href=\"README.md\"\u003eEnglish\u003c/a\u003e\n\u003c/p\u003e\n\nWorklog is a **full-stack** application for daily activity tracking in software teams. It allows employees to register tasks by **Program, Team, Language, Activity, and Subactivity**, with automatic time tracking per activity.\n\nThe system supports:\n\n- Starting a new activity and automatically closing the previous running one\n- Finishing the day with a single action (`Save Day`)\n- Daily history with durations and current running task highlight\n- Centralized API error handling and frontend notifications\n\n## Project Motivation\n\nThis project was built from a real operational need: improve daily work registration with a simple but consistent workflow for developers.\n\nThe goal was to keep the **UX clear** while maintaining strong backend business rules for:\n\n- one open activity at a time\n- one workday per employee per date\n- explicit day finalization\n\n## Current Features\n\n### Backend (Spring Boot + PostgreSQL)\n\n- REST API for worklog flow:\n  - `POST /api/worklog/{employeeId}/start`\n  - `POST /api/worklog/{employeeId}/save`\n  - `GET /api/worklog/{employeeId}?date=YYYY-MM-DD`\n- Lookups API:\n  - `GET /api/lookups`\n  - `GET /api/lookups/subactivities?activityId=...`\n- Employees API:\n  - `GET /api/employees`\n- Business rules:\n  - closes previous running activity when a new one starts\n  - prevents starting activities after day is finished\n  - validates Activity x Subactivity relationship\n- Seed data (`data.sql`) for programs, teams, languages, activities, subactivities, employees\n- Global exception handler with standardized error response\n- CORS config for Angular dev environment\n\n### Frontend (Angular)\n\n- Worklog page with:\n  - employee selector\n  - activity form\n  - running timer and summary\n  - activity history table\n- Form behavior:\n  - dependent subactivity list by selected activity\n  - clear form after `New`\n  - lock form when day is finished\n- UX:\n  - global top loading bar\n  - toast notifications for API feedback\n  - day-finished banner and clear disabled states\n  - responsive layout with horizontal scroll for history table on small screens\n\n## Worklog Flow\n\n1. Select employee\n2. Choose Program, Team, Language, Activity, Subactivity\n3. Click `New` to start tracking\n4. Start another activity to automatically close the previous one\n5. Click `Save Day` to close running activity and finish the day\n\n## Technologies\n\n### Backend\n\n- Java 21\n- Spring Boot\n- Spring Data JPA\n- PostgreSQL\n- Maven\n\n### Frontend\n\n- Angular (standalone components)\n- TypeScript\n- SCSS\n- RxJS\n\n## How to Run Locally\n\n1. Clone:\n\n```bash\ngit clone https://github.com/pitercoding/worklog.git\ncd worklog\n```\n\n2. Configure database credentials in environment variables:\n\n```bash\nDB_USER=your_user\nDB_PASSWORD=your_password\n```\n\n3. Run backend:\n\n```bash\ncd backend\n./mvnw spring-boot:run\n```\n\n4. Run frontend:\n\n```bash\ncd frontend\nnpm install\nng serve\n```\n\n5. Open:\n\n- Frontend: `http://localhost:4200`\n- Backend: `http://localhost:8080`\n\n## API Notes\n\n- The frontend uses employee selection (no authentication flow yet).\n- Workday is date-based; once finished, it can only start again on the next date.\n\n## Testing Status\n\nCurrent status:\n\n- core frontend/backend integration tested manually\n- production-grade unit/integration test coverage still pending\n\nRecommended next test scope:\n\n- backend service tests for start/save day rules\n- controller tests for response/validation behavior\n- frontend store and component tests for state transitions\n\n## Next Improvements\n\n### Authentication and Security\n\n- Add login with JWT\n- Replace employee dropdown with authenticated user context\n- Add role-based access for admin/user operations\n\n### Product and UX\n\n- Add date picker to view previous workdays\n- Add edit/correct flow for mistaken entries\n- Add dashboard and reports (time by activity, team, language)\n\n### Engineering and Quality\n\n- Add unit and integration tests (backend + frontend)\n- Introduce Flyway/Liquibase migrations for schema versioning\n- Add CI pipeline (lint, test, build)\n\n### Deployment\n\n- No deployment yet\n- Future setup suggestion:\n  - Backend: Render or Railway\n  - Frontend: Vercel or Netlify\n  - Database: managed PostgreSQL (Neon/Supabase/Aiven)\n\n## Folder Structure\n\n```text\nworklog/\n├─ backend/                              # Spring Boot API\n│  ├─ src/main/java/com/pitercoding/backend/\n│  │  ├─ config/                         # CORS and app-level config\n│  │  ├─ controller/                     # REST endpoints (worklog, lookups, employees)\n│  │  ├─ dto/                            # Request/response payloads\n│  │  ├─ exception/                      # Global exception handling\n│  │  ├─ mapper/                         # Entity -\u003e DTO mapping\n│  │  ├─ model/                          # JPA entities and enums\n│  │  ├─ repository/                     # Spring Data repositories\n│  │  ├─ service/                        # Business rules and application logic\n│  │  └─ BackendApplication.java         # Spring Boot entrypoint\n│  ├─ src/main/resources/\n│  │  ├─ application.properties          # Base configuration\n│  │  ├─ application-dev.properties      # Dev profile configuration\n│  │  └─ data.sql                        # Seed data (lookups, employees)\n│  └─ pom.xml                            # Maven dependencies and build\n├─ frontend/                             # Angular client app\n│  ├─ src/app/\n│  │  ├─ core/                           # Constants, interceptors, global UI services\n│  │  ├─ features/worklog/               # Worklog domain (pages, components, state, services)\n│  │  ├─ shared/                         # Reusable pipes and utils\n│  │  ├─ app.config.ts                   # Global providers setup\n│  │  └─ app.routes.ts                   # Routing configuration\n│  ├─ src/assets/\n│  │  ├─ images/                         # Logos and static image assets\n│  │  └─ screenshots/                    # Project screenshots and capture plan\n│  ├─ src/main.ts                        # Angular bootstrap\n│  └─ package.json                       # Frontend scripts and dependencies\n├─ README.md                             # Documentation (English)\n└─ README.pt.md                          # Documentation (Portuguese)\n```\n\n## Screenshots \u0026 Visuals\n\n### Worklog Home (No Employee Selected)\n\n![Worklog Home Empty](frontend/src/assets/screenshots/worklog-home-empty.png)\n\n### Activity Form Filled\n\n![Worklog Form Filled](frontend/src/assets/screenshots/worklog-form-filled.png)\n\n### Running Activity \u0026 Activity History\n\n![Worklog Running Activity](frontend/src/assets/screenshots/worklog-running-activity.png)\n\n### Day Finished\n\n![Worklog Day Finished](frontend/src/assets/screenshots/worklog-day-finished.png)\n\n## License\n\nThis project is licensed under the **MIT License** — feel free to use, study, and modify it.\n\n## Author\n\n**Piter Gomes** — Computer Science Student (6th Semester) \u0026 Full-Stack Developer\n\n[Email](mailto:piterg.bio@gmail.com) | [LinkedIn](https://www.linkedin.com/in/piter-gomes-4a39281a1/) | [GitHub](https://github.com/pitercoding) | [Portfolio](https://portfolio-pitergomes.vercel.app/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpitercoding%2Fworklog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpitercoding%2Fworklog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpitercoding%2Fworklog/lists"}