{"id":21565234,"url":"https://github.com/mastercloudapps-projects/twitterscheduler","last_synced_at":"2026-04-07T09:31:13.605Z","repository":{"id":65651671,"uuid":"388387048","full_name":"MasterCloudApps-Projects/TwitterScheduler","owner":"MasterCloudApps-Projects","description":"Applying Feature Toggles and Branch By Abstraction in Trunk-Based Development Java project with Hexagonal Architecture and Domain Driven Design","archived":false,"fork":false,"pushed_at":"2021-12-14T11:35:19.000Z","size":9918,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-08-22T18:45:05.392Z","etag":null,"topics":["ddd","docker","feature-toggles","flyway","github-actions","h2-database","heroku","heroku-postgres","hexagonal-architecture","java","junit5","openapi","restful-api","spring-boot","spring-data-jpa","spring-security","togglz","trunk-based-development"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MasterCloudApps-Projects.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}},"created_at":"2021-07-22T08:33:49.000Z","updated_at":"2023-02-02T13:57:03.000Z","dependencies_parsed_at":"2023-02-02T14:47:35.024Z","dependency_job_id":null,"html_url":"https://github.com/MasterCloudApps-Projects/TwitterScheduler","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/MasterCloudApps-Projects/TwitterScheduler","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MasterCloudApps-Projects%2FTwitterScheduler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MasterCloudApps-Projects%2FTwitterScheduler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MasterCloudApps-Projects%2FTwitterScheduler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MasterCloudApps-Projects%2FTwitterScheduler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MasterCloudApps-Projects","download_url":"https://codeload.github.com/MasterCloudApps-Projects/TwitterScheduler/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MasterCloudApps-Projects%2FTwitterScheduler/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31507918,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T03:10:19.677Z","status":"ssl_error","status_checked_at":"2026-04-07T03:10:13.982Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["ddd","docker","feature-toggles","flyway","github-actions","h2-database","heroku","heroku-postgres","hexagonal-architecture","java","junit5","openapi","restful-api","spring-boot","spring-data-jpa","spring-security","togglz","trunk-based-development"],"created_at":"2024-11-24T10:18:57.154Z","updated_at":"2026-04-07T09:31:13.582Z","avatar_url":"https://github.com/MasterCloudApps-Projects.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![License badge](https://img.shields.io/badge/license-Apache2-green.svg)](http://www.apache.org/licenses/LICENSE-2.0)\n![push main workflow](https://github.com/MasterCloudApps-Projects/TwitterScheduler/actions/workflows/push-main.yml/badge.svg)\n\n![][TwitterScheduler Logo]\n\n# Twitter Scheduler\n\nThis project was born as a Master's Dissertation, it is based in the implementation of an application using Trunk-based development with two new features applying Feature toggles and Branch by abstraction design techniques.\n\nApplication has been implemented with Java 11 using Spring Boot and following a hexagonal architecture applying Domain Driven Design, it provides the capacity to schedule the publication of tweets in [Twitter](https://twitter.com/) social network in this account: [BlueOcean_TFM](https://twitter.com/BlueOcean_TFM)\n\nOn every commit, a GitHub actions workflow is executed, running unitary and integration tests, publishing the docker image in [DockerHub repository](https://hub.docker.com/repository/docker/drojo/twitter-scheduler-tfm) and deploying the application in [Heroku](https://twitter-scheduler-tfm.herokuapp.com/) (credentials needed), also a pair of smoke tests are executed in order to confirm that the application has been successfully deployed.\n\n![][TwitterScheduler App]\n\nSections:\n\n- [Continuous integration/Continuous Deployment](docs/technical-documentation/ci-cd.md)\n- [Initial implementation](docs/technical-documentation/initial-implementation.md)\n- Features:\n  - [Publish on demand](docs/technical-documentation/feature-publish-on-demand.md)\n  - [Tweets with images](docs/technical-documentation/feature-tweets-with-images.md)\n- [Running TwitterScheduler locally](docs/technical-documentation/running-twitter-scheduler-locally.md)\n\nFollowing additional resources are available:\n\n* 📖 [Essay (Spanish)](docs/essay/memoria-twitter-scheduler.pdf)\n* 🖼 [Slides (Spanish)](docs/slides/presentacion-twitter-scheduler.pdf)\n\n## Contact\n\nTwitter: [@davidrojoa](https://twitter.com/davidrojoa)\n\n[TwitterScheduler Logo]: docs/technical-documentation/images/twitter-scheduler-logo.png\n[TwitterScheduler App]: docs/technical-documentation/images/twitter-scheduler-pro.png","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmastercloudapps-projects%2Ftwitterscheduler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmastercloudapps-projects%2Ftwitterscheduler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmastercloudapps-projects%2Ftwitterscheduler/lists"}