Thanks to visit codestin.com
Credit goes to github.com

Skip to content

The University of Sydney Wind Orchestra's web application for member activities (e.g. attendance tracking)

Notifications You must be signed in to change notification settings

nico-bachner/suwo

Repository files navigation

SUWO

The University of Sydney Wind Orchestra's Website - A modern web application for managing orchestra members, attendance, and public information.

      __________  ____  ____  ___  __  ___  __________
     /         / /    /    / /   /   /   / /         /
    /    _____/ /    /    / /   /   /   / /         /
   /         / /    /    / /           / /    /    /
  /_____    / /    /    / /           / /    /    /
 /         / /         / /     /     / /         /
/_________/ /_________/ /_____/_____/ /_________/

🎼 About SUWO

SUWO (Sydney University Wind Orchestra) is a multi-award-winning concert band based at the University of Sydney. Founded in 2003, SUWO brings together students and alumni to perform a diverse repertoire of wind band music, ranging from classical works to contemporary pieces. The orchestra is known for its vibrant community, occasional performances throughout the year, and a welcoming atmosphere for new membersβ€”no auditions required. SUWO has received numerous accolades, including "BEST SMALL CLUB" at Sydney University (2006–2010) and "Champion Open B Grade Concert Band" in NSW (2011). Members enjoy opportunities for musical growth, social events, and contributing to the university's cultural life.

πŸš€ Tech Stack

Frontend

Backend

  • Database: Neon PostgreSQL with Prisma ORM
  • Authentication: jose for JWT session management with Argon2 password hashing
  • Email: Resend for transactional emails
  • CMS: Notion for content management

Development & Deployment

✨ Features

  • 🏠 Marketing Pages: Orchestra information, calendar, history, and joining details
  • πŸ“š Dynamic History: Content managed through Notion CMS
  • πŸ” Authentication: Secure login/logout with session management
  • πŸ‘€ Profile Management: Update personal information and instrument
  • πŸ“§ Mailing List: Opt-in/out of weekly communications
  • πŸ”’ Password Management: Secure password updates
  • πŸ“‹ Roll Call: Digital attendance tracking with QR codes
  • πŸ“Š Attendance Management: View and manage weekly attendance
  • πŸ‘₯ Member Directory: Access to all orchestra member profiles
  • 🎺 Equipment Inventory: Track and view available equipment

πŸ“ Project Structure

suwo/
β”œβ”€β”€ prisma/
β”‚   β”œβ”€β”€ migrations/               # Database migration files
β”‚   β”œβ”€β”€ models/                   # Prisma schema files
β”‚   └── schema.prisma             # Prisma config schema
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ app/                      # Next.js App Router pages
β”‚   β”‚   β”œβ”€β”€ (app)/                # Authenticated app pages
β”‚   β”‚   β”‚   β”œβ”€β”€ attendance/       # Roll call and attendance management
β”‚   β”‚   β”‚   β”œβ”€β”€ equipment/        # Equipment inventory
β”‚   β”‚   β”‚   β”œβ”€β”€ mailing-list/     # Mailing list admin
β”‚   β”‚   β”‚   β”œβ”€β”€ members/          # Member directory
β”‚   β”‚   β”‚   └── settings/         # Account settings
β”‚   β”‚   β”œβ”€β”€ (auth)/               # Authentication (login, register, etc.)
β”‚   β”‚   β”œβ”€β”€ (marketing)/          # Public marketing pages
β”‚   β”‚   └── api/                  # API routes
β”‚   β”œβ”€β”€ design_system/            # Reusable UI components
β”‚   β”œβ”€β”€ features/                 # Feature-specific modules
β”‚   β”‚   β”œβ”€β”€ attendance/
β”‚   β”‚   β”œβ”€β”€ auth/
β”‚   β”‚   β”œβ”€β”€ marketing/
β”‚   β”‚   β”œβ”€β”€ navigation/
β”‚   β”‚   β”œβ”€β”€ profile/
β”‚   β”‚   └── usyd_api_wrapper/     # USYD calendar helpers
β”‚   β”œβ”€β”€ icons/                    # SUWO-specific SVG icons
β”‚   β”œβ”€β”€ generated/                # Prisma output – ignore this
β”‚   β”œβ”€β”€ lib/
β”‚   β”‚   β”œβ”€β”€ forms/                # Tanstack Form forms
β”‚   β”‚   β”œβ”€β”€ mutations/            # Tanstack Query mutations
β”‚   β”‚   β”œβ”€β”€ queries/              # Tanstack Query queries
β”‚   β”‚   └── validators/           # Zod schema validators
β”‚   β”œβ”€β”€ styles/                   # Global styles and design tokens
β”‚   β”œβ”€β”€ utils/                    # Utility functions and helpers
β”‚   β”œβ”€β”€ config.ts                 # Application configuration
β”‚   └── routes.ts                 # Application route definitions
β”œβ”€β”€ .env.local                    # Environment variables (local)
β”œβ”€β”€ .gitignore                    # Git ignore rules
β”œβ”€β”€ eslint.config.mjs             # ESLint configuration
β”œβ”€β”€ next.config.ts                # Next.js configuration
β”œβ”€β”€ package.json                  # Project dependencies and scripts
β”œβ”€β”€ prettier.config.mjs           # Prettier configuration
└── tsconfig.json                 # TypeScript configuration

πŸ› οΈ Development Setup

Prerequisites

Installation

  1. Clone the repository

    gh repo clone nico-bachner/suwo
    cd suwo
  2. Install dependencies

    pnpm install
  3. Set up environment variables

    vercel env pull
  4. Start development server

    pnpm dev

Available Scripts

  • dev - Start development server
  • build - Build for production
  • start - Start production server
  • lint - Run ESLint
  • format - Format code with Prisma and Prettier
  • sb:dev - Start Storybook for component development
  • sb:build - Build Storybook for production

🀝 Contributing

Code Style

  • Use TypeScript for all new code
  • Follow the existing file naming conventions (snake_case for files, PascalCase for components)
  • Add JSDoc comments for complex functions
  • Ensure all components are properly typed
  • Prefer absolute imports (@/ prefix)

Component Development

  • Create components in the appropriate feature folder or design system
  • Include Storybook stories for reusable components
  • Follow the established design patterns and color system
  • Ensure components are accessible and responsive

Database Changes

  1. Create Prisma migration: pnpm prisma migrate dev --name [MIGRATION_NAME] (use snake case for migration names)
  2. Fix potentially broken TypeScript types

Git Workflow

  1. Create a feature branch from main
  2. Make your changes with descriptive commit messages
  3. Ensure all tests pass and code is properly formatted
  4. Create a pull request with a clear description

Adding New Features

  1. API Routes: Add to /src/app/api/ following the existing patterns
  2. Pages: Use the appropriate route group ((marketing) for public, (app) for authenticated)
  3. Components: Place in the relevant feature folder or design system
  4. Utilities: Add to /src/utils/ if framework-independent

Testing

  • Our dev database is a replica of the production database. Use that to your advantage to test against real data.
  • Verify responsive design on multiple screen sizes
  • Check accessibility with screen readers

πŸ“„ License

This project is private and proprietary to the University of Sydney Wind Orchestra.

About

The University of Sydney Wind Orchestra's web application for member activities (e.g. attendance tracking)

Resources

Stars

Watchers

Forks

Contributors 3

  •  
  •  
  •