From d5195086ca4ad63029f5fc34714d868204c3d00f Mon Sep 17 00:00:00 2001 From: Maximilian Liebmann Date: Fri, 9 May 2025 22:46:02 +0200 Subject: [PATCH 01/33] docs: update README.md with detailed project description, features, and setup instructions Adds a detailed project description, implemented and planned features, technologies used, and setup instructions to the README. --- README.md | 146 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 145 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a225c9e..1d4b270 100644 --- a/README.md +++ b/README.md @@ -1 +1,145 @@ -# MeetUp +# MeetUP + +## Description + +MeetUP is a social calendar application designed to make coordinating schedules with friends seamless and intuitive. It was created because it can be a hassle coordinating meetings between multiple friends and across different friend groups. MeetUP aims to simplify the process of finding mutual availability without endless back-and-forth messaging. + +## Project Status + +**Still in Development:** This project is actively under development. Core features are being built, and the application is not yet feature-complete or ready for production use. + +## Features + +### Implemented Features + +- Core infrastructure setup in progress. No user-facing features are implemented yet. + +### Planned Features (Roadmap) + +- **Friendships:** Connect with friends to share calendars. +- **Group Calendars:** Create and manage shared calendars for groups. +- **iCal Import:** Import existing calendars from iCalendar (.ics) files. +- **iCal Export:** Export personal or shared calendars in iCalendar (.ics) format. +- **Email Notifications:** Receive email alerts for event bookings, reminders, and updates. +- **View Blocked Slots:** See when friends are busy without revealing event details. +- **Book Timeslots:** Request and confirm meeting times in friends' available slots. +- **SSO Compatibility:** Planning for Single Sign-On integration. + +## Technologies Used + +This project is built with a modern tech stack: + +- **Package Manager:** [Yarn](https://yarnpkg.com/) +- **Framework:** [Next.js](https://nextjs.org/) - React framework for server-side rendering and static site generation. +- **Language:** [TypeScript](https://www.typescriptlang.org/) - Superset of JavaScript that adds static typing. +- **ORM:** [Prisma](https://www.prisma.io/) - Next-generation ORM for Node.js and TypeScript. +- **Authentication:** [Auth.js](https://authjs.dev/) (formerly NextAuth.js) - Authentication for Next.js. +- **Styling:** [Tailwind CSS](https://tailwindcss.com/) - A utility-first CSS framework. +- **UI Components:** [shadcn/ui](https://ui.shadcn.com/) - Re-usable components built using Radix UI and Tailwind CSS. +- **Containerization:** [Docker](https://www.docker.com/) (for planned self-hosting option) +- _(You can also list related tools here, e.g., ESLint, Prettier, testing libraries if you plan to use them)_ + +## Getting Started + +**Prerequisites:** + +- Node.js: Version is continually upgraded. It's recommended to use the latest LTS or a recent stable version. (Check `.nvmrc` if available). +- Yarn: Version is continually upgraded. (Check `package.json` engines field if specified). +- A database supported by Prisma (e.g., PostgreSQL, MySQL, SQLite). Ensure your database server is running. + +**Installation & Running Locally:** + +1. **Clone the repository:** + - Using SSH: + ```bash + git clone ssh://git@git.dominikstahl.dev/DHBW-WE/MeetUp.git + ``` + - Or using HTTPS (recommended for most users): + ```bash + git clone [https://git.dominikstahl.dev/DHBW-WE/MeetUp.git](https://git.dominikstahl.dev/DHBW-WE/MeetUp.git) + ``` + ```bash + cd MeetUp + ``` +2. **Install dependencies:** + ```bash + yarn install + ``` +3. **Set up environment variables:** + + - You will need to create an `AUTH_SECRET`. You can generate one using the following command: + ```bash + npx auth secret + ``` + - Copy the `.env.example` file (if it exists) to `.env.local`. If not, create `.env.local`. + ```bash + # If .env.example exists: + cp .env.example .env.local + # Otherwise, create .env.local and add the following: + ``` + - Ensure the following environment variables are set in your `.env.local` file. Adjust `DATABASE_URL` for your specific database provider and credentials. + + ```env + # Database Connection String (Prisma) + # Example for PostgreSQL: DATABASE_URL="postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=public" + DATABASE_URL="your_database_connection_string" + + # Generated with npx auth secret + AUTH_SECRET="your_generated_auth_secret" + + # Authentik SSO Variables (if you are using this provider) + AUTH_AUTHENTIK_ID= + AUTH_AUTHENTIK_SECRET= + AUTH_AUTHENTIK_ISSUER= + + # Base URL of your application + NEXT_PUBLIC_APP_URL="http://localhost:3000" + ``` + +4. **Apply database migrations (Prisma):** + + - Ensure your Prisma schema (`prisma/schema.prisma`) is defined. + - Run the following command to apply migrations and generate Prisma Client: + ```bash + npx prisma migrate dev + # You might be prompted to name your first migration. + ``` + - (Optional: If you need to generate Prisma Client without running migrations, use `npx prisma generate`) + +5. **Run the development server:** + ```bash + yarn dev + ``` + Open [http://localhost:3000](http://localhost:3000) in your browser to see the application. + +**Self-Hosting with Docker (Planned):** + +- A Docker image and `docker-compose.yml` file will be provided in the future to allow for easy self-hosting of the MeetUP application. This setup will also include database services. Instructions will be updated here once available. + +## Contributing + +_(This section can be expanded as your project grows and you're open to contributions.)_ + +Contributions are welcome! If you'd like to contribute, please: + +1. Fork the repository. +2. Create a new branch (`git checkout -b feature/your-feature-name` or `fix/your-bug-fix`). +3. Make your changes. +4. Commit your changes (`git commit -m 'Add some feature'`). +5. Push to the branch (`git push origin feature/your-feature-name`). +6. Open a Pull Request against the `main` (or `develop`) branch. + +Please ensure your code adheres to the project's coding standards (e.g., run linters/formatters if configured) and that any database schema changes are accompanied by a Prisma migration. + +_(Optional: You can add more details about reporting bugs, suggesting features, or coding style guides here.)_ + +--- + +**(Optional Sections You Might Want to Add Later):** + +- **Screenshots/Demo:** (Once you have UI to show) +- **API Reference:** (If you plan to expose an API) +- **Detailed Deployment Guides:** (For various platforms beyond Docker) +- **License:** (e.g., MIT, GPL - Important for open source projects) +- **Contact:** (How to get in touch with the maintainers) +- **Acknowledgements:** (Credit to any libraries, inspirations, or contributors) From 84066b33f10abff8468012d8a0bec7e9255965a4 Mon Sep 17 00:00:00 2001 From: Maximilian Liebmann Date: Fri, 9 May 2025 23:08:28 +0200 Subject: [PATCH 02/33] docs: add environment variable for skipping login flow in development --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 1d4b270..ee2caea 100644 --- a/README.md +++ b/README.md @@ -94,6 +94,10 @@ This project is built with a modern tech stack: # Base URL of your application NEXT_PUBLIC_APP_URL="http://localhost:3000" + + # Development: Skip login flow (set to "true" to bypass authentication) + # Ensure this is NOT set to "true" in production. + MEETUP_SKIP_LOGIN="false" ``` 4. **Apply database migrations (Prisma):** From c13286b05da055560c7f0059c9cd1f17017987e7 Mon Sep 17 00:00:00 2001 From: Maximilian Liebmann Date: Fri, 9 May 2025 23:12:17 +0200 Subject: [PATCH 03/33] feat(env): add example env file and update .gitignore to include it --- .env.example | 11 +++++++++++ .gitignore | 1 + 2 files changed, 12 insertions(+) create mode 100644 .env.example diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..e509a47 --- /dev/null +++ b/.env.example @@ -0,0 +1,11 @@ +DATABASE_URL= + +AUTH_SECRET= # Added by `npx auth`. Read more: https://cli.authjs.dev + +AUTH_AUTHENTIK_ID= +AUTH_AUTHENTIK_SECRET= +AUTH_AUTHENTIK_ISSUER= + +NEXT_PUBLIC_APP_URL= + +MEETUP_SKIP_LOGIN= \ No newline at end of file diff --git a/.gitignore b/.gitignore index 5ef6a52..7b8da95 100644 --- a/.gitignore +++ b/.gitignore @@ -32,6 +32,7 @@ yarn-error.log* # env files (can opt-in for committing if needed) .env* +!.env.example # vercel .vercel From 2de18006fe6c3b1563c9cc6b90613c5b34acb6cb Mon Sep 17 00:00:00 2001 From: Maximilian Liebmann Date: Fri, 9 May 2025 23:21:31 +0200 Subject: [PATCH 04/33] docs: remove optional notes from contributing section in README.md --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index ee2caea..9e1f4fe 100644 --- a/README.md +++ b/README.md @@ -122,8 +122,6 @@ This project is built with a modern tech stack: ## Contributing -_(This section can be expanded as your project grows and you're open to contributions.)_ - Contributions are welcome! If you'd like to contribute, please: 1. Fork the repository. @@ -135,8 +133,6 @@ Contributions are welcome! If you'd like to contribute, please: Please ensure your code adheres to the project's coding standards (e.g., run linters/formatters if configured) and that any database schema changes are accompanied by a Prisma migration. -_(Optional: You can add more details about reporting bugs, suggesting features, or coding style guides here.)_ - --- **(Optional Sections You Might Want to Add Later):** From 6a52a5aa7d844fa426abbb877fb8e2ed22ddfbf9 Mon Sep 17 00:00:00 2001 From: Maximilian Liebmann Date: Fri, 9 May 2025 23:21:31 +0200 Subject: [PATCH 05/33] docs: remove optional notes from contributing section in README.md --- README.md | 146 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 145 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a225c9e..9e1f4fe 100644 --- a/README.md +++ b/README.md @@ -1 +1,145 @@ -# MeetUp +# MeetUP + +## Description + +MeetUP is a social calendar application designed to make coordinating schedules with friends seamless and intuitive. It was created because it can be a hassle coordinating meetings between multiple friends and across different friend groups. MeetUP aims to simplify the process of finding mutual availability without endless back-and-forth messaging. + +## Project Status + +**Still in Development:** This project is actively under development. Core features are being built, and the application is not yet feature-complete or ready for production use. + +## Features + +### Implemented Features + +- Core infrastructure setup in progress. No user-facing features are implemented yet. + +### Planned Features (Roadmap) + +- **Friendships:** Connect with friends to share calendars. +- **Group Calendars:** Create and manage shared calendars for groups. +- **iCal Import:** Import existing calendars from iCalendar (.ics) files. +- **iCal Export:** Export personal or shared calendars in iCalendar (.ics) format. +- **Email Notifications:** Receive email alerts for event bookings, reminders, and updates. +- **View Blocked Slots:** See when friends are busy without revealing event details. +- **Book Timeslots:** Request and confirm meeting times in friends' available slots. +- **SSO Compatibility:** Planning for Single Sign-On integration. + +## Technologies Used + +This project is built with a modern tech stack: + +- **Package Manager:** [Yarn](https://yarnpkg.com/) +- **Framework:** [Next.js](https://nextjs.org/) - React framework for server-side rendering and static site generation. +- **Language:** [TypeScript](https://www.typescriptlang.org/) - Superset of JavaScript that adds static typing. +- **ORM:** [Prisma](https://www.prisma.io/) - Next-generation ORM for Node.js and TypeScript. +- **Authentication:** [Auth.js](https://authjs.dev/) (formerly NextAuth.js) - Authentication for Next.js. +- **Styling:** [Tailwind CSS](https://tailwindcss.com/) - A utility-first CSS framework. +- **UI Components:** [shadcn/ui](https://ui.shadcn.com/) - Re-usable components built using Radix UI and Tailwind CSS. +- **Containerization:** [Docker](https://www.docker.com/) (for planned self-hosting option) +- _(You can also list related tools here, e.g., ESLint, Prettier, testing libraries if you plan to use them)_ + +## Getting Started + +**Prerequisites:** + +- Node.js: Version is continually upgraded. It's recommended to use the latest LTS or a recent stable version. (Check `.nvmrc` if available). +- Yarn: Version is continually upgraded. (Check `package.json` engines field if specified). +- A database supported by Prisma (e.g., PostgreSQL, MySQL, SQLite). Ensure your database server is running. + +**Installation & Running Locally:** + +1. **Clone the repository:** + - Using SSH: + ```bash + git clone ssh://git@git.dominikstahl.dev/DHBW-WE/MeetUp.git + ``` + - Or using HTTPS (recommended for most users): + ```bash + git clone [https://git.dominikstahl.dev/DHBW-WE/MeetUp.git](https://git.dominikstahl.dev/DHBW-WE/MeetUp.git) + ``` + ```bash + cd MeetUp + ``` +2. **Install dependencies:** + ```bash + yarn install + ``` +3. **Set up environment variables:** + + - You will need to create an `AUTH_SECRET`. You can generate one using the following command: + ```bash + npx auth secret + ``` + - Copy the `.env.example` file (if it exists) to `.env.local`. If not, create `.env.local`. + ```bash + # If .env.example exists: + cp .env.example .env.local + # Otherwise, create .env.local and add the following: + ``` + - Ensure the following environment variables are set in your `.env.local` file. Adjust `DATABASE_URL` for your specific database provider and credentials. + + ```env + # Database Connection String (Prisma) + # Example for PostgreSQL: DATABASE_URL="postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=public" + DATABASE_URL="your_database_connection_string" + + # Generated with npx auth secret + AUTH_SECRET="your_generated_auth_secret" + + # Authentik SSO Variables (if you are using this provider) + AUTH_AUTHENTIK_ID= + AUTH_AUTHENTIK_SECRET= + AUTH_AUTHENTIK_ISSUER= + + # Base URL of your application + NEXT_PUBLIC_APP_URL="http://localhost:3000" + + # Development: Skip login flow (set to "true" to bypass authentication) + # Ensure this is NOT set to "true" in production. + MEETUP_SKIP_LOGIN="false" + ``` + +4. **Apply database migrations (Prisma):** + + - Ensure your Prisma schema (`prisma/schema.prisma`) is defined. + - Run the following command to apply migrations and generate Prisma Client: + ```bash + npx prisma migrate dev + # You might be prompted to name your first migration. + ``` + - (Optional: If you need to generate Prisma Client without running migrations, use `npx prisma generate`) + +5. **Run the development server:** + ```bash + yarn dev + ``` + Open [http://localhost:3000](http://localhost:3000) in your browser to see the application. + +**Self-Hosting with Docker (Planned):** + +- A Docker image and `docker-compose.yml` file will be provided in the future to allow for easy self-hosting of the MeetUP application. This setup will also include database services. Instructions will be updated here once available. + +## Contributing + +Contributions are welcome! If you'd like to contribute, please: + +1. Fork the repository. +2. Create a new branch (`git checkout -b feature/your-feature-name` or `fix/your-bug-fix`). +3. Make your changes. +4. Commit your changes (`git commit -m 'Add some feature'`). +5. Push to the branch (`git push origin feature/your-feature-name`). +6. Open a Pull Request against the `main` (or `develop`) branch. + +Please ensure your code adheres to the project's coding standards (e.g., run linters/formatters if configured) and that any database schema changes are accompanied by a Prisma migration. + +--- + +**(Optional Sections You Might Want to Add Later):** + +- **Screenshots/Demo:** (Once you have UI to show) +- **API Reference:** (If you plan to expose an API) +- **Detailed Deployment Guides:** (For various platforms beyond Docker) +- **License:** (e.g., MIT, GPL - Important for open source projects) +- **Contact:** (How to get in touch with the maintainers) +- **Acknowledgements:** (Credit to any libraries, inspirations, or contributors) From f896665dcf4d22dc1c341a84502e1abbc89ecd17 Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Wed, 7 May 2025 13:36:13 +0200 Subject: [PATCH 06/33] chore(ci): Add labels to docker image --- Dockerfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Dockerfile b/Dockerfile index 5d16c45..faee65e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,6 +27,10 @@ COPY --from=builder /app/public ./public COPY --from=builder /app/.next/standalone ./ COPY --from=builder /app/.next/static ./.next/static +LABEL org.opencontainers.image.source="https://git.dominikstahl.dev/DHBW-WE/MeetUp" +LABEL org.opencontainers.image.title="MeetUp" +LABEL org.opencontainers.image.description="A web application for managing meetups" + EXPOSE 3000 ENV HOSTNAME="0.0.0.0" From e7fc02c8c99a73b65f989fc67433fd3583d624c4 Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Wed, 7 May 2025 13:38:03 +0200 Subject: [PATCH 07/33] chore(ci): example environment variables add example environment variables to docker-compose.yml to prevent errors --- docker-compose.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 9cff22a..e5c4b78 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,3 +5,5 @@ services: dockerfile: Dockerfile ports: - '3000:3000' + environment: + - AUTH_SECRET=secret From 2c384187708cc878b8677e92ffe74b4d3ddb43be Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Wed, 7 May 2025 13:39:29 +0200 Subject: [PATCH 08/33] chore(ci): remove sha_ tags from build docker images --- .github/workflows/docker-build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 69147b5..a3723c9 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -53,7 +53,7 @@ jobs: if: github.event_name == 'pull_request' with: push: true - tags: git.dominikstahl.dev/${{ env.REPO }}:sha_${{ github.sha }},git.dominikstahl.dev/${{ env.REPO }}:${{ steps.get-ref.outputs.tag}} + tags: git.dominikstahl.dev/${{ env.REPO }}:${{ steps.get-ref.outputs.tag}} - name: Build and push (push_tag) uses: docker/build-push-action@14487ce63c7a62a4a324b0bfb37086795e31c6c1 # v6 @@ -67,4 +67,4 @@ jobs: if: github.event_name == 'push' && github.ref_type == 'branch' with: push: true - tags: git.dominikstahl.dev/${{ env.REPO }}:sha_${{ github.sha }},git.dominikstahl.dev/${{ env.REPO }}:main + tags: git.dominikstahl.dev/${{ env.REPO }}:${{ steps.get-ref.outputs.tag }} From 0927116a2caea67cbd269bc5f8cccd2c534fba6a Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Thu, 8 May 2025 14:31:45 +0200 Subject: [PATCH 09/33] fix: add missing env variable to docker-compose added the missing AUTH_URL variable to the example docker-compose.yml --- docker-compose.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index e5c4b78..cee59f7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,7 +3,9 @@ services: build: context: . dockerfile: Dockerfile + image: git.dominikstahl.dev/dhbw-we/meetup:main ports: - '3000:3000' environment: - AUTH_SECRET=secret + - AUTH_URL=http://localhost:3000 From ef65c5bbf65e66df71f8c7e28ec09e6ae3a08726 Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Fri, 9 May 2025 22:11:48 +0200 Subject: [PATCH 10/33] chore: add Docker cleanup steps to workflows --- .github/workflows/container-scan.yml | 7 +++++++ .github/workflows/docker-build.yml | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/.github/workflows/container-scan.yml b/.github/workflows/container-scan.yml index 0266cdc..1c5ac22 100644 --- a/.github/workflows/container-scan.yml +++ b/.github/workflows/container-scan.yml @@ -41,3 +41,10 @@ jobs: uses: forgejo/upload-artifact@v4 with: path: trivy-report.json + + - name: Clean up Docker + run: | + docker system prune -af + docker volume prune -f + docker network prune -f + docker builder prune -af diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index a3723c9..e7f8888 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -68,3 +68,10 @@ jobs: with: push: true tags: git.dominikstahl.dev/${{ env.REPO }}:${{ steps.get-ref.outputs.tag }} + + - name: Clean up Docker + run: | + docker system prune -af + docker volume prune -f + docker network prune -f + docker builder prune -af From 794ed5483260e1591fa8f35bf422beaf1d8fe5d8 Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Fri, 9 May 2025 22:48:12 +0200 Subject: [PATCH 11/33] chore: remove docker installs from workflows --- .github/workflows/container-scan.yml | 13 ------------- .github/workflows/docker-build.yml | 11 ----------- 2 files changed, 24 deletions(-) diff --git a/.github/workflows/container-scan.yml b/.github/workflows/container-scan.yml index 1c5ac22..8720c0b 100644 --- a/.github/workflows/container-scan.yml +++ b/.github/workflows/container-scan.yml @@ -8,23 +8,10 @@ jobs: container-scan: name: Container Scan runs-on: docker - container: - image: node:22-bullseye@sha256:ed0338dd02fd86861a59dc1cbc2e12152f3a93c4ce5933d347d6677232000dc7 steps: - name: Checkout code uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - - name: Install Docker - run: | - apt-get update - apt-get install -y ca-certificates curl - install -m 0755 -d /etc/apt/keyrings - curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc - chmod a+r /etc/apt/keyrings/docker.asc - echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null - apt-get update - apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin - - name: Build an image from Dockerfile run: docker build -t git.dominikstahl.dev/dhbw-we/meetup:${{ github.sha }} . diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index e7f8888..674b4c4 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -13,17 +13,6 @@ jobs: docker: runs-on: docker steps: - - name: Install Docker - run: | - apt-get update - apt-get install -y ca-certificates curl - install -m 0755 -d /etc/apt/keyrings - curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc - chmod a+r /etc/apt/keyrings/docker.asc - echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null - apt-get update - apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin - - name: Login to Docker Hub uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3 with: From ae2d7005e6a7196729ccc72e2bb7d762d7aff78e Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Fri, 9 May 2025 23:11:50 +0200 Subject: [PATCH 12/33] fix: keep some build caches to speed up builds --- .github/workflows/container-scan.yml | 7 +++---- .github/workflows/docker-build.yml | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/.github/workflows/container-scan.yml b/.github/workflows/container-scan.yml index 8720c0b..e55bd72 100644 --- a/.github/workflows/container-scan.yml +++ b/.github/workflows/container-scan.yml @@ -31,7 +31,6 @@ jobs: - name: Clean up Docker run: | - docker system prune -af - docker volume prune -f - docker network prune -f - docker builder prune -af + docker builder prune -af --keep-storage 2GB + docker rmi $(docker images --filter=reference="git.dominikstahl.dev/dhbw-we/meetup:*" -q) + docker image prune -f diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 674b4c4..b061608 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -60,7 +60,6 @@ jobs: - name: Clean up Docker run: | - docker system prune -af - docker volume prune -f - docker network prune -f - docker builder prune -af + docker builder prune -af --keep-storage 2GB + docker rmi $(docker images --filter=reference="git.dominikstahl.dev/dhbw-we/meetup:*" -q) + docker image prune -f From dcb9dda000f7ca77c8aa17b39c3ab785d2c62ea3 Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Fri, 9 May 2025 23:17:46 +0200 Subject: [PATCH 13/33] fix: set container image in workflow files --- .github/workflows/container-scan.yml | 2 ++ .github/workflows/docker-build.yml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.github/workflows/container-scan.yml b/.github/workflows/container-scan.yml index e55bd72..2139ad7 100644 --- a/.github/workflows/container-scan.yml +++ b/.github/workflows/container-scan.yml @@ -8,6 +8,8 @@ jobs: container-scan: name: Container Scan runs-on: docker + container: + image: ghcr.io/di0ik/forgejo_runner_container:main steps: - name: Checkout code uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index b061608..1c6fa1b 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -12,6 +12,8 @@ on: jobs: docker: runs-on: docker + container: + image: ghcr.io/di0ik/forgejo_runner_container:main steps: - name: Login to Docker Hub uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3 From aeb904dcde6492d41dbbbd33c04bd275a57bca95 Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Fri, 9 May 2025 23:37:01 +0200 Subject: [PATCH 14/33] fix: make repo to lower workflow step posix compatible --- .github/workflows/docker-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 1c6fa1b..0042890 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -37,7 +37,7 @@ jobs: - name: lowercase repo name run: | - echo "REPO=${GITHUB_REPOSITORY,,}" >>${GITHUB_ENV} + echo "REPO=$(echo $GITHUB_REPOSITORY | tr '[:upper:]' '[:lower:]')" >>${GITHUB_ENV} - name: Build and push (pull_request) uses: docker/build-push-action@14487ce63c7a62a4a324b0bfb37086795e31c6c1 # v6 From 96d2852c2dc9aaf1df41de5d0e814258ab2fb430 Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Sat, 10 May 2025 00:01:34 +0200 Subject: [PATCH 15/33] fix: dont try to remove already removed tags --- .github/workflows/docker-build.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 0042890..6ecc55f 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -63,5 +63,4 @@ jobs: - name: Clean up Docker run: | docker builder prune -af --keep-storage 2GB - docker rmi $(docker images --filter=reference="git.dominikstahl.dev/dhbw-we/meetup:*" -q) docker image prune -f From 54def8f898676632fb3e1659a258cb513d0b7173 Mon Sep 17 00:00:00 2001 From: Maximilian Liebmann Date: Fri, 9 May 2025 23:21:31 +0200 Subject: [PATCH 16/33] feat: add HoverCard component and minimal page footer --- package.json | 1 + src/app/login/page.tsx | 47 ++++++--- src/components/ui/hover-card.tsx | 44 +++++++++ yarn.lock | 162 ++++++++++++++++++++++++++++++- 4 files changed, 241 insertions(+), 13 deletions(-) create mode 100644 src/components/ui/hover-card.tsx diff --git a/package.json b/package.json index f50124c..aba1ecb 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "@fortawesome/free-regular-svg-icons": "^6.7.2", "@fortawesome/free-solid-svg-icons": "^6.7.2", "@fortawesome/react-fontawesome": "^0.2.2", + "@radix-ui/react-hover-card": "^1.1.13", "@radix-ui/react-slot": "^1.2.2", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index b843b45..6bd8531 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -2,9 +2,16 @@ import { auth } from '@/auth'; import SSOLogin from '@/components/user/sso-login-button'; import LoginForm from '@/components/user/login-form'; import { redirect } from 'next/navigation'; +import { Button } from '@/components/ui/button'; +import Image from 'next/image'; import '@/app/globals.css'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import { + HoverCard, + HoverCardTrigger, + HoverCardContent, +} from '@/components/ui/hover-card'; export default async function LoginPage() { const session = await auth(); @@ -15,20 +22,36 @@ export default async function LoginPage() { return (
- - - Login - - - +
+ + + Login + + + -
+
- {process.env.AUTH_AUTHENTIK_ISSUER && ( - - )} -
-
+ {process.env.AUTH_AUTHENTIK_ISSUER && ( + + )} + + +
+ + + + + + dancing penguin + +
); } diff --git a/src/components/ui/hover-card.tsx b/src/components/ui/hover-card.tsx new file mode 100644 index 0000000..e754186 --- /dev/null +++ b/src/components/ui/hover-card.tsx @@ -0,0 +1,44 @@ +"use client" + +import * as React from "react" +import * as HoverCardPrimitive from "@radix-ui/react-hover-card" + +import { cn } from "@/lib/utils" + +function HoverCard({ + ...props +}: React.ComponentProps) { + return +} + +function HoverCardTrigger({ + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function HoverCardContent({ + className, + align = "center", + sideOffset = 4, + ...props +}: React.ComponentProps) { + return ( + + + + ) +} + +export { HoverCard, HoverCardTrigger, HoverCardContent } diff --git a/yarn.lock b/yarn.lock index 249a2ad..6bfc9fb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -239,6 +239,33 @@ "@eslint/core" "^0.13.0" levn "^0.4.1" +"@floating-ui/core@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.7.0.tgz#1aff27a993ea1b254a586318c29c3b16ea0f4d0a" + integrity sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA== + dependencies: + "@floating-ui/utils" "^0.2.9" + +"@floating-ui/dom@^1.0.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.7.0.tgz#f9f83ee4fee78ac23ad9e65b128fc11a27857532" + integrity sha512-lGTor4VlXcesUMh1cupTUTDoCxMb0V6bm3CnxHzQcw8Eaf1jQbgQX4i02fYgT0vJ82tb5MZ4CZk1LRGkktJCzg== + dependencies: + "@floating-ui/core" "^1.7.0" + "@floating-ui/utils" "^0.2.9" + +"@floating-ui/react-dom@^2.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.2.tgz#a1349bbf6a0e5cb5ded55d023766f20a4d439a31" + integrity sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A== + dependencies: + "@floating-ui/dom" "^1.0.0" + +"@floating-ui/utils@^0.2.9": + version "0.2.9" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.9.tgz#50dea3616bc8191fb8e112283b49eaff03e78429" + integrity sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg== + "@fortawesome/fontawesome-common-types@6.7.2": version "6.7.2" resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.7.2.tgz#7123d74b0c1e726794aed1184795dbce12186470" @@ -625,18 +652,151 @@ dependencies: "@prisma/debug" "6.7.0" +"@radix-ui/primitive@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.2.tgz#83f415c4425f21e3d27914c12b3272a32e3dae65" + integrity sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA== + +"@radix-ui/react-arrow@1.1.6": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.6.tgz#4b460fdbc1ac097a4964e04ca404c25c2f6d7d3f" + integrity sha512-2JMfHJf/eVnwq+2dewT3C0acmCWD3XiVA1Da+jTDqo342UlU13WvXtqHhG+yJw5JeQmu4ue2eMy6gcEArLBlcw== + dependencies: + "@radix-ui/react-primitive" "2.1.2" + "@radix-ui/react-compose-refs@1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz#a2c4c47af6337048ee78ff6dc0d090b390d2bb30" integrity sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg== -"@radix-ui/react-slot@^1.2.2": +"@radix-ui/react-context@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.2.tgz#61628ef269a433382c364f6f1e3788a6dc213a36" + integrity sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA== + +"@radix-ui/react-dismissable-layer@1.1.9": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.9.tgz#46e025ba6e6f403677e22fbb7d99b63cf7b32bca" + integrity sha512-way197PiTvNp+WBP7svMJasHl+vibhWGQDb6Mgf5mhEWJkgb85z7Lfl9TUdkqpWsf8GRNmoopx9ZxCyDzmgRMQ== + dependencies: + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-primitive" "2.1.2" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-escape-keydown" "1.1.1" + +"@radix-ui/react-hover-card@^1.1.13": + version "1.1.13" + resolved "https://registry.yarnpkg.com/@radix-ui/react-hover-card/-/react-hover-card-1.1.13.tgz#875bc07bae27a1634544b2d41940b358263bec5f" + integrity sha512-Wtjvx0d/6Bgd/jAYS1mW6IPSUQ25y0hkUSOS1z5/4+U8+DJPwKroqJlM/AlVFl3LywGoruiPmcvB9Aks9mSOQw== + dependencies: + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-dismissable-layer" "1.1.9" + "@radix-ui/react-popper" "1.2.6" + "@radix-ui/react-portal" "1.1.8" + "@radix-ui/react-presence" "1.1.4" + "@radix-ui/react-primitive" "2.1.2" + "@radix-ui/react-use-controllable-state" "1.2.2" + +"@radix-ui/react-popper@1.2.6": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.6.tgz#227d2882f19d80933796525c7bbd0d3ddf699ac0" + integrity sha512-7iqXaOWIjDBfIG7aq8CUEeCSsQMLFdn7VEE8TaFz704DtEzpPHR7w/uuzRflvKgltqSAImgcmxQ7fFX3X7wasg== + dependencies: + "@floating-ui/react-dom" "^2.0.0" + "@radix-ui/react-arrow" "1.1.6" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-primitive" "2.1.2" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-layout-effect" "1.1.1" + "@radix-ui/react-use-rect" "1.1.1" + "@radix-ui/react-use-size" "1.1.1" + "@radix-ui/rect" "1.1.1" + +"@radix-ui/react-portal@1.1.8": + version "1.1.8" + resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.8.tgz#0181e85bc0d8c67229dd8cf198204f5f4cc7c09c" + integrity sha512-hQsTUIn7p7fxCPvao/q6wpbxmCwgLrlz+nOrJgC+RwfZqWY/WN+UMqkXzrtKbPrF82P43eCTl3ekeKuyAQbFeg== + dependencies: + "@radix-ui/react-primitive" "2.1.2" + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-presence@1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.4.tgz#253ac0ad4946c5b4a9c66878335f5cf07c967ced" + integrity sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA== + dependencies: + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-primitive@2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.1.2.tgz#03f64f957719c761d22c2f92cc43ffb64bd42cc8" + integrity sha512-uHa+l/lKfxuDD2zjN/0peM/RhhSmRjr5YWdk/37EnSv1nJ88uvG85DPexSm8HdFQROd2VdERJ6ynXbkCFi+APw== + dependencies: + "@radix-ui/react-slot" "1.2.2" + +"@radix-ui/react-slot@1.2.2", "@radix-ui/react-slot@^1.2.2": version "1.2.2" resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.2.2.tgz#18e6533e778a2051edc2ad0773da8e22f03f626a" integrity sha512-y7TBO4xN4Y94FvcWIOIh18fM4R1A8S4q1jhoz4PNzOoHsFcN8pogcFmZrTYAm4F9VRUrWP/Mw7xSKybIeRI+CQ== dependencies: "@radix-ui/react-compose-refs" "1.1.2" +"@radix-ui/react-use-callback-ref@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz#62a4dba8b3255fdc5cc7787faeac1c6e4cc58d40" + integrity sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg== + +"@radix-ui/react-use-controllable-state@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz#905793405de57d61a439f4afebbb17d0645f3190" + integrity sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg== + dependencies: + "@radix-ui/react-use-effect-event" "0.0.2" + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-use-effect-event@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz#090cf30d00a4c7632a15548512e9152217593907" + integrity sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA== + dependencies: + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-use-escape-keydown@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz#b3fed9bbea366a118f40427ac40500aa1423cc29" + integrity sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g== + dependencies: + "@radix-ui/react-use-callback-ref" "1.1.1" + +"@radix-ui/react-use-layout-effect@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz#0c4230a9eed49d4589c967e2d9c0d9d60a23971e" + integrity sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ== + +"@radix-ui/react-use-rect@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz#01443ca8ed071d33023c1113e5173b5ed8769152" + integrity sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w== + dependencies: + "@radix-ui/rect" "1.1.1" + +"@radix-ui/react-use-size@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz#6de276ffbc389a537ffe4316f5b0f24129405b37" + integrity sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ== + dependencies: + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/rect@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.1.1.tgz#78244efe12930c56fd255d7923865857c41ac8cb" + integrity sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw== + "@rtsao/scc@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" From 41b8894a3e305b96feae9cc63939060d95a78432 Mon Sep 17 00:00:00 2001 From: Maximilian Liebmann Date: Fri, 9 May 2025 22:46:02 +0200 Subject: [PATCH 17/33] docs: update README.md with detailed project description, features, and setup instructions Adds a detailed project description, implemented and planned features, technologies used, and setup instructions to the README. --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9e1f4fe..1d4b270 100644 --- a/README.md +++ b/README.md @@ -94,10 +94,6 @@ This project is built with a modern tech stack: # Base URL of your application NEXT_PUBLIC_APP_URL="http://localhost:3000" - - # Development: Skip login flow (set to "true" to bypass authentication) - # Ensure this is NOT set to "true" in production. - MEETUP_SKIP_LOGIN="false" ``` 4. **Apply database migrations (Prisma):** @@ -122,6 +118,8 @@ This project is built with a modern tech stack: ## Contributing +_(This section can be expanded as your project grows and you're open to contributions.)_ + Contributions are welcome! If you'd like to contribute, please: 1. Fork the repository. @@ -133,6 +131,8 @@ Contributions are welcome! If you'd like to contribute, please: Please ensure your code adheres to the project's coding standards (e.g., run linters/formatters if configured) and that any database schema changes are accompanied by a Prisma migration. +_(Optional: You can add more details about reporting bugs, suggesting features, or coding style guides here.)_ + --- **(Optional Sections You Might Want to Add Later):** From 451d98b9540322d72a080bffc972a33db520f3e2 Mon Sep 17 00:00:00 2001 From: Maximilian Liebmann Date: Fri, 9 May 2025 23:08:28 +0200 Subject: [PATCH 18/33] docs: add environment variable for skipping login flow in development --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 1d4b270..ee2caea 100644 --- a/README.md +++ b/README.md @@ -94,6 +94,10 @@ This project is built with a modern tech stack: # Base URL of your application NEXT_PUBLIC_APP_URL="http://localhost:3000" + + # Development: Skip login flow (set to "true" to bypass authentication) + # Ensure this is NOT set to "true" in production. + MEETUP_SKIP_LOGIN="false" ``` 4. **Apply database migrations (Prisma):** From 6c5868f8b17189ddc84aa7da083a20f62cb4be65 Mon Sep 17 00:00:00 2001 From: Maximilian Liebmann Date: Fri, 9 May 2025 23:12:17 +0200 Subject: [PATCH 19/33] feat(env): add example env file and update .gitignore to include it --- .env.example | 11 +++++++++++ .gitignore | 1 + 2 files changed, 12 insertions(+) create mode 100644 .env.example diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..e509a47 --- /dev/null +++ b/.env.example @@ -0,0 +1,11 @@ +DATABASE_URL= + +AUTH_SECRET= # Added by `npx auth`. Read more: https://cli.authjs.dev + +AUTH_AUTHENTIK_ID= +AUTH_AUTHENTIK_SECRET= +AUTH_AUTHENTIK_ISSUER= + +NEXT_PUBLIC_APP_URL= + +MEETUP_SKIP_LOGIN= \ No newline at end of file diff --git a/.gitignore b/.gitignore index 5ef6a52..7b8da95 100644 --- a/.gitignore +++ b/.gitignore @@ -32,6 +32,7 @@ yarn-error.log* # env files (can opt-in for committing if needed) .env* +!.env.example # vercel .vercel From 61c80f016d662884323879779a2fe0cf2d1d164d Mon Sep 17 00:00:00 2001 From: Maximilian Liebmann Date: Fri, 9 May 2025 23:21:31 +0200 Subject: [PATCH 20/33] docs: remove optional notes from contributing section in README.md --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index ee2caea..9e1f4fe 100644 --- a/README.md +++ b/README.md @@ -122,8 +122,6 @@ This project is built with a modern tech stack: ## Contributing -_(This section can be expanded as your project grows and you're open to contributions.)_ - Contributions are welcome! If you'd like to contribute, please: 1. Fork the repository. @@ -135,8 +133,6 @@ Contributions are welcome! If you'd like to contribute, please: Please ensure your code adheres to the project's coding standards (e.g., run linters/formatters if configured) and that any database schema changes are accompanied by a Prisma migration. -_(Optional: You can add more details about reporting bugs, suggesting features, or coding style guides here.)_ - --- **(Optional Sections You Might Want to Add Later):** From 73108893590b50cc990e09b0eb764f99d9aabd58 Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Wed, 7 May 2025 13:36:13 +0200 Subject: [PATCH 21/33] chore(ci): Add labels to docker image --- Dockerfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Dockerfile b/Dockerfile index 5d16c45..faee65e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,6 +27,10 @@ COPY --from=builder /app/public ./public COPY --from=builder /app/.next/standalone ./ COPY --from=builder /app/.next/static ./.next/static +LABEL org.opencontainers.image.source="https://git.dominikstahl.dev/DHBW-WE/MeetUp" +LABEL org.opencontainers.image.title="MeetUp" +LABEL org.opencontainers.image.description="A web application for managing meetups" + EXPOSE 3000 ENV HOSTNAME="0.0.0.0" From ba42f6b4ff582f5966c302957cb71e3a52c13a3b Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Wed, 7 May 2025 13:38:03 +0200 Subject: [PATCH 22/33] chore(ci): example environment variables add example environment variables to docker-compose.yml to prevent errors --- docker-compose.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 9cff22a..e5c4b78 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,3 +5,5 @@ services: dockerfile: Dockerfile ports: - '3000:3000' + environment: + - AUTH_SECRET=secret From 53b3b70f3c759e6f7b292d08922dcad89f4f8ecf Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Wed, 7 May 2025 13:39:29 +0200 Subject: [PATCH 23/33] chore(ci): remove sha_ tags from build docker images --- .github/workflows/docker-build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 69147b5..a3723c9 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -53,7 +53,7 @@ jobs: if: github.event_name == 'pull_request' with: push: true - tags: git.dominikstahl.dev/${{ env.REPO }}:sha_${{ github.sha }},git.dominikstahl.dev/${{ env.REPO }}:${{ steps.get-ref.outputs.tag}} + tags: git.dominikstahl.dev/${{ env.REPO }}:${{ steps.get-ref.outputs.tag}} - name: Build and push (push_tag) uses: docker/build-push-action@14487ce63c7a62a4a324b0bfb37086795e31c6c1 # v6 @@ -67,4 +67,4 @@ jobs: if: github.event_name == 'push' && github.ref_type == 'branch' with: push: true - tags: git.dominikstahl.dev/${{ env.REPO }}:sha_${{ github.sha }},git.dominikstahl.dev/${{ env.REPO }}:main + tags: git.dominikstahl.dev/${{ env.REPO }}:${{ steps.get-ref.outputs.tag }} From f9a0525761a62af90ee1a32faf65c089f74aed22 Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Thu, 8 May 2025 14:31:45 +0200 Subject: [PATCH 24/33] fix: add missing env variable to docker-compose added the missing AUTH_URL variable to the example docker-compose.yml --- docker-compose.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index e5c4b78..cee59f7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,7 +3,9 @@ services: build: context: . dockerfile: Dockerfile + image: git.dominikstahl.dev/dhbw-we/meetup:main ports: - '3000:3000' environment: - AUTH_SECRET=secret + - AUTH_URL=http://localhost:3000 From c97f6e0ca012ea68dd17e0a011119b797e39fdd9 Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Fri, 9 May 2025 22:11:48 +0200 Subject: [PATCH 25/33] chore: add Docker cleanup steps to workflows --- .github/workflows/container-scan.yml | 7 +++++++ .github/workflows/docker-build.yml | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/.github/workflows/container-scan.yml b/.github/workflows/container-scan.yml index 0266cdc..1c5ac22 100644 --- a/.github/workflows/container-scan.yml +++ b/.github/workflows/container-scan.yml @@ -41,3 +41,10 @@ jobs: uses: forgejo/upload-artifact@v4 with: path: trivy-report.json + + - name: Clean up Docker + run: | + docker system prune -af + docker volume prune -f + docker network prune -f + docker builder prune -af diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index a3723c9..e7f8888 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -68,3 +68,10 @@ jobs: with: push: true tags: git.dominikstahl.dev/${{ env.REPO }}:${{ steps.get-ref.outputs.tag }} + + - name: Clean up Docker + run: | + docker system prune -af + docker volume prune -f + docker network prune -f + docker builder prune -af From 5215380b239128c09ce8b25ec4c93c54a6387aec Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Fri, 9 May 2025 22:48:12 +0200 Subject: [PATCH 26/33] chore: remove docker installs from workflows --- .github/workflows/container-scan.yml | 13 ------------- .github/workflows/docker-build.yml | 11 ----------- 2 files changed, 24 deletions(-) diff --git a/.github/workflows/container-scan.yml b/.github/workflows/container-scan.yml index 1c5ac22..8720c0b 100644 --- a/.github/workflows/container-scan.yml +++ b/.github/workflows/container-scan.yml @@ -8,23 +8,10 @@ jobs: container-scan: name: Container Scan runs-on: docker - container: - image: node:22-bullseye@sha256:ed0338dd02fd86861a59dc1cbc2e12152f3a93c4ce5933d347d6677232000dc7 steps: - name: Checkout code uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - - name: Install Docker - run: | - apt-get update - apt-get install -y ca-certificates curl - install -m 0755 -d /etc/apt/keyrings - curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc - chmod a+r /etc/apt/keyrings/docker.asc - echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null - apt-get update - apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin - - name: Build an image from Dockerfile run: docker build -t git.dominikstahl.dev/dhbw-we/meetup:${{ github.sha }} . diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index e7f8888..674b4c4 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -13,17 +13,6 @@ jobs: docker: runs-on: docker steps: - - name: Install Docker - run: | - apt-get update - apt-get install -y ca-certificates curl - install -m 0755 -d /etc/apt/keyrings - curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc - chmod a+r /etc/apt/keyrings/docker.asc - echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null - apt-get update - apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin - - name: Login to Docker Hub uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3 with: From 02234ae68ce69161301cbe308af6415cf9469c36 Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Fri, 9 May 2025 23:11:50 +0200 Subject: [PATCH 27/33] fix: keep some build caches to speed up builds --- .github/workflows/container-scan.yml | 7 +++---- .github/workflows/docker-build.yml | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/.github/workflows/container-scan.yml b/.github/workflows/container-scan.yml index 8720c0b..e55bd72 100644 --- a/.github/workflows/container-scan.yml +++ b/.github/workflows/container-scan.yml @@ -31,7 +31,6 @@ jobs: - name: Clean up Docker run: | - docker system prune -af - docker volume prune -f - docker network prune -f - docker builder prune -af + docker builder prune -af --keep-storage 2GB + docker rmi $(docker images --filter=reference="git.dominikstahl.dev/dhbw-we/meetup:*" -q) + docker image prune -f diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 674b4c4..b061608 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -60,7 +60,6 @@ jobs: - name: Clean up Docker run: | - docker system prune -af - docker volume prune -f - docker network prune -f - docker builder prune -af + docker builder prune -af --keep-storage 2GB + docker rmi $(docker images --filter=reference="git.dominikstahl.dev/dhbw-we/meetup:*" -q) + docker image prune -f From 4757a0ceba5baa9285bf999b6565a016b3480bde Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Fri, 9 May 2025 23:17:46 +0200 Subject: [PATCH 28/33] fix: set container image in workflow files --- .github/workflows/container-scan.yml | 2 ++ .github/workflows/docker-build.yml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.github/workflows/container-scan.yml b/.github/workflows/container-scan.yml index e55bd72..2139ad7 100644 --- a/.github/workflows/container-scan.yml +++ b/.github/workflows/container-scan.yml @@ -8,6 +8,8 @@ jobs: container-scan: name: Container Scan runs-on: docker + container: + image: ghcr.io/di0ik/forgejo_runner_container:main steps: - name: Checkout code uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index b061608..1c6fa1b 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -12,6 +12,8 @@ on: jobs: docker: runs-on: docker + container: + image: ghcr.io/di0ik/forgejo_runner_container:main steps: - name: Login to Docker Hub uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3 From 2fa884bbe9b23baff30cea14729c42fbe876a114 Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Fri, 9 May 2025 23:37:01 +0200 Subject: [PATCH 29/33] fix: make repo to lower workflow step posix compatible --- .github/workflows/docker-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 1c6fa1b..0042890 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -37,7 +37,7 @@ jobs: - name: lowercase repo name run: | - echo "REPO=${GITHUB_REPOSITORY,,}" >>${GITHUB_ENV} + echo "REPO=$(echo $GITHUB_REPOSITORY | tr '[:upper:]' '[:lower:]')" >>${GITHUB_ENV} - name: Build and push (pull_request) uses: docker/build-push-action@14487ce63c7a62a4a324b0bfb37086795e31c6c1 # v6 From a04512a5fd9cbd777854a5f8a35723af69195e1a Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Sat, 10 May 2025 00:01:34 +0200 Subject: [PATCH 30/33] fix: dont try to remove already removed tags --- .github/workflows/docker-build.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 0042890..6ecc55f 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -63,5 +63,4 @@ jobs: - name: Clean up Docker run: | docker builder prune -af --keep-storage 2GB - docker rmi $(docker images --filter=reference="git.dominikstahl.dev/dhbw-we/meetup:*" -q) docker image prune -f From b33c304ffbd8913a53925f4feeaa2418574bd449 Mon Sep 17 00:00:00 2001 From: Maximilian Liebmann Date: Fri, 9 May 2025 22:46:02 +0200 Subject: [PATCH 31/33] docs: update README.md with detailed project description, features, and setup instructions Adds a detailed project description, implemented and planned features, technologies used, and setup instructions to the README. --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9e1f4fe..1d4b270 100644 --- a/README.md +++ b/README.md @@ -94,10 +94,6 @@ This project is built with a modern tech stack: # Base URL of your application NEXT_PUBLIC_APP_URL="http://localhost:3000" - - # Development: Skip login flow (set to "true" to bypass authentication) - # Ensure this is NOT set to "true" in production. - MEETUP_SKIP_LOGIN="false" ``` 4. **Apply database migrations (Prisma):** @@ -122,6 +118,8 @@ This project is built with a modern tech stack: ## Contributing +_(This section can be expanded as your project grows and you're open to contributions.)_ + Contributions are welcome! If you'd like to contribute, please: 1. Fork the repository. @@ -133,6 +131,8 @@ Contributions are welcome! If you'd like to contribute, please: Please ensure your code adheres to the project's coding standards (e.g., run linters/formatters if configured) and that any database schema changes are accompanied by a Prisma migration. +_(Optional: You can add more details about reporting bugs, suggesting features, or coding style guides here.)_ + --- **(Optional Sections You Might Want to Add Later):** From 0808b2f891dd2c2b6167984fd89b46d33b0eb87c Mon Sep 17 00:00:00 2001 From: Maximilian Liebmann Date: Fri, 9 May 2025 23:21:31 +0200 Subject: [PATCH 32/33] feat: add HoverCard component and minimal page footer --- package.json | 1 + src/app/login/page.tsx | 47 ++++++--- src/components/ui/hover-card.tsx | 44 +++++++++ yarn.lock | 162 ++++++++++++++++++++++++++++++- 4 files changed, 241 insertions(+), 13 deletions(-) create mode 100644 src/components/ui/hover-card.tsx diff --git a/package.json b/package.json index f50124c..aba1ecb 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "@fortawesome/free-regular-svg-icons": "^6.7.2", "@fortawesome/free-solid-svg-icons": "^6.7.2", "@fortawesome/react-fontawesome": "^0.2.2", + "@radix-ui/react-hover-card": "^1.1.13", "@radix-ui/react-slot": "^1.2.2", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index b843b45..6bd8531 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -2,9 +2,16 @@ import { auth } from '@/auth'; import SSOLogin from '@/components/user/sso-login-button'; import LoginForm from '@/components/user/login-form'; import { redirect } from 'next/navigation'; +import { Button } from '@/components/ui/button'; +import Image from 'next/image'; import '@/app/globals.css'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import { + HoverCard, + HoverCardTrigger, + HoverCardContent, +} from '@/components/ui/hover-card'; export default async function LoginPage() { const session = await auth(); @@ -15,20 +22,36 @@ export default async function LoginPage() { return (
- - - Login - - - +
+ + + Login + + + -
+
- {process.env.AUTH_AUTHENTIK_ISSUER && ( - - )} -
-
+ {process.env.AUTH_AUTHENTIK_ISSUER && ( + + )} + + +
+ + + + + + dancing penguin + +
); } diff --git a/src/components/ui/hover-card.tsx b/src/components/ui/hover-card.tsx new file mode 100644 index 0000000..e754186 --- /dev/null +++ b/src/components/ui/hover-card.tsx @@ -0,0 +1,44 @@ +"use client" + +import * as React from "react" +import * as HoverCardPrimitive from "@radix-ui/react-hover-card" + +import { cn } from "@/lib/utils" + +function HoverCard({ + ...props +}: React.ComponentProps) { + return +} + +function HoverCardTrigger({ + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function HoverCardContent({ + className, + align = "center", + sideOffset = 4, + ...props +}: React.ComponentProps) { + return ( + + + + ) +} + +export { HoverCard, HoverCardTrigger, HoverCardContent } diff --git a/yarn.lock b/yarn.lock index 249a2ad..6bfc9fb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -239,6 +239,33 @@ "@eslint/core" "^0.13.0" levn "^0.4.1" +"@floating-ui/core@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.7.0.tgz#1aff27a993ea1b254a586318c29c3b16ea0f4d0a" + integrity sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA== + dependencies: + "@floating-ui/utils" "^0.2.9" + +"@floating-ui/dom@^1.0.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.7.0.tgz#f9f83ee4fee78ac23ad9e65b128fc11a27857532" + integrity sha512-lGTor4VlXcesUMh1cupTUTDoCxMb0V6bm3CnxHzQcw8Eaf1jQbgQX4i02fYgT0vJ82tb5MZ4CZk1LRGkktJCzg== + dependencies: + "@floating-ui/core" "^1.7.0" + "@floating-ui/utils" "^0.2.9" + +"@floating-ui/react-dom@^2.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.2.tgz#a1349bbf6a0e5cb5ded55d023766f20a4d439a31" + integrity sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A== + dependencies: + "@floating-ui/dom" "^1.0.0" + +"@floating-ui/utils@^0.2.9": + version "0.2.9" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.9.tgz#50dea3616bc8191fb8e112283b49eaff03e78429" + integrity sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg== + "@fortawesome/fontawesome-common-types@6.7.2": version "6.7.2" resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.7.2.tgz#7123d74b0c1e726794aed1184795dbce12186470" @@ -625,18 +652,151 @@ dependencies: "@prisma/debug" "6.7.0" +"@radix-ui/primitive@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.2.tgz#83f415c4425f21e3d27914c12b3272a32e3dae65" + integrity sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA== + +"@radix-ui/react-arrow@1.1.6": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.6.tgz#4b460fdbc1ac097a4964e04ca404c25c2f6d7d3f" + integrity sha512-2JMfHJf/eVnwq+2dewT3C0acmCWD3XiVA1Da+jTDqo342UlU13WvXtqHhG+yJw5JeQmu4ue2eMy6gcEArLBlcw== + dependencies: + "@radix-ui/react-primitive" "2.1.2" + "@radix-ui/react-compose-refs@1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz#a2c4c47af6337048ee78ff6dc0d090b390d2bb30" integrity sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg== -"@radix-ui/react-slot@^1.2.2": +"@radix-ui/react-context@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.2.tgz#61628ef269a433382c364f6f1e3788a6dc213a36" + integrity sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA== + +"@radix-ui/react-dismissable-layer@1.1.9": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.9.tgz#46e025ba6e6f403677e22fbb7d99b63cf7b32bca" + integrity sha512-way197PiTvNp+WBP7svMJasHl+vibhWGQDb6Mgf5mhEWJkgb85z7Lfl9TUdkqpWsf8GRNmoopx9ZxCyDzmgRMQ== + dependencies: + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-primitive" "2.1.2" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-escape-keydown" "1.1.1" + +"@radix-ui/react-hover-card@^1.1.13": + version "1.1.13" + resolved "https://registry.yarnpkg.com/@radix-ui/react-hover-card/-/react-hover-card-1.1.13.tgz#875bc07bae27a1634544b2d41940b358263bec5f" + integrity sha512-Wtjvx0d/6Bgd/jAYS1mW6IPSUQ25y0hkUSOS1z5/4+U8+DJPwKroqJlM/AlVFl3LywGoruiPmcvB9Aks9mSOQw== + dependencies: + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-dismissable-layer" "1.1.9" + "@radix-ui/react-popper" "1.2.6" + "@radix-ui/react-portal" "1.1.8" + "@radix-ui/react-presence" "1.1.4" + "@radix-ui/react-primitive" "2.1.2" + "@radix-ui/react-use-controllable-state" "1.2.2" + +"@radix-ui/react-popper@1.2.6": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.6.tgz#227d2882f19d80933796525c7bbd0d3ddf699ac0" + integrity sha512-7iqXaOWIjDBfIG7aq8CUEeCSsQMLFdn7VEE8TaFz704DtEzpPHR7w/uuzRflvKgltqSAImgcmxQ7fFX3X7wasg== + dependencies: + "@floating-ui/react-dom" "^2.0.0" + "@radix-ui/react-arrow" "1.1.6" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-primitive" "2.1.2" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-layout-effect" "1.1.1" + "@radix-ui/react-use-rect" "1.1.1" + "@radix-ui/react-use-size" "1.1.1" + "@radix-ui/rect" "1.1.1" + +"@radix-ui/react-portal@1.1.8": + version "1.1.8" + resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.8.tgz#0181e85bc0d8c67229dd8cf198204f5f4cc7c09c" + integrity sha512-hQsTUIn7p7fxCPvao/q6wpbxmCwgLrlz+nOrJgC+RwfZqWY/WN+UMqkXzrtKbPrF82P43eCTl3ekeKuyAQbFeg== + dependencies: + "@radix-ui/react-primitive" "2.1.2" + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-presence@1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.4.tgz#253ac0ad4946c5b4a9c66878335f5cf07c967ced" + integrity sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA== + dependencies: + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-primitive@2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.1.2.tgz#03f64f957719c761d22c2f92cc43ffb64bd42cc8" + integrity sha512-uHa+l/lKfxuDD2zjN/0peM/RhhSmRjr5YWdk/37EnSv1nJ88uvG85DPexSm8HdFQROd2VdERJ6ynXbkCFi+APw== + dependencies: + "@radix-ui/react-slot" "1.2.2" + +"@radix-ui/react-slot@1.2.2", "@radix-ui/react-slot@^1.2.2": version "1.2.2" resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.2.2.tgz#18e6533e778a2051edc2ad0773da8e22f03f626a" integrity sha512-y7TBO4xN4Y94FvcWIOIh18fM4R1A8S4q1jhoz4PNzOoHsFcN8pogcFmZrTYAm4F9VRUrWP/Mw7xSKybIeRI+CQ== dependencies: "@radix-ui/react-compose-refs" "1.1.2" +"@radix-ui/react-use-callback-ref@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz#62a4dba8b3255fdc5cc7787faeac1c6e4cc58d40" + integrity sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg== + +"@radix-ui/react-use-controllable-state@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz#905793405de57d61a439f4afebbb17d0645f3190" + integrity sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg== + dependencies: + "@radix-ui/react-use-effect-event" "0.0.2" + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-use-effect-event@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz#090cf30d00a4c7632a15548512e9152217593907" + integrity sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA== + dependencies: + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-use-escape-keydown@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz#b3fed9bbea366a118f40427ac40500aa1423cc29" + integrity sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g== + dependencies: + "@radix-ui/react-use-callback-ref" "1.1.1" + +"@radix-ui/react-use-layout-effect@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz#0c4230a9eed49d4589c967e2d9c0d9d60a23971e" + integrity sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ== + +"@radix-ui/react-use-rect@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz#01443ca8ed071d33023c1113e5173b5ed8769152" + integrity sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w== + dependencies: + "@radix-ui/rect" "1.1.1" + +"@radix-ui/react-use-size@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz#6de276ffbc389a537ffe4316f5b0f24129405b37" + integrity sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ== + dependencies: + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/rect@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.1.1.tgz#78244efe12930c56fd255d7923865857c41ac8cb" + integrity sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw== + "@rtsao/scc@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" From 819b854c14cb636d0bbd4b1260958ad575f6cca3 Mon Sep 17 00:00:00 2001 From: Maximilian Liebmann Date: Fri, 9 May 2025 22:46:02 +0200 Subject: [PATCH 33/33] docs: update README.md with detailed project description, features, and setup instructions Adds a detailed project description, implemented and planned features, technologies used, and setup instructions to the README. --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9e1f4fe..1d4b270 100644 --- a/README.md +++ b/README.md @@ -94,10 +94,6 @@ This project is built with a modern tech stack: # Base URL of your application NEXT_PUBLIC_APP_URL="http://localhost:3000" - - # Development: Skip login flow (set to "true" to bypass authentication) - # Ensure this is NOT set to "true" in production. - MEETUP_SKIP_LOGIN="false" ``` 4. **Apply database migrations (Prisma):** @@ -122,6 +118,8 @@ This project is built with a modern tech stack: ## Contributing +_(This section can be expanded as your project grows and you're open to contributions.)_ + Contributions are welcome! If you'd like to contribute, please: 1. Fork the repository. @@ -133,6 +131,8 @@ Contributions are welcome! If you'd like to contribute, please: Please ensure your code adheres to the project's coding standards (e.g., run linters/formatters if configured) and that any database schema changes are accompanied by a Prisma migration. +_(Optional: You can add more details about reporting bugs, suggesting features, or coding style guides here.)_ + --- **(Optional Sections You Might Want to Add Later):**