Skip to content

Repository files navigation

UOA Volleyball Club Website

About

A centralized website for the University of Auckland Volleyball Club (UOAVC). The platform will handle event and social session sign-ups, member accounts, waitlists, and an admin dashboard for club executives to manage events and registrations.

Setting Up the Project

Prerequisites

  • Node.js 22+
  • pnpm
  • MongoDB running locally (or a remote connection URI)

Running the Project

Clone the repository:

git clone https://github.com/UoaWDCC/uoavc.git
cd uoavc

Install dependencies:

corepack enable
pnpm install

Start the development server:

pnpm dev

Open http://localhost:3000 for the frontend and http://localhost:3000/admin for the Payload CMS admin panel.

Environment Variables

Copy the example file:

cp .env.example .env

Then fill in each variable in .env:

Variable Required Description
PAYLOAD_SECRET Yes Secret used by Payload to sign auth tokens. Any long random string.
DATABASE_URI Yes MongoDB connection string (local or remote).
RESEND_API_KEY Yes API key for Resend, used to send transactional emails (e.g. registration confirmations).
STRIPE_SECRET_KEY Yes Stripe secret key (use a sk_test_... key in development). Required by the social session checkout endpoint.
STRIPE_WEBHOOK_SECRET Yes Stripe webhook signing secret (whsec_...), used to verify incoming payment events.
NEXT_PUBLIC_SITE_URL Yes Public base URL of the site (e.g. http://localhost:3000 in development). Used to build Stripe Checkout success_url / cancel_url.

Scripts

Script Description
pnpm dev Start the development server
pnpm build Build for production
pnpm start Start the production server
pnpm lint Run Biome linter
pnpm lint:fix Auto-fix linting issues
pnpm lint:fix:unsafe Auto-fix with unsafe fixes
pnpm typegen Generate Payload CMS types

Keeping a Clean Codebase

We use Biome for linting and formatting. Lefthook is set up to run pre-commit hooks that automatically check your code before committing. CI will also run Biome checks to ensure code quality.

To manually run Biome:

pnpm lint          # Check linting
pnpm lint:fix      # Auto-fix issues

IDE Setup

VS Code (Recommended)

If you are using VSCode, extensions will be recommended to you (namely Biome's extension). You can open the extensions sidebar and install the recommended extensions. VSCode files have already been set up as part of the repository and will assist with Biome formatting.

Otherwise, you are responsible for figuring out how to configure those plugins for yourself. We encourage you to contribute any configuration files back to the repository to help others.

Project Structure

src/
├── app/
│   ├── (frontend)/              # Public website pages
│   │   ├── layout.tsx           # Main layout
│   │   └── page.tsx             # Homepage
│   ├── (payload)/               # Payload CMS admin
│   │   ├── admin/               # Admin panel
│   │   ├── api/                 # API routes
│   │   └── layout.tsx           # Admin layout
├── components/                  # Reusable components
├── lib/                         # Utility functions and helpers
├── payload/
│   ├── collections/             # Payload collections
│   └── payload-types.ts         # Generated types
├── payload.config.ts            # Payload CMS configuration
└── ...

public/                          # Static assets

package.json                     # Project metadata and scripts
next.config.mjs                  # Next.js configuration
tsconfig.json                    # TypeScript configuration
biome.json                       # Biome linter configuration
lefthook.yml                     # Git hooks configuration

Tech Stack

  • Next.js - Powers the frontend using the App Router architecture. You will need some understanding of React to work on this project.
  • Payload CMS - Our headless CMS that manages content and defines our data structure. Familiarise yourself with Payload's local API.
  • Tailwind CSS - Utility-first CSS framework for styling.
  • MongoDB - Our database, accessed through Payload's MongoDB adapter.
  • Biome - Fast formatter and linter.
  • Lefthook - Git hooks manager.

Deployment

The app is deployed on Fly.io via Docker.

  • Region: Sydney (syd)
  • Runtime: Node.js 22, standalone Next.js output
  • Trigger: Automatic on push to main, or manual via workflow dispatch

CI/CD

GitHub Actions runs on every push to main and on pull requests:

  1. Lint - Biome checks with error-on-warnings
  2. Build - Full Next.js production build

Deployment to Fly.io triggers automatically after a successful push to main.

Contributions

To contribute to this project please refer to the CONTRIBUTING.md guidelines.

Project Team

Name Role
Aleck Shen Tech Lead
Ashlee Shum Project Manager
Seolina Cho Designer
William Huang Developer
Ela Yildiz Developer
Youdao Xing Developer
Hajun Kim Developer
Shimpei Yumiba Developer
Jason Lim Developer
Hayden Law Developer

About

The University Of Auckland Volleyball Clubs Website

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages