{"id":17566584,"url":"https://github.com/guillaumeroussin/spring-boot-react-portfolio","last_synced_at":"2026-04-10T07:02:31.986Z","repository":{"id":256201732,"uuid":"849822285","full_name":"GuillaumeRoussin/spring-boot-react-portfolio","owner":"GuillaumeRoussin","description":"[ONGOING] Climber Connect is a web app built with Spring Boot and React that lets climbers create profiles, save favorite climbing spots on a map, and organize climbing groups. Features include secure authentication, map integration with Leaflet, and a modern UI using Tailwind CSS and Shadcn UI.","archived":false,"fork":false,"pushed_at":"2024-10-28T13:31:46.000Z","size":732,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2025-02-04T14:26:28.105Z","etag":null,"topics":["auth0","auth0-jwt","axios","lombok","passay","react","reacthookform","reactleaflet","reactquery","reactrouterdom","shadcn-ui","spring-boot","spring-jpa","spring-security","tailwindcss","typescript","zod"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/GuillaumeRoussin.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":"2024-08-30T10:12:58.000Z","updated_at":"2024-10-28T13:31:49.000Z","dependencies_parsed_at":"2024-10-28T14:59:27.086Z","dependency_job_id":"9d42c7da-2871-49fa-b11a-6025eac99e61","html_url":"https://github.com/GuillaumeRoussin/spring-boot-react-portfolio","commit_stats":null,"previous_names":["guillaumeroussin/spring-portfolio","guillaumeroussin/spring-boot-react-portfolio"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GuillaumeRoussin%2Fspring-boot-react-portfolio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GuillaumeRoussin%2Fspring-boot-react-portfolio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GuillaumeRoussin%2Fspring-boot-react-portfolio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GuillaumeRoussin%2Fspring-boot-react-portfolio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GuillaumeRoussin","download_url":"https://codeload.github.com/GuillaumeRoussin/spring-boot-react-portfolio/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246193154,"owners_count":20738450,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["auth0","auth0-jwt","axios","lombok","passay","react","reacthookform","reactleaflet","reactquery","reactrouterdom","shadcn-ui","spring-boot","spring-jpa","spring-security","tailwindcss","typescript","zod"],"created_at":"2024-10-21T15:06:24.509Z","updated_at":"2025-12-30T20:04:52.033Z","avatar_url":"https://github.com/GuillaumeRoussin.png","language":"TypeScript","readme":"# [ONGOING] Climber Connect: Profile and Group Management for Climbers in Spring boot and React\n\n## Description\n\n**Climber Connect** is a full-stack web application that allows users to create and manage climber profiles, register as\nclimbers, and organize climbing activities. Users can store their favorite climbing locations on a map and create\nclimbing groups to organize outings with others. The app is built with Spring Boot on the backend and React on the\nfrontend, providing a seamless experience for both user management and map integration.\n\n## Proof of concepts\n\n### Backend\n\n- **Authentication**: Springboot application secured with Auth0 Jwt and Spring security including roles and privileges.\n- **Api**: CRUD API using RestController and DTOS. Jarkata and Passay are used for data validation. Spring security\n  authorities is used for route protection. Pagination using Spring data JPA.\n- **Geometry Data**: Usage of Hibernate-spatial. Storing POINT or POLYGON in database. Object on java side are from\n  org.locationtech.jts.geom.\n\n### Frontend\n\n- **Routing**: React application provides secured routes (using React router) based on roles and unsecured ones for\n  sign-in and sign-up.\n- **Api**: React query and zod are used for getting and mutate data. Server side pagination is also implemented (\n  shadcn/ui tables).\n- **Map**: React leaflet map implementation. User can create point and polygons (with names, descriptions ...) and save\n  them to database.\n\n## Technologies Used\n\n### Backend Technologies\n\n- **Spring Boot**: A framework for building production-ready applications with Java.\n    - **Spring Boot Starter Web**: To build web applications and RESTful APIs.\n    - **Spring Boot Starter Data JPA**: For database interactions using the Java Persistence API (JPA).\n    - **Spring Boot Starter Security**: For implementing authentication and authorization mechanisms.\n    - **Spring Boot Starter Validation**: For input validation.\n- **Hibernate**: Used in conjunction with Spring Data JPA for ORM (Object-Relational Mapping).\n- **Hibernate spatial**: Used in conjunction with Spring Data JPA for ORM (Object-Relational Mapping) for Geometric\n  data.\n- **Jackson Datatype for Hibernate**: Handling JSON serialization and deserialization of Hibernate entities.\n- **Java JWT (Auth0)**: For handling JWT-based authentication.\n- **Passay**: For enforcing password policies and validations.\n- **Lombok**: Used to reduce boilerplate code such as getters, setters, and constructors (optional dependency).\n- **DataFaker**: For generating fake data in testing and seeding.\n- **Testing**:\n    - **Spring Boot Starter Test**: For writing unit and integration tests.\n    - **Spring Security Test**: For testing security-related functionality.\n\n#### Build and Dependency Management\n\n- **Maven**: For project build and dependency management.\n- **Spring Boot Maven Plugin**: For packaging and running the Spring Boot application.\n\n## Frontend Technologies\n\n- **React**: A JavaScript library for building user interfaces.\n    - **React Router DOM**: For client-side routing and navigation.\n    - **React Hook Form**: For building and managing forms with validation.\n    - **React Query**: For handling server-state management, caching, and data synchronization.\n    - **React-Leaflet**: For rendering maps using the Leaflet library.\n- **Shadcn UI**: A customizable and accessible component library built on top of Radix UI (and others) and Tailwind CSS.\n- **Tailwind CSS**: A utility-first CSS framework for rapid UI development.\n- **Leaflet**: A lightweight, open-source library for mobile-friendly interactive maps.\n- **Axios**: For making HTTP requests from the frontend to the backend API.\n- **Zod**: A schema declaration and validation library.\n- **Date-FNS**: For manipulating and formatting dates in JavaScript.\n\n### Development and Build Tools\n\n- **Vite**: A fast build tool for modern web projects, used for both development and production builds.\n- **TypeScript**: A statically typed superset of JavaScript for writing safer and more maintainable code.\n- **ESLint**: A tool for identifying and fixing problems in your JavaScript and TypeScript code.\n\n## Features\n\n- **Climber Profiles**: Users can create and manage their climber profiles, including details such as skill level,\n  climbing experience, and preferred climbing styles.\n- **Locations**: Save favorite climbing spots on an interactive map using.\n- **Climbing Groups**: Create and manage climbing groups, invite others to join, and organize group outings.\n- **User Authentication**: Secure login and registration system using Spring Security, allowing users to manage their\n  profiles.\n- **Interactive Map**: Display and manage favorite climbing locations directly on an interactive map.\n\n## Installation and Setup\n\n1. Clone the repository:\n   ```bash\n   git clone https://github.com/GuillaumeRoussin/spring-boot-react-portfolio.git\n   cd spring-boot-react-portfolio\n   ```\n2. Run Docker compose\n    ```bash\n   docker-compose up\n   ```\n3. Run spring application\n    ```bash\n   ./mvnw clean install\n   ./mvnw spring-boot:run\n   ```\n4. Run react app\n    ```bash\n   cd app\n   npm install\n   npm run dev\n    ```\n\n## Default Usage and Users\n\nGo to http://localhost:5173/\nList of registered users (you can registered some as well)\n\n| Username       | Password | Role  |\n|----------------|----------|-------|\n| admin@test.com | test     | Admin |\n| staff@test.com | test     | Staff |\n| user@test.com  | test     | User  |","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguillaumeroussin%2Fspring-boot-react-portfolio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fguillaumeroussin%2Fspring-boot-react-portfolio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguillaumeroussin%2Fspring-boot-react-portfolio/lists"}