Skip to content

Conversation

@nyctivoe
Copy link
Member

No description provided.

nyctivoe and others added 5 commits October 24, 2025 12:38
Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.1 to 7.5.2.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](isaacs/node-tar@v7.5.1...v7.5.2)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.1.0 to 4.1.1.
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
- [Commits](nodeca/js-yaml@4.1.0...4.1.1)

---
updated-dependencies:
- dependency-name: js-yaml
  dependency-version: 4.1.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
…-yaml-4.1.1

Bump js-yaml from 4.1.0 to 4.1.1
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 62 out of 82 changed files in this pull request and generated 3 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +7 to +9
VITE_FIREBASE_API_KEY = "AIzaSyA_u-dNDgYCkl-Sh7FW-bj42m9hoW_GRcs"
VITE_FIREBASE_MESSAGING_SENDER_ID = "930455928110"
VITE_FIREBASE_APP_ID = "1:930455928110:web:fb911ef83dc61712f24ebf" No newline at end of file
Copy link

Copilot AI Nov 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CRITICAL SECURITY ISSUE: Firebase API keys and configuration are exposed in the wrangler.toml file. These credentials should be stored as environment variables or secrets, not hardcoded in the configuration file that gets committed to version control.

Move these to environment variables:

  • Use Cloudflare's secrets management for sensitive data
  • Reference them via vars binding or Workers secrets
  • Never commit API keys, even if they appear to be restricted

Copilot uses AI. Check for mistakes.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CRITICAL SECURITY ISSUE: Firebase API keys and configuration are exposed in the wrangler.toml file. These credentials should be stored as environment variables or secrets, not hardcoded in the configuration file that gets committed to version control.

Move these to environment variables:

  • Use Cloudflare's secrets management for sensitive data
  • Reference them via vars binding or Workers secrets
  • Never commit API keys, even if they appear to be restricted

@copilot but aren't firebase API keys meant to be public?

}
},
plugins: [daisyui]
plugins: []
Copy link

Copilot AI Nov 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The daisyui import was removed but may still be referenced elsewhere in the codebase. Ensure all daisyui-specific classes and components have been replaced or removed from the application.

Copilot uses AI. Check for mistakes.
import { SvelteKitAuth } from '@auth/sveltekit';
import Google from '@auth/core/providers/google';
import { env } from '$env/dynamic/private';
import { sequence } from '@sveltejs/kit/hooks';
Copy link

Copilot AI Nov 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unused import sequence.

Suggested change
import { sequence } from '@sveltejs/kit/hooks';

Copilot uses AI. Check for mistakes.
Copy link
Contributor

Copilot AI commented Nov 20, 2025

@hackinghackers I've opened a new pull request, #22, to work on those changes. Once the pull request is ready, I'll request review from you.

Clarify Firebase API key security model - no changes needed
@hackinghackers
Copy link
Member

/gemini help

@gemini-code-assist
Copy link

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

@prisms-cs-club prisms-cs-club deleted a comment from gemini-code-assist bot Nov 20, 2025
@hackinghackers
Copy link
Member

@gemini-code-assistant

@gemini-code-assist
Copy link

It looks like there might be a slight typo in my username. My correct username is @gemini-code-assist. If you're trying to invoke a command, please use /gemini <command> or @gemini-code-assist <command>. I'm here to help by responding to comments and providing code suggestions, but I'm not able to take any direct actions on the pull request.

@hackinghackers
Copy link
Member

@gemini-code-assist

@gemini-code-assist
Copy link

Hello! It looks like you're trying to interact with me. Just a friendly reminder that you can use commands like /gemini review to request a code review, /gemini summary for a pull request summary, or /gemini help to see all available commands. You can also use @gemini-code-assist <command>.

I'm here to assist by responding to comments and providing code suggestions, but I'm not able to take any direct actions on the pull request myself.

@hackinghackers
Copy link
Member

/gemini summary

@gemini-code-assist
Copy link

Summary of Changes

This pull request significantly overhauls the "Cow Says Moo" web project by introducing a robust authentication system with Google OAuth, a user onboarding flow, and a comprehensive admin panel. It modernizes the UI with shadcn-svelte components and tailwindcss, enhances Firebase data handling, and adds new features like an interactive events calendar and dedicated house pages. The changes aim to improve user experience, administrative capabilities, and overall code quality.

Highlights

  • Authentication System: Implemented Google OAuth for user authentication using @auth/sveltekit and @auth/core, including server-side hooks and Firebase security rules to manage user roles (student, teacher, admin) and enforce email domain restrictions (@prismsus.org).
  • Onboarding Flow: Introduced an onboarding process for new users to set their name and house, complete with server-side validation and redirection to ensure new users provide necessary information.
  • UI Component Library Integration: Adopted shadcn-svelte for UI components, replacing daisyui and introducing new components such as Alert, Button, Card, and Input for a more modern and consistent user interface.
  • Firebase Integration Enhancements: Refactored Firebase client-side and server-side logic for event and member management, incorporating caching mechanisms for events and dedicated server-side REST API interactions for improved performance and security.
  • New Pages and Features: Added several new pages: an Admin Panel (/admin) for member management (admin-only), a dedicated Events page (/events) with search and pagination, an interactive Calendar page (/calendar) using @toast-ui/calendar, and individual House pages (/houses/[house]) displaying events won by each house.
  • Styling and Animation Improvements: Transitioned from daisyui to tailwindcss with custom theming, integrated animejs for dynamic animations, and implemented the View Transitions API for smoother page navigation.
  • Code Quality and Tooling: Introduced biome.json for enhanced linting and formatting, and updated eslint configuration to temporarily allow any types for development flexibility.
Changelog
  • .npmrc
    • Removed engine-strict=true.
  • .vscode/settings.json
    • Added cSpell.words for "ettl" and "hobler".
  • README.md
    • Significantly expanded with project overview, setup instructions (including Google OAuth keys), and project structure.
  • biome.json
    • Added configuration for Biome linter and formatter, ignoring Svelte-related build artifacts.
  • components.json
    • Added shadcn-svelte configuration for component aliases and Tailwind CSS integration.
  • eslint.config.js
    • Modified to disable @typescript-eslint/no-explicit-any rule.
  • firestore.rules
    • Added comprehensive Firestore security rules for events, summary, and members collections, including authentication, role-based access, and data validation.
  • package.json
    • Added new dependencies: @auth/core, @auth/sveltekit, @toast-ui/calendar, animejs, arctic, bracketry, firebase, svelte-spa-router.
    • Updated and added dev dependencies: @biomejs/biome, @lucide/svelte, @playwright/test, @sveltejs/adapter-auto, @sveltejs/kit, @sveltejs/vite-plugin-svelte, @tailwindcss/postcss, @types/eslint, @types/node, autoprefixer, clsx, eslint, eslint-config-prettier, eslint-plugin-svelte, globals, prettier, prettier-plugin-svelte, prettier-plugin-tailwindcss, svelte, svelte-check, tailwind-merge, tailwind-variants, tailwindcss, tw-animate-css, typescript, typescript-eslint, vite, vitest.
    • Removed daisyui.
    • Added overrides for vite and dompurify, and resolutions for rollup.
    • Added prepare script.
  • postcss.config.js
    • Changed tailwindcss plugin to @tailwindcss/postcss.
  • src/app.css
    • Replaced tailwind directives with @import 'tailwindcss'.
    • Added tw-animate-css, custom CSS variables for theming (including house colors), and keyframe animations (fade-out, fade-in, slide-to-left, slide-from-right).
  • src/app.d.ts
    • Added session to App.Locals and App.PageData interfaces for authentication.
  • src/hooks.server.ts
    • Added server-side hook for SvelteKitAuth with Google OAuth provider, enforcing prismsus.org domain and handling JWT/session callbacks.
  • src/lib/Comment.svelte
    • New Svelte component for comments, using Input component.
  • src/lib/EventGrid.svelte
    • New Svelte component to display a grid of house events with dynamic styling based on event status/winner.
  • src/lib/Footer.svelte
    • New Svelte component for the application footer, including an easter egg mechanism.
  • src/lib/Header.svelte
    • New Svelte component for the application header, including mobile menu, navigation links, authentication buttons, and animations using animejs.
  • src/lib/RankBar.svelte
    • New Svelte component to display house rankings with animated progress bars.
  • src/lib/RenderComment.svelte
    • New Svelte component to render comment data.
  • src/lib/components/ui/alert/alert-description.svelte
    • New UI component for alert descriptions.
  • src/lib/components/ui/alert/alert-title.svelte
    • New UI component for alert titles.
  • src/lib/components/ui/alert/alert.svelte
    • New UI component for alerts, with default and destructive variants.
  • src/lib/components/ui/alert/index.ts
    • Export file for alert components.
  • src/lib/components/ui/button/button.svelte
    • New UI component for buttons, with various variants and sizes.
  • src/lib/components/ui/button/index.ts
    • Export file for button components.
  • src/lib/components/ui/card/card-action.svelte
    • New UI component for card actions.
  • src/lib/components/ui/card/card-content.svelte
    • New UI component for card content.
  • src/lib/components/ui/card/card-description.svelte
    • New UI component for card descriptions.
  • src/lib/components/ui/card/card-footer.svelte
    • New UI component for card footers.
  • src/lib/components/ui/card/card-header.svelte
    • New UI component for card headers.
  • src/lib/components/ui/card/card-title.svelte
    • New UI component for card titles.
  • src/lib/components/ui/card/card.svelte
    • New UI component for cards.
  • src/lib/components/ui/card/index.ts
    • Export file for card components.
  • src/lib/components/ui/input/index.ts
    • Export file for input components.
  • src/lib/components/ui/input/input.svelte
    • New UI component for input fields.
  • src/lib/firebase.server.ts
    • New server-side Firebase utility for REST API interactions (fetching/updating members, checking admin/onboarding status).
  • src/lib/firebase.ts
    • Updated client-side Firebase utility with event caching, member fetching, and admin/onboarding checks.
  • src/lib/format.d.ts
    • Added type definitions for News, HouseEvent, House, Member, and CalendarEvent.
  • src/lib/houseEventUtils.ts
    • New utility functions for formatting event dates and converting numbers to Roman numerals.
  • src/lib/icon/Cancel.svelte
    • New Svelte component for a cancel icon.
  • src/lib/icon/Search.svelte
    • New Svelte component for a search icon.
  • src/lib/icon/SignIn.svelte
    • New Svelte component for a sign-in icon.
  • src/lib/icon/SignOut.svelte
    • New Svelte component for a sign-out icon.
  • src/lib/index.ts
    • Removed (was an empty file).
  • src/lib/pageTransition.svelte
    • New Svelte component for page transitions using animejs.
  • src/lib/stores/strs.ts
    • New Svelte store for managing an easter egg state.
  • src/lib/toast-ui-calendar.d.ts
    • New type declaration file for @toast-ui/calendar.
  • src/lib/utils.ts
    • New utility functions for Tailwind CSS class merging (cn) and Svelte component prop typing.
  • src/routes/+layout.server.ts
    • New server-side layout logic for authentication, admin status, and onboarding redirection.
  • src/routes/+layout.svelte
    • Modified to include Header and Footer components, and implemented View Transitions API for navigation.
  • src/routes/+page.svelte
    • Modified to display house rankings, ongoing/recent events, and includes entrance animations.
  • src/routes/admin/+page.server.ts
    • New server-side logic for the admin panel, enforcing admin access.
  • src/routes/admin/+page.svelte
    • New admin panel page to view and filter members.
  • src/routes/api/onboarding/+server.ts
    • New API endpoint for handling user onboarding data (name, house).
  • src/routes/calendar/+page.svelte
    • New calendar page integrating @toast-ui/calendar to display events, with navigation and tooltips.
  • src/routes/calendar/+page.ts
    • Client-side rendering enabled for the calendar page.
  • src/routes/events/+page.svelte
    • New events listing page with search, pagination, and an easter egg.
  • src/routes/events/[id]/+page.svelte
    • New page to display details of a specific event, including its leaderboard.
  • src/routes/events/[id]/+page.ts
    • Server-side logic to fetch event details by ID.
  • src/routes/houses/+page.svelte
    • New page displaying overall house rankings and links to individual house pages, with animations.
  • src/routes/houses/[house]/+page.svelte
    • New page displaying events won by a specific house.
  • src/routes/houses/[house]/+page.ts
    • Server-side logic to validate house names and redirect.
  • src/routes/onboarding/+page.server.ts
    • New server-side logic for the onboarding page, checking authentication and redirecting if onboarding is not needed.
  • src/routes/onboarding/+page.svelte
    • New onboarding form for users to enter their name and select a house.
  • tailwind.config.ts
    • Removed daisyui plugin and added a custom navbarColor to the theme.
  • wrangler.toml
    • Added Cloudflare Pages configuration and Firebase API keys as vars.
Activity
  • The initial commit triggered a successful deployment to Cloudflare Pages.
  • GitHub Advanced Security initiated code scanning for the repository.
  • Copilot created a new pull request (Clarify Firebase API key security model - no changes needed #22) to continue working on changes.
  • User hackinghackers requested help and a summary from Gemini Code Assist.
  • Gemini Code Assist provided help and corrected a typo in its username.
  • Copilot identified a critical security issue regarding hardcoded Firebase API keys in wrangler.toml, recommending environment variables or secrets. hackinghackers questioned if Firebase API keys are meant to be public.
  • Copilot noted the removal of daisyui import and suggested ensuring all related classes are removed.
  • Copilot identified an unused sequence import in src/hooks.server.ts.

@hackinghackers
Copy link
Member

/gemini review

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a significant number of changes, including a switch in the UI library from DaisyUI to shadcn-svelte, addition of authentication, new pages, and server-side logic. The overall structure is good, with clear separation of concerns (e.g., client-side vs. server-side Firebase logic). However, there are several critical security vulnerabilities in the Firestore rules and a hardcoded API key in wrangler.toml that must be addressed. I've also found issues related to code quality, maintainability, and correctness, such as disabled ESLint rules, use of !important in CSS, obfuscated code, and potential runtime errors from unsafe JSON parsing. My detailed comments below provide suggestions to fix these issues.

// (allows Google Sheets script to update)
match /summary/{section} {
allow read: if true;
allow write: if true;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

This rule allows anyone, including unauthenticated users, to write to the /summary/{section} collection. This is a critical security vulnerability as it could lead to data corruption or defacement. Write access should be restricted to administrators.

      allow write: if isAdmin();

Comment on lines +7 to +9
VITE_FIREBASE_API_KEY = "AIzaSyA_u-dNDgYCkl-Sh7FW-bj42m9hoW_GRcs"
VITE_FIREBASE_MESSAGING_SENDER_ID = "930455928110"
VITE_FIREBASE_APP_ID = "1:930455928110:web:fb911ef83dc61712f24ebf" No newline at end of file

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

Hardcoding secrets like VITE_FIREBASE_API_KEY in configuration files is a critical security vulnerability. These secrets will be exposed in your version control history. Please remove them from this file and configure them as secrets in your Cloudflare Pages project settings. The code already seems to be reading them from the environment, which is the correct approach.

Comment on lines +5 to +45
let _a = $state(0);

let _b = $state(false);

const _d = () => {
const _e = [
'/image/footer/PixPin_2025-01-26_19-15-33-b450cfc8.png',
'/image/footer/PixPin_2025-01-26_19-16-35-e4ecaee9.png',
'/image/footer/PixPin_2025-01-26_19-16-43-9f2af5e9.png',
'/image/footer/PixPin_2025-02-11_17-44-59-7c8eeb98.png',
'/image/footer/furina-b7335471.png'
];
return _e[Math.floor(Math.random() * _e.length)];
};

let _f = $state('');

const _g = () => {
return {
track: (evt: string) => {
if (evt === 'footer') {
_a = (_a + 1) % 7;
if (_a === 6) {
_b = true;
_f = _d();
}
}
}
};
};

const analytics = _g();

let _h = 0;

function _i(event: MouseEvent) {
const now = Date.now();
if (now - _h < 100) return;
_h = now;
analytics.track('footer');
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The variable and function names in this component (e.g., _a, _b, _d, _g) are obfuscated, which makes the code extremely difficult to read, understand, and maintain. Please rename them to be descriptive. For example:

  • _a -> footerClickCount
  • _b -> isEasterEggVisible
  • _d -> getRandomEasterEggUrl
  • _g -> createAnalyticsTracker

Comment on lines +33 to +36
allow write: if request.resource.data.points.albemarle is number
&& request.resource.data.points.ettl is number
&& request.resource.data.points.hobler is number
&& request.resource.data.points.lambert is number;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

This rule allows any user, including unauthenticated ones, to write to the events collection as long as the data has a specific shape. This is insecure. Write access should be restricted to authenticated administrators to prevent unauthorized modifications to events.

      allow write: if isAdmin();

Comment on lines +58 to +59
allow update: if request.resource.data.email == email &&
request.resource.data.role == resource.data.role; // Cannot change role

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The current update rule for members allows any user to update any other user's profile information (like name and house), as it only checks that the email and role are not changed. This could lead to users impersonating others by changing their names. Updates should be restricted to the document owner or an administrator. A user should also not be able to escalate their own privileges.

      allow update: if (isOwner(email) && request.resource.data.role == resource.data.role) || isAdmin();

Comment on lines +50 to +64
:root {
--light-beige-pink: #fae5e1;
--color-event-current-event-bg: #f8f8f8;
--color-event-current-event-fg: #5c5445;
--color-event-upcoming-bg: #e5e5e5;
--color-event-upcoming-fg: #585858;
--color-event-albemarle-bg: #fff9ba;
--color-event-albemarle-fg: #6e6503;
--color-event-lambert-bg: #dae4f8;
--color-event-lambert-fg: #194c7c;
--color-event-ettl-bg: #e6f7d2;
--color-event-ettl-fg: #0a6a0a;
--color-event-hobler-bg: #f5cccc;
--color-event-hobler-fg: #800f11;
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

These CSS variables are already defined globally in src/app.css. Duplicating them here is unnecessary and makes maintenance harder. Please remove this :root block and rely on the global definitions.


<div class="events-grid">
{#each events as event, i}
{@const eventStarted = (event.dateStart.seconds - 432000) * 1000 > Date.now()}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The number 432000 is a magic number, making the code harder to understand. It appears to represent 5 days in seconds. It should be defined as a named constant with a descriptive name for better readability and maintainability. For example: const FIVE_DAYS_IN_SECONDS = 5 * 24 * 60 * 60;.

<script lang="ts">
import { Input } from '$lib/components/ui/input';

let { source_page } = $props();

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The prop source_page is declared but never used within the component. It should be removed to avoid confusion and unnecessary code.

@@ -0,0 +1,47 @@
/** biome-ignore-all lint/suspicious/noExplicitAny: idgaf*/

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The comment /** biome-ignore-all lint/suspicious/noExplicitAny: idgaf*/ is unprofessional and should be removed. Disabling linting rules for an entire file, especially for no-explicit-any, is also poor practice. The any casts in this file appear to be unnecessary and should be removed to improve type safety.

} // Members collection - publicly writable with validation
match /members/{email} {
// Anyone can read member documents (needed for admin panel)
allow read: if true;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This rule allows anyone, including unauthenticated users, to read all data for all members (including email, name, house). This could be a privacy concern. Consider restricting read access to authenticated users only.

      allow read: if isSignedIn();

dependabot bot and others added 6 commits January 15, 2026 18:14
Bumps [devalue](https://github.com/sveltejs/devalue) from 5.3.2 to 5.6.2.
- [Release notes](https://github.com/sveltejs/devalue/releases)
- [Changelog](https://github.com/sveltejs/devalue/blob/main/CHANGELOG.md)
- [Commits](sveltejs/devalue@v5.3.2...v5.6.2)

---
updated-dependencies:
- dependency-name: devalue
  dependency-version: 5.6.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Bumps [@sveltejs/kit](https://github.com/sveltejs/kit/tree/HEAD/packages/kit) from 2.47.1 to 2.49.5.
- [Release notes](https://github.com/sveltejs/kit/releases)
- [Changelog](https://github.com/sveltejs/kit/blob/main/packages/kit/CHANGELOG.md)
- [Commits](https://github.com/sveltejs/kit/commits/@sveltejs/[email protected]/packages/kit)

---
updated-dependencies:
- dependency-name: "@sveltejs/kit"
  dependency-version: 2.49.5
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <[email protected]>
Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.2 to 7.5.3.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](isaacs/node-tar@v7.5.2...v7.5.3)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
…value-5.6.2

Bump devalue from 5.3.2 to 5.6.2
…eltejs/kit-2.49.5

Bump @sveltejs/kit from 2.47.1 to 2.49.5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants