{"id":18303599,"url":"https://github.com/vl-037/twittur","last_synced_at":"2026-04-12T05:32:47.298Z","repository":{"id":151894605,"uuid":"614797210","full_name":"VL-037/twittur","owner":"VL-037","description":"Twitter Clone","archived":false,"fork":false,"pushed_at":"2023-05-30T16:16:45.000Z","size":279,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-03T01:43:23.635Z","etag":null,"topics":["apache-kafka","docker","flyway","integration-test","java","jwt","postgresql","redis","rundeck","spring-boot","unit-test"],"latest_commit_sha":null,"homepage":"https://hub.docker.com/r/vl037/twittur-app","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/VL-037.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2023-03-16T10:43:05.000Z","updated_at":"2023-06-07T04:02:09.000Z","dependencies_parsed_at":null,"dependency_job_id":"bcddc8c1-699c-431e-9980-dd2fd567c484","html_url":"https://github.com/VL-037/twittur","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/VL-037/twittur","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VL-037%2Ftwittur","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VL-037%2Ftwittur/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VL-037%2Ftwittur/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VL-037%2Ftwittur/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/VL-037","download_url":"https://codeload.github.com/VL-037/twittur/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VL-037%2Ftwittur/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31705574,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-12T05:11:36.334Z","status":"ssl_error","status_checked_at":"2026-04-12T05:11:27.332Z","response_time":58,"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":["apache-kafka","docker","flyway","integration-test","java","jwt","postgresql","redis","rundeck","spring-boot","unit-test"],"created_at":"2024-11-05T15:26:09.515Z","updated_at":"2026-04-12T05:32:47.272Z","avatar_url":"https://github.com/VL-037.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TWITTUR\n\n\u003cspan\u003e\n\u003cimg src=\"https://www.vectorlogo.zone/logos/java/java-icon.svg\" alt=\"Java\" title=\"Java\" width=\"40px\"\u003e\n\u003cimg src=\"https://www.vectorlogo.zone/logos/springio/springio-icon.svg\" alt=\"Spring\" title=\"Spring\" width=\"40px\"\u003e\n\u003cimg src=\"https://www.vectorlogo.zone/logos/postgresql/postgresql-icon.svg\" alt=\"PostgreSQL\" title=\"PostgreSQL\" width=\"40px\"\u003e\n\u003cimg src=\"https://flywaydb.org/wp-content/uploads/2020/12/cropped-favicon-150x150.png\" alt=\"Flyway\" title=\"Flyway\" width=\"40px\"\u003e\n\u003cimg src=\"https://www.vectorlogo.zone/logos/apache_kafka/apache_kafka-icon.svg\" alt=\"Apache Kafka\" title=\"Apache Kafka\" width=\"40px\"\u003e\n\u003cimg src=\"https://www.vectorlogo.zone/logos/redis/redis-icon.svg\" alt=\"Redis\" title=\"Redis\" width=\"40px\"\u003e\n\u003cimg src=\"https://www.vectorlogo.zone/logos/rundeck/rundeck-icon.svg\" alt=\"Rundeck\" title=\"Rundeck\" width=\"40px\"\u003e\n\u003cimg src=\"https://www.vectorlogo.zone/logos/docker/docker-icon.svg\" alt=\"Docker\" title=\"Docker\" width=\"40px\"\u003e\n\u003cimg src=\"https://img.icons8.com/color/512/java-web-token.png\" alt=\"JWT\" title=\"JWT\" width=\"40px\"\u003e\n\u003c/span\u003e\n\n---\n\n## ❗ Twittur in Microservices [here](https://github.com/VL037-twittur)\n\n## Features\n\n- Project\n  - Register, Login, Logout, Refresh Token\n  - Get, Update `Account` \n  - Follow, Unfollow `Account`\n  - Create, Get, Update, Delete `Tweet`\n  - Get, Send `Direct Message`\n  - Get `Notification`\n  - Send `Email`\n- Tech\n  - Log\n  - Caching\n  - JWT Auth\n  - Dockerized\n  - Data Streaming\n  - Cron Job: [/rundeck](/rundeck)\n  - API spec: [/api-spec](/api-spec)\n  - Database Migration: [/db/migration](/src/main/resources/db/migration)\n  - Exception Handling: [ExceptionController.java](/src/main/java/vincentlow/twittur/controller/ExceptionController.java)\n  - Test: [/unit-test](/src/test/java/vincentlow/twittur), [/integration-test](/src/test/java/vincentlow/twittur/integration)\n\n## Project Configuration\n\n- Java version: [17](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) (JAVA_HOME)\n- Spring Boot version: 3.0.4\n- Databases: [PostgreSQL](https://www.postgresql.org/download), [Redis](https://github.com/ServiceStack/redis-windows/tree/master/downloads)\n- Message Broker: [Apache Kafka](https://kafka.apache.org/downloads)\n- Email Service: Gmail SMTP\n- Cron: [Rundeck](https://www.rundeck.com/downloads)\n- Container: [Docker](https://docs.docker.com/get-docker)\n- IDE: [Intellij IDEA Community Edition](https://www.jetbrains.com/idea/download)\n- Build tool: [Maven 3.6.3](https://archive.apache.org/dist/maven/maven-3/3.6.3)\n\n## Cron Job Configuration\n\n- Update both recipients for [notification](/rundeck/twittur_resendFailedEmails.yaml) with your email\n- After `Email Configuration` is done, download [Rundeck](https://www.rundeck.com/downloads)\n- Follow the steps: [Rundeck Windows Configuration](https://docs.rundeck.com/docs/administration/install/windows.html)\n- Go to [localhost:4440](http://localhost:4440)\n- Login with `admin` `admin` (default)\n- Create `New Project`\n- Click on `Action` \u0026rarr; `Upload Definition`\n- Choose `YAML format` and upload job from [/rundeck](/rundeck)\n\n## Email Configuration\n\n- temporary disable your `anti-virus`\n- fill `spring.mail.username` \u0026 `spring.mail.password` with your Google App Passwords credentials\n\n## JWT Configuration\n\n- fill `jwt.secret.key` with your secret key. You can visit https://www.allkeysgenerator.com\n\n## Run Project with Docker\n\n- Make sure you have `target` directory and `.jar` file inside.\n- If you don't have `target` directory, you can run `mvn clean install -DskipTests`\n- Update docker-compose environment at [docker-compose.yaml](https://github.com/VL-037/twittur/blob/main/docker-compose.yaml#L73-L75)\n- Run `docker compose up`\n- APIs will be served at [localhost:8080](http://localhost:8080)\n\n## Run Project without Docker\n\n- Run `Databases` \u0026 `Message Broker` locally\n- Create Database named `twittur`\n- Run `mvn spring-boot:run` or\n- Add VM options `--add-opens java.base/java.lang=ALL-UNNAMED` to IDE Run/Debug configuration for orika object mapper to work\n- APIs will be served at [localhost:8080](http://localhost:8080)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvl-037%2Ftwittur","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvl-037%2Ftwittur","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvl-037%2Ftwittur/lists"}