Skip to content

bswebdevlpr/Jamming

Repository files navigation

🎸 JAMMING

A mobile-web platform for matching musicians for jam sessions & band practice

Helps amateur/hobby musicians in Korea find people to play with β€” hosting or joining jam sessions based on region, genre, and skill level.

🌐 Live Demo β†’ jamming.co.kr

Test Next.js React TypeScript Supabase License: All Rights Reserved


πŸ“– Overview

JAMMING is a mobile-only (PWA) web service for amateur and hobbyist musicians in Korea. A host opens a jam session, other musicians apply with their instrument/position, and the host approves applicants β€” completing the match.

⚠️ This repository is public for portfolio purposes. No production infrastructure (Supabase instance, API keys, etc.) is included; all secrets are kept in environment variables.

πŸ“± Screenshots


Home

About

✨ Features

Feature Description
🎡 Jam Session CRUD Create/edit/delete sessions with date, venue, genre, skill level, per-position headcount, and a setlist
πŸ™‹ Apply & Approve Apply by position, host approval/rejection, and re-application (re-jam) flow
πŸ”” Notifications Alerts for apply/approve/reject events; open-chat link revealed on approval
πŸ—ΊοΈ Region Filter Browse and filter sessions across 19 regions
πŸ” Song & Venue Search Integrations with ManiaDB (songs) and Naver Map (venues)
πŸ‘€ Profile & My Page Manage position, genre, skill level, tags, and playlist
πŸ” Kakao OAuth Authentication via Kakao social login

πŸ› οΈ Tech Stack

Category Technology
Framework Next.js 16 (App Router, Server Actions)
Language TypeScript
UI React 19 RC Β· Tailwind CSS 4 Β· Framer Motion Β· MUI Β· Radix UI
State Zustand Β· TanStack React Query 5
Form / Validation React Hook Form Β· Zod
Backend Supabase (Auth Β· Postgres Β· Storage)
Infra Vercel Β· Upstash Redis (rate limiting)
External APIs ManiaDB (songs) Β· Naver Map (venues) Β· Kakao (OAuth)
Testing Vitest Β· React Testing Library Β· Playwright Β· MSW

πŸ—οΈ Architecture

  • Mobile-first: fixed 375px ~ 600px viewport with touch-optimized UI (bottom sheets, swipe gestures)
  • Server Actions–based CRUD: minimizes client bundle and handles data server-side
  • Domain-oriented structure: per-page functions/ directories isolate data-access logic
  • Type safety: single source of truth between Zod schemas and TypeScript interfaces
  • Test coverage: four layers β€” unit Β· integration Β· component Β· e2e
app/
β”œβ”€β”€ (pages)/
β”‚   β”œβ”€β”€ (signin)/          # Public area (login, sign-up)
β”‚   β”œβ”€β”€ (only-user)/       # Auth-required area (jam sessions, my page)
β”‚   └── layout.tsx         # Global providers
β”œβ”€β”€ api/                   # Server Actions & Route Handlers
β”‚   β”œβ”€β”€ functions/         # CRUD server functions
β”‚   β”œβ”€β”€ maniadb/ Β· naver/  # External API proxies
β”‚   └── auth/              # OAuth callback
β”œβ”€β”€ lib/                   # enums, interfaces, zod schemas, utils
β”œβ”€β”€ stores/                # Zustand stores
β”œβ”€β”€ ui/                    # design system, shared components
└── util/supabase/         # Supabase client/server helpers
__tests__/                 # unit Β· integration Β· component Β· e2e
docs/                      # architecture Β· patterns Β· design Β· reference docs

πŸ’‘ Engineering Highlights

  • iOS Safari compatibility β€” the most heavily debugged area of the project: a dynamic --vh CSS variable to handle the changing address-bar height, auto-zoom prevention (maximum-scale=1), and layout stabilization during keyboard input.
  • Server Actions for all mutations β€” CRUD runs server-side to keep the client bundle lean and secrets off the client.
  • Rate limiting β€” Upstash Redis guards write-heavy endpoints against abuse.
  • End-to-end type safety β€” Zod schemas double as runtime validators and the source of TypeScript types, eliminating drift between validation and types.
  • Four-layer testing β€” unit, integration, component, and Playwright e2e, with external APIs mocked via MSW for deterministic runs.

πŸš€ Getting Started

Prerequisites

  • Node.js 20+
  • pnpm (required β€” do not use npm/yarn)
  • A Supabase project (Auth Β· DB Β· Storage)

Installation & Run

# 1. Install dependencies
pnpm install

# 2. Configure environment variables (see .env.example)
cp .env.example .env
#    β†’ fill in real values in .env

# 3. Start the dev server (http://localhost:3038)
pnpm dev

NEXT_PUBLIC_SUPABASE_URL must be set β€” it drives Supabase auth/storage and the next/image allow-list. If it's missing, Supabase-hosted images (e.g. profile photos) won't load.

Scripts

Command Description
pnpm dev Dev server (:3038)
pnpm build Production build
pnpm start Production server
pnpm lint Run ESLint
pnpm test Unit/integration tests (watch)
pnpm test:run Run tests once
pnpm test:coverage Coverage report
pnpm test:e2e Playwright E2E tests

πŸ§ͺ Testing

Unit/integration/component tests run on Vitest, with end-to-end tests on Playwright. External API calls are mocked with MSW.

pnpm test:run        # unit Β· integration Β· component
pnpm test:e2e        # e2e

πŸ“š Documentation

Detailed design docs live in docs/.

Doc Contents
Context Project overview Β· domain model
Architecture System structure
Patterns Code patterns
Design Design system guide
Reference API Β· schema reference

πŸ“„ License

Β© 2026 bswebdevlpr. All rights reserved. See LICENSE.

This repository is public for portfolio viewing only β€” reuse, copying, or redistribution of the code is not permitted.

About

🎸 Jam session & band-practice matching platform for musicians β€” Next.js 16, React 19, Supabase, TypeScript (mobile-first PWA)

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages