{"id":28746762,"url":"https://github.com/lrasata/tripplannerapi","last_synced_at":"2026-04-18T02:02:46.737Z","repository":{"id":290402506,"uuid":"974339029","full_name":"lrasata/tripPlannerAPI","owner":"lrasata","description":"A Spring Boot application designed to manage and design travel itineraries. This RESTful API facilitates trip planning by allowing users to create, read, update, and delete trip information. ","archived":false,"fork":false,"pushed_at":"2025-11-08T16:14:09.000Z","size":154,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-08T18:09:31.837Z","etag":null,"topics":["docker","hibernate","java","maven","postgresql","restful-api","spring","spring-boot","spring-data-jpa","spring-security","swagger-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/lrasata.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2025-04-28T16:12:16.000Z","updated_at":"2025-11-08T16:13:16.000Z","dependencies_parsed_at":"2025-06-26T09:26:49.836Z","dependency_job_id":"713c5431-d307-481d-a71c-e74060347bd4","html_url":"https://github.com/lrasata/tripPlannerAPI","commit_stats":null,"previous_names":["lrasata/tripdesignapp","lrasata/tripplannerapi"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/lrasata/tripPlannerAPI","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lrasata%2FtripPlannerAPI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lrasata%2FtripPlannerAPI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lrasata%2FtripPlannerAPI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lrasata%2FtripPlannerAPI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lrasata","download_url":"https://codeload.github.com/lrasata/tripPlannerAPI/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lrasata%2FtripPlannerAPI/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31953515,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T00:39:45.007Z","status":"online","status_checked_at":"2026-04-18T02:00:07.018Z","response_time":103,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["docker","hibernate","java","maven","postgresql","restful-api","spring","spring-boot","spring-data-jpa","spring-security","swagger-ui"],"created_at":"2025-06-16T15:13:07.070Z","updated_at":"2026-04-18T02:02:42.020Z","avatar_url":"https://github.com/lrasata.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Trip Planner API \n\n[![CI](https://github.com/lrasata/tripPlannerAPI/actions/workflows/ci.yml/badge.svg)](https://github.com/lrasata/tripPlannerAPI/actions/workflows/ci.yml)\n\n\nTrip Planner is a web app built for organizing travel plans such as flights, stays, activities, notes,\nand maps. It supports real-time collaboration, budget tracking, and personal touches like photos.\n\nThis Spring Boot application serves as the backend counterpart to the [Trip Planner Web App](https://github.com/lrasata/trip-planner-web-app). \nThis RESTful API facilitates trip planning by allowing users to create, read, update, and delete trips.\n\n## Purpose\n*The Story Behind Trip Planner*\n\nI love to travel and even more than that, I love organizing travel. For me, it feels like a MUST, because I  want to\nmake the best out of a trip, I have got some homework to do. Planning gives me almost as much excitement as the trip\nitself. But until recently, planning a trip meant writing things down all over my computer : in notes apps, random\ndocument, my calendar and my email box.\n\nI always knew there has to be a better way but when I tried different travel apps, but none of them felt right.\nThey were either too complicated, too limited, or just not made for the way I think.\n\nSo I decided to build my own. Something clean, flexible, and genuinely useful.\n\n## Features\n\n- Itinerary builder :bulb:\n- Budget tracking :bulb:\n- Collaborative planning (comments, task assignments)\n- Personalization (cover photo, trip notes)\n- Map and timeline views\n- Modular architecture for adding future features easily\n\n## Dev perspective\nTrip Planner is not only a practical tool. Since there are countless features that could be added from weather integration,\nAI-powered suggestions, local event feeds, to journals, all that makes this personal project exciting and expandable for full-stack experimentation.\n\n## Tech Stack\n- **Frontend**: React, TypeScript, Emotion CSS, MUI\n- **Backend**: Java Spring Boot (REST API)\n  - Java 17\n  - Spring Boot 3.x\n  - Spring Data JPA\n  - PostgreSQL\n  - Maven\n  - HikariCP connection pool\n\n## Why Java and Spring Framework for the Backend\n\nI chose Java Spring Framework for the backend of Trip Planner because it offers a solid balance of robust architecture, \nscalability, and mature tooling which is ideal for building production-grade APIs.\n\n*Stability \u0026 Performance:* Spring Boot is heavily used in enterprise environments. It’s fast, stable, and highly \noptimized for building RESTful services that scale well as the app grows.\n\n*Strong Typing \u0026 Structure:* Coming from a TypeScript frontend, using Java gives me strong typing on the backend too. \nIt helps maintain a clear contract between client and server and reduces bugs.\n\n*Built-in Features:* Spring Boot handles things such as dependency injection, security, validation, and configuration \ncleanly out of the box, which makes development faster and more maintainable.\n\n*REST API:* It’s particularly well-suited for creating a clean and well-documented REST API, which is the backbone of \nthis project. Combined with tools like Swagger or Spring Data, it speeds up backend development without losing \nflexibility.\n\n---\n\n## Getting started\n\n### Prerequisites\n\n- Java 17+\n- Maven 3.8+\n- PostgreSQL running locally on port `5432` (default)\n\n### Clone the repository\n\n```bash\ngit clone https://github.com/lrasata/tripPlannerAPI.git\ncd tripPlannerAPI\n```\n\n### Configure application\n\nProvide `.env` for local testing or load the following env variables at runtime.\n````text\n# .env\n\nSPRING_DATASOURCE_URL=\nSPRING_DATASOURCE_USERNAME=\nSPRING_DATASOURCE_PASSWORD=\nJWT_SECRET_KEY=\nALLOWED_ORIGIN=\nCOOKIE_SECURE_ATTRIBUTE=\nCOOKIE_SAME_SITE=\nSUPER_ADMIN_FULLNAME=\nSUPER_ADMIN_EMAIL=\nSUPER_ADMIN_PASSWORD=\nAWS_REGION=\nDYNAMODB_TABLE_NAME=\nS3_BUCKET_NAME=\n````\nEach env variable corresponds to the following app properties:\n\n#### Database properties\n```properties\nspring.datasource.url=${SPRING_DATASOURCE_URL}\nspring.datasource.username=${SPRING_DATASOURCE_USERNAME}\nspring.datasource.password=${SPRING_DATASOURCE_PASSWORD}\nspring.jpa.hibernate.ddl-auto=update\n```\n\n#### Security properties\n```properties\n\nsecurity.jwt.secret-key=${JWT_SECRET_KEY}\n\n# access token expiration time: 15 min in millisecond\nsecurity.jwt.access-token.expiration=900000\n\n# refresh token expiration time: 60 min in millisecond\nsecurity.jwt.refresh-token.expiration=3600000\n```\n\n#### Application properties\n```properties\n# allowed origin : domain that is explicitly permitted to access resources  in the context of Cross-Origin Resource Sharing (CORS)\ntrip-design-app.allowed-origin=${ALLOWED_ORIGIN}\n\n# trip-design-app.cookie.secure-attribute should be true in production\ntrip-design-app.cookie.secure-attribute=${COOKIE_SECURE_ATTRIBUTE}\n\n# trip-design-app.cookie.same-site should be true if cross origin + use credentials\ntrip-design-app.cookie.same-site=${COOKIE_SAME_SITE}\n\n# fullname, email and password of bootsraped SuperAdmin user when app starts\ntrip-design-app.super-admin.fullname=${SUPER_ADMIN_FULLNAME}\ntrip-design-app.super-admin.email=${SUPER_ADMIN_EMAIL}\ntrip-design-app.super-admin.password=${SUPER_ADMIN_PASSWORD}\n```\n\n#### AWS properties\n\nThis project allows users to upload a background image for a Trip resource.\nImages are stored and retrieved from AWS infrastructure deployed via the image-uploader project: https://github.com/lrasata/infra-image-uploader\n\n```properties\n\n# AWS Region\naws.region=${AWS_REGION}\n\n# DynamoDB table for storing metadata\naws.dynamodb.table.metadata.name=${DYNAMODB_TABLE_NAME}\n\n# S3 bucket for storing uploaded images\naws.s3.bucket.name=${S3_BUCKET_NAME}\n\n````\n\n#### Logging level\n```\nlogging.level.com.lrasata.tripPlannerAPI=\n```\n\n\n### Run the application locally\n\nSet ENVIRONMENT variable:\n\n````text\nexport ENVIRONMENT=local\nexport AWS_ACCESS_KEY_ID=key\nexport AWS_SECRET_ACCESS_KEY=secret\nexport AWS_REGION=us-east-1\n````\n\nor for CMD :\n````text\nset ENVIRONMENT=local\nset AWS_ACCESS_KEY_ID=key\nset AWS_SECRET_ACCESS_KEY=secret\nset AWS_REGION=us-east-1\n````\n\nor for Powershell:\n````text\n$Env:ENVIRONMENT = \"local\"\n$Env:AWS_ACCESS_KEY_ID=\"KEY\"\n$Env:AWS_SECRET_ACCESS_KEY=\"secret\"\n$Env:AWS_REGION=\"eu-central-1\"\n````\n\nThen run with Maven Wrapper:\n\n`````bash\n./mvnw spring-boot:run\n`````\n\n#### Access Swagger UI\nOpen http://localhost:8080/swagger-ui/index.html in your browser to explore and test the API endpoints.\n\n### Format code\n\n`````bash\nmvn spotless:apply    # Formats code\nmvn spotless:check    # Fails build if not formatted\n`````\n\n\n### Build JAR\n\n`````bash\n./mvnw clean package\njava -jar target/tripPlannerAPI-0.0.1-SNAPSHOT.jar\n`````\n\n### Testing\n\n`````bash\n./mvnw test\n`````\n\n---\n\n## Docker\n\nYou can containerize the Trip Planner backend app using Docker and manage multi-container setups with Docker Compose.\n\n### Using Docker Compose\n\n`````bash\ndocker compose up --build\n`````\n\nThis will build and start services in `docker-compose.yml` and `docker-compose.override.yml` . In this file, the web app is set up to be accessible on port `8080` : `http://localhost:8080/`\n\nMake sure Docker is installed and running on your system.\n\n---\n\n## License\n\nThis project is licensed under the MIT License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flrasata%2Ftripplannerapi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flrasata%2Ftripplannerapi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flrasata%2Ftripplannerapi/lists"}